Подключение Motor Shield L293D к Arduino

4-03-2020, 17:12 1 комментариев
На повестке дня – подключение L293D к Arduino, знакомство с техническими характеристиками модуля, его практическим применением и простейшими схемами сборки. Для начала разъясним, для чего предназначены подобные устройства. Они служат спусковым, так называемым соединительным звеном между платами Ардуино и непосредственно двигателями постоянного тока.

Если вы всерьез занимаетесь электроникой, робототехникой, созданием различных автоматизированных проектов и «умных систем», Motor Shield поможет вам эффективно реализовать поставленные конструкторские задачи. С данным драйвером вы легко подключите дополнительное оборудование: сервоприводы, шаговые биполярные ∕ коллекторные DC двигатели, моторы и прочее.

В продолжение темы рассмотрим параметры платы:
  • 2 H-моста (для управления сразу двумя двигателями) + возможность подключения 2-х сервоприводов (5 Вольт), 4-х моторов, 2-х шаговых двигателей (6 - 12 Вольт);
  • напряжение: 4,5-36 V;
  • max (пиковый) ток: до 1,2 А;
  • выходной (рабочий) ток: 600 мА;
  • диапазон рабочих температур: -40°C ... 150°C;
  • количество выходов: 4.
Кроме того, модуль совместим с такими популярными микроконтроллерами как Arduino Mega, Nano и Uno (в дальнейшем мы рассмотрим именно последний вариант), а также Diecimila, Duemilanove.

Распиновка выводов показана на скриншоте:

 
Принципиальная схема подключения одного двигателя показана ниже:

Для ее реализации мы использовали такие аппаратные компоненты:
  1. Управляющая платформа Аруино Uno
  2. Модуль расширения L293D
  3. Макетная (монтажная) плата
  4. 1 двигатель
  5. Соединительные провода
Для полноценной работы и тестирования сборки необходима специализированная библиотека - AFMotor.h. Ее следует инсталлировать в папку "libraries" (среда программирования Arduino IDE). Не забывайте перезагрузить ПО!
https://github.com/adafruit/Adafruit-Motor-Shield-library

В сети Интернет можно найти большое количество прошивок. Пример одного из подобных скетчей (тестируем один мотор):
#include <AFMotor.h> // Подключаем библиотеку для работы с шилдом 
int i;
AF_DCMotor motor1(1);// Подключаем моторы к клеммникам M1

void setup() {
motor1.setSpeed(255);// Задаем максимальную скорость вращения моторов
motor1.run(RELEASE);
}

void loop() {
                 
motor1.run(FORWARD); // Задаем движение вперед
motor1.setSpeed(255); // Задаем скорость движения
delay(3000); //Указываем время движения
                 
motor1.run(RELEASE); // Останавливаем двигатели
delay(500); // Указываем время задержки

motor1.run(BACKWARD);  // Задаем движение назад
motor1.setSpeed(255);  // Задаем скорость движения 
delay(3000); // Указываем время движения
                    
motor1.run(RELEASE); // Останавливаем двигатели
delay(500); // Указываем время задержки

// Разгоняем двигатели в одном направлении от нулевой скорости, до максимальной
motor1.run(FORWARD); 
for (i=0; i<255; i++) {
motor1.setSpeed(i); 
delay(10);
}
                 
motor1.run(RELEASE); // Останавливаем двигатели
delay(500); // Указываем время задержки
                  
motor1.run(BACKWARD);// Разгоняем двигатели в обратном направлении
for (i=255; i>=0; i--) {
motor1.setSpeed(i); 
delay(10);
}
                 
motor1.run(RELEASE); // Останавливаем двигатели
delay(500); // Указываем время задержки
}
Проверяем два коллекторных электромотора. Сборка, соответственно, меняется:

Программные коды прописываем так:
// подключите один мотор к клемме: M1+ и M1-
// а второй к клемме: M2+ и M2-
// Motor shield использует четыре контакта 4, 5, 6, 7 для управления моторами 
// 4 и 7 — для направления, 5 и 6 — для скорости
#define SPEED_1      5 
#define DIR_1        4
 
#define SPEED_2      6
#define DIR_2        7
 
void setup() {
  // настраиваем выводы платы 4, 5, 6, 7 на вывод сигналов 
  for (int i = 4; i < 8; i++) {     
    pinMode(i, OUTPUT);
  }
} 
 
void loop() {
  // устанавливаем направление мотора «M1» в одну сторону
  digitalWrite(DIR_1, LOW);
  // включаем мотор на максимальной скорости
  analogWrite(SPEED_1, 255);
  // ждём одну секунду
  delay(1000);
 
  // устанавливаем направление мотора «M1» в другую сторону
  digitalWrite(DIR_1, HIGH);
  // ждём одну секунду
  delay(1000);
  // выключаем первый мотор
  analogWrite(SPEED_1, 0);
 
  // устанавливаем направление мотора «M2» в одну сторону
  digitalWrite(DIR_2, LOW);
  // включаем второй мотор на максимальной скорости
  analogWrite(SPEED_2, 255);
  // ждём одну секунду
  delay(1000);
 
  // устанавливаем направление мотора «M2» в другую сторону
  digitalWrite(DIR_2, HIGH);
  // ждём одну секунду
  delay(1000);
 
  // выключаем второй мотор
  analogWrite(SPEED_2, 0);
  // ждём одну секунду
  delay(1000);
}
При желании можно еще больше усложнить и модернизировать схему, а также поработать с другими опциями - увеличить скорость до максимального уровня, затем полностью снизить вплоть до остановки (сначала одного, потом второго двигателя).

К слову, при функционировании моторов среда Ардуино может частенько перезапускаться. Не стоит этого бояться - перезагрузка связана с тем, что двигателям необходимы более «высокие» токи при моменте старта и торможении.

На этом все! Желаем удачной компиляции!
Поделись в социальных сетях:
О авторе
Калугин Антон

Программист микроконтроллеров с 8-ми летним стажем, работал в таких компаниях как IBM, ASUS, Microsoft.

В комментариях с радостью отвечу на ваши вопросы.

Все статьи автора
Похожие новости

Подключение Motor Shield к Arduino у многих любителей электроники вызывает определенные затруднения. Тем не менее этот драйвер двигателей очень популярен и...

Сегодня мы хотим рассказать вам о том, как подключить драйвер L298N к Arduino и для чего он в целом может понадобиться. Речь пойдет о цифровом двухканальном...

Сегодня поговорим о том, как воплотить в жизнь подключение FPM10A к Arduino, что это за модуль, где используется, каковы параметры его работы и т.д. Речь идет...

В этой статье мы рассмотрим подключение ADS1115 к Ардуино. Речь идет о 16-битном аналого-цифровом преобразователе, оснащенном 4 входами непосредственно для...

В новом информационном обзоре рассматриваем GSM модуль SIM800L к Arduino. Почему выбрано именно это устройство? Во-первых, оно достаточно известно и популярно...

1 комментария
  1. admin
    4 августа 2020 23:11 admin

    Отличный модуль, если имеете дело с двигателями - берите однозначно.

    replyОтветить
Оставить комментарий