Das Modul PCA9685-Controller für Arduino und anderen Plattformen ist eine weit verbreitete Lösung, wenn Sie mehrere Geräte steuern müssen, die mit PWM-Signalen arbeiten. Obwohl es ursprünglich für die Steuerung von LEDs konzipiert wurde, ist es aufgrund seiner Vielseitigkeit auch eine häufige Option zur Steuerung von Servos. Dieser Chip ist in Robotik- und Automatisierungsprojekten aufgrund seiner Fähigkeit, mehrere Geräte präzise und einfach zu steuern, äußerst beliebt.
Dieser Artikel zeigt Ihnen nicht nur, wie Sie den PCA9685 in Kombination mit Arduino und anderen Mikrocontrollern verwenden, sondern erläutert auch alle technischen Aspekte, die Sie kennen müssen, um das Beste aus dieser Komponente herauszuholen. Wir erklären Ihnen alles vom Anschließen bis zur Verwaltung von Codebibliotheken, damit Sie Ihre Motoren und Servos ganz einfach steuern können.
Was ist PCA9685 und wofür wird es verwendet?
El PCA9685 ist ein PWM-Controller (Pulsweitenmodulation), der für die Verwaltung von bis zu 16 Ausgängen entwickelt wurde und sich ideal für die Steuerung von LED-Leuchten und Servomotoren eignet. Die Kommunikation erfolgt über den I2C-Bus, was bedeutet, dass für die Verbindung mit einem Mikrocontroller wie Arduino oder Raspberry Pi nur zwei Pins erforderlich sind. Durch die Verwendung spezifischer Adressen können Sie sogar bis zu 62 dieser Module an denselben I2C-Bus anschließen und so etwa 992 PWM-Ausgänge steuern. Dies macht es zu einer sehr leistungsstarken Option für Projekte, die eine koordinierte Verwaltung vieler Geräte erfordern.
Die am weitesten verbreitete Verwendung von PCA9685 In Projekten wird ein PWM-Signal benötigt. Ein klares Beispiel ist die Steuerung von Servos, die über PWM-Signale gesteuert werden. Darüber hinaus verfügt der Regler über eine Genauigkeit von 12 Bits, wodurch sehr feine Signale mit einstellbarer Frequenz bis maximal 1600 Hz erzeugt werden können.
Merkmale und Vorteile des PCA9685
Einer der Hauptvorteile von PCA9685 liegt darin, dass der Mikrocontroller dadurch entlastet wird, dass er ständig PWM-Signale erzeugen muss. Dies ist besonders nützlich bei Projekten, bei denen viele Geräte gesteuert werden müssen, da sich der Hauptprozessor so auf andere Aufgaben konzentrieren kann.
- 16 unabhängige Kanäle: Jeder der 16 Kanäle kann ein unabhängiges PWM-Signal ausgeben, sodass Sie Geräte wie Servos, Motoren und LED-Leuchten steuern können.
- I2C-Steuerung: Der PCA9685 verwendet eine I2C-Schnittstelle zur Kommunikation mit dem Hauptcontroller (Arduino, Raspberry Pi usw.) und benötigt nur zwei Kabel für die Kommunikation (SDA und SCL).
- Mehrere Module auf einem einzigen Bus: Bis zu 62 PCA9685-Module können an denselben I2C-Bus angeschlossen werden und bis zu 992 PWM-Ausgänge steuern.
- Einstellbare Frequenz: Unterstützt Frequenzen bis zu 1600 Hz, obwohl für die typische Servosteuerung eine Frequenz von 50–60 Hz verwendet wird.
Verbindung zwischen Arduino und PCA9685
Die Verbindung zwischen PCA9685-Modul und ein Arduino ist einfach und erfolgt über die I2C-Pins (SCL und SDA) und die Power-Pins. Die folgende Tabelle spezifiziert typische Anschlüsse für verschiedene Arduino-Modelle:
Pin PCA9685 | Arduino Uno/Älterer Bruder | Arduino Mega | Arduino Leonardo |
---|---|---|---|
GND | GND | GND | GND |
5V | 5V | 5V | 5V |
SCL | A5 | 21 | 3 |
SDA | A4 | 20 | 2 |
In dieser Konfiguration sind die Pins A4 und A5 oder ihre Äquivalente auf der entsprechenden Plattform, verbinden Sie sich mit den SDA- (Daten) und SCL- (Takt) Pins des PCA9685-Moduls. Darüber hinaus ist es wichtig, über eine geeignete externe Stromversorgung für die Servomotoren zu verfügen, insbesondere wenn Sie mehrere Servos anschließen, da der Arduino nicht genügend Strom liefert, um diese ordnungsgemäß anzutreiben.
Es wird empfohlen, a zu verwenden 5V-Versorgung um die Servos mit Strom zu versorgen, und stellen Sie sicher, dass Sie die Stromanschlüsse richtig anschließen. Wenn Sie mehr als 16 Servos verwenden, empfiehlt es sich außerdem, einen 1000uF-Kondensator auf die Platine zu löten, um die Leistung zu stabilisieren.
Konfiguration im Code
Um die PWM-Ausgänge des zu verwalten PCA9685Es wird eine von Adafruit entwickelte Bibliothek verwendet. Sie können es herunterladen unter deine GitHub-Seite. Hier zeigen wir Ihnen ein einfaches Beispiel zur Konfiguration des Moduls und zum Bewegen eines Servos:
#include <Wire.h> #include <Adafruit_PWMServoDriver.h> Adafruit_PWMServoDriver servos = Adafruit_PWMServoDriver(); void setup() { servos.begin(); servos.setPWMFreq(60); // Configura la frecuencia PWM a 60Hz } void loop() { servos.setPWM(0, 0, 172); // Mueve el servo del canal 0 a la posición 0 grados delay(1000); servos.setPWM(0, 0, 565); // Mueve el servo a la posición 180 grados delay(1000); }
Dieser einfache Code führt eine Schwenkbewegung des an Kanal 0 angeschlossenen Servos aus und bringt ihn langsam von 0 Grad auf 180 Grad. Sie können die Funktion nutzen setPWM() um jeden der PCA9685-Ausgänge unabhängig zu steuern.
Mehrere Servos gleichzeitig bewegen
Einer der großen Vorteile von PCA9685 ist, dass Sie damit mehrere Servos gleichzeitig steuern können. So können Sie mehrere Servomotoren innerhalb desselben Codezyklus an verschiedene Positionen bewegen:
void loop() { setServo(0, 30); setServo(2, 90); setServo(4, 180); delay(1000); } void setServo(uint8_t n_servo, int angulo) { int duty = map(angulo, 0, 180, 172, 565); servos.setPWM(n_servo, 0, duty); }
In diesem Fall definieren wir eine Funktion namens setServo Dieser erhält die Servonummer und seinen Winkel als Parameter, berechnet die entsprechende Impulsbreite und bewegt sie in die gewünschte Position. Auf diese Weise können Sie problemlos mehrere Kanäle steuern.
So legen Sie Grenzwerte für verschiedene Servos fest
Nicht alle Servos haben den gleichen Wertebereich für Winkel von 0° bis 180°. In einigen Fällen müssen Sie diese Werte individuell anpassen. So können Sie diese Einstellungen für verschiedene Servos vornehmen:
unsigned int pos0[16]= {172, 256, 246, 246, 246, 172, 246, 200}; unsigned int pos180[16]= {565, 492, 492, 492, 492, 565, 492, 550}; void setServo(uint8_t n_servo, int angulo) { int duty = map(angulo, 0, 180, pos0[n_servo], pos180[n_servo]); servos.setPWM(n_servo, 0, duty); }
Mit diesem Code können Sie die Mindest- und Höchstwerte für jedes an den PCA9685 angeschlossene Servo anpassen, was äußerst nützlich ist, wenn Sie Servos mit unterschiedlichen Signalbereichen verwenden.
Vor diesem Hintergrund verfügen Sie jetzt über alles, was Sie zum Einrichten, Anschließen und Codieren Ihres ersten Projekts mit dem PCA9685 benötigen. Egal, ob Sie an einem Roboter mit mehreren Freiheitsgraden arbeiten oder viele Geräte parallel steuern müssen, mit diesem Modul können Sie dies effizient und genau erledigen.
Egal, ob Sie mit Servos oder PWM-Ausgängen arbeiten, mit dem PCA9685 können Sie ganz einfach bis zu 16 Kanäle über nur zwei Pins Ihres Mikrocontrollers steuern. Mit ein wenig Erfahrung und gutem Code lassen sich sehr leistungsfähige Anwendungen erstellen, ohne den Hauptprozessor zu überlasten.