#29. Подключаем драйвер мотора MX1508 к Arduino.

Модуль двигателя MX1508, рассмотренный в этой статье, рекламируется на Aliexpress как «Двухканальная плата драйвера двигателя постоянного тока L298N, PWM Speed Dual H Bridge Stepper Module», однако присутствует микросхема MX1508 китайского производства. Также отличаются характеристики драйвера MX1508 от L298N. Давайте рассмотрим подробней данный драйвер и разберемся, как его подключить к Arduino и управлять моторами постоянного тока.
При управлении, например, с платой Arduino UNO, можно управлять двумя двигателями, при этом вращать в любом направлении каждый двигатель. Драйвер представляет из себя Н-мост с рабочим током 800 мА и пиковым током 2,5 А, а также, со встроенной системой контроля температуры.

Характеристики драйвера MX1508:
- Напряжение питания модуля 2 — 9,6 В.
- Диаметр монтажного отверстия: 2 мм.
- Входное напряжение сигнала: 1,8- 7 В.
- Ток для одного канала: 0,8 А.
- Пиковый ток: до 2,5 А.
- Ток в режиме ожидания: менее 0,1 мкА.
- Схема защиты от перегрева: встроенная (TSD) с эффектом гистерезиса.
- Размер: 24,7 х 21 х 7 мм.
Общие сведения о драйвере MX1508.
Основной чип модуля — это микросхема MX1508, состоящая из двух H-мостов (H-Bridge), один для выхода A, второй для выхода B, каждый канал рассчитан на 0,8 А с пиком 2,5 А. H-мост широко используется в электронике и служит для изменения вращения двигателя, схема H-моста содержит четыре транзистора (ключа) с двигателем в центре, образуя H-подобную компоновку. Принцип работы прост, при одновременном закрытии двух отдельных транзисторов, изменяется полярность напряжения, приложенного к двигателю. Это позволяет изменять направление вращения двигателя. На рисунке ниже, показана работа H-мостовой схемы.

Управлять двигателем можно низковольтным напряжением, ниже, чем напряжение на плате Arduino. Для управления скоростью используется широтно-импульсная модуляция (PWM).

Модуль MX1508 содержит разъем для подключения питания, два выхода A и B, и разъем управления, с назначением каждого можно ознакомиться ниже:
- Вывод «+» и «-» — питание модуля и двигателей, от 2 до 9,6 В;
- Выводы A1 и A2 — используются для управления направлением вращения двигателя A;
- Выводы B1 и B2 — используются для управления направлением вращения двигателя B;
- Выходы MOTOR A — разъем для двигателя A;
- Выходы MOTOR B — разъем для двигателя B;
Подключение MX1508 к Arduino (коллекторный двигатель).
Для урока понадодиться:
- Arduino UNO R3. Купить можно на AliExpress или в России.
- Драйвер мотора MX1508. Купить можно на AliExpress или в России.
- Мотор-редуктор с колесами. Купить можно на AliExpress или в России.
- Провод DuPont. Купить можно на AliExpress или в России.
- Плата макетная беспаечная 55х82х8.5 мм. Купить можно на AliExpress или в России.
Схема подключения MX1508 к Arduino, и коллекторного двигателя к MX1508.

Первым делом, необходимо подключить источник питания от 2 до 9,6 B к модулю (в примере используется 5 В. от Arduino). Далее, подключаем управляющие провода A1, A2, B1, B2 (встречается маркировка, как на L298: IN1, IN2, IN3, IN1) к цифровым выводам Arduino 10, 11, 5 и 6. Теперь, подключаем двигатели, один к клеммам MOTOR A , а другой к клеммам MOTOR B. Схема подключения приведена ниже.

