Kompletny przewodnik: Kontroler PCA9685 z Arduino i nie tylko

  • PCA9685 to 16-kanałowy kontroler PWM komunikujący się poprzez I2C.
  • Może sterować zarówno oświetleniem LED, jak i serwami, a jego częstotliwość można regulować do 1600 Hz.
  • Możliwe jest podłączenie do 62 modułów na tej samej magistrali I2C, co daje 992 sterowalnych wyjść PWM.
  • Zastosowanie bibliotek takich jak Adafruit ułatwia pracę z tym komponentem na platformach takich jak Arduino.

pca9685

Moduł Kontroler PCA9685 dla Arduino i innych platformach jest powszechnie stosowanym rozwiązaniem w przypadku konieczności sterowania kilkoma urządzeniami pracującymi z sygnałami PWM. Chociaż początkowo został zaprojektowany do sterowania diodami LED, jego wszechstronność pozwoliła mu być również częstą opcją do sterowania serwami. Układ ten jest niezwykle popularny w projektach z zakresu robotyki i automatyki ze względu na możliwość precyzyjnego i prostego sterowania wieloma urządzeniami.

W tym artykule nie tylko dowiesz się, jak używać PCA9685 w połączeniu z Arduino i innymi mikrokontrolerami, ale także szczegółowo omówisz wszystkie aspekty techniczne, które musisz znać, aby w pełni wykorzystać możliwości tego komponentu. Wyjaśnimy wszystko, od sposobu podłączenia po zarządzanie bibliotekami kodów, dzięki czemu będziesz mógł z łatwością sterować silnikami i serwami.

Co to jest PCA9685 i do czego się go używa?

Wyprowadzenie pinów PCA9685

El PCA9685 to kontroler PWM (modulacja szerokości impulsu) przeznaczony do zarządzania maksymalnie 16 wyjściami, idealny do sterowania oświetleniem LED i serwomotorami. Komunikuje się poprzez magistralę I2C, co oznacza, że ​​do podłączenia do mikrokontrolera takiego jak Arduino czy Raspberry Pi potrzebne są mu jedynie dwa piny. Dzięki zastosowaniu określonych adresów można nawet podłączyć do 62 takich modułów do tej samej magistrali I2C, kontrolując około 992 wyjść PWM. Dzięki temu jest to bardzo wydajna opcja w przypadku projektów wymagających skoordynowanego zarządzania wieloma urządzeniami.

Najbardziej powszechne zastosowanie PCA9685 Znajduje zastosowanie w projektach gdzie potrzebny jest sygnał PWM. Wyraźnym przykładem jest sterowanie serwami, które sterowane są sygnałami PWM. Dodatkowo sterownik charakteryzuje się dokładnością do 12 bity, co pozwala na generowanie bardzo dokładnych sygnałów, z regulowaną częstotliwością do maksymalnie 1600 Hz.

Cechy i zalety PCA9685

Jedna z głównych zalet PCA9685 polega na tym, że odciąża mikrokontroler w zakresie ciągłego generowania sygnałów PWM. Jest to szczególnie przydatne w projektach wymagających sterowania wieloma urządzeniami, gdyż pozwala głównemu procesorowi skupić się na innych zadaniach.

  • 16 niezależnych kanałów: Każdy z 16 kanałów może wysyłać niezależny sygnał PWM, umożliwiając sterowanie urządzeniami takimi jak serwa, silniki i oświetlenie LED.
  • Sterowanie I2C: PCA9685 wykorzystuje interfejs I2C do komunikacji z głównym kontrolerem (Arduino, Raspberry Pi itp.) i do komunikacji potrzebne są tylko dwa kable (SDA i SCL).
  • Wiele modułów na jednej magistrali: Do tej samej magistrali I62C można podłączyć do 9685 modułów PCA2, kontrolując do 992 wyjść PWM.
  • Regulowana częstotliwość: Obsługuje częstotliwości do 1600 Hz, chociaż do typowego sterowania serwomechanizmem używana jest częstotliwość 50-60 Hz.

Połączenie pomiędzy Arduino i PCA9685

Arduino PCA9685

