PWM à base du PCA9685

1.1.1.1       Présentation

Le PCA9685 est un circuit dédié à la génération du PWM. Il comporte 16 sorties et est programmable en I2C. Il est disponible déjà soudé sur un module avec toutes les broches disponibles pour le câblage.

On peut l’acheter sur EBay pour moins de 2€.

Il est normalement dédié au pilotage de LED, mais peut piloter tous les autres dispositifs, y compris les servos de modélisme à condition de ne pas dépasser le courant que le circuit et l’alimentation peuvent fournir.

En regardant le datasheet, qu’est ce qu’on y apprend ?

-          Le circuit est normalement optimisé pour piloter des LED RGBA

-          Il peut être alimenté entre 2.3 et 5.5V

-          Le nombre de pas du PWM est de 4096 (12 bits)

-          Les sorties peuvent être programmé en drain ouvert ou en totem pole

-          Le courant maximum par sortie est de 25mA, largement suffisant pour alimenter une LED

-          Le circuit possède un oscillateur de 25MHz, mais peut également utiliser un oscillateur externe jusqu’à 50MHz. Avec l’oscillateur interne, la fréquence du PWM peut varier de 24 à 1526 Hz.

-          Les sorties peuvent être commandées indépendamment ou toutes ensembles.

-          Le circuit possède 76 registres pour commander son fonctionnement et les sorties.

-          Il est possible de coupler jusqu’à 62 circuits sur un bus I2C, ce qui permet d’avoir 992 sorties au total.


 

1.1.1.2       Fonctionnement

La fréquence du PWM pour toutes les sorties est programmée grâce au registre FEh : PRE_SCALE. La valeur qui doit être mis dans ce registre est une valeur de division de l’horloge suivant la formule (on utilise ici l’oscillateur interne à 25MHz):

La valeur par défaut du PRE_SCALE est de 1Eh soit 30 en décimal ce qui fait une fréquence de 200 Hz

Chaque sortie est couplée avec 4 registres qui permettent de paramétrer le signal PWM disponible sur cette broche.

La valeur LED_ON indique quand le signal passera à 1 et le LED_OFF quand il repassera à 0.

Les bits LED_FULL_ON et LED_FULL_OFF permettent d’allumer ou d’éteindre les LED de manière permanente désactivant le signal PWM.

Les valeurs LED_ON et LED_OFF ont le fonctionnement indiqué sur les graphiques.

Pour obtenir par exemple ce signal, il faut envoyer les valeurs suivantes dans les registres :

Registre

LED_ON_H

LED_ON_L

LED_OFF_H

LED_OFF_L

Bit

7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

7

6

5

4

3

2

1

0

 

Binaire

0

0

0

0

0

0

0

1

1

0

0

1

1

0

0

1

0

0

0

0

0

1

0

0

1

1

0

0

1

1

0

0

 

Hexa

01

99

04

CC

Décimal

409

1228

 

1.1.1.3       L’électronique

Le schéma de câblage avec le Raspberry est très simple, il suffit de brancher le module aux broches I2C du Raspberry, de l’alimenter et de câbler les LED sur les sorties PWM. N’oubliez pas les résistances pour les LED en fonction de la tension d’alimentation.

Attention à bien alimenter le Vcc en 3.3V pour ne pas survolter l’I2C en cas de lecture des registres, même si la librairie ne fait qu’écrire.

 


 

1.1.1.4       Le logiciel

Le logiciel sera divisé comme d’habitude en librairies

Nom du fichier

Utilité

GestionI2C.h

L’entête de la librairie de gestion de l’I2C

GestionI2C.cpp

Librairie de gestion de l’I2C. Elle permet la lecture et l’écriture en 8 et 16 bits sur un appareil I2C avec ou sans adresse

GestionLed.h

L’entête de la librairie de gestion des LED

GestionLed.cpp

Librairie de gestion des LED. Elle comporte des méthodes pour paramétrer et retrouver une valeur associée à une LED. Cette librairie ne fait rien par elle-même, elle doit être associée à une librairie gérant un appareil pour que la LED s’allume

GestionPCA9685.h

L’entête de la librairie de gestion du PCA9685

GestionPCA9685.cpp

Librairie de gestion du PCA9685. Elle permet principalement de paramétrer la fréquence du PWM et les valeurs du PWM pour une ou toutes les sorties.

GestionLedPCA9685.h

L’entête de la librairie permettant d’associer des LED et le PCA9685

GestionLedPCA9685.cpp

Librairie permettant d’associer une  LED et le PCA9685. Elle permet d’allumer la LED à un certain pourcentage ou valeur du PWM.

tstLedPCA9685.cpp

Test de la librairie GestionLedPCA9685 pour une LED. Attention, l’adresse de mon module est 0x41, n’oubliez pas de modifier le programme avec la vôtre (0x40 par défaut)

Makefile

Le fichier permettant de compiler le programme grâce à la commande make

 

Mettre tous les fichiers dans un répertoire, demander la commande make pour la compilation et tester le programme.

 


 

1.1.1.5       Liste des programmes

https://github.com/montotof123/raspberry/blob/master/203_Pwm3/GestionI2C.cpp

https://github.com/montotof123/raspberry/blob/master/203_Pwm3/GestionI2C.h

https://github.com/montotof123/raspberry/blob/master/203_Pwm3/GestionLed.cpp

https://github.com/montotof123/raspberry/blob/master/203_Pwm3/GestionLed.h

https://github.com/montotof123/raspberry/blob/master/203_Pwm3/GestionLedPCA9685.cpp

https://github.com/montotof123/raspberry/blob/master/203_Pwm3/GestionLedPCA9685.h

https://github.com/montotof123/raspberry/blob/master/203_Pwm3/GestionPCA9685.cpp

https://github.com/montotof123/raspberry/blob/master/203_Pwm3/GestionPCA9685.h

https://github.com/montotof123/raspberry/blob/master/203_Pwm3/tstLedPCA9685.cpp

https://github.com/montotof123/raspberry/blob/master/203_Pwm3/Makefile

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Lien vers la base du site.