Модулът PCA9685 контролер за Arduino и други платформи е широко използвано решение, когато трябва да управлявате няколко устройства, които работят с PWM сигнали. Въпреки че първоначално е проектиран да управлява светодиоди, неговата гъвкавост му позволява да бъде и честа опция за управление на серво. Този чип е изключително популярен в проекти за роботика и автоматизация заради способността си да контролира множество устройства с прецизност и простота.
Тази статия не само ще ви покаже как да използвате PCA9685 в комбинация с Arduino и други микроконтролери, но също така ще опише подробно всеки от техническите аспекти, които трябва да знаете, за да извлечете максимума от този компонент. Ще ви обясним всичко - от това как да го свържете до това как да управлявате библиотеки с кодове, така че да можете да управлявате вашите двигатели и сервомотори с пълна лекота.
Какво представлява PCA9685 и за какво се използва?
El PCA9685 е PWM (Pulse Width Modulation) контролер, предназначен да управлява до 16 изхода, идеален за управление на LED светлини и серво мотори. Той комуникира чрез I2C шина, което означава, че се нуждае само от два пина, за да се свърже с микроконтролер като Arduino или Raspberry Pi. Чрез използването на специфични адреси можете дори да свържете до 62 от тези модули към една и съща I2C шина, контролирайки около 992 PWM изхода. Това го прави много мощна опция за проекти, които изискват управление на много устройства по координиран начин.
Най-широко разпространеното използване на PCA9685 В проекти е необходим ШИМ сигнал. Ярък пример е управлението на серво, които се управляват от PWM сигнали. Освен това контролерът има точност от 12 бита, което му позволява да генерира много фини сигнали, с регулируема честота до максимум 1600 Hz.
Характеристики и предимства на PCA9685
Едно от основните предимства на PCA9685 е, че премахва тежестта от микроконтролера по отношение на постоянното генериране на PWM сигнали. Това е особено полезно в проекти, които включват управление на много устройства, тъй като позволява на основния процесор да се съсредоточи върху други задачи.
- 16 независими канала: Всеки от 16-те канала може да извежда независим PWM сигнал, което ви позволява да контролирате устройства като серво, двигатели и LED светлини.
- I2C контрол: PCA9685 използва I2C интерфейс за комуникация с главния контролер (Arduino, Raspberry Pi и т.н.) и изисква само два кабела за комуникация (SDA и SCL).
- Множество модули на една шина: До 62 PCA9685 модула могат да бъдат свързани към една и съща I2C шина, контролирайки до 992 PWM изхода.
- Регулируема честота: Поддържа честоти до 1600 Hz, въпреки че честота от 50-60 Hz се използва за типично серво управление.
Връзка между Arduino и PCA9685
Връзката между PCA9685 модул и Arduino е проста и се прави с помощта на I2C щифтовете (SCL и SDA) и захранващите щифтове. Следващата таблица определя типични връзки за различни модели Arduino:
Пин PCA9685 | Arduino Uno/По-големият брат | Мега Ардуино | Ардуино Леонардо |
---|---|---|---|
GND | GND | GND | GND |
5V | 5V | 5V | 5V |
SCL | A5 | 21 | 3 |
S.D.A. | A4 | 20 | 2 |
В тази конфигурация щифтовете A4 и A5 или техни еквиваленти на съответната платформа, свържете се към щифтовете SDA (данни) и SCL (часовник) на модула PCA9685. Освен това е важно да имате подходящо външно захранване за сервомоторите, особено ако свързвате множество серво, тъй като Arduino не осигурява достатъчно ток, за да ги управлява правилно.
Препоръчително е да използвате a 5V захранване за захранване на сервомоторите и се уверете, че сте свързали правилно захранващите щифтове. Ако използвате повече от 16 серво, също така се препоръчва да запоите кондензатор 1000uF на платката, за да стабилизирате захранването.
Конфигурация в код
За да управлявате PWM изходите на PCA9685, използва се библиотека, разработена от Adafruit. Можете да го изтеглите от вашата страница в GitHub. Тук ви показваме основен пример за конфигуриране на модула и преместване на серво:
#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); }
Този прост код извършва движение на завъртане на сервото, свързано към канал 0, като го извежда от 0 градуса до 180 градуса бавно. Можете да използвате функцията setPWM() за управление на всеки от PCA9685 изходите независимо.
Преместване на няколко сервомеханизма едновременно
Едно от големите предимства на PCA9685 е, че ви позволява да управлявате множество сервомеханизми едновременно. Ето как можете да преместите множество сервомотори на различни позиции в рамките на един и същ кодов цикъл:
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); }
В този случай ние дефинираме функция, наречена setServo който получава серво числото и неговия ъгъл като параметри, като изчислява подходящата ширина на импулса и го премества до желаната позиция. По този начин можете лесно да контролирате множество канали.
Как да зададете ограничения за различни сервомеханизми
Не всички сервоуреди имат еднакъв диапазон от стойности за ъгли от 0° до 180°. В някои случаи ще трябва да коригирате тези стойности по избор. Ето как можете да направите тези настройки за различни сервосистеми:
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); }
Този код ви позволява да регулирате минималните и максималните стойности за всяко серво, свързано към PCA9685, което ще бъде изключително полезно, ако използвате серво с различни диапазони на сигнала.
Имайки предвид всичко това, сега имате всичко необходимо, за да настроите, свържете и кодирате първия си проект с помощта на PCA9685. Независимо дали работите върху робот с множество степени на свобода или трябва да управлявате много устройства паралелно, този модул ще ви позволи да го направите ефективно и точно.
Независимо дали работите със серво или PWM изходи, PCA9685 прави супер лесно управлението на до 16 канала, като използвате само два пина на вашия микроконтролер. С малко опит и добър код можете да създадете много мощни приложения, без да претоварвате основния процесор.