Połączenie pomiędzy Moduł PCA9685 a Arduino jest proste i odbywa się za pomocą pinów I2C (SCL i SDA) oraz pinów zasilania. Poniższa tabela określa typowe połączenia dla różnych modeli Arduino:

Pin PCA9685 Arduino Uno/Starszy brat Arduino Mega Arduino Leonardo
GND GND GND GND
5V 5V 5V 5V
SCL A5 21 3
SDA A4 20 2

W tej konfiguracji piny A4 i A5 lub ich odpowiedniki na odpowiedniej platformie, podłącz do pinów SDA (dane) i SCL (zegar) modułu PCA9685. Dodatkowo ważne jest, aby mieć odpowiedni zewnętrzny zasilacz dla serwomotorów, szczególnie jeśli podłączasz wiele serwomechanizmów, ponieważ Arduino nie zapewnia wystarczającego prądu, aby je prawidłowo napędzać.

Zaleca się użycie A Zasilanie 5V do zasilania serw i upewnij się, że prawidłowo podłączyłeś styki zasilania. Jeśli używasz więcej niż 16 serw, zaleca się również wlutowanie na płytkę kondensatora 1000uF w celu ustabilizowania mocy.

Konfiguracja w kodzie

Aby zarządzać wyjściami PWM urządzenia PCA9685, używana jest biblioteka opracowana przez Adafruit. Można go pobrać z Twoja strona GitHub. Tutaj pokazujemy podstawowy przykład konfiguracji modułu i przeniesienia serwa:

#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); }

Ten prosty kod wykonuje ruch wahliwy na serwie podłączonym do kanału 0, powoli zmieniając go od 0 stopni do 180 stopni. Możesz skorzystać z funkcji ustawPWM() do niezależnego sterowania każdym z wyjść PCA9685.

Przenoszenie kilku serw jednocześnie

Jedna z największych zalet PCA9685 polega na tym, że umożliwia jednoczesne sterowanie wieloma serwami. Oto jak można przenieść wiele serwomotorów do różnych pozycji w ramach tego samego cyklu kodu:

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); }

W tym przypadku definiujemy funkcję o nazwie setServo który jako parametry otrzymuje numer serwa i jego kąt, oblicza odpowiednią szerokość impulsu i przesuwa go w żądane położenie. W ten sposób możesz łatwo kontrolować wiele kanałów.

Jak ustawić limity dla różnych serw

Nie wszystkie serwa mają ten sam zakres wartości dla kątów od 0° do 180°. W niektórych przypadkach konieczne będzie niestandardowe dostosowanie tych wartości. Oto jak możesz dokonać tych ustawień dla różnych serwomechanizmów:

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); }

Kod ten umożliwia ustawienie wartości minimalnych i maksymalnych dla każdego serwa podłączonego do PCA9685, co będzie niezwykle przydatne w przypadku korzystania z serwomechanizmów o różnych zakresach sygnału.

Mając to wszystko na uwadze, masz teraz wszystko, czego potrzebujesz, aby skonfigurować, podłączyć i zakodować swój pierwszy projekt za pomocą PCA9685. Niezależnie od tego, czy pracujesz na robocie o wielu stopniach swobody, czy też potrzebujesz sterować wieloma urządzeniami równolegle, ten moduł pozwoli Ci to zrobić wydajnie i dokładnie.

Niezależnie od tego, czy pracujesz z serwami, czy wyjściami PWM, PCA9685 sprawia, że ​​kontrolowanie do 16 kanałów jest niezwykle łatwe przy użyciu zaledwie dwóch pinów mikrokontrolera. Przy odrobinie doświadczenia i dobrym kodzie można tworzyć bardzo wydajne aplikacje bez obciążania głównego procesora.


Bądź pierwszym który skomentuje

Zostaw swój komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

*

*

  1. Odpowiedzialny za dane: Miguel Ángel Gatón
  2. Cel danych: kontrola spamu, zarządzanie komentarzami.
  3. Legitymacja: Twoja zgoda
  4. Przekazywanie danych: Dane nie będą przekazywane stronom trzecim, z wyjątkiem obowiązku prawnego.
  5. Przechowywanie danych: baza danych hostowana przez Occentus Networks (UE)
  6. Prawa: w dowolnym momencie możesz ograniczyć, odzyskać i usunąć swoje dane.