AVR Урок 18. Подключаем шаговый двигатель. Часть 1

Двигатели постоянного тока нашли множество применений, но непрерывное и плавное вращение ротора не всегда требуется. Естественная особенность двигателя BLDC, заключающаяся в том, что для его вращения необходимо постоянно переключать напряжения между обмотками, способствовала развитию шаговых двигателей. Их ротор может вращаться с определенными приращениями и оставаться стабильным в этих состояниях даже если управление прерывается. Возобновление подачи напряжения на катушки вызывает продолжение вращения.

Шаговые двигатели не имеют коммутаторов и щеток. Это синхронные двигатели постоянного тока с электронно-коммутируемым магнитным полем, вызывающим вращение якоря (его магнитов). Можно считать, что шаговые двигатели управляются цифровыми импульсами, и в шаговом двигателе полный угол поворота ротора разделен на дискретное количество шагов. Количество этих ступеней (фаз) равно количеству магнитов, расположенных вокруг центрального сердечника.

Конструкция шагового двигателя

Теория работы шаговых двигателей. В отличие от двигателей постоянного или переменного тока, для шаговых двигателей требуется последовательное питание, то есть они должны получать фиксированную последовательность импульсов для отдельных катушек. Также бывают биполярные и униполярные двигатели. Униполярный шаговый двигатель отличается от биполярного тем, что имеет дополнительный отвод обмотки, который разделяет обмотку на две части. Обычно биполярный шаговый двигатель имеет 4 или 8 контактов, а униполярный — 5 или 6 контактов.

Как крутить шаговый двигатель

Шаговый двигатель работает от подачи комбинаций напряжения в разных направлениях на его обмотки, у этого шагового двигателя 2 обмотки — 4 провода, первая обмотка — черный (A) и зеленый (A*) провод, вторая обмотка — красный (B) и синий (B*). За одну смену комбинаций делается 1 шаг — 1,8 градусов. Если комбинации быстро менять, то двигатель будет быстро и точно позиционироваться — крутиться. Смена комбинаций возможна в двух направлениях, соответственно двигатель будет крутиться вперед или назад.
Чтобы крутить шаговый двигатель, надо:

1) Собрать устройство — USB контроллер шагового двигателя на микроконтроллере AVR и драйвер шагового двигателя, 2 в 1. Перед тем как собирать это сложное устройство, рекомендую сначало отдельно собрать и проверить работу только USB контроллера, его я уже собрал вот тут — контроллер USB. Если USB связь работает нормально, то можно приступать к изготовлению драйвера.

2) Написать программу для компьютера, которая будет посылать USB команды устройству.

3) Написать программу для микроконтроллера AVR, которая будет принимать USB команды и крутить двигатель.

Необходимые компоненты

  1. Микроконтроллер ATmega16 (купить на AliExpress).
  2. Программатор AVR-ISP (купить на AliExpress), USBASP (купить на AliExpress) или другой подобный.
  3. Кварцевый генератор 16 МГц (купить на AliExpress).
  4. Шаговый двигатель 28BYJ-48 (купить на AliExpress).
  5. Драйвер двигателей ULN2003 (купить на AliExpress) или L293D (купить на AliExpress).
  6. Конденсатор 100 нФ (2 шт.) (купить на AliExpress).
  7. Конденсатор 22 пФ (2 шт.) (купить на AliExpress).
  8. Кнопка.
  9. Светодиод (купить на AliExpress).
  10. Макетная плата.
  11. Соединительные провода.
  12. Источник питания с напряжением 5 Вольт.

USB контроллер шаговых двигателей и USB драйвер шагового двигателя

Взятый нами двигатель является гибридным и поддерживает несколько вариантов управления. Управлять двигателем будем биполярным методом и соответственно собираем мы драйвер биполярного шагового двигателя с USB контроллером. Сначало покажу готовый результат, а потом подробно рассмотрим его. Вот фото собранного драйвера шагового двигателя с USB управлением, который я собрал:

Драйвер шагового двигателя с USB управлением своими руками