Теперь подключаем Arduino к компьютеру и загружаем скетч ниже.
const int PinA1 = 5; // (ШИМ) вывод 5 соединен с выводом А1 const int PinA2 = 6; // (ШИМ) вывод 6 соединен с выводом А2 const int PinB1 = 10; // (ШИМ) вывод 10 соединен с выводом (pin) B1 const int PinB2 = 11; //(ШИМ) вывод 11 соединен с выводом (pin)B2 byte speed = 250; // измените это значение (0-255), //чтобы управлять скоростью вращения двигателей void setup() < pinMode(PinA1, OUTPUT); // установите контакты на выход pinMode(PinA2, OUTPUT); pinMode(PinB1, OUTPUT); pinMode(PinB2, OUTPUT); Serial.begin(9600); >void loop() < Serial.println("Avanti"); forward(); delay(2000); STOP(); Serial.println("Indietro"); backward(); delay(2000); STOP(); Serial.println("Sinistra"); left(); delay(2000); STOP(); Serial.println("Destra"); right(); delay(2000); STOP(); >void backward() // Вперед. < analogWrite(PinA1, 0); analogWrite(PinA2, speed); analogWrite(PinB1, 0); analogWrite(PinB2, speed); >void forward() //Назад. < analogWrite(PinA1, speed); analogWrite(PinA2, 0); analogWrite(PinB1, speed); analogWrite(PinB2, 0); >void left() // В левую сторону < analogWrite(PinA1, speed); analogWrite(PinA2, 0); analogWrite(PinB1, 0); analogWrite(PinB2, speed); >void right() //В правую сторону < analogWrite(PinA1, 0); analogWrite(PinA2, speed); analogWrite(PinB1, speed); analogWrite(PinB2, 0); >void STOP() //Стоп
Описание скетча:
Скетч простой, не требует дополнительных библиотек. Первым делом, указываем, к каким выводам подключен модуль.
const int PinA1 = 5; // (ШИМ) вывод 5 соединен с выводом А1 const int PinA2 = 6; // (ШИМ) вывод 6 соединен с выводом А2 const int PinB1 = 10; // (ШИМ) вывод 10 соединен с выводом (pin) B1 const int PinB2 = 11; //(ШИМ) вывод 11 соединен с выводом (pin)B2
Управление скоростью осуществляется с помощью ШИМ, для удобства используем переменную speed, в которой указываем скорость двигателя. Значение «0» — значит остановка, а «255» равносильно напряжению питания, и двигатели крутятся на максимальной скорости.
byte speed = 250; // измените это значение (0-255), //чтобы управлять скоростью вращения двигателей
Далее, мы указываем, что данные выводы используем как выход.
pinMode(PinA1, OUTPUT); // установите контакты на выход pinMode(PinA2, OUTPUT); pinMode(PinB1, OUTPUT); pinMode(PinB2, OUTPUT);
Направление вращения двигателя осуществляется с помощью выводов A1 и A2 — для первого двигателя, B1 и B2 — для второго двигателя, то есть, если подать на вывод A1 — 0B (LOW), а на A2 — 5B (HIGH), двигатель A будет вращаться вперед (так же и для двигателя B). Для вращения назад, необходимо подать на A1 — 5B (HIGH), а на A2 — 0B (LOW), двигатель A будет вращаться назад (так же и для двигателя B). На основании этого напишем небольшие функции, которые позволят вращать оба двигателя вперед, назад, в противоположном направлении, и останавливать вращение обоих двигателей.
void backward() // Вперед. < analogWrite(PinA1, 0); analogWrite(PinA2, speed); analogWrite(PinB1, 0); analogWrite(PinB2, speed); >void forward() //Назад. < analogWrite(PinA1, speed); analogWrite(PinA2, 0); analogWrite(PinB1, speed); analogWrite(PinB2, 0); >void left() // В левую сторону < analogWrite(PinA1, speed); analogWrite(PinA2, 0); analogWrite(PinB1, 0); analogWrite(PinB2, speed); >void right() //В правую сторону < analogWrite(PinA1, 0); analogWrite(PinA2, speed); analogWrite(PinB1, speed); analogWrite(PinB2, 0); >void STOP() //Стоп
Реализуем вывод в монитор порта информацию о направлении вращения двигателя в данный момент.
Serial.println("Avanti"); forward(); delay(2000);

- Собираем Arduino машинку на Motor Shield L293D и ИК пульте.
- Машинка на радиоуправлении. Arduino + nrf24l01 + пульт.
- Самодельная Wifi машинка на NodeMCU. Машина делает дрифт.
Используя драйвер MX1508, собрать данные проекты не составит труда, так как код из проектов выше совместим с драйвером MX1508.

