Modulul Controler PCA9685 pentru Arduino și alte platforme este o soluție utilizată pe scară largă atunci când trebuie să controlați mai multe dispozitive care funcționează cu semnale PWM. Deși inițial a fost conceput pentru a controla LED-urile, versatilitatea sa i-a permis să fie și o opțiune frecventă pentru controlul servo-urilor. Acest cip este extrem de popular în proiectele de robotică și automatizare pentru capacitatea sa de a controla mai multe dispozitive cu precizie și simplitate.
Acest articol nu vă va arăta doar cum să utilizați PCA9685 în combinație cu Arduino și alte microcontrolere, dar vă va detalia și fiecare dintre aspectele tehnice pe care trebuie să le cunoașteți pentru a profita la maximum de această componentă. Vom explica totul, de la modul de conectare la modul de gestionare a bibliotecilor de coduri, astfel încât să vă puteți controla motoarele și servomotoarele cu ușurință deplină.
Ce este PCA9685 și pentru ce se utilizează?
El PCA9685 este un controler PWM (Pulse Width Modulation) conceput pentru a gestiona până la 16 ieșiri, ideal pentru controlul luminilor LED și a servomotoarelor. Comunică prin magistrala I2C, ceea ce înseamnă că are nevoie doar de doi pini pentru a se conecta la un microcontroler precum Arduino sau Raspberry Pi. Prin utilizarea unor adrese specifice, puteți chiar conecta până la 62 dintre aceste module la aceeași magistrală I2C, controlând aproximativ 992 de ieșiri PWM. Acest lucru îl face o opțiune foarte puternică pentru proiectele care necesită gestionarea multor dispozitive într-o manieră coordonată.
Cea mai răspândită utilizare a PCA9685 Este în proiectele în care este nevoie de un semnal PWM. Un exemplu clar este controlul servo-urilor, care sunt controlate din semnale PWM. În plus, controlerul are o precizie de 12 biți, care îi permite să genereze semnale foarte fine, cu frecvență reglabilă până la maximum 1600 Hz.
Caracteristicile și beneficiile PCA9685
Unul dintre principalele avantaje ale PCA9685 este că elimină sarcina microcontrolerului în ceea ce privește generarea constantă a semnalelor PWM. Acest lucru este util în special în proiectele care implică controlul multor dispozitive, deoarece permite procesorului principal să se concentreze asupra altor sarcini.
- 16 canale independente: Fiecare dintre cele 16 canale poate scoate un semnal PWM independent, permițându-vă să controlați dispozitive precum servomotoare și lumini LED.
- control I2C: PCA9685 folosește o interfață I2C pentru a comunica cu controlerul principal (Arduino, Raspberry Pi, etc.) și necesită doar două cabluri pentru comunicare (SDA și SCL).
- Mai multe module pe o singură magistrală: Pe aceeași magistrală I62C pot fi conectate până la 9685 de module PCA2, controlând până la 992 de ieșiri PWM.
- Frecventa reglabila: Acceptă frecvențe de până la 1600 Hz, deși pentru controlul servo tipic este utilizată o frecvență de 50-60 Hz.
Conexiune între Arduino și PCA9685
Legătura dintre Modulul PCA9685 iar un Arduino este simplu și se face folosind pinii I2C (SCL și SDA) și pinii de alimentare. Următorul tabel specifică conexiunile tipice pentru diferite modele Arduino:
Pin PCA9685 | Arduino Uno/Fratele mai mare | arduino mega | arduino leonardo |
---|---|---|---|
GND | GND | GND | GND |
5V | 5V | 5V | 5V |
SCL | A5 | 21 | 3 |
SDA | A4 | 20 | 2 |
În această configurație, pinii A4 și A5 sau echivalentele acestora pe platforma corespunzătoare, conectați-vă la pinii SDA (date) și SCL (ceas) ai modulului PCA9685. În plus, este important să aveți o sursă de alimentare externă adecvată pentru servomotoarele, mai ales dacă conectați mai multe servomotoare, deoarece Arduino nu oferă suficient curent pentru a le conduce corect.
Se recomandă utilizarea a alimentare 5V pentru a alimenta servo-urile și asigurați-vă că conectați corect pinii de alimentare. Dacă utilizați mai mult de 16 servo-uri, se recomandă, de asemenea, să lipiți un condensator de 1000uF pe placă pentru a stabiliza puterea.
Configurare în cod
Pentru a gestiona ieșirile PWM ale PCA9685, este folosită o bibliotecă dezvoltată de Adafruit. Îl poți descărca de pe pagina dvs. GitHub. Aici vă arătăm un exemplu de bază pentru a configura modulul și a muta un servo:
#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); }
Acest cod simplu efectuează o mișcare de măturare pe servo-ul conectat la canalul 0, luându-l încet de la 0 la 180 de grade. Puteți utiliza funcția setPWM() pentru a controla independent fiecare dintre ieșirile PCA9685.
Mișcarea mai multor servo-uri în același timp
Unul dintre marile avantaje ale PCA9685 este că vă permite să controlați mai multe servo-uri simultan. Iată cum puteți muta mai multe servomotoare în poziții diferite în cadrul aceluiași ciclu de cod:
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); }
În acest caz, definim o funcție numită setServo care primește numărul servo și unghiul acestuia ca parametri, calculând lățimea impulsului corespunzătoare și deplasându-l în poziția dorită. În acest fel, puteți controla cu ușurință mai multe canale.
Cum să setați limite pentru diferite servo-uri
Nu toate servomotoarele au aceeași gamă de valori pentru unghiuri de la 0° la 180°. În unele cazuri, va trebui să ajustați aceste valori personalizate. Iată cum puteți face aceste setări pentru diferite servo-uri:
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); }
Acest cod vă permite să reglați valorile minime și maxime pentru fiecare servo conectat la PCA9685, ceea ce va fi extrem de util dacă utilizați servo-uri cu diferite game de semnal.
Având toate acestea în minte, acum aveți tot ce aveți nevoie pentru a configura, conecta și codifica primul proiect folosind PCA9685. Fie că lucrați la un robot cu mai multe grade de libertate, fie că aveți nevoie să controlați multe dispozitive în paralel, acest modul vă va permite să faceți acest lucru eficient și precis.
Indiferent dacă lucrați cu servo-uri sau ieșiri PWM, PCA9685 face super ușor să controlați până la 16 canale folosind doar doi pini de pe microcontroler. Cu puțină experiență și cod bun, puteți crea aplicații foarte puternice fără a supraîncărca procesorul principal.