Modulis PCA9685 valdiklis, skirtas Arduino ir kitos platformos yra plačiai naudojamas sprendimas, kai reikia valdyti kelis įrenginius, veikiančius su PWM signalais. Nors iš pradžių jis buvo skirtas valdyti šviesos diodus, jo universalumas leido taip pat būti dažna servo valdymo galimybė. Šis lustas itin populiarus robotikos ir automatikos projektuose dėl gebėjimo tiksliai ir paprastai valdyti kelis įrenginius.
Šis straipsnis ne tik parodys, kaip naudoti PCA9685 kartu su Arduino ir kitais mikrovaldikliais, bet ir išsamiai aprašys kiekvieną techninį aspektą, kurį turite žinoti, kad išnaudotumėte visas šio komponento galimybes. Paaiškinsime viską nuo jo prijungimo iki kodų bibliotekų valdymo, kad galėtumėte visiškai lengvai valdyti savo variklius ir servosistemas.
Kas yra PCA9685 ir kam jis naudojamas?
El PCA9685 yra PWM (impulso pločio moduliacijos) valdiklis, skirtas valdyti iki 16 išėjimų, idealiai tinkantis valdyti LED lemputes ir servovariklius. Jis bendrauja per I2C magistralę, o tai reiškia, kad norint prisijungti prie mikrovaldiklio, pvz., Arduino ar Raspberry Pi, reikia tik dviejų kaiščių. Naudodami konkrečius adresus, netgi galite prijungti iki 62 šių modulių prie tos pačios I2C magistralės, valdydami apie 992 PWM išėjimus. Dėl to tai labai galinga parinktis projektams, kuriems reikia koordinuotai valdyti daugybę įrenginių.
Plačiausiai naudojamas PCA9685 Tai projektuose, kur reikalingas PWM signalas. Ryškus pavyzdys yra servo valdymas, kuris valdomas iš PWM signalų. Be to, valdiklis turi tikslumą 12 bitai, kuri leidžia generuoti labai smulkius signalus, kurių dažnis reguliuojamas iki maksimalaus 1600 Hz.
PCA9685 savybės ir privalumai
Vienas iš pagrindinių PCA9685 yra tai, kad ji nuima naštą nuo mikrovaldiklio nuolat generuojant PWM signalus. Tai ypač naudinga projektuose, kurie apima daugelio įrenginių valdymą, nes tai leidžia pagrindiniam procesoriui sutelkti dėmesį į kitas užduotis.
- 16 nepriklausomų kanalų: Kiekvienas iš 16 kanalų gali išvesti nepriklausomą PWM signalą, leidžiantį valdyti tokius įrenginius kaip servosistemos, varikliai ir LED lemputės.
- I2C valdymas: PCA9685 naudoja I2C sąsają, kad galėtų bendrauti su pagrindiniu valdikliu (Arduino, Raspberry Pi ir kt.), o komunikacijai reikia tik dviejų kabelių (SDA ir SCL).
- Keli moduliai vienoje magistralėje: Prie tos pačios I62C magistralės galima prijungti iki 9685 PCA2 modulių, valdančių iki 992 PWM išėjimų.
- Reguliuojamas dažnis: Palaiko dažnius iki 1600 Hz, nors įprastam servo valdymui naudojamas 50-60 Hz dažnis.
Ryšys tarp Arduino ir PCA9685
Ryšys tarp PCA9685 modulis „Arduino“ yra paprastas ir atliekamas naudojant I2C kaiščius (SCL ir SDA) ir maitinimo kaiščius. Šioje lentelėje pateikiamos tipinės įvairių Arduino modelių jungtys:
Kaištis PCA9685 | Arduino Uno/Vyresnysis brolis | „Arduino Mega“ | arduino leonardo |
---|---|---|---|
GND | GND | GND | GND |
5V | 5V | 5V | 5V |
LAT | A5 | 21 | 3 |
gamtos turtai | A4 | 20 | 2 |
Šioje konfigūracijoje kaiščiai A4 ir A5 arba jų ekvivalentus atitinkamoje platformoje, prijunkite prie PCA9685 modulio SDA (duomenys) ir SCL (laikrodžio) kaiščių. Be to, svarbu turėti tinkamą išorinį maitinimo šaltinį servo varikliams, ypač jei jungiate kelis servo įrenginius, nes „Arduino“ nesuteikia pakankamai srovės, kad jie tinkamai valdytų.
Rekomenduojama naudoti a 5V maitinimas kad maitintumėte servo sistemas, ir įsitikinkite, kad tinkamai prijungėte maitinimo kaiščius. Jei naudojate daugiau nei 16 servo, taip pat rekomenduojama plokštėje lituoti 1000uF kondensatorių, kad stabilizuotų maitinimą.
Konfigūracija kode
Norėdami valdyti PWM išėjimus PCA9685, naudojama Adafruit sukurta biblioteka. Galite atsisiųsti iš jūsų „GitHub“ puslapis. Čia parodysime pagrindinį modulio konfigūravimo ir servo perkėlimo pavyzdį:
#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); }
Šis paprastas kodas atlieka servo, prijungto prie 0 kanalo, šlavimo judesį, lėtai pakeldamas jį nuo 0 laipsnių iki 180 laipsnių. Galite naudoti funkciją setPWM() valdyti kiekvieną PCA9685 išvestį atskirai.
Vienu metu perkeliami keli servo elementai
Vienas iš didžiausių PCA9685 Tai leidžia vienu metu valdyti kelis servo įrenginius. Štai kaip galite perkelti kelis servovariklius į skirtingas pozicijas per tą patį kodo ciklą:
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); }
Šiuo atveju apibrėžiame funkciją, vadinamą setServo kuri kaip parametrus gauna servo numerį ir jo kampą, apskaičiuoja atitinkamą impulso plotį ir perkelia jį į norimą padėtį. Tokiu būdu galite lengvai valdyti kelis kanalus.
Kaip nustatyti skirtingų servo sistemų ribas
Ne visi servo įrenginiai turi tą patį kampų verčių diapazoną nuo 0 ° iki 180 °. Kai kuriais atvejais turėsite pritaikyti šias vertes. Štai kaip galite nustatyti šiuos skirtingų servo nustatymus:
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); }
Šis kodas leidžia reguliuoti minimalias ir didžiausias kiekvieno prie PCA9685 prijungto servo reikšmes, o tai bus labai naudinga, jei naudosite servo įrenginius su skirtingais signalų diapazonais.
Turėdami visa tai omenyje, dabar turite viską, ko reikia pirmajam projektui nustatyti, prijungti ir koduoti naudodami PCA9685. Nesvarbu, ar dirbate su kelių laisvės laipsnių robotu, ar reikia lygiagrečiai valdyti daugybę įrenginių, šis modulis leis tai padaryti efektyviai ir tiksliai.
Nesvarbu, ar dirbate su servo, ar PWM išėjimais, PCA9685 labai lengva valdyti iki 16 kanalų naudojant tik du mikrovaldiklio kaiščius. Turėdami nedidelę patirtį ir gerą kodą, galite sukurti labai galingas programas neperkraunant pagrindinio procesoriaus.