Драйвер двигателя L9110S

Зачем нужны драйвера двигателей и H-мосты в частности?

Научившись «дрыгать» пинами и зажигать светодиоды фанаты и любители «Ардуино» хотят чего-то большего, чего-то помощнее, например научиться управлять моторами. Напрямую подключить мотор к микроконтроллеру нельзя, так как типовые токи пинов контроллера составляют несколько миллиампер, а у моторов, даже у игрушечных, счет идет на десятки и сотни миллиампер, вплоть до нескольких ампер. Тоже самое с напряжением: микроконтроллер оперирует напряжением до 5 В, а моторы бывают разного вольтажа.

Драйвер двигателя L9110SВ этом обзоре речь идет только о питании коллекторных двигателей постоянного тока, для шаговых двигателей лучше применять специализированные драйвера шаговых двигателей, а для бесколлекторных двигателей имеются свои драйверы, они несовместимы с коллекторными двигателями.

Заметим, что в русскоязычной литературе существует некоторая терминологическая путаница – драйверами двигателей называют как «железные» модули, так и фрагменты кода, функции, отвечающие за работу с этими «железными» драйверами. Мы будем иметь в виду под «драйвером» именно модуль, подключаемый с одной стороны к микроконтроллеру (например, к плате Arduino), с другой стороны — к двигателю. Вот таким «преобразователем» логических сигналов контроллера в выходное напряжение для питания двигателя и является «драйвер» двигателя, и, в частности, наш драйвер на L9110S.

Принцип действия двойного H-моста на основе L9110S

H – мост (читается «аш-мост») – электронный модуль, аналог переключателя, обычно применяется для питания двигателей постоянного тока и шаговых двигателей, хотя для шаговых двигателей обычно применяются более специализированные модули. Обозначается “H”, потому что принципиальная схема H-моста напоминает букву H.

Принцип действия H мостВ «палочке» H включен мотор постоянного тока. Если замкнуть контакты S1 и S4, то мотор будет вращаться в одну сторону, слева будет ноль (S1), справа + напряжения (S4). Если замкнуть контакты S2 и S3, то на правом контакте мотора будет ноль (S3), а на левом + питания (S1), мотор будет вращаться в другую сторону. Мост представляет собой чип L9110 с защитой от сквозных токов: при переключении контакты сначала размыкаются, и только через некоторое время замыкаются другие контакты. На плате стоит два чипа L9110, поэтому одна плата может управлять двумя потребителями постоянного тока: моторами, соленоидами, светодиодами, да чем угодно, или одним двух-обмоточным шаговым двигателем (такие шаговые моторы называются двух-фазными биполярными).

Элементы платы

shema-l9110sПлата небольшая, элементов немного:

  1. Разъем подключения мотора A
  2. Разъем подключения мотора B
  3. Чип H-моста мотора A
  4. Чип H-моста мотора B
  5. Пины подключения питания и управления

Подключение

Мотор А и Мотор В — два выхода для подключения нагрузки, ток не более 0,8 А ;
В-1А — сигнал «Мотор В вперед»;
В-1B — сигнал «Мотор В реверс»;
Земля (GND) — должен быть соединён с землёй микроконтроллера и источника питания двигателя.;
Питание (VCC) — питание двигателя (не более 12 В);
А-1А — сигнал «Мотор А вперед»;
A-1B — сигнал «Мотор А реверс».

 Сигналы на пинах управляют напряжением на выходах для подключения моторов:

signalДля плавного управления выходным напряжением подаем не просто HIGH, а широтно-импульсно модулированный (PWM) сигнал. Все пины ардуино, отмеченные знаком ~, могут давать ШИМ выход командой analogWrite(n,P), где n-номер пина (в Arduino Nano и Uno это 3,5-6 и 9-11, соответственно). При использовании этих пинов для ШИМ сигнала, необходимо задействовать таймеры 0 (пины 5 и 6), таймер 1 (пины 9 и 10) и таймер 2 (пины 3 и 11). Дело в том, что некоторые библиотечные функции могут использовать те же таймеры – тогда будет конфликт.  По большому счету достаточно знать, что пин 3 подключается ко входу A-1B, а пин 5 ко входу A1-A, команда digitalWrite(3,127) подаст 50% напряжения на мотор в прямом направлении.

Пример использования

Управление роботом: тележка с фарой (белый светодиод) и фонарем заднего хода (красный светодиод).

Программа указана ниже и описывает циклическое движение тележки: вперед-остановка-назад-остановка. Все важные шаги в программе прокомментированы.

podklyuchenie-l9110s

Мотор подключен к клеммам MOTOR A, светодиоды подключены к выходу MOTOR B.

Робот едет время TIME вперед, включив белый светодиод. Далее стоит время TIME с горящими наполовину белыми светодиодами. После чего едет назад, включив красные светодиоды. Далее снова стоит время TIME, включив красные, а потом белые светодиоды на половину яркости.

// Драйвер двигателя L9110S
// by Dr.S
// makerplus.ru

// определяем, какие порты будем использовать для управления мотором и светодиодами
#define FORWARD 3
#define BACK 5
#define WHITE_LIGHT 6
#define RED_LIGHT 9
#define LEDOUT 13
#define TIME 5000

unsigned char Forward_Speed = 200;
unsigned char Back_Speed = 160;
unsigned char White_Light = 210;
unsigned char Red_Light = 220;

void setup() {

// объявляем пины управления мостом как выходы:
pinMode(FORWARD, OUTPUT);
pinMode(BACK, OUTPUT);
pinMode(WHITE_LIGHT, OUTPUT);
pinMode(RED_LIGHT, OUTPUT);
pinMode(LEDOUT, OUTPUT);

}

// the loop routine runs over and over again forever:

void loop() {

// Робот едет вперед в течении времени TIME
analogWrite(WHITE_LIGHT, White_Light); // Включить белый светодиод- "фары"
analogWrite(RED_LIGHT, 0);
analogWrite(FORWARD, Forward_Speed); // Робот пошел  вперед
analogWrite(BACK, 0);
delay(  TIME); // и немного подождать
 
// Робот включает "фары" на половину обычной яркости  и стоит 
analogWrite(WHITE_LIGHT, White_Light / 2); // Включить белый светодиод- "фары" как стояночные огни
analogWrite(RED_LIGHT, 0); 
analogWrite(FORWARD, 0); // Робот стоит
analogWrite(BACK, 0);
delay(TIME); // и немного подождать
 
// Робот включает красные светодиоды "заднего хода" и идет назад 
analogWrite(WHITE_LIGHT, 0); // Включить белый светодиод- "фары" как стояночные огни
analogWrite(RED_LIGHT, Red_Light);
analogWrite(FORWARD, 0);
analogWrite(BACK, Back_Speed); // Робот идет назад
delay(  TIME); // и немного подождать
 
// Робот включает попеременно красные и белые светодиоды и стоит
analogWrite(WHITE_LIGHT, 0);
analogWrite(RED_LIGHT, Red_Light / 2); // Включить красный  светодиод  как стояночные огни
analogWrite(FORWARD, 0);
analogWrite(BACK, 0); // Робот стоит
delay(  TIME / 2); // и немного подождать
analogWrite(WHITE_LIGHT, White_Light / 2); // Включить белый светодиод- "фары" как стояночные огни
analogWrite(RED_LIGHT, 0);
delay(  TIME / 2); // и немного подождать

}

Принципиальная схема

принципиальная схема драйвера двигателя L9110S

 

Технические характеристики модуля

  • Два независимых выхода, до 800 мА каждый
  • Максимальная перегрузочная способность 1.2 А
  • Напряжение питания от 2,5 до 12 В
  • Логические уровни совместимы с 3,3 и 5 В логикой
  • Рабочий диапазон 0 °С до 80°С