Arduino и TLC5940: управляем большим количеством сервомоторов

Плата Arduino, очень популярная среди радиолюбителей и энтузиастов в области электроники, имеет достаточно широкие возможности в плане управления различными исполнительными механизмами и контроля их состояния. Arduino довольно часто применяют в проектах, связанных с робототехникой, где этой плате помимо контроля состояния датчиков и обработки логики действия объекта поручается управление различными электроприводами, сервомоторами, коллекторными двигателями и т.п. Но у большинства вариаций Arduino (Arduino UNO, Arduino Nano, Arduino Micro, Arduino Pro Mini) имеется одна небольшая проблемка. Они не располагают большим числом линий ввода/вывода, например, как у Arduino Mega, поэтому количество подключаемых к ним управляемых устройств весьма ограничено. Но если необходимо подключить к Arduino больше устройств, чем это позволяют линии ввода/вывода, то можно воспользоваться специальной микросхемой TLC5940, расширяющей возможности управления широтно-модулируемым сигналом (ШИМ).

Микросхема TLC5940 представляет собой 16-канальный драйвер ШИМ, предназначенный главным образом для работы с большим количеством светодиодов, светодиодными лентами и светодиодными матрицами.

https://alashed-media.s3.eu-north-1.amazonaws.com/wiki/digitrode/251-arduino-i-tlc5940-upravlyaem-bolshim-kolichestvom-servomotorov/images/arduino-i-tlc5940-upravlyaem-bolshim-kolichestvom-servomotorov-1.jpg

Но, поскольку Tlc5940 просто ШИМ-драйвер, то без проблем можно задействовать эту микросхему для управления серводвигателями в количестве до 16 штук. Это может быть полезно, например, при создании робота-гексапода или любого другого механизма, где требуется большое количество приводов, управляемых от одной платы.

Документацию на микросхему 16-канального ШИМ-драйвера Tlc5940 можно взять здесь.

На рисунке, представленном ниже, показано расположение выводов микросхемы Tlc5940 следующая.

https://alashed-media.s3.eu-north-1.amazonaws.com/wiki/digitrode/251-arduino-i-tlc5940-upravlyaem-bolshim-kolichestvom-servomotorov/images/arduino-i-tlc5940-upravlyaem-bolshim-kolichestvom-servomotorov-2.jpg

Выводы out0 – out15 могут быть использованы для подключения сервоприводов. В данном примере мы задействуем пять сервомоторов, выделив для них выводы out0 – out4.

Управлять двигателями будем с помощью платы Arduino Uno. Для работы с Tlc5940 для Arduino имеется специальная библиотека, которую можно найти здесь. Она существенно упрощает взаимодействие с драйвером.

Ниже показано изображение, которое представляет собой схему подключения микросхемы 16-канального ШИМ-драйвера Tlc5940 к сервоприводам и Arduino.

https://alashed-media.s3.eu-north-1.amazonaws.com/wiki/digitrode/251-arduino-i-tlc5940-upravlyaem-bolshim-kolichestvom-servomotorov/images/arduino-i-tlc5940-upravlyaem-bolshim-kolichestvom-servomotorov-3.jpg

Здесь используются резисторы номиналом 2.2 КОм.

Код для управления сервомоторами с помощью Arduino:

#include "Tlc5940.h"
#include "tlc_servos.h"
void setup()
{
  tlc_initServos();
}
void loop()
{
  int i;

  for (i = 1;i <= 5; i++) {
    tlc_setServo(i, 0);
    Tlc.update();
    delay(300);
    tlc_setServo(i, 180);
    Tlc.update();
    delay(300);
  }

}