Драйвер двигателей L9110S: принцип работы и подключение

Модуль на двух микросхемах L9110 управляет двумя коллекторными моторами или другой нагрузкой постоянного тока. Устройство, выводы, ШИМ и пример.
Зачем нужен драйвер
Подключить мотор прямо к выводам микроконтроллера нельзя. Вывод рассчитан на ток в несколько миллиампер, тогда как даже игрушечный моторчик потребляет десятки и сотни миллиампер, а иногда и несколько ампер. Не совпадает и напряжение: контроллер работает с уровнями до 5 В, а моторы бывают рассчитаны на разное напряжение.
Драйвер — это модуль, который включается между контроллером и двигателем и преобразует логические сигналы в напряжение питания мотора. Речь здесь идёт о коллекторных двигателях постоянного тока. Для шаговых моторов обычно берут специализированные драйверы, а у бесколлекторных они свои и с коллекторными несовместимы.
Как работает H-мост
H-мост — электронный аналог переключателя, названный так потому, что его схема похожа на букву H: четыре ключа по углам, мотор в перемычке.

Если замкнуть одну диагональную пару ключей (S1 и S4), ток пойдёт через мотор в одном направлении, если другую (S2 и S3) — в противоположном, и вал начнёт вращаться в обратную сторону. Микросхема L9110 реализует такой мост и защищена от сквозных токов: при переключении ключи сначала размыкаются, и только через некоторое время замыкается другая пара.
На плате L9110S установлены две микросхемы, поэтому она обслуживает две независимые нагрузки постоянного тока — моторы, соленоиды, светодиоды — либо один двухобмоточный (двухфазный биполярный) шаговый двигатель.
Элементы платы и характеристики

Модуль небольшой: два разъёма для нагрузки (мотор A и мотор B), две микросхемы H-моста и гребёнка контактов питания и управления.
| Количество выходов | 2 независимых |
| Ток на выход | до 800 мА |
| Максимальная перегрузочная способность | 1,2 А |
| Напряжение питания | от 2,5 до 12 В |
| Логические уровни | совместимы с 3,3 и 5 В |
| Рабочая температура | от 0 до 80 °C |
Назначение контактов
- Мотор A и Мотор B — выходы для нагрузки, ток не более 0,8 А;
- A-1A — сигнал «мотор A вперёд»;
- A-1B — сигнал «мотор A реверс»;
- B-1A — сигнал «мотор B вперёд»;
- B-1B — сигнал «мотор B реверс»;
- VCC — питание двигателя, не более 12 В;
- GND — земля; её соединяют и с землёй микроконтроллера, и с землёй источника питания двигателя.
Сочетание уровней на паре управляющих входов определяет напряжение на соответствующем выходе.

Плавное управление через ШИМ
Чтобы регулировать скорость, на вход подают не постоянный высокий уровень, а широтно-импульсный сигнал. На Arduino его формирует команда analogWrite(n, P) на выводах, отмеченных значком «~»: у Nano и Uno это 3, 5, 6, 9, 10 и 11. Значение 127 соответствует примерно половине напряжения на моторе.
Эти выводы связаны с аппаратными таймерами: 5 и 6 — с таймером 0, 9 и 10 — с таймером 1, 3 и 11 — с таймером 2. Некоторые библиотечные функции используют те же таймеры, и тогда возникает конфликт, что стоит учитывать при выборе выводов.
Пример: тележка с фарами
В качестве примера в источнике приведён робот-тележка с белым светодиодом-фарой и красным фонарём заднего хода. Мотор подключён к клеммам MOTOR A, светодиоды — к выходу MOTOR B.

В скетче пины 3 и 5 управляют движением вперёд и назад, пины 6 и 9 — белым и красным светодиодами. Все они объявлены выходами, а скорость и яркость заданы числами для analogWrite: 200 для хода вперёд, 160 для заднего хода. Длительность каждого этапа определяется константой TIME, равной 5000 мс.
Цикл состоит из четырёх фаз:
- движение вперёд с включённой белой фарой;
- остановка, фара горит вполовину яркости, как стояночный огонь;
- движение назад с красным фонарём;
- остановка: половину времени горит красный светодиод на половине яркости, затем столько же — белый.
При переходе между фазами на оба входа мотора подаётся ноль, поэтому направление никогда не меняется без промежуточной остановки.