На картинке сверху — биполярный (гибридный) шаговый двигатель NEMA 23 с потреблением — 3А тока на обмотку. Под ним — импульсный блок питания 360 Вт, 24 В, 15 А. Мощности блока хватает на 15 / 3 = 5 одновременно запитанных обмоток, у одного двигателя 2 обмотки, т.е хватит на 2 одновременно работающих двигателя (4 обмотки). Я не вижу необходимости включать одновременно больше одного двигателя, в случае если необходимо двигаться по кривой траектории, то нужно чередовать короткие включения то одного, то другого двигателя. Так что имеющейся мощности с запасом хватает. Двигатель и блок питания подключены к устройству, которое также подключено через USB к компьютеру. Все соединено по схеме.
Схема драйвера биполярного шагового двигателя и USB контроллера (схема длинная и нуждается в прокрутке для просмотра):

Драйвер шагового двигателя USB на микроконтроллере AVR своими руками

Электронные компоненты, которые надо купить для сборки устройства по схеме:
ATmega16A

160 РУБ. ШТ.КУПИТЬ

Что это:

Микроконтроллер

Управление:

40 линий

Память программы:

16 Kb

Драйвер IR2101

50 РУБ. ШТ.КУПИТЬ

Что это:

Драйвер ключей

Ключи:

2 транзистора

Корпус:

DIP-8

Транзистор IRF540N

35 РУБ. ШТ.КУПИТЬ

Что это:

Ключ

Максимальный ток:

33 A

Макс. напряжение:

100 V

Диод Зенера 3V6

2 РУБ. ШТ.КУПИТЬ

Пропускает:

3.6 В

Тип:

Понижающий

Диод 1n4148

2 РУБ. ШТ.КУПИТЬ

Тип:

Обычный

Максимальный ток:

0.15 A

Макс. напряжение:

100 V

Конденсатор 20 pF

4 РУБ. ШТ.КУПИТЬ

Емкость:

20 pF

Тип:

Керамический

Макс. напряжение:

50 V

Конденсатор 3.3 nF

4 РУБ. ШТ.КУПИТЬ

Емкость:

3.3 nF

Тип:

Керамический

Макс. напряжение:

50 V

Кварцевый генератор 12

5 РУБ. ШТ.КУПИТЬ

Частота:

12 МГц

Тип:

пассивный

Конденсатор 2A104J

5 РУБ. ШТ.КУПИТЬ

Тип:

Пленочный

Емкость:

0.1 uF (мкФ)

Макс. напряжение:

100V

Клеммник

15 РУБ. ШТ.КУПИТЬ

Контактов:

2

Зажим:

прикрутка

Резистор 68 Ом

1 РУБ. ШТ.КУПИТЬ

Сопротивление:

68 Ом

Мощность:

0.25 Вт

Резистор 1.5 кОм

1 РУБ. ШТ.КУПИТЬ

Сопротивление:

1.5 кОм

Мощность:

0.25 Вт

Резистор 100 Ом

1 РУБ. ШТ.КУПИТЬ

Сопротивление:

100 Ом

Мощность:

0.25 Вт

Резистор 10 Ом

1 РУБ. ШТ.КУПИТЬ

Сопротивление:

10 Ом

Мощность:

0.25 Вт

Резистор 0.1 Ом

15 РУБ. ШТ.КУПИТЬ

Сопротивление:

0.1 Ом

Мощность:

5 Вт

Тип:

Цементный

Кабель USB

50 РУБ.НЕТ В НАЛИЧИИ Нужно 1
шт.

Интерфейс:

USB 2.0

Длина:

100 см

Макетная плата

190 РУБ. ШТ.КУПИТЬ

Размер:

63 x 2 горизонтальных линий и 4 вертикальные линии

Проводки

80 РУБ. ШТ.КУПИТЬ

Тип:

Навесные

Количество:

40

Набор проводков

210 РУБ. ШТ.КУПИТЬ

Количество:

