Обзор motor shield l293d

Если задумались спроектировать робота, первым делом необходимо научится управлять различными двигателями, это может быть и двигатель постоянного тока или сервопривод. Один из самых простых и недорогих способов это воспользоваться Motor Shield на базе L293D, который можно легко установить на плату Arduino UNO.
Технические параметры
► Напряжение питания двигателей: 5 — 36 В
► Напряжение питания платы: 5 В
► Допустимый ток нагрузки: 600 мА на канал
► Максимальный (пиковый) ток нагрузки: 1,2 А на канал
► Размер платы: 70х54х20 мм
Общие сведения о L293D
Motor shield построен на микросхеме L293D, состоящая из двух H-мост (H-Bridge), с помощью которых можно управлять двумя постоянными двигателями или одним шаговым двигателем. Каждый канал рассчитан на 0.6 А с пиком 1.2 А. Так как на shield установлено две микросхемы L293D, можно управлять сразу четырьмя двигателями постоянного тока, это позволяет использовать данный shield в разработке робот платформ. Так же, на shield установлена микросхема 74HC595, которая расширяет 4 цифровых контакта Arduino до 8 управляющих контактов двух микросхем L293D.

Питание Motor shield L293D:
► Общий источник питания для Arduino и двигателей (максимальное напряжение 12 В) — можно использовать один источник питания, используется разъем DC на Arduino UNO или 2-х контактный разъем на shield «EXT_PWR«, так же необходимо установить перемычку «PWR«.
► Раздельный источник питания — рекомендуется отдельно питать Arduino и shield, для этого Arduino подключаем к USB, а двигатели подключаем к источнику постоянного тока, используя разъем » EXT_PWR». Необходимо убрать перемычку перемычку «PWR«.
Внимание! Нельзя подавать питание на «EXT_PWR» выше 12 В при установленной перемычке «PWR».
Выходные контакты двух микросхем L293D выведены по бокам shield с помощью 5-ти контактных винтовых клемм, а именно М1 , М2 , М3 и М4. К этим контактам подключается четыре двигателя постоянного тока и два шаговых двигателя.
Так же, на shield выведен два 3-х контактных разъема, которым можно подключить два сервопривода.
Неиспользуемые контакты:
Цифровые контакты D2 и D13 и аналоговые контакты A0-A5 не используются.

Подключение к Arduino двигателя постоянного тока с помощью L293D
Необходимые детали:
► Arduino UNO R3 x 1 шт.
► Блок питания 12В, 2А x 1 шт.
► Кабель USB 2.0 A-B x 1 шт.
► Двигатель постоянного тока x 21шт.
► Motor shield L293D
Подключение:
Устанавливаем shield сверху Arduino, далее подключаем источник питания к клеммам «EXT_PWR«, в примере используется источник питания на 9 В. Теперь подключаем двигатели к клеммам M1, M2, M3 или M4. В примере подключаем к М4.

Установка библиотеки:
Для удобной работы с Motor shield L293D необходимо установить библиотеку «AFMotor.h». Заходим в Arduino IDE, открываем вкладку «Скетч» -> «Подключить библиотеку» и нажимает «Управлять библиотеками…«

Откроется новое окно «Менеджер библиотек«, в окне поиска вводим «Adafruit Motor Shield» и устанавливаем библиотеку.

Программа:
В данном скетче показано, как управлять скоростью и направлением движении двигателями постоянного тока.
/*
Тестировалось на Arduino IDE 1.8.5
Дата тестирования 22.05.2020г.
*/
#include <AFMotor.h> // Подключаем библиотеку AFMotor
AF_DCMotor motor(4); // Указываем какому порту подключен двигатель (1 - 4)
void setup()
{
motor.setSpeed(200); // Начальная скорость вращения
motor.run(RELEASE); // Останавливаем двигатель
}
void loop()
{
uint8_t i; // Создаем переменную "i"
motor.run(FORWARD); // Вращение двигателя вперед
for (i=0; i<255; i++) // Ускоряем двигатель от 0 до 255
{
motor.setSpeed(i); // Отправка скорости
delay(10); // Пауза
}
for (i=255; i!=0; i--) // Замедляем двигатель от 255 до 0
{
motor.setSpeed(i); // Отправка скорости
delay(10); // Пауза
}
motor.run(BACKWARD); // Вращение двигателя назад
for (i=0; i<255; i++) // Ускоряем двигатель от 0 до 255
{
motor.setSpeed(i); // Отправка скорости
delay(10); // Пауза
}
for (i=255; i!=0; i--) // Замедляем двигатель от 255 до 0
{
motor.setSpeed(i); // Отправка скорости
delay(10); // Пауза
}
motor.run(RELEASE); // Останавливаем двигатель
delay(1000); // Пауза
}
Описание скетча::
Скетч начитается с подключением библиотеки «AFMotor.h.», затем создаем объект «AF_DCMotor motor(4);» в котором указываем номер порта двигателя (M1, M2, M3, M4). Если необходимо подключить несколько двигателей, создайте отдельный объект «AF_DCMotor motor1(1);» и так далее.
#include <AFMotor.h>
AF_DCMotor motor(4);
В «void setup» мы вызываем функции «setSpeed(speed)» в которой задаем скорость двигателя, от 0 до 255 и функцию «motor.run» направление вращения двигателя, где «FORWARD» — вперед, «BACKWARD» — назад, «RELEASE» — остановка
motor.setSpeed(200);
motor.run(RELEASE);

