Как подключить драйвер l293 к ардуино
На повестке дня – подключение 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.
Распиновка выводов показана на скриншоте:
- Управляющая платформа Аруино Uno
- Модуль расширения L293D
- Макетная (монтажная) плата
- 1 двигатель
- Соединительные провода
В сети Интернет можно найти большое количество прошивок. Пример одного из подобных скетчей (тестируем один мотор):
Проверяем два коллекторных электромотора. Сборка, соответственно, меняется:
Программные коды прописываем так:
При желании можно еще больше усложнить и модернизировать схему, а также поработать с другими опциями - увеличить скорость до максимального уровня, затем полностью снизить вплоть до остановки (сначала одного, потом второго двигателя).
К слову, при функционировании моторов среда Ардуино может частенько перезапускаться. Не стоит этого бояться - перезагрузка связана с тем, что двигателям необходимы более «высокие» токи при моменте старта и торможении.
В данной статье мы разберем популярную, широко распространенную миросхему L293D.
Микросхема включает в себя сразу два драйвера для управления слаботочными моторами. Для дальнейшего удобства условно обозначим их как правый борт и левый борт.
Используемые компоненты (купить в Китае):
Начнем наш рассказ с краткого обзора технических характеристик L293D.
Несомненным плюсом данной микросхемы является раздельное питание логической части микросхемы, напряжение питания которой лежит в приделах 4.5-5 вольт (VSS), и силовой части питания двигателей (VS).
Используя данную микросхему мы можем управлять двигателями с довольно широким диапазоном питающего напряжения от 4.5 до 36 вольт, но при этом, L293D может выдать всего лишь 600mА продолжительного тока нагрузки на каждый канал. Пиковый (максимальный) ток может кратковременно подскочить до 1.2A.
Так же из положительных сторон данной микросхемы следует отметить её непривередливость к напряжению входных сигналов подаваемых на выводы INPUT.
Логический "0" распознается микросхемой когда входное напряжение <1.5Вольт.
Логическая "1" появляется при входном напряжении лежащем в пределах от 2.3 до 7Вольт.
Диапазон рабочих температур от -40°C до +150°C
Скорость переключения до 5 kHz
Итак, разберем по полочкам левый борт. Вывод ENABLE1 это главная фигура в управлении левым каналом, без лога единицы на его выводе (или ШИМ, об этом чуть позже) ничего работать не будет, вне зависимости от того что творится на выводах INPUT1 и INPUT2.
Выводы INPUT1 и INPUT2 задают направление вращения мотора. Их можно сравнить с рулем машины, тем более, что в данном случае сравнение подходит идеально, ведь мы не можем повернуть руль сразу в две стороны, а необходимо выбирать одну из двух. Из вышесказанного следует, что для поворота нам надо подать логическую единицу на вывод INPUT1, а на INPUT2 подать логический ноль. Для смены направления поменять местами INPUT1 "0", INPUT2 "1".
При подаче одинаковых логов мотор вращаться не будет, следовательно вращение можно остановить либо подачей логического нуля на вывод ENABLE1, при любой конфигурации IN1 и IN2, либо одинаковыми логами на IN1 и IN2, не изменяя конфигурации вывода EN1 (данный вариант мы и рассмотрим ниже).
Контакты GND соединяются с отрицательным полюсом источника питания (земля).
Оставшиеся выводы OUTPUT1 и OUTPUT2 служат непосредственно для подключения мотора.
Правый канал работает абсолютно идентично.
Рассмотрим самый простой вариант подключения L293D. Скорость вращения при таком варианте двигателя нерегулируемая, вывод EN1 подключен напрямую к +5V. Питание мотора также берется от стабилизатора установленного на Arduino. Питать таким образом от USB можно только очень слабые нагрузки (в данном случае потребляемый ток моторчика 100mA, и нет никаких внешних воздействий способных повысить потребляемый ток), и то такое подключение крайне не желательно.
Заставим моторчик вращаться "вправо" 4 секунды, остановиться на 0.5 секунды, вращаться "влево" 4 секунды, остановка 5 секунд и снова цикл повторяется.
Теперь усложним нашу схему, возьмем моторчик побольше. При использовании такого мотора настоятельно рекомендуем использовать внешний источник питания силовой части. Также, в данном варианте, подсоединим вывод EN1 к ШИМ (PWM) выводу Ардуино под номером 9.
В данном примере мы подсоединили вывод EN1 к выводу ШИМ. Задействуем возможность драйвера управлять скоростью, меняя скважность посылаемого ШИМ сигнала. Значения скважности задаются функцией
где число изменяется от 0 до 255, прямо пропорционально скважности сигнала. Для наглядности, были подобраны четыре значения при которых двигатель стартует с низких оборотов, набирает средние, выходит на максимальные и останавливается.
Ну и напоследок подключим два двигателя с регулировкой скорости.
В приведенном ниже скетче два мотора будут вращаться в обе стороны с плавным нарастанием скорости.
P.S. При резком включении двигателей, L293D начинает очень сильно нагреваться по причине того, что при старте сразу на полную мощность, для сдвига с места и раскрутки якоря (грубо говоря вала) мотор потребляет, хоть и кратковременно, но ток минимум в 2-5 раз больше устаканившегося рабочего тока. При резкой смене направления вращения появляется еще больший скачок тока, так как приходится не только сдвинуть якорь с места, как это было в первом случае, но и побороть противо-ЭДС создаваемую инерцией еще не остановившегося якоря.
Для снижения этих факторов следует разгонять двигатели плавно, чем дольше тем лучше, в разумных пределах конечно. Так же при реверсе (изменении направления вращения) следует дать промежуток для самостоятельной остановки двигателя (доли секунды), а затем снова плавно разгонять. Приложив палец к ЛДшке разницу почувствуете сразу. Поэкспериментируйте и найдите золотую середину между нагревом и скоростью реагирования для вашей задачи.
Статьи в похожей тематике:
А как же комментарии?
В данный момент еще реализованы не все элементы нашего сообщества. Мы активно работаем над ним и в ближайшее время возможность комментирования статей будет добавлена.
В статье рассмотрен пример управления направлением и скоростью вращения ротора небольшого двигателя постоянного тока с использованием Arduino и чипом для драйвера двигателя L293D.
Для управления скоростью вращения мотора в проекте используется потенциометр. Для изменения направления вращения используется кнопка.
Необходимое оборудование
Для того, чтобы собрать предложенную схему и реализовать поставленную задачу вам понадобятся:
1 небольшой двигатель постоянного тока с напряжением питания около 6 В;
1 чип L293D, который используется в качестве драйвера для двигателя;
1 переменный резистор (потенциометр) сопротивлением 10 кОм;
1 тактовая кнопка;
1 монтажная плата;
1 плата Arduino Uno;
Основы работы с чипом L293D
Перед тем как подключать Arduino для управления мотором, стоит поэксперрментировать с чипом L293D. Как минимум, это даст вам понимание того, как именно он работает.
В данном случаем мы можем использовать Arduino исключительно для подачи питания 5 В на мотор.
Наша задача – отследить, в какую сторону вращается ротор мотора. Можете слегка зажать вал пальцами, и вы почувствуете направление вращения или прикрепить на вал какую-то метку (например, кусок бумажки). После первой проверки, подключите контакты, которые идут от 5V (питания) и от Gnd (земля) наоборот. После запуска, двигатель должен вращаться в противоположную сторону.
По большому счету, это и является концептом, на основании которого работает чип L293D. Он управляет пинами, позволяя нам менять направление вращения ротора двигателя.
Схема подключения соответствует приведенной на рисунке ниже. Питание мотора все еще обеспечивается от Arduino, но мы можем поэкспериментировать с «управляющими» пинами перед тем как полностью передать управление Arduino.
Три контакта L293D, которые нас интересуют, это: Pin 1 (Enable), Pin 2 (In1) и Pin 7 (In2). Они подключаются к контакту 5V или к контакту GND с использованием фиолетового, желтого и оранжевого коннектора.
Как показано на рисунке выше, мотор должен вращаться в определенном направлении, давайте назовем это направлением A.
Если вы подключите Pin 1 (Enable) к GND, мотор остановится вне зависимости от управляющих пинов In1 и In2. Контакт Enable все включает и выключает. Это очень полезно при использовании ШИМ контактов для управления скоростью мотора. Переподключите Pin 1 к 5V, чтобы двигатель вновь начал вращаться.
Теперь попробуйте переподключить In1 (pin 2, желтый). Вместо 5V подключите его к GND. Оба контакта In1и In2 теперь подключены к GND, так что двигатель опять остановится.
Перемещение In2 от GND к 5V приведет к вращению мотора в противоположном направлении (направление В).
Если вы подключите In1 обратно к 5V и в результате In1 и In2 будут подключены к 5V, мотор опять-таки перестанет двигаться.
Схема подключения Arduino, L293D и потенциометра
После того как мы разобрались с непосредственным управлением двигателя с помощью контактов и микросхемы L293D , можно передавать все управление на плату Arduino. Микроконтроллер в данном случае будет управлять контактами Enable, In1 и In2.
Внимательно соберите схему на основании рисунка, который приведен ниже. Если вы перепутаете контакты, очень вероятно, что работать ничего не будет.
Для этого воспользуемся самым популярным драйвером, используемым для управления моторчиками – микросхемой L293D.
L293D содержит два драйвера для управления электродвигателями небольшой мощности. Имеет две пары входов для управляющих сигналов и две пары выходов для подключения электромоторов. Кроме того, у L293D есть два входа для включения каждого из драйверов. Эти входы используются для управления скоростью вращения электромоторов с помощью ШИМ (PWM).
Рассмотрим блок-схему L293D, приведённую в datasheet-е (нумерация для SO-корпуса):
К выходам OUTPUT1 и OUTPUT2 подключается электромотор MOTOR1 (для микросхемы в DIP-корпусе – ножки 3 и 6).
Соответственно MOTOR2 подключается к выходам OUTPUT3 и OUTPUT4 (ножки 11 и 14).
Сигналы, подаваемые на ENABLE1(2) управляют соответствующим драйвером (ножки 1 и 9 соответственно).
Подавая на вход ENABLE1 сигнал HIGH ( или просто соединив с плюсом источника питания +5V) – включаем драйвер 1-го моторчика.
Если при этом на входы INPUT1 и INPUT2 сигналы не подавать, то моторчик вращаться не будет.
Подавая HIGH на INPUT1 и LOW на INPUT2 мы заставим моторчик вращаться. А если теперь поменять сигналы местами и подавать на INPUT1 сигнал LOW, а на INPUT2 сигнал HIGH – мы заставим моторчик вращаться в другую сторону.
Аналогично для второго драйвера.
Выход Vss (ножка 16) отвечает за питание самой микросхемы, а выход Vs (ножка 8) отвечает за питание моторчиков – это обеспечивает разделение электропитания для микросхемы и для управляемых ею двигателей, что позволяет подключить электродвигатели с напряжением питания отличным от напряжения питания микросхемы. Разделение электропитания микросхем и электродвигателей также необходимо для уменьшения помех, вызванных бросками напряжения, связанными с работой моторов.
Четыре контакта GND (ножки 4, 5, 12,13) нужно соединить с землёй. Так же эти контакты обеспечивают теплоотвод от микросхемы.
Характеристики L293D
Если использовать микросхему L293E, то допустимый ток нагрузки на каждый канал уже будет 1А (а пиковый ток – 2А), но придётся использовать внешние защитные диоды, которые у L293D встроены в саму микросхему.
Попробуем смоделировать как Arduino справляется с управлением моторчиками :)
Запускаем Proteus и открываем проект с Arduino :)
Добавим на схему наш драйвер – L293D
Соединим выводы Vss и Vs с положительным полюсом батареи, выводы GND соединим с землёй, а к выводам 3,6 и 11,14 подсоединим моторчики – соответственно MOTOR1 и MOTOR2.
А как же соединить входы драйверов? Для начала, посмотрим – как вообще это работает на практике :)
Загрузим в МК скетч Blink или Blink_HL, а далее, как показано на рисунке, соединим INPUT1 и ENABLE1 с digital pin 13, к которому подключен светодиод, а INPUT2 соединим с землёй. Запустим симуляцию и увидим, что моторчик одну секунду вращается в одну сторону, а потом останавливается на секунду. Т.е. получили моторчиковый Blink :)
Итак, получается, что для управления одним моторчиком требуется три порта(один из них — PWM).
Если скоростью вращения моторчика управлять не требуется, то можно сэкономить на PWM-портах (ENABLE1 и ENABLE2). Тогда, для управления одним моторчиком нужно будет задействовать два порта.
Итак, определимся с портами (в скобках – соответствующий номер ножки МК из pin mapping ):
Изменим наш проект в Proteus-е:
А теперь напишем скетч.
Для удобства – будем хранить номера портов не в обычных переменных типа int, а объединим их структурой:
однако, если просто объявить такую структуру в коде скетча, например так:
То при попытке скомпилировать — получим ошибку:
Однако, тут компилятору не нравится именно обращение к новому типу данных по указателю.
Три секунды оба моторчика вращаются вперёд, затем пол-секунды второй моторчик вращается назад, а потом снова вперёд.
Перенесём структуру и функции в нашу библиотеку RoboCraft.
А скетч тогда будет таким:
Функции вращения принимают два параметра – номер моторчика(1-2) и скорость вращения (0-255). Если номер отличается от 1-2, то вращение задаётся сразу обоим моторчикам.
У меня под рукой оказалась микросхема L293E – поэтому необходимо использовать защитные диоды (1N4007), которых для двух моторчиков нужно аж 8 штук :)
Так же у L293E не 16, а целых 20 ножек:
Впрочем, для тестирования можно собрать схему только для одного моторчика ;)
Соответственно нужно внести изменения в скетч:
— крутим наш моторчик 3 секунды вперёд, а затем одну секунду назад.
Крутится :)
Читайте также: