Как сделать драйвер для двигателя
Как сделать драйвер биполярного шагового двигателя ARDUINO
Недавно приобрел ARDUINO в Китае. Мыслей по изготовление различных устройств- море. Мигать светодиодом на плате очень быстро надоело, захотелось чего то более существенного. Конечно надо бы заказать набор но цена его несколько завышена и пришлось что то искать в интернете, что то придумывать самому. В итоге все равно заказал в том же Китае различные датчики, реле, индикаторы… Немного попозже пришел знаменитый индикатор 1602. С ним поучился работать, тоже довольно быстро освоился. Захотелось поуправлять шаговым двигателем от CD-DVD привода. Ждать с Востока посылку 1-2 месяца не захотелось и я решил попробовать сделать драйвер самостоятельно. Нашел вот такую схему включения биполярного шагового двигателя:
Схема включения биполярного шагового двигателя на микросхеме L293D
Микросхемы в нашей глуши я не нашел, или заказывать микросхемы в российских интернет-магазинах по стоимости 2-3 готовых драйверов за 1 микросхему. Микросхема представляет собой Н- мост из транзисторов. Кстати включать в мост надо или составные биполярные транзисторы (так называемые сборки Дарлингтона), или полевые транзисторы. Одиночным биполярным транзисторам нужна хорошая раскачка, которую контроллер дать не может, иначе получается очень высокое падение напряжение на транзисторе из за того что он открыться не может. Т.к. хороший товарищ занимается ремонтом компьютеров, то с полевиками проблем не возникло. Сначала хотел сделать на биполярниках- но получается в 2 раза больше транзисторов, что не совсем хорошо для габаритов драйвера, да и ток они выдержат гораздо меньший. Выпаяв около десятка полевых транзисторов и почитав на них даташиты я снова впал в уныние- в интернете есть схемы только на парах полевых транзисторов n- и p- типов. И ниодной схемы на транзисторах одного типа я просто не нашел. В компьютерах же используются транзисторы n- типа. Пришлось мудрить на макетной плате небольшой девайс на полевиках, попробовал управлять светодиодами, получилось и я решил собрать готовое устройство. Драйвер не нуждается в налаживании ибо налаживать здесь практически нечего. Единственная проблема возникла с программным обеспечением. Нашел даташит на похожий двигатель и по графикам работы выставил состояния выходов. После этого осталось только подобрать delay и все- устройство готово! Собственно схема замены микросхемы L293D.
Драйвер на полевых транзисторах n-типа
Плата драйвера Arduino
Выкладываю плату в формате Layout6. Плата драйвера скачать. Замечу что у вас должен получится именно такой вид- надписи должны быть читабельными а не перевернутыми, учитывайте это при печати платы, детали ведь будут установлены со стороны дорожек. Разъемы тоже выпаиваем из материнки феном, отрезаем сколько по надо количеству пинов и впаиваем в нашу плату- так гораздо удобнее и надежнее нежели чем паять провода в плату. Разберемся с назначением выводов: выводы Out1 и Out2- подключение обмоток шагового двигателя, In1,2- вход от Arduino, ±5V- питание управления от Arduino (сделал двойной разъем т.к. подключать питание можно шлейфом сразу к нескольким блокам), 2 перемычки располагаются на другой стороне платы, по ним подается напряжение на ключи. Размер платы- 43х33мм. Кто желает- может еще больше минимизировать.
Разберемся с программным обеспечением для шагового двигателя. Для любого шагового двигателя необходимо найти даташит или, на худой конец, диаграмму его работы. Я нашел только диаграмму, она выглядит так:
Диаграмма работы шагового двигателя
Теперь подключаем плату к Arduino, двигателю. Забрасываем такой скетч:
// подключаемся к 8,9 выводам arduino
int input1 = 8;
int input2 = 9;
int stepCount = 5; //задержка между шагами регулирует скорость двигателя
void setup()
<
pinMode(input1,OUTPUT);
pinMode(input2,OUTPUT);
>
void loop()
<
//1-ый шаг
digitalWrite(input1,LOW);
digitalWrite(input2,HIGH);
delay(stepCount);
//2-ой шаг
digitalWrite(input1,HIGH);
digitalWrite(input2,HIGH);
delay(stepCount);
//3-ий шаг
digitalWrite(input1,HIGH);
digitalWrite(input2,LOW);
delay(stepCount);
digitalWrite(input1,LOW);
digitalWrite(input2,LOW);
delay(stepCount);
Подаем питание на драйвер, меняем, если надо, выводы одной обмотки и думаем куда приспособить данный девайс (можно открывать по времени и температуре форточки в теплице, управлять жалюзи и многое другое). Обращаю внимание что двигатель будет крутиться без остановки по данному скетчу, если надо- загоните в цикл и крутите на требуемое значение или, что еще лучше, напишите библиотеку и подключайте ее напрямую. Конечно это не такой крутой драйвер как на микросхеме, но для экспериментов, пока идут нормальные драйверы из Китая, его более чем достаточно. Всем удачи и успехов в осваивании микроконтроллеров. Подробнее о микроконтроллерах ARDUINO читайте ЗДЕСЬ.
Добавить комментарий Отменить ответ
Для отправки комментария вам необходимо авторизоваться.
Драйверы двигателя L298N, L293D и Arduino Motor Shield
Драйвер двигателя выполняет крайне важную роль в проектах ардуино, использующих двигатели постоянного тока или шаговые двигатели. C помощью микросхемы драйвера или готового шилда motor shield можно создавать мобильных роботов, автономные автомобили на ардуино и другие устройства с механическими модулями. В этой статье мы рассмотрим подключение к ардуино популярных драйверов двигателей на базе микросхем L298N и L293D.
Драйвер двигателя в проектах ардуино
Для чего нужен драйвер двигателя?
Как известно, плата ардуино имеет существенные ограничения по силе тока присоединенной к ней нагрузки. Для платы это 800 mA, а для каждого отдельного вывода – и того меньше, 40mA. Мы не можем подключить напрямую к Arduino Uno, Mega или Nano даже самый маленький двигатель постоянного тока. Любой из этих двигателей в момент запуска или остановки создаст пиковые броски тока, превышающие этот предел.
Как же тогда подключить двигатель к ардуино? Есть несколько вариантов действий:
Использовать реле. Мы включаем двигатель в отдельную электрическую сеть, никак не связанную с платой Arduino. Реле по команде ардуино замыкает или размыкает контакты, тем самым включает или выключает ток. Соответственно, двигатель включается или выключается. Главным преимуществом этой схемы является ее простота и возможность использовать Главным недостатком данной схемы является то, что мы не можем управлять скоростью и направлением вращения.
Использовать силовой транзистор. В данном случае мы можем управлять током, проходящим через двигатель, а значит, можем управлять скоростью вращения шпинделя. Но для смены направления вращения этот способ не подойдет.
Использовать специальную схему подключения, называемую H-мостом, с помощью которой мы можем изменять направление движения шпинделя двигателя. Сегодня можно без проблем найти как микросхемы, содержащие два или больше H-моста, так и отдельные модули и платы расширения, построенные на этих микросхемах.
В этой статье мы рассмотрим последний, третий вариант, как наиболее гибкий и удобный для создания первых роботов на ардуино.
Микросхема или плата расширения Motor Shield
Motor Shield – плата расширения для Ардуино, которая обеспечивает работу двигателей постоянного тока и шаговых двигателей. Самыми популярными платами Motor Shield являются схемы на базе чипов L298N и L293D, которые могут управлять несколькими двигателями. На плате установлен комплект сквозных колодок Ардуино Rev3, позволяющие устанавливать другие платы расширения. Также на плате имеется возможность выбора источника напряжения – Motor Shield может питаться как от Ардуино, так и от внешнего источника. На плате имеется светодиод, который показывает, работает ли устройство. Все это делает использование драйвера очень простым и надежным – не нужно самим изобретать велосипеды и решать уже кем-то решенные проблемы. В этой статье мы будем говорить именно о шилдах.
Принцип действия H-моста
Принцип работы драйвера двигателя основан на принципе работы H-моста. H-мост является электронной схемой, которая состоит из четырех ключей с нагрузкой. Название моста появилось из напоминающей букву H конфигурации схемы.
Схема моста изображена на рисунке. Q1…Q4 0 полевые, биполярные или IGBT транзисторы. Последние используются в высоковольтных сетях. Биполярные транзисторы практически не используются, они могут присутствовать в маломощных схемах. Для больших токов берут полевые транзисторы с изолированным затвором. Ключи не должны быть замкнуты вместе одновременно, чтобы не произошло короткого замыкания источника. Диоды D1…D4 ограничительные, обычно используются диоды Шоттки.
С помощью изменения состояния ключей на H-мосте можно регулировать направление движения и тормозить моторы. В таблице приведены основные состояния и соответствующие им комбинации на пинах.
Q1 | Q2 | Q3 | Q4 | Состояние |
1 | 0 | 0 | 1 | Поворот мотора вправо |
0 | 1 | 1 | 0 | Поворот мотора влево |
0 | 0 | 0 | 0 | Свободное вращение |
0 | 1 | 0 | 1 | Торможение |
1 | 0 | 1 | 0 | Торможение |
1 | 1 | 0 | 0 | Короткое замыкание |
0 | 0 | 1 | 1 | Короткое замыкание |
Драйвер двигателя L298N
Модуль используется для управления шаговыми двигателями с напряжением от 5 до 35 В. При помощи одной платы L298N можно управлять сразу двумя двигателями. Наибольшая нагрузка, которую обеспечивает микросхема, достигает 2 А на каждый двигатель. Если подключить двигатели параллельно, это значение можно увеличить до 4 А.
Плата выглядит следующим образом:
Распиновка микросхемы L298N:
При подключении двух двигателей, нужно проверить, чтобы у них была одинаковая полярность. Если полярность разная, то при задании направления движения они будут вращаться в противоположные стороны.
Драйвер двигателя L293D
L293D – является самой простой микросхемой для работы с двигателями. L293D обладает двумя H-моста, которые позволяют управлять двумя двигателями. Рабочее напряжение микросхемы – 36 В, рабочий ток достигает 600 мА. На двигатель L293D может подавать максимальный ток в 1,2 А.
В схеме имеется 16 выходов. Распиновка:
Для подключения к микроконтроллеру Arduino Uno нужно соединить выходы In1 на L293D и 7 пин на Ардуино, In2 – 8, In3 – 2, In4 – 3, En1 – 6, En2 – 5, V – 5V, Vmotor – 5 V, 0V – GND. Пример подключения одного двигателя к Ардуино показан на рисунке.
Драйвер двигателя на микросхеме HG7881
HG7881 – двухканальный драйвер, к которому можно подключить 2 двигателя или четырехпроводной двухфазный шаговый двигатель. Устройство часто используется из-за своей невысокой стоимости. Драйвер используется только для изменения направления вращения, менять скорость он не может.
Плата содержит 2 схемы L9110S, работающие как H-мост.
Характеристики драйвера HG7881:
Распиновка:
В зависимости от поданного сигнала на выходах IA и IB будет разное состояние для двигателей. Возможные варианты для одного из моторов приведены в таблице.
IA | IB | Состояние мотора |
0 | 0 | Остановка |
1 | 0 | Двигается вперед |
0 | 1 | Двигается назад |
1 | 1 | Отключение |
Подключение одного двигателя к Ардуино изображено на рисунке.
Сравнение модулей
Модуль L293D подает максимальный ток в 1,2А, в то время как на L298N можно добиться максимального тока в 4 А. Также L293D обладает меньшим КПД и быстро греется во время работы. При этом L293D является самой распространенной платой и стоит недорого. Плата HG7881 отличается от L293D и L298N тем, что с ее помощью можно управлять только направлением вращения, скорость менять она не может. HG7881 – самый дешевый и самый малогабаритный модуль.
Подключение L298N к Arduino
Как уже упоминалось, в первую очередь нужно проверить полярность подключенных двигателей. Двигатели, вращающиеся в различных направлениях, неудобно программировать.
Нужно присоединить источник питания. + подключается к пину 4 на плате L298N, минус (GND) – к 5 пину. Затем нужно соединить выходы с L298N и пины на Ардуино, причем некоторые из них должны поддерживать ШИМ-модуляцию. На плате Ардуино они обозначены
. Выходы с L298N IN1, IN2, IN3 и IN4 подключить к D7, D6, D5 и D4 на Ардуино соответственно. Подключение всех остальных контактов представлено на схеме.
Направление вращения задается с помощью сигналов HIGH и LOW на каждый канал. Двигатели начнут вращаться, только когда на 7 пине для первого мотора и на 12 пине для второго на L298N будет сигнал HIGH. Подача LOW останавливает вращение. Чтобы управлять скоростью, используются ШИМ-сигналы.
Для управления шаговым двигателем в Arduino IDE существует стандартная библиотека Stepper library. Чтобы проверить работоспособность собранной схемы, можно загрузить тестовый пример stepper_oneRevolution. При правильной сборке вал двигателя начнет вращаться.
При работе с моторами Ардуино может периодически перезагружаться. Это возникает из-за того, что двигателям требуются большие токи при старте и в момент торможения. Для решения этой проблемы в плату встроены конденсаторы, диоды и другие схемы. Также для этих целей на шидле имеется раздельное питание.
Драйвер двигателя L298N
Товары
Обзор драйвера L298N
Драйвер L298N используется радиолюбителями для многофункционального управления двигателями постоянного тока. Схема модуля, состоящая из двух H-мостов, позволяет подключать к нему один биполярный шаговый двигатель или одновременно два щёточных двигателя постоянного тока. При этом есть возможность изменять скорость и направление вращения моторов. Управление осуществляется путём подачи соответствующих сигналов на командные входы, выполненные в виде штыревых контактов. На рисунке №1 показан внешний вид модуля с кратким описанием всех его составляющих.
Рисунок №1 – внешний вид модуля L298N
Рисунок №2 – электрическая схема модуля L298N
Как видно из вышеприведенной схемы, основным элементом модуля является микросхема L298N, в состав которой входят два полноценных H-моста. Каждый H-мост выполнен в виде сборки из четырёх транзисторных ключей с включённой в центре нагрузкой в виде обмотки двигателя. Такой подход позволяет менять полярность в обмотке и как следствие направление вращения двигателя путём чередования пар открытых и закрытых ключей. Более наглядно этот процесс демонстрирует рисунок №3.
Рисунок №3 – транзисторные мосты Н-типа
На рисунке изображены два транзисторных моста Н-типа. В первом случае на вход IN1 подаётся логическая единица, а на вход IN2 – логический ноль. Так как транзисторы в схеме моста имеют разный тип проводимости, то при таком входном сигнале транзисторы Т1 и Т4 останутся в закрытом состоянии, в то время, как через транзисторы Т2 и Т3 потечёт ток. Ввиду того, что единственный путь протекания тока лежит через обмотку двигателя, то последний окажется подключен правой клеммой к плюсу питания, а левой к минусу. Всё это приведёт к вращению мотора в определённом направлении. Абсолютно противоположная картина показана на нижнем рисунке. Здесь IN3 установлен в логический ноль, а IN4 в логическую единицу. Теперь ток течёт в обратном направлении (левая клемма – плюс, правая – минус), заставляя второй двигатель крутиться в противоположную сторону.
Технические характеристики
Подключение L298N к плате Arduino
Работать с модулем L298N довольно просто и комфортно. Здесь не придётся изучать тонны литературы с описанием замороченных протоколов. Все сводится к простому переключению логических уровней на выводах Arduino плюс к генерации ШИМ, если требуется управлять скоростью вращения.
Так как драйвер способен управлять двумя типами моторов (щёточным или шаговым), то и работа с ним строится по-разному. Рассмотрим для начала подключение обычных щёточных моторов постоянного тока и управление ими с помощью платы Arduino Nano. На рисунке №4 показана соответствующая схема подключения.
Рисунок №4 – схема подключения двух щёточных двигателей постоянного тока
Следует обратить внимание, что в схеме предусмотрена возможность управления скоростью вращения, поэтому выводы ENA и ENB драйвера подключены к пинам Arduino, способным выдавать ШИМ-сигнал. Arduino питается от отдельного источника 7-12 В. Если напряжение питания моторов лежит в этом же диапазоне, то можно объединить питающие цепи в одну общую. Также необходимо следить за тем, чтобы минусовые провода всех элементов схемы были соединены между собой.
Для демонстрации возможностей модуля, напишем скетч, который будет вращать моторы с различной скоростью и периодически менять направления их вращения. Ниже приведена программа с подробными комментариями, которая реализует задуманный алгоритм.
В самом верху программы задаются макроопределения всех выводов, используемых в проекте. В функции Setup() все выводы Arduino Nano, участвующие в управлении, задаются в качестве выхода. На выводах IN1-IN4 выставляются логические нули, чтобы двигатели гарантированно не вращались в момент старта программы. В главном цикле, программа обеспечивает вращение двигателей в одном направлении, увеличивая их скорость каждые 3 секунды. Когда разгон вырастает до максимального, моторы начинают вращаться в обратном направлении, постепенно замедляя скорость. На пике сбрасывания скорости, алгоритм повторяется заново. Как видим, сложного здесь ничего нет. Теперь разберёмся с шаговым двигателем. На рисунке №5 показана схема его подключения к плате Arduino Nano.
В качестве демонстрационной модели использован популярный шаговый двигатель NEMA17. Он способен вращаться с частотой до 60 оборотов в минуту и имеет разрешающую способность 200 шагов на один оборот. Следует обратить внимание, что выводы ENA и ENB должны быть подтянуты к +5V путём установки перемычек на самом модуле. Таким образом управляющему сигналу будет разрешено проходить на обмотки шагового двигателя. Также, в случае использования двигателя NEMA17, напряжение его питания не должно превышать 12V. Ниже приведён пример кода с комментариями, который заставит двигатель вращаться в разные стороны, меняя своё направление после каждого полного оборота. В программе использована стандартная библиотека Stepper.h, которая значительно упрощает процесс разработки ПО для проектов с шаговыми двигателями.
Как можно заметить, библиотека сокращает код до минимума, так что разобраться в нём не составит никакого труда даже начинающему программисту.
Пример использования
В пластиковом корпусе удалось разместить все необходимые элементы схемы, а именно: источник питания, Arduino Nano и модуль L298N. ИК-приемник TSOP-1738 был вынесен на верх корпуса, чтобы обеспечить надёжную связь с пультом ДУ. Ведущие колёса с моторами закреплены снизу при помощи двухстороннего скотча. В качестве переднего колеса используется поворотный ролик от кресла. На рисунке №8 показан итоговый результат сборки.
Ниже приведён исходный код управления роботом-машинкой с подробными комментариями.