Появились вопросы или предложения, не стесняйся, пиши в комментарии!
Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.
Всем Пока-Пока.
И до встречи в следующем уроке.
Понравилась статья? Поделитесь ею с друзьями:
Как подключить драйвер двигателя к ардуино

Драйвер моторов на базе микросхемы L298N позволяет управлять двумя моторами и светодиодными лентами постоянного тока, либо шаговым двигателем с потребляемым током до 2 Ампер. Далее попробуем подключить и мотор и светодиод.
Чередование разноименных сигналов (высокий логический уровень или низкий) на парах выводов IN1, IN2 и IN3, IN4 задают направление вращения моторов.
Выводы ENABLE A, B (ENA привязан к IN1, IN2. ENB к IN3, IN4) отвечают за раздельное управление каналами. Могут использоваться в двух режимах:
- Условно «активном» режиме, когда ими будет управлять контроллер — высокий логический уровень разрешает вращение моторов, низкий запрещает вне зависимости от состояния выводов «IN». Для регулировки скорости моторов, на «EN» выводы подается ШИМ (PWM) сигнал. (рис.а1)
- Условно «пассивном» режиме, просто притянув выводы «EN» к высокому уровню (+5V). Для этого на плате, рядом с выводами ENA и ENB находятся штырьки соединенные с +5V. Замыкаем выводы с помощью джамперов (рис.а2). В данном режиме мы не сможем регулировать скорость двигателей, они будут всегда вращаться в полную скорость (за то для управления экономится 2 вывода контроллера). Направление вращения будет задаваться по-прежнему, а вот для остановки в данном варианте, состояние выводов будет уже играть роль.Для остановки нужно будет подавать одноименные сигналы на выоды «IN».


Подключение мотора и светодиода к модулю L298N
Вместо одного мотора будем подключать светодиод на 12В (см. видео ниже). Можете также использовать светодиодную ленту, только учтите что модуль при токе более более 2 ампер будет сильно греться.

Скетч
int IN1 = 7; int IN2 = 6; int IN3 = 5; int IN4 = 4; int ENA = 9; //ШИМ выход 1 int ENB = 3; //ШИМ выход 2 int i; int spd = 10; //задержка при изменении скорости, чем меньше тем быстрее void setup() pinMode (ENA, OUTPUT); //ШИМ выход 1 pinMode (IN1, OUTPUT); pinMode (IN2, OUTPUT); pinMode (ENB, OUTPUT); //ШИМ выход 2 pinMode (IN3, OUTPUT); pinMode (IN4, OUTPUT); digitalWrite (IN3, LOW); //полярность для светодиода "-" digitalWrite (IN4, HIGH); //полярность для светодиода "+" > void loop() digitalWrite (IN2, HIGH); //полярность для мотора "-" digitalWrite (IN1, LOW); //полярность для мотора "+" for (i = 0; i 250; i++) //цикл разгона analogWrite(ENA, i); analogWrite(ENB, i); delay(spd); > delay(2000); //ждем 2 сек for (i = 250; i > 0; i--) //цикл торможения analogWrite(ENA, i); analogWrite(ENB, i); delay(spd); > analogWrite (ENA, 0); analogWrite (ENB, 0); delay(500); digitalWrite (IN1, HIGH); digitalWrite (IN2, LOW); for (i = 0; i 250; i++) analogWrite(ENA, i); analogWrite(ENB, i); delay(spd); > delay(2000); for (i = 250; i > 0; i--) analogWrite(ENA, i); analogWrite(ENB, i); delay(spd); > analogWrite (ENA, 0); analogWrite (ENB, 0); delay(3000); >
Драйвер шагового двигателя A4988. Подключения к Arduino и пример использования
Шаговые двигатели представляют собой электромеханические устройства, задачей которых является преобразование электрических импульсов в перемещение вала двигателя на определенный угол. Достоинствами шаговых двигателей по сравнению с простыми являются:
- Высокая точность позиционирования и повторяемости — качественные ШД имеют точность не хуже 2,5 % от величины шага, при этом данная ошибка не накапливается при последующих шагах;
- Шаговый двигатель может быстро стартовать, останавливаться и выполнять реверс;
- Четкая взаимосвязь угла поворота ротора от количества входных импульсов (в штатных режимах работы) позволяет выполнять позиционирование без применения обратной связи;
- Шаговые двигатели обеспечивают получение сверхнизких скоростей вращения вала без использования редуктора;
- Шаговые двигатели работают в широком диапазоне скоростей, поскольку. скорость напрямую зависит от количества входных импульсов.
Шаговые двигатели применяются там, где требуется высокая точность перемещений. Примеры использования – принтеры, факсы и копировальные машины, станки с ЧПУ, 3D-принтеры. Для управления шаговыми двигателями используют специальные устройства – драйверы шаговых двигателей. Популярный драйвер шагового двигателя А4988 (рис. 1) работает от напряжения 8 — 35 В и может обеспечить ток до 1 А на фазу без радиатора (и до 2 A с радиатором). Модуль A4988 имеет защиту от перегрузки и перегрева. Одним из параметров шаговых двигателей является количество шагов на один оборот 360°. Например, для шаговых двигателей Nema17 это 200 шагов на оборот, т.е 1 шаг равен 1.8°. Драйвер A4988 позволяет увеличить это значение за счёт возможности управления промежуточными шагами и имеет пять режимов микрошага (1(полный), 1/2, 1/4, 1/8 и 1/16).


