12) Le multiplexeur PCA9685 à 16 canaux PWM.

Merveille de technologie, le petit circuit imprimé du module PCA9685 extrêmement populaire n’est pas spécifiquement dédiés à la motorisation par servomoteurs. Il pourra piloter n’importe quel périphérique qui accepte de la PWM et ce d’autant plus facilement que l’on peut choisir pour les seize sorties la fréquence de répétition commune, et pour chaque canal le rapport cyclique. Par ailleurs, pour le gérer il suffit des deux broches A4 pour SDA et A5 pour SCL de la ligne I2C imposées par la bibliothèque Adafruit_PWMServoDriver.h native dans l’IDE. On peut chaîner jusqu’à 16 de ces modules ce qui potentiellement nous fournit 256 canaux pilotables avec seulement deux sorties d’Arduino. Difficile de trouver mieux. Les caractéristiques techniques de ce module incontournable sont précisées dans les Fiches n°47 à Fiche n°50.

Experience_073 : Utilisation de la bibliothèque Adafruit_PWMServoDriver.h.

Trente deux LEDs sont gérées par seulement deux de ces modules sur la Réplique d’Énigma proposée dans le projet de petite robotique sur le lien suivant (PUB !) :
ma réplique matérielle d’Enigma avec une fréquence de répétition de 1000Hz nettement plus élevée que celle imposées par l’usage de servomoteurs. Comme nous sommes en train d’explorer les diverses façon de gérer les motorisations, dans ce démonstrateur on va continuer à brancher des servomoteurs de type MG90S ou 90SGR. Les liaisons à établir avec Arduino sont résumées sur le schéma de la Fig.145 en remarquant que la broche +U Sorties n’est pas connectée.

Déjà précisé en tête du chapitre n°11, les servomoteurs engendrent des appels de courant très importants. Aussi il faut impérativement alimenter le bornier du module PCA9685 séparément avec un bloc externe sans oublier de réunir les masses GND pour la référence des signaux de commande. La Fig.146 précise les branchements avec l’environnement de cette interface. Comme personnellement je n’ai branché que deux servomoteurs, j’ai alimenté le total avec la ligne USB de l’ordinateur … et accepté quelques instabilités lors de l’ajustement du potentiomètre.

Pour simplifier l’écriture du démonstrateur Experience_073.ino je me suis contenté d’appliquer une consigne commune à tous les canaux, nous verrons dans le prochain exercice un exemple de pilotage individuel de plusieurs sorties. Pour que les moteurs puissent balayer toute leur plage angulaire en parallèle avec le bouton du potentiomètre, il faut ajuster les paramètres de l’instruction de pilotage Multiplexeur.setPWM(Sortie, 0, CNA). Pour ce faire, c’est dans le traitement CNA = map (CNA,MINI, MAXI,110,465) qu’il faut agir. Dans un premier temps vous imposez MINI = 0; MAXI = 1024 qui sont les valeurs théoriques de la numérisation. Les paramètres 110 et 465 de cette transposition sont les valeurs constatées lors de l’expérience pour que les servomoteurs utilisés balayent intégralement leur plage angulaire. Ils sont probablement à conserver. Ensuite vous observez sur le Moniteur de l’IDE la valeur encerclée sur la Fig.147 qui correspond à la numérisation obtenue avec votre potentiomètre. Ce sont les valeurs extrêmes affichées sur l’écran qui devront remplacer celles actuelles dans MINI et MAXI.

Le résultat obtenu lorsque l’on a ajusté les paramètres de MINI et de MAXI sont visualisés sur les deux oscillogrammes de la Fig.148 pour le rapport cyclique minimal et Fig.149 pour sa valeur maximale. L’impulsion positive est exactement comprise dans les limites théoriques annoncées dans les fiches techniques. Comme le rapport cyclique reste toujours très inférieur à 0,25 on constate bien si l’on branche une LED que sa luminosité varie graduellement. Toutefois on observe qu’elle n’est jamais d’une clarté nominale. L’expérience qui suit va corriger cet inconvénient.

 

Experience_074 : Module PCA9685 et pilotage de LEDs.

Dans l’hypothèse où le multiplexeur ne pilote que des LEDs, des résistances chauffantes ou tout périphérique qui n’impose pas du 50Hz, il est tout à fait possible, voir avantageux d’utiliser une fréquence PWM bien plus élevée. C’est ce que nous allons tester avec Experience_074.ino pour lequel on ne branchera que des LEDs. Du coup on peut facilement aller jusqu’à 1000Hz pour la fréquence du signal sans inconvénient particulier. Toutes les directives pour les branchements et pour l’utilisation du programme sont en tête de listage d’Experience_074.ino qu’il suffit de téléverser pour que le programme fonctionne. Pour les branchements c’est facile, il suffit par rapport à P073 de débrancher les servomoteurs et de connecter des LEDs à votre convenance sans oublier leurs résistances de limitation du courant qui sera fonction du rendement de vos composants.

Experience_075 : Mixer des LEDs et des servomoteurs.

Plus conforme à la réalité courante, il est assez rare qu’une application d’implique que des LEDs ou que des servomoteurs. En général on désire intégrer les deux types de périphériques connectés sur un multiplexeur commun. On se retrouve comme pour P073 à imposer une fréquence commune de 50Hz. Cette fréquence de découpage dépasse les 30Hz limites à partir desquels on aura une impression de luminosité constante des diodes électroluminescentes. Pour illustrer ce propos, dans Experience_075.ino on continuera à piloter les servomoteurs avec le potentiomètre branché sur A0. Seules les sorties S0 à S3 seront dédiées aux servomoteurs. Les autres « quartets » de sortie persévèreront dans le comportement de P074 c’est à dire présenteront des variations lumineuses identiques. Comme la fréquence de répétition change il faut adapter les paramètres. Prendre garde aux surintensités, c’est donc le schéma de la Fig.146 qu’il faut privilégier.

La suite est ici.