Шаговые двигатели не имеют коммутаторов и щеток. Это синхронные двигатели постоянного тока с электронно-коммутируемым магнитным полем, вызывающим вращение якоря (его магнитов). Можно считать, что шаговые двигатели управляются цифровыми импульсами, и в шаговом двигателе полный угол поворота ротора разделен на дискретное количество шагов. Количество этих ступеней (фаз) равно количеству магнитов, расположенных вокруг центрального сердечника.
Конструкция шагового двигателя
Теория работы шаговых двигателей. В отличие от двигателей постоянного или переменного тока, для шаговых двигателей требуется последовательное питание, то есть они должны получать фиксированную последовательность импульсов для отдельных катушек. Также бывают биполярные и униполярные двигатели. Униполярный шаговый двигатель отличается от биполярного тем, что имеет дополнительный отвод обмотки, который разделяет обмотку на две части. Обычно биполярный шаговый двигатель имеет 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 команды и крутить двигатель.
Необходимые компоненты
- Микроконтроллер ATmega16 (купить на AliExpress).
- Программатор AVR-ISP (купить на AliExpress), USBASP (купить на AliExpress) или другой подобный.
- Кварцевый генератор 16 МГц (купить на AliExpress).
- Шаговый двигатель 28BYJ-48 (купить на AliExpress).
- Драйвер двигателей ULN2003 (купить на AliExpress) или L293D (купить на AliExpress).
- Конденсатор 100 нФ (2 шт.) (купить на AliExpress).
- Конденсатор 22 пФ (2 шт.) (купить на AliExpress).
- Кнопка.
- Светодиод (купить на AliExpress).
- Макетная плата.
- Соединительные провода.
- Источник питания с напряжением 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 и шаговым электродвигателем.
Atmega16 | ULN2003 | L293D |
A0 | IN1(PIN1) | IN1(PIN2) |
A1 | IN2(PIN2) | IN2(PIN7) |
A2 | IN3(PIN3) | IN3(PIN10) |
A3 | IN4(PIN4) | IN4(PIN15) |
Шаговый двигатель | ULN2003 | L293D |
Orange | OUT1(PIN16) | OUT1(PIN3) |
Yellow | OUT2(PIN15) | OUT2(PIN6) |
Pink | OUT3(PIN14) | OUT3(PIN11) |
Blue | OUT4(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 обычно поставляется с радиатором. Желательно установить его перед использованием драйвера.