Технические характеристики A4988
- напряжения питания: 8-35 В
- режим микрошага: 1, 1/2, 1/4, 1/8, 1/16
- напряжение логики: 3-5.5 В
- защита от перегрева
- максимальный ток на фазу: — 1 А без радиатора; — 2 А с радиатором
- размер: 20 х 15 мм
- без радиатора: 2 г
Назначение контактов драйвера A4988
- ENABLE – включение/выключение драйвера
- MS1, MS2, MS3 – контакты для установки микрошага
- RESET — cброс микросхемы
- STEP — генерация импульсов для движения двигателей (каждый импульс – шаг), можно регулировать скорость двигателя
- DIR – установка направление вращения
- VMOT – питание для двигателя (8 – 35 В)
- GND – общий
- 2B, 2A, 1A, 1B – для подключения обмоток двигателя
- VDD – питание микросхемы (3.5 –5В)

Выводы драйвера A4988
Значение микрошага устанавливается комбинацией сигналов на входах MS1, MS2, и MS3. Есть пять вариантов дробления шага
| MS1 | MS1 | MS1 | Дробление шага |
| 0 | 0 | 0 | 1 |
| 1 | 0 | 0 | 1/2 |
| 0 | 1 | 0 | 1/4 |
| 1 | 1 | 0 | 1/8 |
| 1 | 1 | 1 | 1/16 |
Для работы в режиме микрошага необходим слабый ток. На модуле A4988 поддерживает тока можно ограничить находящимся на плате потенциометром. Драйвер очень чувствителен к скачкам напряжения по питанию двигателя, поэтому производитель рекомендует устанавливать электролитический конденсатор большой емкости по питанию VMOT для сглаживания скачков.
Внимание ! — Подключение или отключение шагового двигателя при включённом драйвере может привести выходу двигателя из строя.
Подключение драйвера к Arduino

