Modul Radič PCA9685 pre Arduino a ďalších platforiem je široko používaným riešením, keď potrebujete ovládať niekoľko zariadení, ktoré pracujú so signálmi PWM. Hoci bol pôvodne navrhnutý na ovládanie LED diód, jeho všestrannosť umožnila, aby bol tiež častou možnosťou ovládania serv. Tento čip je mimoriadne obľúbený v robotických a automatizačných projektoch pre svoju schopnosť presne a jednoducho ovládať viacero zariadení.
Tento článok vám ukáže nielen to, ako používať PCA9685 v kombinácii s Arduinom a inými mikrokontrolérmi, ale tiež podrobne opíše každý z technických aspektov, ktoré potrebujete vedieť, aby ste z tohto komponentu vyťažili maximum. Vysvetlíme vám všetko od toho, ako to pripojiť, až po to, ako spravovať knižnice kódov, aby ste mohli svoje motory a servá ovládať úplne jednoducho.
Čo je PCA9685 a na čo sa používa?
El PCA9685 je PWM (Pulse Width Modulation) ovládač navrhnutý na správu až 16 výstupov, ideálny na ovládanie LED svetiel a servomotorov. Komunikuje cez zbernicu I2C, čo znamená, že na pripojenie k mikrokontroléru, ako je Arduino alebo Raspberry Pi, potrebuje iba dva piny. Použitím špecifických adries môžete dokonca pripojiť až 62 týchto modulov na rovnakú I2C zbernicu, pričom môžete ovládať približne 992 PWM výstupov. To z neho robí veľmi výkonnú možnosť pre projekty, ktoré vyžadujú koordinovanú správu mnohých zariadení.
Najrozšírenejšie použitie PCA9685 Je to v projektoch, kde je potrebný PWM signál. Jasným príkladom je ovládanie serv, ktoré sú riadené z PWM signálov. Okrem toho má ovládač presnosť 12 bitov, čo mu umožňuje generovať veľmi jemné signály, s nastaviteľnou frekvenciou až do maximálne 1600 Hz.
Vlastnosti a výhody PCA9685
Jednou z hlavných výhod PCA9685 spočíva v tom, že odstraňuje záťaž z mikrokontroléra, pokiaľ ide o neustále generovanie PWM signálov. To je užitočné najmä v projektoch, ktoré zahŕňajú ovládanie mnohých zariadení, pretože to umožňuje hlavnému procesoru sústrediť sa na iné úlohy.
- 16 nezávislých kanálov: Každý zo 16 kanálov môže vysielať nezávislý signál PWM, čo vám umožňuje ovládať zariadenia, ako sú servá, motory a LED svetlá.
- I2C ovládanie: PCA9685 používa rozhranie I2C na komunikáciu s hlavným radičom (Arduino, Raspberry Pi atď.) a na komunikáciu vyžaduje iba dva káble (SDA a SCL).
- Viac modulov na jednej zbernici: Na rovnakú I62C zbernicu možno pripojiť až 9685 modulov PCA2, ktoré ovládajú až 992 PWM výstupov.
- Nastaviteľná frekvencia: Podporuje frekvencie až do 1600 Hz, hoci frekvencia 50-60 Hz sa používa na typické ovládanie servopohonov.
Spojenie medzi Arduino a PCA9685
Spojenie medzi Modul PCA9685 a Arduino je jednoduché a vykonáva sa pomocou I2C kolíkov (SCL a SDA) a napájacích kolíkov. Nasledujúca tabuľka špecifikuje typické pripojenia pre rôzne modely Arduino:
Pin PCA9685 | Arduino Uno/Starší brat | Mega Arduino | arduino leonardo |
---|---|---|---|
GND | GND | GND | GND |
5V | 5V | 5V | 5V |
SCL | A5 | 21 | 3 |
SDA | A4 | 20 | 2 |
V tejto konfigurácii sú kolíky A4 a A5 alebo ich ekvivalenty na zodpovedajúcej platforme, pripojte k pinom SDA (dáta) a SCL (hodiny) modulu PCA9685. Okrem toho je dôležité mať vhodné externé napájanie pre servomotory, najmä ak pripájate viacero serv, pretože Arduino neposkytuje dostatok prúdu na ich správne riadenie.
Odporúča sa použiť a Napájanie 5V na napájanie serv a uistite sa, že ste správne pripojili napájacie kolíky. Ak používate viac ako 16 serv, odporúča sa tiež prispájkovať 1000uF kondenzátor na dosku pre stabilizáciu výkonu.
Konfigurácia v kóde
Aby bolo možné riadiť PWM výstupy PCA9685, používa sa knižnica vyvinutá spoločnosťou Adafruit. Môžete si ho stiahnuť z vaša stránka GitHub. Tu vám ukážeme základný príklad konfigurácie modulu a pohybu serva:
#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); }
Tento jednoduchý kód vykonáva pohyb na servo pripojenom ku kanálu 0, pričom sa pomaly posúva z 0 stupňov na 180 stupňov. Môžete použiť funkciu setPWM() na nezávislé ovládanie každého z výstupov PCA9685.
Pohyb viacerých serv súčasne
Jednou z veľkých výhod PCA9685 je, že vám umožňuje ovládať viacero serv súčasne. Tu je návod, ako môžete presunúť viacero servomotorov na rôzne pozície v rámci toho istého kódového cyklu:
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); }
V tomto prípade definujeme funkciu tzv setServo ktorý prijme číslo serva a jeho uhol ako parametre, vypočíta vhodnú šírku impulzu a posunie ho do požadovanej polohy. Týmto spôsobom môžete jednoducho ovládať viacero kanálov.
Ako nastaviť limity pre rôzne servá
Nie všetky servá majú rovnaký rozsah hodnôt pre uhly od 0° do 180°. V niektorých prípadoch budete musieť tieto hodnoty prispôsobiť. Tu je návod, ako môžete vykonať tieto nastavenia pre rôzne servá:
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); }
Tento kód vám umožňuje nastaviť minimálne a maximálne hodnoty pre každé servo pripojené k PCA9685, čo bude mimoriadne užitočné, ak používate servá s rôznymi rozsahmi signálu.
S ohľadom na toto všetko máte teraz všetko, čo potrebujete na nastavenie, pripojenie a kódovanie vášho prvého projektu pomocou PCA9685. Či už pracujete na robotovi s viacerými stupňami voľnosti, alebo potrebujete ovládať veľa zariadení paralelne, tento modul vám to umožní efektívne a presne.
Či už pracujete so servami alebo PWM výstupmi, PCA9685 uľahčuje ovládanie až 16 kanálov pomocou iba dvoch pinov na vašom mikrokontroléri. S trochou skúseností a dobrým kódom môžete vytvárať veľmi výkonné aplikácie bez preťaženia hlavného procesora.