banner
Centre d'Information
Service exceptionnel

Celui qui m'a manqué : un pilote de LED réutilisé pour 16 servos

Dec 04, 2023

Je regardais l'électronique derrière le petit robot chien Petoi (droite), et j'ai remarqué une puce dont je n'avais pas connaissance auparavant, la PCA9685 de NXP.

En approfondissant, j'ai remarqué qu'Adafruit l'utilise également pour créer les impulsions classiques de 1,0 à 2,0 ms qui indiquent aux servos amateurs où se positionner.

Il dispose d'une entrée I2C et peut créer jusqu'à 16 canaux PWM – quel appareil pratique.

NXP l'a créé pour contrôler les LED rouges, vertes, bleues et orange dans les rétroéclairages quadricolores des écrans.

PCA9685 de NXP, montrant l'un de ses 16 canaux de sortie PWM

Chaque PWM est de 12 bits, soit 4 096 pas (0 % et 100 % sont également possibles), et tous les canaux partagent une fréquence de base programmable entre 24 Hz et 1,5 kHz (l'oscillateur interne est d'environ 25 MHz et jusqu'à 50 MHz peuvent être appliqués en externe).

En passant, les sorties peuvent être réglées sur un drain ouvert (5,5 V max) ou un totem. La capacité est de 10 mA source et 25 mA récepteur.

L'alimentation est nécessaire entre 2,3 et 5,5 V et les entrées sont tolérantes à 5,5 V.

Je ne sais pas quelle âme intelligente a décidé en premier que cela ferait une source de signal pour les servos (peut-être Adafruit ?) – mais quelle bonne idée – 16 servos contrôlés via un seul bus I2C – qui peuvent fonctionner à 1 MHz.

Chaque sortie reçoit deux registres de 12 bits, nominalement nommés temps d'activation et temps d'arrêt, mais ils interagissent en réalité avec un laps de temps fixe de 4 096 d'une manière plus complexe que leurs noms ne le suggèrent pour donner également le contrôle de la phase relative entre tous les canaux. comme les heures de marche et d'arrêt – commencez par le chapitre 7.3.3 de la fiche technique du PCA9685 pour avoir l'esprit perplexe pendant un moment.

Des bits séparés activent ou désactivent complètement chaque canal, et il existe un moyen d'activer ou de désactiver tous les canaux avec une commande globale. Chaque sortie possède également son propre bit d'inversion de sortie.

La fréquence de sortie est définie par un pré-scaler de 8 bits et produit une fréquence de 25 MHz/4096/pré-échelonneur, bien que, pour des raisons que j'aimerais connaître, elle ne puisse pas être réglée en dessous de la division par quatre, donc les réglages de ÷1, ÷2 ou ÷3 sont automatiquement remplacés par ÷4. ÷5 et plus sont tous possibles. Par défaut, il produit ~ 200 Hz.

Heureusement pour le reste d'entre nous, AdaFruit a créé une bibliothèque Arduino pour contrôler la puce en tant que servomoteur multicanal – nous devons remercier Limor Fried pour tant de bonnes bibliothèques Arduino – et elle a également quelque chose de similaire pour CircuitPython et Python.

BTW, si vous êtes intéressé par le chien robot Peroi Bittle, trouvez-le ici. Il dispose essentiellement d’une électronique Arduino – une carte Arduino-esk personnalisée avec des périphériques appropriés.

droitePCA9685 de NXP, montrant l'un de ses 16 canaux de sortie PWMSteve Bush