Схема подключения A4988 к плате Arduino
Схема подключения драйвера A4988 для управления биполярным шаговым двигателем показана на рисунке выше. Вывод RESET подключен к выводу SLEEP, чтобы на нем был высокий уровень HIGH. Загрузим на плату Arduino скетч из примера №1, который управляет движением биполярного шагового двигателя с постоянной скоростью на один оборот в одну сторону, затем в другую, и далее в цикле.
// пины для подключения контактов STEP, DIR #define PIN_STEP 3 #define PIN_DIR 2 // количество шагов на 1 оборот #define STEP_ROUND 200 // скорость двигателя #define SPEED 10 void setup() < // режим для STEP и DIR как OUTPUT pinMode(PIN_STEP, OUTPUT); pinMode(PIN_DIR, OUTPUT); // начальные значения digitalWrite(PIN_STEP, 1); digitalWrite(PIN_DIR, 0); >void loop() < // направление вращения digitalWrite(PIN_DIR, HIGH); // сделать 1 оборот for(int j = 0; j < STEP_ROUND; j++) < digitalWrite(PIN_STEP, HIGH); delay(SPEED); digitalWrite(PIN_STEP, LOW); delay(SPEED); >// изменить направление вращения digitalWrite(PIN_DIR, HIGH); // сделать 1 оборот for(int j = 0; j < STEP_ROUND; j++) < digitalWrite(PIN_STEP, HIGH); delay(SPEED); digitalWrite(PIN_STEP, LOW); delay(SPEED); >>
Если после загрузки скетча не происходит движения двигателя, проверьте правильность подключения обмоток к выводам драйвера A4988. К выводам 2B и 2A (1A и 1B) подключаются провода двигателя, которые «прозваниваются» тестером.
Второй пример использования
В качестве еще одного примера использования рассмотрим управление дроблением шага и направлением вращения шагового двигателя с платы Arduino. для этого нам потребуются следующие компоненты:
- Плата Arduino Uno -1;
- Драйвер A4988 — 1;
- Шаговый двигатель NEMA17 — 1;
- Потенциометр 10 кОм — 1;
- Кнопка — 1;
- Переключатель 2-х позиционный — 1;
- Резистор 10 кОм – 3;
- Провода MF — 20
Соединение деталей по схеме на рисунке ниже

Схема подключения для управления скоростью и направлением движения
Приступим к написанию скетча. Нажатие на кнопку включает/выключает двигатель, подавая сигнал LOW/HIGH на вход ENABLE драйвера A4988. С помощью переключателя выбираем направление вращения двигателя (сигнал с переключателя подается напрямую на вход DIR драйвера A4988). C помощью потенциометра мы выбираем один из режимов микрошага. Содержимое скетча представлено в примере кода №2. двигателя с постоянной скоростью на один оборот в одну сторону, затем в другую, и далее в цикле.
/// пины для подключения контактов STEP, DIR const int STEP 3 int DIR 2 // для регулировки скорости - пин потенциометра #define POT A0 // для кнопки #define BUTTON 9 // для включения/выключения #define EN 8 // количество шагов на 1 оборот #define ROUND 200 // скорость двигателя #define SPEED 10 // массив пинов для MS1,MS2,MS3 int pins_steps[]=; int steps[5][3]=< , // 1 , // 1/2 , // 1/4 , // 1/8 // 1/16 >; // для кнопки int prevB=0; int tekB=0; boolean movement=false; void setup() < // режим для выводов STEP и DIR как pinModeSTEP, OUTPUT); pinMode(DIR, OUTPUT); // начальные значения digitalWrite(STEP, 1); digitalWrite(DIR, 0); // режим для enable pinMode(EN, OUTPUT); // не разрешать digitalWrite(EN, 1); // для MS1,MS2,MS3 for(int i=0;i<3;i++) < pinMode(pins_steps[i], OUTPUT); >> void loop() < // получить режим микрошага digitalWrite(DIR, 1); int mode=map(analogRead(POT),0,1024,0,5); // установить for(int i=0;i<3;i++) < digitalWrite(pins_steps[i], steps[mode][i]); >// сделать 1 оборот if(movement==true) < digitalWrite(STEP, 1); delay(SPEED); digitalWrite(STEP, 0); delay(SPEED); >// проверка нажатия кнопки tekB = debounce(prevB, BUTTON); if (prevB == 0 && tekB == 1) < movement=!movement; digitalWrite(EN,!movement); >prevB = tekB; > // проверка на дребезг int debounce(int prev,int pin) < int tek = digitalRead(pin); if (prev != tek) < delay(5); tek = digitalRead(pin); return tek; >>
Как подключить драйвер двигателя к ардуино
Контроллер — это «мозг» вашего проекта, в который записывается исполняемая программа. Он считывет показания с датчиков и управляет устройствами. Шилд — это плата расширения, в которую встроена периферия.
Семейство Arduino
Шилды Arduino
Raspberry Pi
STM8 и STM32
ESP8266 и ESP32
Платы расширения и модули. Они наделят ваш проект такими возможностями, как управление двигателями, передача данных через Интернет, беспроводная связь, работа с промышленным оборудованием и т. д.
Беспроводная связь
Драйверы двигателя
Конвертеры
Программаторы
Плееры и звук
RFID и NFC
Готовые наборы
Электронные конструкторы и наборы робототехники для начинающих любителей электроники, робототехники и программирования.
Наборы Arduino
Наборы Micro:bit
Сборные модели
Конструкторы
Умный дом — коплекс устройств для домашней автоматизации. В данной категории представлены беспроводные модули, датчики температуры, открытия окон, движения и др.
Xiaomi Smart Home
Системы полива
Светодиодные ленты
Генераторы сигналов
Инфакрасные
Кнопки и стики
Магнитное поле
Освещение и цвет
Прикосновение
Расстояние
Температура
Ток и напряжение
Дополните ваш проект средством вывода информации в наглядном виде. В этом разделе представлены дисплеи, светодиодные индикаторы и матрицы.
LCD дисплеи
OLED дисплеи
TFT дисплеи
LED индикаторы
LED матрицы
Макетные платы
Макетная плата — это то, что требуется для быстрой сборки проекта «на коленке», перед запуском в серию. В разделе представлены беспаечные макетные платы, а также макетки под пайку самых разных размеров.
Беспаечные
Питание макетных плат
Провода и разъемы
Если вам требуется соединить ваш контроллер с периферийным устройством — тогда вам в этот раздел. Здесь представлены наборы проводов и разъёмов, кейсы под аккумуляторы и батарейки.
USB кабели
Радиодетали
Иногда функциональность вашего проекта не удаётся реализовать полностью, используя только готовые модули. И тогда на помощь приходят проверенные временем радиодетали: микросхемы, резисторы, конденсаторы.
Конденсаторы
Микросхемы
Боксы для хранения
Потенциометры
Транзисторы
Светодиоды и ленты
Все механические части, необходимые для сборки роботизированных платформ: колёса, двигатели, сервоприводы, наборы крепежа и даже готовые платформы.
Инструменты
Бокорезы, кусачки, припой, мультиметры и прочие вещи, без которых собирать электронный проект просто невозможно.
Кусачки и плоског.
Мультиметры
Цанговые патроны
Элементы питания
Подача питания — тот момент, с которого запускается ваше готовое устройство. Всё, что для этого потребуется, вы найдёте в этом разделе.
Блоки питания
Переходники
Солнечные батареи
Зарядные устройства
Аккумуляторы
Повышающие модули
Понижающие модули
+7(924)303-61-26
(Пн-Вс с 10:00 до 20:00)

