Обзор 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» и устанавливаем библиотеку.
Программа:
В данном скетче показано, как управлять скоростью и направлением движении двигателями постоянного тока.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
/* Тестировалось на 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);» и так далее.
1 2 |
#include <AFMotor.h> AF_DCMotor motor(4); |
В «void setup» мы вызываем функции «setSpeed(speed)» в которой задаем скорость двигателя, от 0 до 255 и функцию «motor.run» направление вращения двигателя, где «FORWARD» — вперед, «BACKWARD» — назад, «RELEASE» — остановка
1 2 |
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.
Программа:
Используем ту же библиотеку, что и в предыдущем примере.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
/* Тестировалось на 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);«где указываем количество шагов на оборот и номер порта.
1 2 3 |
#include <AFMotor.h> const int stepsPerRevolution = 200; AF_Stepper motor(stepsPerRevolution, 2); |
В разделе настройки, функцией «motor.setSpeed(10);» устанавливает скорость двигателя, где «10» количество оборотов в минуту.
1 |
motor.setSpeed(10); |
В разделе цикла программы, мы просто вызываем две функции для управления скоростью и направлением вращения двигателя.
1 2 |
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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
/* Тестировалось на 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. Не выручите ? Заранее спасибо!
как управлять шаговым двигателем и сервоприводом одновременно?