Modul PCA9685 kontroler za Arduino i druge platforme je široko korišteno rješenje kada trebate kontrolirati nekoliko uređaja koji rade sa PWM signalima. Iako je prvobitno dizajniran za kontrolu LED dioda, njegova svestranost mu je omogućila da bude i česta opcija za kontrolu servo uređaja. Ovaj čip je izuzetno popularan u projektima robotike i automatizacije zbog svoje sposobnosti da precizno i jednostavno kontroliše više uređaja.
Ovaj članak ne samo da će vam pokazati kako koristiti PCA9685 u kombinaciji s Arduinom i drugim mikrokontrolerima, već će vam također detaljno objasniti svaki od tehničkih aspekata koje trebate znati da biste izvukli maksimum iz ove komponente. Objasnit ćemo sve, od načina povezivanja do načina upravljanja bibliotekama kodova tako da možete kontrolirati svoje motore i servo s potpunom lakoćom.
Šta je PCA9685 i za šta se koristi?

El PCA9685 je PWM (Pulse Width Modulation) kontroler dizajniran za upravljanje do 16 izlaza, idealan za upravljanje LED svjetlima i servo motorima. Komunicira preko I2C magistrale, što znači da su mu potrebna samo dva pina za povezivanje na mikrokontroler kao što je Arduino ili Raspberry Pi. Korištenjem specifičnih adresa, čak možete povezati do 62 od ovih modula na istu I2C magistralu, kontrolirajući oko 992 PWM izlaza. To ga čini vrlo moćnom opcijom za projekte koji zahtijevaju koordinirano upravljanje mnogim uređajima.
Najraširenija upotreba od PCA9685 To je u projektima gdje je potreban PWM signal. Jasan primjer je upravljanje servo motorima koji se upravljaju PWM signalima. Dodatno, kontroler ima tačnost od 12 bita, što mu omogućava da generiše veoma fine signale, sa podesivom frekvencijom do maksimalno 1600 Hz.
Nije pronađen nijedan proizvod.
Karakteristike i prednosti PCA9685
Jedna od glavnih prednosti PCA9685 je da skida teret sa mikrokontrolera u smislu stalnog generisanja PWM signala. Ovo je posebno korisno u projektima koji uključuju kontrolu mnogih uređaja, jer omogućava glavnom procesoru da se fokusira na druge zadatke.
- 16 nezavisnih kanala: Svaki od 16 kanala može emitovati nezavisan PWM signal, što vam omogućava kontrolu uređaja kao što su servo, motori i LED svjetla.
- I2C kontrola: PCA9685 koristi I2C sučelje za komunikaciju s glavnim kontrolerom (Arduino, Raspberry Pi, itd.), i zahtijeva samo dva kabla za komunikaciju (SDA i SCL).
- Više modula na jednoj magistrali: Do 62 PCA9685 modula se mogu povezati na istu I2C magistralu, kontrolirajući do 992 PWM izlaza.
- Podesiva frekvencija: Podržava frekvencije do 1600 Hz, iako se frekvencija od 50-60 Hz koristi za tipičnu servo kontrolu.
Veza između Arduina i PCA9685

Veza između PCA9685 modul a Arduino je jednostavan i radi se pomoću I2C pinova (SCL i SDA) i pinova za napajanje. Sljedeća tabela navodi tipične veze za različite Arduino modele:
| Pin PCA9685 | Arduino Uno/Stariji brat | arduino mega | arduino leonardo |
|---|---|---|---|
| GND | GND | GND | GND |
| 5V | 5V | 5V | 5V |
| SCL | A5 | 21 | 3 |
| prirodni resursi | A4 | 20 | 2 |
U ovoj konfiguraciji, igle A4 i A5 ili njihove ekvivalente na odgovarajućoj platformi, povežite na SDA (podaci) i SCL (clock) pinove PCA9685 modula. Dodatno, važno je imati odgovarajuće eksterno napajanje za servo motore, posebno ako povezujete više servo motora, jer Arduino ne pruža dovoljno struje da ih pravilno pokreće.
Preporučuje se upotreba a 5V napajanje da napajate servos i provjerite jeste li pravilno spojili igle za napajanje. Ako koristite više od 16 servo uređaja, također se preporučuje zalemiti kondenzator od 1000uF na ploči za stabilizaciju napajanja.
Konfiguracija u kodu
Da bi se upravljalo PWM izlazima PCA9685, koristi se biblioteka koju je razvio Adafruit. Možete ga preuzeti sa vašu GitHub stranicu. Ovdje vam pokazujemo osnovni primjer za konfiguraciju modula i pomicanje 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); }
Ovaj jednostavan kod izvodi pokret sweep na servo spojenom na kanal 0, polako ga pomerajući od 0 stepeni do 180 stepeni. Možete koristiti funkciju setPWM() za nezavisno upravljanje svakim od PCA9685 izlaza.
Pomicanje nekoliko servo uređaja u isto vrijeme
Jedna od velikih prednosti PCA9685 je da vam omogućava da istovremeno kontrolišete više servo uređaja. Evo kako možete premjestiti više servomotora na različite pozicije unutar istog ciklusa koda:
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); }
U ovom slučaju, definiramo funkciju pod nazivom setServo koji prima servo broj i njegov ugao kao parametre, izračunavajući odgovarajuću širinu impulsa i pomerajući ga u željenu poziciju. Na ovaj način možete lako kontrolisati više kanala.
Kako postaviti ograničenja za različite servo
Nemaju svi servo uređaji isti raspon vrijednosti za uglove od 0° do 180°. U nekim slučajevima, morat ćete prilagoditi ove vrijednosti. Evo kako možete napraviti ove postavke za različite servo:
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); }
Ovaj kod vam omogućava da podesite minimalne i maksimalne vrijednosti za svaki servo spojen na PCA9685, što će biti izuzetno korisno ako koristite servo s različitim rasponima signala.
Imajući sve ovo na umu, sada imate sve što vam je potrebno za postavljanje, povezivanje i kodiranje vašeg prvog projekta pomoću PCA9685. Bilo da radite na robotu s više stupnjeva slobode ili trebate paralelno kontrolirati više uređaja, ovaj modul će vam omogućiti da to radite efikasno i precizno.
Bilo da radite sa servo ili PWM izlazima, PCA9685 olakšava kontrolu do 16 kanala koristeći samo dva pina na vašem mikrokontroleru. Uz malo iskustva i dobar kod, možete kreirati vrlo moćne aplikacije bez preopterećenja glavnog procesora.