Меню
Блог Гридина Семёна

Автоматизация и логические контроллеры

Рубрики блога

Двигатели постоянного тока робота. Драйвер движка L293D и Arduino

Двигатели постоянного тока робота. Драйвер движка L293D и Arduino

Двигатель постоянного тока потребляет очень большой ток. И для того, чтобы управлять им требуются специальные силовые транзисторные ключи. Существуют специальные микросхемы, которые заточены под эту задачу и имя их L293D. А для плат Arduino существует уже готовое решение — плата расширения драйвер двигателя L293D.

Из этой статьи вы узнаете:

Драйвер двигателей — L293D, общее описание
Используемые выводы Arduino для управления моторами
Программирование на Arduino

Приветствую вас на своих страницах блога, уважаемые читатели. Сегодняшняя статья будет отдельно посвящена этому замечательному драйверу, который играет целевую роль для колёсного робота или для того, чтобы подключить силовые шаговые двигатели, типа NEMA.

Совсем недавно я приобрёл данный драйвер, 2 OLED экрана для Ардуино и датчик для измерения влажности почвы.

Драйвер двигателя

Как раз драйвер двигателей на данном этапе является основной частью для изучения, так как я буду его применять в силовой части робота, собран он будет совместно с Arduino UNO. Этот «Бутерброд» будет выполнять основные задачи по движению шасси робота.

Большой плюс в Arduino — это быстродействие, и все операции движения будет выполнять скетч в его «мозгах». Затем я буду снимать всю информацию на Raspberry Pi и обрабатывать её.

Драйвер двигателей — L293D, общее описание

Мотор-шильды на основе микросхем L293 и L298N являются самыми популярными драйверами для управления моторами постоянного тока. На фото выше данная плата позволяет подключить 4 DC мотора (либо 2 шаговых двигателя) и два серводвигателя. Помимо этого ещё на борту платы есть несколько аналоговых входов, что позволяет подключить несколько ультразвуковых датчиков. Это очень удобно.

Почему? Потому что таким образом мы можем завязать независимую логику управления трансмиссией робота чисто на Ардуино. Потом передавать необходимые данные в верхние инстанции по каналам связи. основным целевым мозгом является одноплатный компьютер. Неважно, будет ли это Raspberry Pi, или Orange Pi, или Banana Pi.

Я закончил своё лирическое отступление, продолжаем дальше:

В составе этой платы имеются две микросхемы L293D (1). L-ка позволяет управлять слаботочными двигателями с током потребления до 600 мА на канал. Для подключения двигателей используются зажимные клеммы (2).

Использование двух микросхем L293D позволяет одновременно подключить 4 моторчика постоянного тока либо 2 шаговых мотора, либо два моторчика и шаговый. Для управления на прямую выводами L-ки (IN1, IN2, IN3, IN4),отвечающими за выбор направления вращения, необходимо 4 вывода, а для двух микросхем целых 8.

Для уменьшения количества управляющих выводов в игру вступает сдвиговый регистр 74НС595 (3). Благодаря регистру управление сводится с 8-ми пинов к 4-ем.

Так же на шильдике имеются шесть пинов (4) для подключения двух сервоприводов. (Кстати очень полезная и нужная штука, если понадобиться прицепить манипулятор с двумя степенями свободы).

Питание силовой части производится либо от внешнего клеммника (6) либо замыканием джампера (5) ( питание от клеммника моторов +M соединяется с выводом VinArduino).

При замкнутом джампере напряжение для объединенного питания должно лежать в пределах от 6 до 12 Вольт.

Используемые выводы Arduino для управления моторами

Выводы для скорости вращения двигателями:

  1. D11: DC Мотор №1 / Шаговый №1
  2. D3: DC Мотор №2 / Шаговый №1
  3. D5: DC Мотор №3 / Шаговый №2
  4. D6: DC Мотор №4 / Шаговый №2

Выводы, отвечающие за направления двигателей:

  • D4, D7, D8, D12