140
Дополнительно нужно (нет в наличии):
1) Модуль питания DC-DC SMAU01L-12 (вместо него пойдет любой конвертер DC-DC с 5V до 10V-15V) — 1 шт., возможно можно без него, от 5V питать (не проверено)

Главным компонентом схемы является программируемый микроконтроллер AVR — ATmega16A, если вы не знаете как с ними работать (записывать программу), сначало ознакомьтесь с основами такой работы, которые подробно описаны в первой статье управление машиной. Для устройства можно использовать и другой микроконтроллер AVR, я выбрал ATmega16A, т.к. в нем с запасом имеется много памяти и контактов для подключения нескольких двигателей и большого количества рабочих инструментов.

Слева от ATmega16A находятся компоненты для организации связи по протоколу USB — к выводам XTAL подключен внешний кварцевый резонатор с USB-совместимой частотой 12 МГц. Для сглаживания сигнала у него есть 2 конденсатора по 20 пФ, все это соединяется с минусом питания. К контактам, через которые идет обмен сообщениями с USB, подключены 2 резистора по 68 Ом, как того требует протокол USB. Резистор на 1.5 кОм, подключенный к D- линии задает низкоскоростной режим работы USB устройства. Диоды Зенера 3V6 понижают напряжение на линиях, через которые идет обмен данными USB с 5 до 3.6V.

Управление двигателем подключается к контактам PB0, PB1, PB2, PB3, на остальные свободные P-контакты можно в будующем подключить еще двигатели и рабочие инструменты, но пока они пустуют. Микроконтроллер ATmega16 отдает команды и обрабатывает USB сигналы после того как в него записана программа (ниже она будет написана). После него идет конструкция из микросхем IR2102 и транзисторов IRF540N (2 так называемых H-моста) — она приводит шаговый двигатель в движение.

Драйвер IR2101 нужен для преодаления большой емкости затвора транзистора IRF540N, что позволяет открывать и закрыть транзистор с большой скоростью (например принимать сигнал ШИМ, которым может регулироваться скорость двигателя при необходимости — об этом сигнале дальше напишу), что нам и нужно. К сожалению для питания этого драйвера необходимо 10-15V, у нас есть только 5V от USB. Поэтому пришлось поставить компонент DC-DC SMAU01L-12, который преобразует 5V в 12V, вместо него можно использовать любой другой способ получения такого напряжения, например, при помощи трансформатора или любым другим путем. К VCC подключается +12V, к COM -12V. Один драйвер работает с 2мя транзисторами — верхним (H) и нижним (L). Контакты HIN и LIN — входной сигнал с микроконтроллера для верхнего и нижнего транзистора, по этому сигналу транзисторы открываются и закрываются. HO и LO — это выходные сигналы, транзисторы подключаются гейтами (G) к этим контактам. Они подключаются не просто так — справа на линиях 2 резистора 10/100 Ом и диод, они нужны для нормальной работы транзисторов — чтобы они замедлялись при открытии и не замедлялись при закрытии, эти транзисторы слишком быстро открываются и это может вызвать проблемы. Диод и конденсаторы 3300 пФ — нужны для работы драйвера IR2101 согласно документации на эту микросхему.

Каждая обмотка (фаза) двигателя (у двигателя 2 обмотки A и B — 4 контакта) подключается к H-мосту из транзисторов IRF540N. H-мост — это специальная схема соединения транзисторов, которая позволяет подавать через них напряжение высокого уровня (24V) в разных направлениях. Один мост изготавливается из 4-х транзисторов. В итоге здесь вы видите 2 H-моста, которые позволяют гонять разнонаправленное напряжение высокого уровня по 2м обмоткам двигателя и тем самым крутить его.

Обратите внимание, что в мосту — HIN верхнего драйвера соединяется с LIN нижнего драйвера, а LIN верхнего с HIN нижнего. Это сделано для одновременной подачи сигналов. Если вы включили HIN сверху, то обязаны включить LIN с низу, иначе произойдет короткое замыкание. Такое подключение позволяет автоматом включать пару. Впрочем короткое замыкание все же возможно, если вы откроете и HIN и LIN на одном мосте, поэтому не допускайте этого. На контактах PB0 — PB3 допустимы только значения 0000, 1010, 0110, 0101, 1001. Их перебор крутит двигатель. Подача других значений скорей всего приведет к короткому замыканию моста.

Мощные резисторы с низким номиналом 0.1 Ом и высокой мощностью (3-5 Вт) нужны для защиты от высокого тока — это шунты. Если что их можно снять и заменить простым соединением с минусом питания, если например не будет хватать мощности. Для слабых резисторов мощность берется от тока USB: 0.05 А * 5 V = 0.25 Вт (ток USB задается программно, по умолчанию в нашей программе стоит 0.05). Черная полоска на диодах соответствует вертикальной линии на схеме.

Шаговый двигатель и блок питания подключаются к H-мостам, как показано на схеме. Минусы питания 24V, 12V и 5V соединяются. Между плюсом и минусом 24V линии ставится сглаживающий пленочный конденсатор.

Отдельное крупное фото драйвера шагового двигателя:

Драйвер шагового двигателя своими руками

Сразу подключать питание высокого уровня (24V) к схеме и шаговый двигатель не рекомендую. Сначало лучше проверьте правильность работы устройства. Для этого можно использовать 5 светодиодов и отсек для батареек в качестве источника питания (3V). 1 светодиод подключается к контакту PA0 длинной стороной (+) и короткой стороной (-) к минусу питания. Этот желтый диод показан на первом фото сверху, на схеме его нет. С его помощью можно проверить работу USB контроллера, зажигать его и гасить по команде из программы. 2 других светодиода подключите на место первой обмотки шагового двигателя в разнонаправленном положении — один длинной стороной к первому контакту, другой длинной стороной ко второму контакту. Оставшиеся 2 светодиода таким же образом подключите на место второй обмотки. Вместо импульсного блока питания 24V подключите батарейный отсек и батарейки на 1.5V (2 батарейки — это 3V). Проверка устройства — при посылке команды кручения двигателя загораются различные светодиоды. Все светодиоды должны загораться в свое время при переборе комбинаций. Медленный перебор комбинаций позволяет точно убедиться в том, что все работает правильно.
Светодиод

3 РУБ. ШТ.КУПИТЬ

Цвет:

Белый

Напряжение:

3 V

Отсек для батареек

35 РУБ. ШТ.КУПИТЬ

Места:

2 с проводками

Размер батареек:

AA

Батарейки

10 РУБ.НЕТ В НАЛИЧИИ Нужно 2
шт.

Напряжение:

1.5 V

Размер:

AA

Работа схемы

В следующих двух таблицах представлены схемы соединений входных и выходных контактов драйверов моторов ULN2003 или L293D с микроконтроллером AVR ATmega16 и шаговым электродвигателем.

Atmega16ULN2003L293D
A0IN1(PIN1)IN1(PIN2)
A1IN2(PIN2)IN2(PIN7)
A2IN3(PIN3)IN3(PIN10)
A3IN4(PIN4)IN4(PIN15)
Шаговый двигательULN2003L293D
OrangeOUT1(PIN16)OUT1(PIN3)
YellowOUT2(PIN15)OUT2(PIN6)
PinkOUT3(PIN14)OUT3(PIN11)
BlueOUT4(PIN13)OUT4(PIN14)

Схема устройства с драйвером мотора ULN2003 приведена на следующем рисунке.

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

Внешний вид устройства с использованием ULN2003 приведен в начале статьи, а с использованием L293D он будет выглядеть следующим образом:

Соедините все компоненты устройства в соответствии с приведенной схемой соединений (одной из двух). Для управления шаговым двигателем мы будем использовать PORTA микроконтроллера Atmega16. К контактам шагового двигателя нет необходимости подключать питание – для управления им нам понадобятся только контакты его катушек (coil pins) – верно для ULN2003, для L293D немного по другому. Очень важен порядок контактов для того чтобы шаговый двигатель работал корректно. Для микросхемы ULN2003 используются четыре ее входа и четыре ее выхода – входы соединяются с контактами PORTA микроконтроллера, а выходы – с сигнальными контактами шагового двигателя. Также подсоедините кнопку к контакту сброса (Reset pin) чтобы иметь возможность осуществлять сброс микроконтроллера Atmega16 всегда, когда нам это понадобится. Подсоедините к микроконтроллеру кварцевый генератор. Все устройство должно быть запитано напряжением 5В.

Программа для Windows на двигатель

Уже готовую программу для Windows на USB контроллер нужно немного изменить. В итоге должны перебираться комбинации для подачи напряжения в разных направлениях, нам нужно менять значения на портах PB0, PB1, PB2, PB3, следующие комбинации нужны для запуска двигателя 1010, 0110, 0101, 1001. Перебор их в одну сторону — кручение в эту сторону, в другую — кручение обратно. 0000 — отключает питание, необходимо в конце перебора, иначе двигатель нагреется. Сейчас над этой программой ведется работа, так что возьмите её из USB контроллера, связь там работает, по аналогии можно сделать как нужно остальное у себя.

Модуль ввода ключа

KEY0 на плате разработки STM32F4 подключен к PE4, KEY1 подключен к PE3, KEY2 подключен к PE2, а KEY_UP подключен к PA0. Как показано:


В этом эксперименте мы установили нажатие KEY-UP, двигатель вернется к абсолютному началу координат на заданной частоте; нажмите KEY0, двигатель будет вращаться по часовой стрелке с заданной частотой; нажмите Нажмите KEY1, двигатель вращается против часовой стрелки на заданной частоте. Вот общие шаги для реализации клавишного ввода: ① Кнопка включения соответствует часам порта ввода-вывода. Функция вызова: RCC_AHB1PeriphClockCmd (); ② Инициализация режима ввода-вывода: ввод вверх / вниз. Функция вызова: GPIO_Init(); ③ Сканирование уровня порта ввода-вывода (функция библиотеки / регистр / работа с битами). Соответствующий код выглядит следующим образом:

void KEY_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOE, ENABLE);// Включить GPIOA, часы GPIOE GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4; // KEY0 KEY1 KEY2 соответствующий вывод GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;// Нормальный режим ввода GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100M GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;// подтянуть GPIO_Init(GPIOE, &GPIO_InitStructure);// Инициализация GPIO2, 3, 4 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;// WK_UP соответствующий вывод GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_DOWN; // выпадающий GPIO_Init(GPIOA, &GPIO_InitStructure);// Инициализация GPIOA0 } u8 KEY_Scan(u8 mode) { static u8 key_up=1;// кнопка выпуска if(mode)key_up=1; // Поддержка соединения if(key_up&&(KEY0==0||KEY1==0||KEY2==0||WK_UP==1)) { delay_ms(10);// Дебад key_up=0; if(KEY0==0)return 1; else if(KEY1==0)return 2; else if(KEY2==0)return 3; else if(WK_UP==1)return 4; }else if(KEY0==1&&KEY1==1&&KEY2==1&&WK_UP==0)key_up=1; return 0;// не нажата ни одна клавиша }

Система охлаждения — радиатор

Чрезмерное рассеивание мощности микросхемы драйвера A4988 приводит к повышению температуры, которая может выйти за пределы возможностей микросхемы, что, вероятно, приведет к ее повреждению.

Даже если микросхема драйвера A4988 имеет максимальный номинальный ток 2 А на катушку, микросхема может подавать только около 1 А на катушку без перегрева.

Для достижения более 1 А на катушку требуется радиатор или другой метод охлаждения.

Драйвер A4988 обычно поставляется с радиатором. Желательно установить его перед использованием драйвера.

Рейтинг
( 2 оценки, среднее 5 из 5 )
Понравилась статья? Поделиться с друзьями:
Для любых предложений по сайту: [email protected]