КОНТАКТЫ

ВВЕРХ
- Главная
- Список новостей
- Драйвер L298N. Подключение к Arduino.
Драйвер двигателей L298N.
Подключение к Arduino.


Motor Shield разработан на базе микросхемы L298N. Позволяет управлять двумя моторами постоянного тока, либо одним шаговым двигателем. Максимальный потребляемый ток не должен превышать 2 Ампера.

В отличие от известной микросхемы L293D, в более мощный драйвер L298N не встроены защитные диоды. Их необходимо устанавливать в обвязку микросхемы дополнительно. На обозреваемом модуле мы можем увидеть эти диоды (4 штуки слева и 4 справа от микросхемы).
По выполняемым функциям L298N и L293D схожи чуть более чем полностью. Имеются те же управляющие выводы – IN1 и IN2, IN3 и IN4, ENA и ENB. Чередование сигналов разного уровня (высокий и низкий логический уровень) на парах выводов задаёт направление вращения моторов.
Выводы ENA (привязан к IN1 и IN2) и ENB (привязан к IN3 и IN4) отвечают за раздельное управление каналами. Могут использоваться в двух режимах:
1. Активный режим. Управление возлагается на контроллер (рис.а1). Высокий логический уровень разрешает вращение моторов, низкий запрещает, при этом уровни сигнала на выводах “IN” не имеет значения. Подавая на выводы “EN” ШИМ (PWM) сигнал, можно управлять скоростью вращения моторов.
2. Пассивный режим. Подключение выводов “EN” к высокому уровню (+5 Вольт). Для этого на плате с помощью джамперов замыкаем штырьки +5V и EN, как показано на рис.а2. В таком режиме мы уже не сможем регулировать скорость двигателей, они всегда будут работать на полной скорости. Зато мы экономим два вывода микроконтроллера. Направление вращение по-прежнему задаётся состоянием выводов “IN”. А вот чтобы остановить двигатель, на парные выводы “IN” подаём сигнал одного уровня. В примерах программного кода в конце статьи все эти моменты подробно пояснены в комментариях.

