Moduli Kontrolluesi PCA9685 për Arduino dhe platforma të tjera është një zgjidhje e përdorur gjerësisht kur keni nevojë të kontrolloni disa pajisje që funksionojnë me sinjale PWM. Edhe pse fillimisht ishte projektuar për të kontrolluar LED, shkathtësia e tij e ka lejuar atë të jetë gjithashtu një opsion i shpeshtë për kontrollin e servove. Ky çip është jashtëzakonisht i popullarizuar në projektet e robotikës dhe automatizimit për aftësinë e tij për të kontrolluar pajisje të shumta me saktësi dhe thjeshtësi.
Ky artikull jo vetëm që do t'ju tregojë se si të përdorni PCA9685 në kombinim me Arduino dhe mikrokontrollues të tjerë, por gjithashtu do të detajojë secilin nga aspektet teknike që duhet të dini për të përfituar sa më shumë nga ky komponent. Ne do të shpjegojmë gjithçka, nga mënyra se si ta lidhni atë me mënyrën e menaxhimit të bibliotekave të kodeve, në mënyrë që të mund të kontrolloni motorët dhe servot tuaja me lehtësi të plotë.
Çfarë është PCA9685 dhe për çfarë përdoret?
El PCA9685 është një kontrollues PWM (Pulse Width Modulation) i krijuar për të menaxhuar deri në 16 dalje, ideale për të kontrolluar dritat LED dhe servo motorët. Ai komunikon nëpërmjet autobusit I2C, që do të thotë se i nevojiten vetëm dy kunja për t'u lidhur me një mikrokontrollues si Arduino ose Raspberry Pi. Nëpërmjet përdorimit të adresave specifike, madje mund të lidhni deri në 62 prej këtyre moduleve me të njëjtin autobus I2C, duke kontrolluar rreth 992 dalje PWM. Kjo e bën atë një opsion shumë të fuqishëm për projektet që kërkojnë menaxhimin e shumë pajisjeve në mënyrë të koordinuar.
Përdorimi më i përhapur i PCA9685 Është në projektet ku nevojitet një sinjal PWM. Një shembull i qartë është kontrolli i servove, të cilët kontrollohen nga sinjalet PWM. Për më tepër, kontrolluesi ka një saktësi prej 12 bit, e cila e lejon atë të gjenerojë sinjale shumë të mira, me frekuencë të rregullueshme deri në maksimum 1600 Hz.
Karakteristikat dhe përfitimet e PCA9685
Një nga përparësitë kryesore të PCA9685 është se ajo heq barrën nga mikrokontrolluesi për sa i përket gjenerimit të vazhdueshëm të sinjaleve PWM. Kjo është veçanërisht e dobishme në projektet që përfshijnë kontrollin e shumë pajisjeve, pasi lejon që procesori kryesor të fokusohet në detyra të tjera.
- 16 kanale të pavarura: Secili nga 16 kanalet mund të nxjerrë një sinjal të pavarur PWM, duke ju lejuar të kontrolloni pajisje të tilla si servo, motorët dhe dritat LED.
- Kontrolli I2C: PCA9685 përdor një ndërfaqe I2C për të komunikuar me kontrolluesin kryesor (Arduino, Raspberry Pi, etj.) dhe kërkon vetëm dy kabllo për komunikim (SDA dhe SCL).
- Module të shumta në një autobus të vetëm: Deri në 62 module PCA9685 mund të lidhen në të njëjtin autobus I2C, duke kontrolluar deri në 992 dalje PWM.
- Frekuencë e rregullueshme: Mbështet frekuenca deri në 1600 Hz, megjithëse një frekuencë prej 50-60 Hz përdoret për kontrollin tipik të servo.
Lidhja midis Arduino dhe PCA9685
Lidhja ndërmjet Moduli PCA9685 dhe një Arduino është i thjeshtë dhe bëhet duke përdorur kunjat I2C (SCL dhe SDA) dhe kunjat e fuqisë. Tabela e mëposhtme specifikon lidhjet tipike për modele të ndryshme Arduino:
Pin PCA9685 | Arduino Uno/Vëllai i madh | Mega Arduino | arduino leonardo |
---|---|---|---|
GND | GND | GND | GND |
5V | 5V | 5V | 5V |
SCL | A5 | 21 | 3 |
burime natyrore | A4 | 20 | 2 |
Në këtë konfigurim, kunjat A4 dhe A5 ose ekuivalentët e tyre në platformën përkatëse, lidheni me kunjat SDA (të dhëna) dhe SCL (orë) të modulit PCA9685. Për më tepër, është e rëndësishme të keni një furnizim të përshtatshëm të jashtëm me energji elektrike për servo motorët, veçanërisht nëse jeni duke lidhur servo të shumta, pasi Arduino nuk siguron rrymë të mjaftueshme për t'i drejtuar ato siç duhet.
Rekomandohet përdorimi i një Furnizimi 5 V për të fuqizuar servot dhe sigurohuni që t'i lidhni siç duhet kunjat e rrymës. Nëse përdorni më shumë se 16 servo, rekomandohet gjithashtu të lidhni një kondensator 1000uF në tabelë për të stabilizuar fuqinë.
Konfigurimi në kod
Për të menaxhuar daljet PWM të PCA9685, përdoret një bibliotekë e zhvilluar nga Adafruit. Mund ta shkarkoni nga faqen tuaj GitHub. Këtu ju tregojmë një shembull bazë për të konfiguruar modulin dhe për të lëvizur një 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); }
Ky kod i thjeshtë kryen një lëvizje fshirjeje në servo të lidhur me kanalin 0, duke e çuar ngadalë nga 0 gradë në 180 gradë. Ju mund të përdorni funksionin setPWM() për të kontrolluar secilin prej daljeve PCA9685 në mënyrë të pavarur.
Lëvizja e disa servove në të njëjtën kohë
Një nga përparësitë e mëdha të PCA9685 është se ju lejon të kontrolloni servo të shumta në të njëjtën kohë. Ja se si mund të lëvizni shumë servomotorë në pozicione të ndryshme brenda të njëjtit cikël kodi:
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ë këtë rast, ne përcaktojmë një funksion të quajtur setServo i cili merr si parametra numrin servo dhe këndin e tij, duke llogaritur gjerësinë e duhur të pulsit dhe duke e zhvendosur atë në pozicionin e dëshiruar. Në këtë mënyrë ju mund të kontrolloni lehtësisht shumë kanale.
Si të vendosni kufij për servo të ndryshme
Jo të gjithë servot kanë të njëjtën gamë vlerash për këndet nga 0° deri në 180°. Në disa raste, do t'ju duhet të rregulloni me porosi këto vlera. Ja se si mund t'i bëni këto cilësime për servo të ndryshëm:
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); }
Ky kod ju lejon të rregulloni vlerat minimale dhe maksimale për çdo servo të lidhur me PCA9685, gjë që do të jetë jashtëzakonisht e dobishme nëse përdorni servo me diapazon të ndryshëm sinjalesh.
Me gjithë këtë në mendje, tani keni gjithçka që ju nevojitet për të konfiguruar, lidhur dhe koduar projektin tuaj të parë duke përdorur PCA9685. Pavarësisht nëse jeni duke punuar në një robot me shkallë të shumta lirie, ose keni nevojë të kontrolloni shumë pajisje paralelisht, ky modul do t'ju lejojë ta bëni këtë në mënyrë efikase dhe të saktë.
Pavarësisht nëse jeni duke punuar me servo ose dalje PWM, PCA9685 e bën jashtëzakonisht të lehtë kontrollin e deri në 16 kanale duke përdorur vetëm dy kunja në mikrokontrolluesin tuaj. Me pak përvojë dhe kod të mirë, mund të krijoni aplikacione shumë të fuqishme pa e mbingarkuar procesorin kryesor.