banner
Nachrichtenzentrum
Hervorragenden Service

Eines habe ich vermisst: Der LED-Treiber wurde für 16 Servos umfunktioniert

Dec 04, 2023

Ich habe mir die Elektronik hinter dem kleinen Petoi-Hunderoboter angeschaut (Rechts) und bemerkte einen Chip, den ich vorher nicht kannte, den PCA9685 von NXP.

Bei näherer Betrachtung fiel mir auf, dass Adafruit es auch zur Erzeugung der klassischen Impulse von 1,0 bis 2,0 ms verwendet, die Hobby-Servos mitteilen, wo sie sich positionieren sollen.

Es verfügt über einen I2C-Eingang und kann bis zu 16 PWM-Kanäle erstellen – was für ein praktisches Gerät.

NXP hat es entwickelt, um rote, grüne, blaue und bernsteinfarbene LEDs in vierfarbigen Hintergrundbeleuchtungen für Displays zu steuern.

Der PCA9685 von NXP zeigt einen seiner 16 PWM-Eingangskanäle

Jede PWM ist 12 Bit, also 4.096 Schritte (0 % und 100 % sind ebenfalls möglich), und alle Kanäle teilen sich eine programmierbare Grundfrequenz zwischen 24 Hz und 1,5 kHz (der interne Oszillator beträgt ~25 MHz, und bis zu 50 MHz können extern angewendet werden).

Abgesehen davon können die Ausgänge auf Open-Drain (5,5 Vmax) oder Totem-Pole eingestellt werden. Die Kapazität beträgt 10 mA Quelle und 25 mA Senke.

Es wird eine Versorgungsspannung zwischen 2,3 und 5,5 V benötigt und die Eingänge sind 5,5 V-tolerant.

Ich habe keine Ahnung, welche kluge Seele zuerst beschlossen hat, dass dies eine Signalquelle für Servos (vielleicht Adafruit?) sein würde – aber was für eine schöne Idee – 16 Servos, die über einen einzigen I2C-Bus gesteuert werden – der mit 1 MHz arbeiten kann.

Jeder Ausgang erhält zwei 12-Bit-Register, die nominell „Ein-Zeit“ und „Aus-Zeit“ genannt werden, aber tatsächlich interagieren sie mit einem festen Zeitrahmen von 4.096 auf komplexere Weise, als ihre Namen vermuten lassen, um auch die Kontrolle über die relative Phase zwischen allen Kanälen zu ermöglichen B. Ein- und Ausschaltzeiten – beginnen Sie mit Kapitel 7.3.3 im PCA9685-Datenblatt, um Ihre Gedanken für eine Weile zu verwirren.

Separate Bits schalten jeden Kanal vollständig aus oder vollständig ein, und es gibt eine Möglichkeit, alle Kanäle zusammen mit einem globalen Befehl ein- oder auszuschalten. Jeder Ausgang verfügt außerdem über ein eigenes Ausgangsinvertierungsbit.

Die Ausgangsfrequenz wird durch einen 8-Bit-Vorskalierer eingestellt und erzeugt eine Frequenz von 25 MHz/4096/Vorskalierer, obwohl sie aus Gründen, die ich gerne wissen würde, nicht unter „Teilen durch vier“ eingestellt werden kann, also Einstellungen von ÷1, ÷2 oder ÷3 werden automatisch durch ÷4 ersetzt. ÷5 und mehr sind alle möglich. Standardmäßig werden ~200 Hz erzeugt.

Zum Glück für den Rest von uns hat AdaFruit eine Arduino-Bibliothek erstellt, um den Chip als Mehrkanal-Servotreiber zu steuern – so viele gute Arduino-Bibliotheken haben wir Limor Fried zu verdanken – und es gibt etwas Ähnliches auch für CircuitPython und Python.

Übrigens: Wenn Sie sich für den Roboterhund Peroi Bittle interessieren, finden Sie ihn hier. Es verfügt im Wesentlichen über Arduino-Elektronik – ein maßgeschneidertes Arduino-esk-Board mit geeigneten Peripheriegeräten.

RechtsDer PCA9685 von NXP zeigt einen seiner 16 PWM-EingangskanäleSteve Bush