Разъём для подачи питания и работа стабилизатора.
Подключение моторов к модулю L298N

В первом примере рассмотрим подключение одного мотора без регулировки скорости.

Программный код:
int IN3 = 5; // Input3 подключен к выводу 5 int IN4 = 4; void setup() < pinMode (IN4, OUTPUT); pinMode (IN3, OUTPUT); >void loop() < // На пару выводов "IN" поданы разноименные сигналы, мотор вращается digitalWrite (IN4, HIGH); digitalWrite (IN3, LOW); delay(4000); // На пару выводов "IN" поданы одноименные сигналы, мотор не вращается digitalWrite (IN4, LOW); delay(500); // На пару выводов "IN" поданы разноименные (и уже противоположные относительно первого случая) сигналы, мотор вращается // относительно первого случая) сигналы, мотор вращается в другую сторону digitalWrite (IN3, HIGH); delay(4000); // Снова на выводах "IN" появились одноименные сигналы, мотор не вращается digitalWrite (IN3, LOW); delay(5000); >
Во втором примере подсоединим ENB к выводу ШИМ (D3). Таким образом мы задействуем возможность драйвера управлять скоростью, меняя скважность ШИМ сигнала. Значение скважности устанавливается функцией analogWrite(pin, ЗНАЧ), где ЗНАЧ изменяется от 0 до 255, прямо пропорционально скважности сигнала. В скетче подобраны четыре значения, при которых двигатель стартует с низких оборотов, набирает средние, затем высокие и останавливается.

Программный код:
int IN3 = 5; // Input3 подключен к выводу 5 int IN4 = 4; int ENB = 3; void setup() < pinMode (ENB, OUTPUT); pinMode (IN3, OUTPUT); pinMode (IN4, OUTPUT); >void loop() < // На пару выводов "IN" поданы разноименные сигналы, мотор готов к вращению digitalWrite (IN3, HIGH); digitalWrite (IN4, LOW); // подаем на вывод ENB управляющий ШИМ сигнал analogWrite(ENB,55); delay(2000); analogWrite(ENB,105); delay(2000); analogWrite(ENB,255); delay(2000); // Останавливаем мотор, подав на вывод ENB сигнал низкого уровня. // Состояние выводов "IN" роли не играет. analogWrite(ENB,0); delay(5000); >
Третий пример предлагает подключить два двигателя с регулировкой скорости. В приведённом ниже скетче два мотора будут вращаться с плавным набором скорости

Программный код:
int IN1 = 5; // Input1 подключен к выводу 5 int IN2 = 4; int IN3 = 3; int IN4 = 2; int ENA = 9; int ENB = 3; int i; void setup() < pinMode (EN1, OUTPUT); pinMode (IN1, OUTPUT); pinMode (IN2, OUTPUT); pinMode (EN2, OUTPUT); pinMode (IN4, OUTPUT); pinMode (IN3, OUTPUT); >void loop() < digitalWrite (IN2, HIGH); digitalWrite (IN1, LOW); digitalWrite (IN4, HIGH); digitalWrite (IN3, LOW); for (i = 50; i analogWrite (EN1, 0); analogWrite (EN2, 0); delay(500); digitalWrite (IN1, HIGH); digitalWrite (IN2, LOW); digitalWrite (IN3, HIGH); digitalWrite (IN4, LOW); for (i = 50; i analogWrite (EN1, 0); analogWrite (EN2, 0); delay(8000); >
Ещё немного информации о разгоне двигателей с помощью выводов ENABLE. При старте двигатель потребляет ток в среднем в 4-6 раз больше номинального, а при резком реверсе ещё больше. Такой скачок можно снизить или вообще убрать, если разгонять двигатель плавно в течение какого-то промежутка времени. В приведённом выше скетче как раз продемонстрирован такой подход.