Подключение к Arduino шагового двигателя NEMO17 с помощью L293D
Необходимые детали:
► Arduino UNO R3 x 1 шт.
► Кабель USB 2.0 A-B x 1 шт.
► Блок питания 12В, 2А x 1 шт.
► Шаговый двигатель Nemo17 x 1 шт.
► Motor shield L293D x 1 шт.
В следующим примере подключим шаговый двигатель NEMA 17, который рассчитан на 12 В (и выше) и делает 200 шагов на оборот. Итак, подключите шаговый двигатель к клеммам M3 и M4. Затем подключите внешний источник питания 12 В к разъему «EXT_PWR«. Не забудьте удалить перемычку PWR.

Программа:
Используем ту же библиотеку, что и в предыдущем примере.
/*
Тестировалось на Arduino IDE 1.8.5
Дата тестирования 22.05.2020г.
*/
#include <AFMotor.h> // Подключаем библиотеку AFMotor
const int stepsPerRevolution = 200; // Указываем количество шагов на 1 оборот двигателя
AF_Stepper motor(stepsPerRevolution, 2); // Указываем что двигатель подключен к портам №2 (М3 - М4)
void setup()\
{
motor.setSpeed(10); // Скорость двигателя в минуту
}
void loop() {
motor.step(100, FORWARD, SINGLE);
motor.step(100, BACKWARD, SINGLE);
motor.step(100, FORWARD, DOUBLE);
motor.step(100, BACKWARD, DOUBLE);
motor.step(100, FORWARD, INTERLEAVE);
motor.step(100, BACKWARD, INTERLEAVE);
motor.step(100, FORWARD, MICROSTEP);
motor.step(100, BACKWARD, MICROSTEP);
}

Описание скетча:
Скетч начинается с подключением библиотеки «AFMotor.h«. Во второй строке создаем объект «AF_Stepper motor(48, 2);«где указываем количество шагов на оборот и номер порта.
#include <AFMotor.h>
const int stepsPerRevolution = 200;
AF_Stepper motor(stepsPerRevolution, 2);
В разделе настройки, функцией «motor.setSpeed(10);» устанавливает скорость двигателя, где «10» количество оборотов в минуту.
motor.setSpeed(10);
В разделе цикла программы, мы просто вызываем две функции для управления скоростью и направлением вращения двигателя.
motor.step(100, FORWARD, SINGLE);
motor.step(100, BACKWARD, SINGLE);
► «100» — это сколько шагов, необходимо сделать.
► «FORWARD» и «BACKWARD» — направление вращение двигателем.
► «SINGLE» — активация одной обмотки двигателя для совершения шага.
► «DOUBLE» — активация двух обмоток двигателя, что обеспечивает больший вращающий момент
► «INTERLEAVE» — применение ШИМ для управления шаговым двигателем двигателем.
Подключение к Arduino шагового двигателя NEMO17 с помощью L293D
Необходимые детали:
► Arduino UNO R3 x 1 шт.
► Кабель USB 2.0 A-B x 1 шт.
► Блок питания 12В, 2А x 1 шт.
► Шаговый двигатель Nemo17 x 1 шт.
► Сервопривод SG90S x 1 шт.
В последним примере покажу как управлять сервоприводами с помощью shield L293D. На shield выведен 16-разрядные контакты Arduino 9 и 10, питание для сервоприводов подается от 5 вольтного стабилизатора Arduino, поэтому подключать дополнительное питание в разъем EXT_PWR. не нужно.

Программа:
Так как используется стандартный вывод PWM, нет смысла использовать дополнительную библиотеку, воспользуемся стандартной библиотекой Servo.
/*
Тестировалось на Arduino IDE 1.8.5
Дата тестирования 22.05.2020г.
*/
#include <Servo.h> // Подключаем библиотеку Servo
Servo myservo; // Создаем объект
int pos = 0; // Создаем переменную
void setup()
{
myservo.attach(10); // Указываем к какому порту подключен вывод сервопривода
}
void loop()
{
for(pos = 0; pos <= 180; pos += 1) // Увеличиваем угол от 0 до 180
{
myservo.write(pos); // Передаем данные
delay(15); // Пауза
}
for(pos = 180; pos>=0; pos-=1) // Уменьшаем угол от 180 до 0
{
myservo.write(pos); // Передаем данные
delay(15); // Пауза
}
}
Описывать скетч не вижу смысла, так как все описал в комментариях.. Вот и все, будут вопросы пишите.

Ссылки
Библиотека AFMotor
Купить на Aliexpress
Контроллер Arduino UNO R3 на CH340G
Контроллер Arduino UNO R3 на Atmega16U2
Motor shield L293D
Мотор-колесо, диаметр 66 мм
Сервопривод SG90S
Купить в Самаре и области
Контроллер Arduino UNO R3
Motor shield L293D
Мотор-колесо, диаметр 66 мм
Сервопривод SG90S


Не могу использовать AFMotor.h Таких файлов нашел 4 штуки. Как правило, сообщение «плата не поддерживается. У меня UNO 8266 D1 R1 и драйвер на 4 мотора на L293d. Пытался назначать 8266 Generic, Wemos Lolin d1 r1, ничего не помаго. Скетч для сервоматора загрузился, но мотора у меня нет. А для имеющихся BYJ и от детских игрушек требуется AFMotor.h. Не выручите ? Заранее спасибо!
как управлять шаговым двигателем и сервоприводом одновременно?