Выводы для управления сервоприводами:

японские капли для глаз купить в Москве.

  1. D9: Сервопривод №1
  2. D10: Сервопривод №2

Незадействованные аналоговые входы(Они же могут быть и дискретными вводами/выводами):

  • А0-А6 (либо в коде указываем дискретные 14-19)

Программирование на Arduino

Для того чтобы нам запустить данный драйвер, мы должны прописать соответствующие «мозги». Загружаем нужную библиотеку AFmotor. Скачал я её с официального сайта ГитХаб. Устанавливаем и загружаем в Arduino IDE.

Подробное описание библиотеки находится на этом сайте.

В начале программы создаём объект с уникальным именем и указываем канал, куда вы подключили двигатель. Создаём объект двигателя постоянного тока AF_DCMotor, используя AF_DCMotor (номер двигателя).

По сути библиотека выполняет всего две команды — это скорость вращения и направление.

Скорость вращения это команда setSpeed (скорость). В скобках указывается аргумент скорости, который принимает от 0 до 255. И направление вращения run (направление). В скобках аргумент может принимать три значения: FORWARD (вперёд), BACKWARD (назад) или RELEASE (стоп).

Ну что, пробуем скетч? В принципе на моём роботе, только два двигателя, поэтому я проводил испытания, только на двух каналах.

В случае с шаговым двигателем будет немного иная картина. Разница в том, что будут немного другие аргументы в функциях библиотеки. Мы создаём объект шагового двигателя AF_Stepper, используя AF_Stepper (шаги, двигатель). Параметр шаги определяет количество шагов на оборот двигателя. Двигатель с 7.5 градусов/шаг имеет 360/7.5= 48 шагов. Параметр двигатель определяет канал подключённого двигателя.

Для установки скорости оборотов используется функция setSpeed (обороты). Где в качестве аргумента необходимо указать число оборотов в минуту.

И наконец процедура steps (шаги, направление, тип_шага), если вы хотите, чтобы ваш двигатель вращался. В аргументе направление используем FORWARD или BACKWARD.

В аргументе тип шага используем следующее SINGLE, DOUBLE, INTERLEAVE или MICROSTEP.

SINGLE означает возбуждение одной обмотки, DOUBLE означает что две катушки возбуждаются одновременно, что способствует высокому крутящему моменту, INTERLEAVE означает что происходит чередование между единственной катушкой и двумя катушками, что дает более высокое разрешение, но половинную скорость. MICROSTEP — это способ, при котором производится ШИМ для создания сглаженного движения между шагами. Вы можете выбрать любой метод и изменять его «на ходу», чтобы получить минимальную мощность, больший крутящий момент, или большую точность.

В аргументе шаги мы указываем количество шагов, на сколько двигателю нужно переместиться.

В остановленном состоянии двигатель не выключается, и его обмотки всё равно возбуждены. Если в этом нет необходимости и для того чтобы увеличить срок службы и уменьшить нагрев используйте функцию release (), она освободит обмотки и шаговик будет свободно вращаться.

Если же требуется совершить лишь один шаг в программе, то используйте функцию onestep (направление, тип шага). Значение параметров в принципе точно такое же, как и в функции step ().

Пример кода для управления двигателем:

Реальные испытания:

Вот мы с вами подошли к концу статьи. Уважаемые друзья, коллеги и читатели. Извините за то, что редко пишу, не успеваю по времени. Пишите в комментариях, пишите письма, рассылайте друзьям! на этом у меня всё.

С уважением, Гридин Семён

Вам так же может быть интересно

Комментариев к статье: 2
  • Привет, Семен! Я киповец из прошлого века, когда еще не было микроконтроллеров,

    но твои посты разбудили мое прошлое радиолюбительство. Я начал обучать младшего внука элементарной электронике. Буду использовать (пока бесплатно ;-) ) твои посты.

    Желаю удачи!

    • Спасибо, всегда рад помочь. Лишь бы было интересно…