Шаговый двигатель схема подключения usb
Мы хотим сделать так, чтобы наши устройства управлялись с компьютера программой и можно было использовать возможности компьютера для управления машиной. Для этого нам надо организовать связь по USB между нашим устройством и программой на компьютере.
Прежде чем приступить к этому вы должны были в предыдущей статье ознакомится с Управлением машиной и получить знания о том, что такое микроконтроллер AVR. Если этого не было, сделайте это.
Далее нам надо для связи по USB сделать устройство, программу для микроконтроллера AVR и программу для компьютера.
USB контроллер шаговых двигателей и USB драйвер шагового двигателя
Взятый нами двигатель является гибридным и поддерживает несколько вариантов управления. Управлять двигателем будем биполярным методом и соответственно собираем мы драйвер биполярного шагового двигателя с USB контроллером. Сначало покажу готовый результат, а потом подробно рассмотрим его. Вот фото собранного драйвера шагового двигателя с USB управлением, который я собрал:
Подготовка программы ПК
Изменение программы для микроконтроллера
1) Открываем файл C:\OpenRoboFW\main.c, находим там область кода, обозначенную как настройка портов, надо установить все свободные порты на вывод командами DDR, меняем содержимое области на следующий код. Код для main.c:
2) Открываем файл C:\OpenRoboFW\main.c, находим область кода, обозначенную как программа реакции на USB пакет, сделаем, чтобы по команде зажигались светодиоды на всех свободных линиях. Меняем содержимое области на. Код для main.c
К тому же неплохо бы научится вставлять свои функции, которые будут выполняться по вашим командам, пока есть только on, off, status, нужно добавить еще команд, например добавим команду discoteka, по которой будет вызываться какая-нибудь наша функция в микроконтроллере, например - светодиоды горят через один на порте B. Добавим в микроконтроллере обработку дополнительных кодов, пусть это будет код 2, т.к. 1 и 0 уже используются для функций on и off, из программы для компьютера будем посылать потом микроконтроллеру код 2 функцией, вызываемой по команде discoteka. Опять меняем файл C:\OpenRoboFW\main.c, область реакции. Код для main.c
Программа на микроконтроллер AVR для USB связи
1) Скачиваем исходные коды OpenRoboFW и распакуйте архив на диск C:\, я собрал этот архив из файлов проекта V-USB, настроил их на Attiny2313A и тактовую частоту 12 МГц (эти настройки меняются в файле Makefile, если используется другой микроконтроллер), упростил код для внесения изменений. V-USB дает нам исходники программ с идентификаторами VID и PID, которые нужны для распознания USB устройства компьютером. На всякий случай вот ссылка на проект . После распаковки архива содержимое директории выглядит так:
![]() | Назначение важных файлов: main.c - главный файл программы на языке C, она осуществляет обработку информации, пришедшей по USB, и в ней программируется реакция микроконтроллера на USB пакеты с компьютера Makefile - параметры сборки, тип микроконтроллера (взяли - attiny2313a), частота, информация по фьюзам для других микроконтроллеров, при использовании другого микроконтроллера, в этом файле его нужно прописать в строке DEVICE (например - atmega16a) usbconfig.h - параметры USB, порт подкючения линии D-, ток |
Откройте main.c и обратите внимание на 2 области кода, которые там выделены - программа реакции на USB пакет и настройка портов. В этих областях надо вставлять свой код, остальное можно не трогать. Для примера там уже стоит код, его можно менять. В приходящем пакете USB с компьютера есть 2 параметра - p1 и p2, которые передаются из программы в виде параметров, в зависимости от их значений можно менять состояние линий микроконтроллера (портов) в программе реакции.
2) Скачиваем программу WinAVR и устанавливаем, она нужна для создания HEX-прошивки микроконтроллера AVR, сайт WinAVR
3) Запускаем командную строку Windows, которая находится тут c:\Windows\System32\cmd.exe появляется чёрное окно. В этом окне вводим 2 команды (набираем команду, нажимаем enter):
Схема USB устройства на микроконтроллере AVR
Красным и чёрным проводом запитываем микроконтроллер - эти линии просто подключаются к VCC и GND. Линии с данными USB - это D+ и D- подключаются к линиям микроконтроллера, не к случайным, а к тем что заданы в программе для микроконтроллера, которую позднее будем делать, сразу скажу что это будут линии PD2 и PD4. Просто так нельзя подключать их, надо на пути поставить резистор на 68 Ом по требованию стандарта USB и еще снизить напряжение на данных линиях с 5V до 3.6V. Для резисторов посчитаем их мощность - ток USB задается в программе для микроконтроллера и мы его зададим на уровне 0.05 A, значит мощность резисторов 0.05 A * 5 V = 0.25 Вт. Такие и берем. Напряжение снижается параллельным подключением дидов Зенера 3V6 как показано на рисунке, эти диоды надо воткнуть правильной стороной, напомню что чёрная полоска на диоде с одной стороны должна быть направлена в сторону линий D+ и D-, а обратная сторона к минусу питания. И последнее, чтобы работало устройство USB, надо резистором в 1.5 кОм указать режим его работы, подключаем его к D-, это означает низкоскоростной режим, который нам нужен, поскольку мы не планируем передавать большие объемы данных, а только будем посылать простые сигналы, низкоскоростной режим нам нужен. Чтобы увидить что наше устройство работает, подключим светодиод к линии PB0, длинной плюсовой стороной к линии, а другой стороной к минусу питания.
Также воспользуемся вспомогательными инструментами для удобства - это зажим на 20 гнезд, чтобы легко извлекать микроконтроллер для перепрограммирования. И это 2 клеммника, чтобы прикрутить провода USB к макетной плате. Вообщем для сборки устройства нам потребуется сделать такой закуп:
Собранное готовое к работе USB устройство выглядит так:
Драйвер шагового двигателя с USB управлением своими руками
Схема драйвера биполярного шагового двигателя и USB контроллера (схема длинная и нуждается в прокрутке для просмотра):
Настраиваем системную переменную Path для MinGW
Подготавливаем программу МК
Также надо прошить fuse-биты настроек микроконтроллера, чтобы изменить его тактовую частоту на совместимую с USB стандартом. Встроенной подходящей частоты нет, поэтому применяется внешний источник тактовой частоты 12 МГц. Для прошивки настроек fuse-битов устройство с программатором надо доработать, подключить к микроконтроллеру внешний кварцевый генератор 12 МГц и 2 конденсатора 20 пФ по схеме как на устройстве USB, т.е. в случае с ATTiny2313A к линиям PA1 и PA0, и также соединить это всё с минусом питания, вообщем как на схеме USB устройства, смотрите на фото ниже как подключено. Это нужно для того, чтобы устройство продолжило работу после установки для него нового источника тактового сигнала, именно этот источник 12 МГц и подключаем. Не забудьте кроме программы также прошить fuse-биты.
Изменение программы для компьютера
1) Открываем файл C:\OpenRobo\set-led.c
3) Редактируем файл set-led.c вставляем сверху от строчки
Обратите внимание на функцию usb_control_msg, в ней можно передать 2 изменяемых параметра (в первом у нас передаётся 2 или переменная isOn, которая равна 1 или 0), следующее число (там стоит 0) может передать еще 1 значение, например, 1 переменная может быть всё также быть изначальной командой на on или off, а второй переменной можно передать, например, номер порта, который следует включить. Получить доступ к этим параметрам в программе для микроконтроллера можно по именам p1 и p2, для этого примера p1=2, p2=0.
Меняем настройки программатором
При этом установите такие биты конфигурации:
Для ATtiny2313A (наш случай):
CKSEL0..3=1111 SUT0..1=10 CKOUT=1 CKDIV=1 RSTDISBL=1 BODLEVEL2..0=101 WDTON=1 SPIEN=0 EESAVE=1 DWEN=1
Установите В справочнике эти fuse-биты и прошейте их в микроконтроллер полученной строкой через программу AVR dude, о том Как прошить тут. Также дам на всякий случай fuse-биты для других микроконтроллеров.
Для ATmega8A:
CKSEL0..3=1111 SUT0..1=10 BODEN=0 BODLEVEL=1 BOOTRST=1 BOOTSZ0..1=00 EESAVE=1 CKOPT=0 SPIEN=0 WDTON=1 RSTDISBL=1
Для ATmega16A:
CKSEL3..0=1111 SUT0..1=10 BODEN=0 BODLEVL=1 BOOTRST=1 BOOTSZ0..1=00 EESAVE=1 CKOPT=0 SPIEN=0 JTAGEN=1 OCDEN=1 LB1..2=00 BLB=0000
Теперь когда программа написана и записана в микроконтроллер, можно проверить правильность сборки устройства. Напишите программу на компьютер для USB связи, читайте далее как это сделать и при этом в процессе будет установлен фильтр для возможности опознания устройства. Подключите устройство к USB порту компьютера, установите фильтр как далее будет описано, если все правильно было собрано и установлено, то оно будет обнаружено и опознано как LEDCtlHID. Если этого не произошло, то ищите проблему и ошибки при сборке устройства или при установке программ, еще раз внимательно все сверьте и проверьте, что ничего не пропущено и что все контакты соединены или запаяны как надо. Бывает проблема тут, если пайка была совершена с неконтактами, с не правильными контактами или не всеми контактами, а также что элементы схемы были повреждены высокой температурой паяльника, и устройство поэтому не работает. Важно собирать устройство именно на макетной плате первый раз.
Изменяем программы под наши нужды
Берём под контроль все порты, прибавляем свои функции. И так, теперь в C:\OpenRobo размещены исходные коды программы для компьютера, а в C:\OpenRoboFW исходные коды программы для микроконтроллера. Их можно изменять, но после каждого изменения надо их занова пересобирать (и перепрошивать микроконтроллер), делать это теперь вы умеете - см. выше пример - пересобрать обе программы можно 4-мя командами в cmd:
USB устройство своими руками
Программа на компьютер для USB связи
Для начала сделаем простую консольную программу, потом будем делать программу с окнами.
3) Скачиваем программу MinGW, которая нужна для сборки программы из исходника. Устанавливаем. Сайт разработчика MinGW. После установки зайдите в Панель управления, Система, Дополнительные параметры системы, Дополнительно (вкладка), Переменные среды (кнопка), Системные переменные (список), Переменная Path (найти в списке, выделить, нажать кнопку Изменить). Дописываем в поле Значение переменной в конце ;c:\MinGW\bin\ и нажимаем ОК, надеюсь вы установили MinGW в C:\MinGW, иначе надо путь другой прописать.
Как сделать программу для Windows
1) Заходим на сайт, выбираем русский язык, нажимаем INSTALL NOW.
2) После установки запускаем, нажимаем Создать проект. Для начала создадим простую программу с 1 кнопкой - нажимаем эту кнопку, текст в ней меняется.
3) Выбираем шаблон Приложение Windows Forms, внизу вводим название программы, нажимаем OK.
4) Перетаскиваем справа элемент Button на центральное окно с формой и оставляем его внутри формы.
5) Кликаем на форму и на кнопку, при этом справа внизу есть окно Свойства, его содержимое меняется. В этом окне задаём необходимые свойства элементов - текст кнопки и окна. Редактируем свойство Text, пишем там любой текст, например, Моя кнопка. Текст на кнопке меняется, это видно на форме в центральном окне.
6) Теперь сделаем так, чтобы при нажатии на эту кнопку, ее свойство, которое определяет текст на ней менялось на другое. Так же можно менять любые другие свойства.
7) Делаем двойной клик на кнопке Моя кнопка, которая находится в форме в центральном окне, попадаем в файл кода Form.h (его можно выбрать в любое время слева в меню). В этом файле после двойного клика была создана функций button1_Click (остальной код автоматом был создан по шаблону при создании проекта), курсор находится внутри нее, нажмите Enter, чтобы создать пустую строку, куда и будем писать код.
8) Как можно видеть в этом же файле чуть повыше есть разделы - button1 и form1, там заданы начальные установки для элементов - кнопки и формы. Воспользуемся ими, скопируем внутрь нашей функции клика по кнопке (это место отмечено красной стрелкой) строчку, где устанавливается название кнопки, а именно this->button1->Text = L"Моя кнопка"; Только текст Моя кнопка изменим на Работает!
9) Нажимаем на кнопку с зеленым треугольником, через некоторое время наша программа запустится (если вы не совершили ошибок) и при нажатии на кнопку, текст внутри меняется с Моя кнопка на Работает!
10) Забрать готовую программу (файл .exe) можно в директории текущего пользователя
Весь процесс показан на картинках.
Это пример, демонстрирующий управление какими-либо устройствами через USB. Программа для PC написана на Delphi.
Особенности схемы
- Микроконтроллер PIC18F4550 с полноскоростным интерфейсом USB, работающим на частоте 48 МГц
- Совместимость с USB 2.0
- USB драйвер на кристалле
- Управление одним шаговым двигателем
- ПО микроконтроллера разработано под MPLAB C18
- Хост ПО для ПК написано на Delphi 6
Описание схемы
Иллюстрирующая пример принципиальная схема изображена на Рис. 1. Основная часть схемы – микроконтроллер PIC18F4550, ведущий обмен с ПК и управляющий шаговым двигателем. Питание +5 В для схемы берется с линии Vbus интерфейса USB. Исключение составляет шаговый двигатель, для питания которого нужен отдельный источник напряжения +Vmotor. Шина Vbus не может отдать в нагрузку ток, превышающий 250 мА. В связи с этим, если вы добавите в схему дополнительные элементы, и суммарный ток потребления превысит 250 мА, подключите к шине +5 В внешний источник, а Vbus не забудьте отсоединить.
Не соединяйте +Vmotor и Vbus.
В показанном примере шаговый двигатель управляется однофазным методом (A-C-B-D). При необходимости использовать другую схему управления, сделайте соответствующие изменения самостоятельно.
Рисунок 1. Пример схемы |
Прошивка микроконтроллера
ПО микроконтроллера разработано под MPLAB C18 с использованием USB драйвера фирмы Microchip. Если захотите добавить новые команды, или что-то изменить, посмотрите файлы user.c и use.h в папке user .
Программы для ПК
Программа для описываемого примера программа была написана на C++ программистами Microchip, и переписана автором на Delphi 6. По сравнению с оригиналом, изменены три команды:
- turn left (вращение влево),
- turn right (вращение вправо),
- Stop motor (остановить мотор).
Чтобы разобраться в деталях, смотрите PICDEM™ FS USB User’s Guide и соответствующие файлы.
Выше были рассмотрены наиболее важные общие вопросы использования шаговых двигателей, которые помогут в их освоении. Но, как гласит наша любимая украинская поговорка: «Не повірю поки не провірю» («Не поверю, пока не проверю»). Поэтому перейдем к практической стороне вопроса. Как уже отмечалось, шаговые двигатели – это удовольствие не из дешевых. Но они имеются в старых принтерах, считывателях гибких и лазерных дисков, например, SPM-20 (шаговый двигатель для позиционирования головки в дисководах 5"25 Mitsumi) или EM-483 (от принтера Epson Stylus C86), которые можно найти у себя в старом хламе или купить за копейки на радиобазаре. Примеры таких двигателей представлены на Рисунке 8.
Наиболее простыми для начального освоения являются униполярные двигатели. Причина кроется в простоте и дешевизне их драйвера управления обмотками. На Рисунке 9 приведена практическая схема драйвера, использованного автором статьи для униполярного шагового двигателя серии P542-M48 [6].
Рисунок 9. | Драйвер униполярного шагового двигателя. (Дополнительная информация по подключению на Рисунках 10 и 12). |
Естественно, что выбор типа транзистора для ключей управления обмотками должен происходить с учетом максимального тока коммутации, а его подключение учитывать необходимость заряда/разряда емкости затвора. В ряде случаев прямое соединение MOSFET с ИМС коммутатора может быть недопустимым. Как правило, в затворах устанавливаются последовательно включенные резисторы небольших номиналов. Но в ряде случае необходимо предусмотреть еще и соответствующий драйвер для управления ключами, который обеспечит заряд/разряд их входной емкости. В некоторых решениях предлагается в качестве ключей использовать биполярные транзисторы. Это подходит только для очень маломощных двигателей с небольшим током обмоток. Для рассматриваемого двигателя с рабочим током обмоток I = 230 мА ток управления по базе ключа должен составить, по крайней мере, 15 мА (хотя для нормальной работы ключа необходимо, чтобы ток базы равнялся 1/10 рабочего, то есть 23 мА). Но такой ток от микросхем серии 74HCхх забрать невозможно, поэтому потребуются дополнительные драйверы. Как хороший компромисс, можно использовать IGBT, сочетающие в себе достоинства полевых и биполярных транзисторов.
С точки зрения автора статьи, самым оптимальным для управления коммутацией обмоток двигателей небольшой мощности является использование подходящих по току и сопротивлению открытого канала RDC(ON) MOSFET, но с учетом рекомендаций, описанных выше. Мощность, рассеиваемая на ключах для выбранного в качестве примера двигателя серии P542-M48, при полной остановке ротора не превысит
PVT = RDC(ON) × I 2 = 0.25 × (0.230) 2 = 13.2 мВт.
Транзисторы IRLML2803 с RDC(ON) = 0.25 Ом имеют допустимую мощность рассеяния 540 мВ и постоянный ток стока 0.93 А при температуре 70 °С. Так что, они полностью соответствуют требованиям и обеспечат надежную работу драйвера. В большинстве случаев, учитывая низкие частоты коммутации, проведенной выше оценки вполне достаточно. Поскольку детальное рассмотрение особенностей работы ключей не входит в рамки данной статьи, то для их выбора и полного расчета можно воспользоваться методикой, приведенной, например, в [7].
Еще одним важным моментов является правильный выбор так называемых снаберных диодов, шунтирующих обмотку двигателя (VD1…VD4 на Рисунке 9). Назначение этих диодов – гасить ЭДС самоиндукции, возникающую при выключении управляющих ключей. Если диоды выбраны неверно, то неизбежен выход из строя транзисторных ключей и устройства в целом. Обратите внимание, что в мощные MOSFET такие диоды, как правило, уже встроены.
Режим управления двигателем задается коммутатором. Как уже было отмечено выше, наиболее удобным и эффективным является управление с перекрытием фаз (Рисунок 4б). Такой режим легко реализуется при помощи триггеров. Практическая схема универсального коммутатора, который использовал автор статьи как в ряде отладочных модулей (в том числе, и с приведенным выше драйвером), так и для практических применений, приведена на Рисунке 10.
Рисунок 10. | Схема универсального коммутатора шагового двигателя (с реверсом). |
Схема на Рисунке 10 пригодна для любых типов двигателей (униполярных и биполярных). Частота вращения двигателя задается внешним тактовым генератором (скважность любая), сигнал с которого подается на вход «ШАГИ», а направление вращения устанавливается через вход «НАПРАВЛЕНИЕ». Оба сигнала имеют логические уровни и, если для их формирования используются выходы с открытым коллектором, то потребуются соответствующие резисторы подтяжки (на Рисунке 10 они не показаны). Временная диаграмма работы коммутатора приведена на Рисунке 11.
![]() | |
Рисунок 11. | Временная диаграмма универсального коммутатора с реверсом. Верхние две осциллограммы – Q1 D2-2, Q2 D2-2; нижние две – Q1 D2-1, Q2 D2-1. Маркеры показывают область изменения очередности включения фаз. |
Хочу обратить внимание читателей: в Интернете вы могли встретить похожую схему, выполненную не на D-триггерах, а на JK-триггерах. Будьте внимательны! В ряде этих схем допущена ошибка в подключении ИМС. Если нет необходимости в реверсе, то схема коммутатора может быть значительно упрощена (см. Рисунок 12), при этом частота вращения останется неизменной, а диаграмма управления будет аналогичной той, которая приведена на Рисунке 11 (осциллограммы до переключения очередности фаз).
Рисунок 12. | Упрощенная схема коммутатора шагового двигателя (без реверса). |
Поскольку особых требований к сигналу «ШАГИ» не предъявляется, для его формирования может использоваться любой подходящий по уровням выходного сигнала генератор. Для своих отладочных модулей автор использовал генератор на базе ИМС таймера 555 (Рисунок 13).
Рисунок 13. | Регулируемый генератор импульсов для коммутатора шагового двигателя. |
Для питания собственно двигателя можно использовать схему, приведенную на Рисунке 14, а схему коммутатора и генератора питать или от отдельного источника питания +5 В или через дополнительный маломощный стабилизатор. Земли силовой и сигнальной частей в любом случае необходимо разделить.
Рисунок 14. | Схема питания шагового двигателя с режимами удержания и выключения. |
Схема на Рисунке 14 обеспечивает подачу двух стабильных по уровню напряжений для питания обмоток двигателя: 12 В в рабочем режиме и 6 В в режиме удержания. (Формулы, необходимые для расчета выходного напряжения, приведены в [8]). Рабочий режим включается подачей высокого логического уровня на контакт «ТОРМОЗ» разъема Х1. Допустимость снижения напряжения питания определяется тем, что, как уже отмечалось в первой части статьи, момент удержания шаговых двигателей превышает момент вращения. Так, для рассматриваемого двигателя P542-M48 момент удержания с редуктором 25:6 равен 19.8 Н·см, а момент вращения всего 6 Н·см. Этот подход позволяет при остановке двигателя уменьшить потребление мощности с 5.52 Вт до 1.38 Вт! Полное отключение двигателя осуществляется подачей высокого логического уровня на контакт «ВКЛ/ВЫКЛ» разъема Х1.
Если схема управления имеет выход на транзисторах с открытым коллектором, то в ключах VT1, VT2 необходимости нет, и выходы можно подключить непосредственно вместо упомянутых ключей.
Примечание: В этом варианте использование резисторов подтяжки недопустимо!
В качестве дросселя автор использовал катушку SDR1006-331K (Bourns). Общее питание формирователя напряжения для обмоток двигателя можно уменьшить до 16 – 18 В, что не скажется на его работе. Еще раз обращаю внимание: при самостоятельном расчете не забудьте учитывать, что формирователь обеспечивает режим с перекрытием фаз, то есть необходимо закладываться на номинальный ток схемы питания, равный удвоенному максимальному току обмоток при выбранном напряжении питания.
Задача управления биполярными двигателями более сложна. Основная проблема в драйвере. Для этих двигателей требуется драйвер мостового типа, и делать его, тем более в современных условиях, на дискретных элементах – неблагодарная задача. Да, этого и не требуется, так как имеется очень большой выбор специализированных ИМС. Все эти ИМС условно можно свести к двум типам. Первый – весьма популярная у любителей робототехники ИМС L293D STMicroelectronics [9] или ее варианты от Texas Instruments. Они относительно недороги и подходят для управления маломощными двигателями с током обмоток до 600 мА. ИМС имеют защиту от перегрева; устанавливать ее необходимо с обеспечением теплоотвода, которым служит фольга печатной платы [9]. Второй тип – это уже знакомая читателям по публикации в [1] ИМС LMD18245 [2].
Автор использовал драйвер L293DD в схеме для управления биполярным двигателем малой мощности типа 20M020D2B 12 В/0.1 А во время изучения проблемы использования шаговых двигателей. Этот драйвер удобен тем, что содержит четыре полумостовых ключа, поэтому для управления биполярным шаговым двигателем требуется всего одна ИМС. Полная схема, приведенная в [10] и многократно повторенная на интернет-сайтах, пригодна для использования в качестве тестовой платы. На Рисунке 15 показано включение ИМС драйвера (с привязкой к коммутатору из Рисунка 10), поскольку именно эта часть сейчас представляет для нас интерес, а Figure 6 (Bipolar Stepping-Motor Control) из спецификации [9] не совсем понятна начинающему пользователю. Она вводит в заблуждение, например, тем, что показаны внешние диоды, которые на самом деле встроены в ИМС и прекрасно справляются с обмотками маломощных двигателей. Естественно, что драйвер L293D может работать с любым коммутатором. Выключается драйвер логическим нулем по входу R.
Примечание: ИМС L293, в зависимости от изготовителя и суффиксов, указывающих на тип корпуса, имеют различия в нумерации и количестве выводов!
Рисунок 15. | Схема подключения драйвера L293DD. |
Для более мощных двигателей автор статьи использовал драйверы LMD18245. Полная схема тестового модуля приведена на Рисунке 16.
Рисунок 16. | Схема управления биполярным шаговым двигателем с использованием драйвера LMD18245. |
В отличие от L293DD, LMD18245 является не четырех-, а двухканальным драйвером, поэтому для реализации схемы управления требуются две ИМС. Драйвер LMD18245 выполнен по DMOS технологии, содержит схемы защиты от перегрева, короткого замыкания и выполнен в удобном 15-выводном корпусе ТО-220, что позволяет легко отводить от его корпуса излишнее тепло. В качестве задающего генератора использовалась схема, приведенная ранее на Рисунке 13, но с увеличенным до 4.7 кОм сопротивлением резистора R2. Для подачи одиночных импульсов используется кнопка BH1, позволяющая сдвинуть ротор двигателя на один шаг. Направление вращения ротора определяется положением переключателя S1. Включение и выключение двигателя осуществляется выключателем S2. В положение «ВЫКЛ» ротор двигателя освобождается, и его вращение импульсами управления становится невозможным. Режим удержания уменьшает максимальный ток, потребляемый обмотками двигателя, с двух до одного ампера. Если импульсы управления не подаются, то ротор двигателя остается в зафиксированном положении с пониженной вдвое мощностью потребления. Если же импульсы подаются, то вращение двигателя в этом режиме осуществляется с пониженным на малых скоростях вращения моментом. Необходимо заметить, что поскольку при полношаговом управлении «two-phase-on» включены обе обмотки, ток двигателя удваивается, а схема драйвера должна рассчитываться исходя из требований обеспечения заданного тока двух обмоток (резисторы R3, R8).
Схема содержит описанный ранее двунаправленный двухфазовый формирователь на D-триггерах (Рисунок 10). Максимальный ток драйвера задается резистором, включенным в цепь контакта 13 ИМС LMD18245 (резисторы R3, R8), и двоичным кодом на контактах цепи управления тока (выводы 8, 7, 6, 4). Формула для расчета максимального тока приведена в спецификации на драйвер [2]. Ограничение тока осуществляется импульсным методом. При достижении максимально заданной величины тока выполняется его «нарезка» («chopping»). Параметры этой «нарезки» задаются параллельной RC цепочкой, подключенной к выводу 3 драйвера. Достоинством ИМС LMD18245 является то, что токозадающий резистор, не включенный непосредственно в цепь двигателя, имеет достаточно большой номинал и маленькую рассеиваемую мощность. Для рассматриваемой схемы максимальный ток в амперах, согласно приведенной в [2] формуле, составляет:
VDAC REF – опорное напряжение ЦАП (в рассматриваемой схеме 5 В);
D – задействованные разряды ЦАП (в этом режиме используются все 16 разрядов);
RS – сопротивление токоограничивающего резистора (R3 = R8 = 10 кОм).
Соответственно, в режиме удержания (поскольку используются 8 разрядов ЦАП), максимальный ток составит 1 А.
В заключение необходимо отметить, что драйвер LMD18245 позволяет реализовать и микрошаговое управление. Как упоминалось выше, такой режим уменьшает, и даже подавляет паразитный резонанс ротора. Поддержка такого режима для указанного драйвера осуществляется микропроцессором, управляющим входами ЦАП.
Как можно видеть из предложенной статьи, шаговые двигатели хоть и сложнее в управлении, чем коллекторные, но не настолько, чтобы отказываться от них. Как говорили еще древние римляне: «Дорогу осилит идущий». Естественно, что на практике для многих приложений управление шаговыми двигателями целесообразно делать на основе микроконтроллеров, которые легко сформируют нужные команды для драйверов и выполнят роль коммутаторов. Дополнительную информацию и более детальное рассмотрение проблем, связанных с применением шаговых двигателей, кроме как по упомянутым выше ссылкам [3, 4, 7], можно почерпнуть из ставшей уже классикой монографии Кенио Такаши [11] и на специализированных интернет-сайтах, например, [12].
Есть еще один момент, на который автор статьи хотел бы обратить внимание читателей. Шаговые двигатели, как впрочем, и все двигатели постоянного тока, обратимы. Что имеется ввиду? Если приложить внешнее вращающее усилие к ротору, то с обмоток статора можно снять ЭДС, то есть двигатель становится генератором, причем весьма и весьма эффективным. Автор статьи экспериментировал с этим вариантом использования шаговых двигателей во время работы консультантом по силовой электронике в компании, занимающейся ветроэнергетикой. Необходимо было на простых макетах отработать ряд практических решений. По наблюдению автора статьи, эффективность шагового двигателя в таком применении была выше, чем у аналогичного по параметрам и габаритам коллекторного двигателя постоянного тока. Но это уже другая история.
Шаговый двигатель используется в машинах для точного перемещения. Наладим управление шаговым двигателем через USB с компьютера своими руками. Нам потребуется:
1) Шаговый двигатель, возьмем - Nema23 76 мм, вместо него может быть другой, управлять будем биполяным методом, любой гибридный и биполярный шаговый двигатель будет работать с таким же управлением.
2) Блок питания, возьмем - импульсный блок питания мощностью 360W с выходным напряжением 24V / 15A, может использоваться любой другой блок питания, если будет достаточно мощности и напряжения для работы двигателя. Более мощному двигателю будет нужно больше напряжения. Предел напряжения нашего драйвера ограничивается максимальным напряжением, которое выдерживают транзисторы, это 100V, у нас блок питания на 24V. В случае большего напряжения транзисторы в схеме необходимо заменить на более мощные, также при увеличении напряжения, транзисторы могут начать греться, если такое случилось, необходимо дополнительно обдувать их куллером (у меня все в порядке и куллер не требуется). Для подключения блока питания к сети 220V также нужен шнур и нужно определить где в вашей розетке ноль, а где фаза. Контакт блока N подключается к нулю, а L к фазе, также можно подключить заземление (но не обязательно). Определение возможно при помощи индикаторной отвертки, у меня определилось, что слева ноль, а справа фаза.
Драйвер шагового двигателя USB на микроконтроллере AVR своими руками
Дополнительно нужно (нет в наличии):
1) Модуль питания DC-DC SMAU01L-12 (вместо него пойдет любой конвертер DC-DC с 5V до 10V-15V) - 1 шт., возможно можно без него, от 5V питать (не проверено)
Главным компонентом схемы является программируемый микроконтроллер AVR - ATmega16A, если вы не знаете как с ними работать (записывать программу), сначало ознакомьтесь с основами такой работы, которые подробно описаны в первой статье
управление машиной. Для устройства можно использовать и другой микроконтроллер AVR, я выбрал ATmega16A, т.к. в нем с запасом имеется много памяти и контактов для подключения нескольких двигателей и большого количества рабочих инструментов.
Управление двигателем подключается к контактам 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 линии ставится сглаживающий пленочный конденсатор.
Реализация связи ПК с внешним устройством через USB порт сложнее чем такая же реализация через LPT порт (даже не смотря на наличие готовых библиотек (например v-usb и libusb используемых в данном случае как самые простые для начинающих) для написания программ) но использование USB в данном случае всё же предпочтительнее, в первую очередь это связано с распространённостью USB. Информации из предыдущих статей (включение светодиода через usb, usb светофор) достаточно для реализации управления шаговыми двигателями через USB, рассмотрим схему:
Последовательно с диодами VD1, VD2 очень желательно поставить предохранитель (например на 500мА) для защиты порта от короткого замыкания.
Шаговые двигатели управляются микроконтроллером через драйверы L293DD. Эти драйверы можно использовать только для маломощных шаговых двигателей каждая обмотка которых потребляет ток не более 600 мА. Для более мощных шаговых двигателей можно применить более мощные драйверы или самодельный драйвер на транзисторах. При управлении маломощными шаговыми двигателями также можно использовать простой способ управления:
Можно получить большее количество шагов если использовать другой способ. Ранее также упоминалось о том что программу управляющую драйвером лучше хранить в микроконтроллере а на компьютере лучше хранить программу задающую направление и скорость вращения ротора двигателя из за того что на компьютере труднее реализовать точные таймеры для управления двигателем, однако при использовании библиотеки v-usb возникают некоторые трудности с использованием прерываний (они должны иметь более низкий приоритет по сравнению с прерываниями участвующими в связи микроконтроллера с usb) но эти трудности, при желании, легко решаются. Если высокая скорость работы шаговых двигателей не требуется то можно реализовать основную логику работы двигателя (см. рисунок 2) на компьютере к тому же если микроконтроллеру оставить простую задачу вывода на порты принятой информации можно уменьшить объём памяти занимаемой программой в микроконтроллере (для ATmega8 это не критично т.к. реализация связи (при использовании v-usb) занимает не более 2 кб а в ATmega8 всего доступно 8кб) и сократить количество перезаписей программы в микроконтроллер т.к. основная логика всё же в компьютере то экспериментировать со способами управления проще. Программу для микроконтроллера также как и в предыдущий раз будем писать переделывая готовый пример поставляемый вместе с v-usb рассмотрим код:
Для вывода используются: весь порт C, весь порт B, биты 7,6,5 порта D. На всякий случай для ввода (для отправки информации на ПК) используется бит 3 порта D. Биты 0 и 1 порта D не трогаются т.к. они (судя по строкам DBG2(0x02, 0, 0); DBG1(0x01, 0, 0); DBG1(0x50, &rq->bRequest, 1);) используются для связи по UART для отладки. Итого получается можно управлять 3мя шаговыми двигателями, ещё останется 3 бита для управления чем нибудь ещё и один бит на всякий случай для обратной связи. Для управления всем достаточно 2 байт, первый бит первого байта соответствует выводу 28, второй бит первого байта выводу 27, далее аналогично до вывода 23 потом начиная с 19 до 12. Компилируется как обычно (см. пред. статьи) командой make. Пример команды для прошивки hex файла (расположенного в корне диска C) в микроконтроллер через LPT:
Ещё раз напомню что при прошивке важно правильно установить фюзы, это и является одной из причин реже перепрограммировать микроконтроллер для чего и вынесена основная логика на ПК.
Код для ПК длинный поэтому приводится не будет но его можно скачать здесь. Напомню что для работы программы использующей libusb необходимо чтобы на компьютере (или другом устройстве) который связывается через USB с микроконтроллером был установлен драйвер фильтра.
Как крутить шаговый двигатель
Шаговый двигатель работает от подачи комбинаций напряжения в разных направлениях на его обмотки, у этого шагового двигателя 2 обмотки - 4 провода, первая обмотка - черный (A) и зеленый (A*) провод, вторая обмотка - красный (B) и синий (B*). За одну смену комбинаций делается 1 шаг - 1,8 градусов. Если комбинации быстро менять, то двигатель будет быстро и точно позиционироваться - крутиться. Смена комбинаций возможна в двух направлениях, соответственно двигатель будет крутиться вперед или назад.
Чтобы крутить шаговый двигатель, надо:
1) Собрать устройство - USB контроллер шагового двигателя на микроконтроллере AVR и драйвер шагового двигателя, 2 в 1. Перед тем как собирать это сложное устройство, рекомендую сначало отдельно собрать и проверить работу только USB контроллера, его я уже собрал вот тут - контроллер USB. Если USB связь работает нормально, то можно приступать к изготовлению драйвера.
2) Написать программу для компьютера, которая будет посылать USB команды устройству.
3) Написать программу для микроконтроллера AVR, которая будет принимать USB команды и крутить двигатель.
USB управление для своего устройства
Берем кабель USB и с одной стороны срезаем провода, видим 4 провода, которые нам нужны - красный, чёрный, жёлтый (бывает зеленым) и белый. Красный провод - это плюс питания +5V, чёрный провод - это минус питания. Этими проводами запитываем наше устройство. А другие 2 провода - жёлтый D+ и белый D- используются для обмена данными по USB.
Читайте также: