Stm32 шаговый двигатель схема

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

Урок 18

Подключаем шаговый двигатель

Продолжаем работать с шаговым двигателем.

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

Продолжим писать остальные функции в файле stepmotor.c.

Так как мы будем использовать полушаговый режим, в котором основных положений у ротора нашего шагового мотора будет 8, то и создадим мы целых 8 функций, то есть для каждого положения функция будет своя. Можно, конечно, обойтись и одной функцие, но мы попробуем именно 8 ради научного эксперемента.

void SM_set1 ( void )

SM_port |= 1 IN1 ;

SM_delay ;

Данная функция включает 1-ю ножку порта, тем самым подаёт напряжение на 1 катушку мотора, остальные лапки мы здесь отключаем.

Теперь следующая функция:

void SM_set2 ( void )

SM_port |= 1 IN1 ;

SM_port |= 1 IN4 ;

SM_delay ;

Судя по алгоритму тела данной функции, при её вызове ротор мотора устремится в положение между первой и второй катушкой.

Я думаю, теперь мы, понимая принцип управления шаговым двигателем, без труда напишем и остальные функции для остальных 6 положений ротора

void SM_set3 ( void )

SM_port |= 1 IN4 ;

SM_delay ;

void SM_set4 ( void )

SM_port |= 1 IN4 ;

SM_port |= 1 IN3 ;

SM_delay ;

void SM_set5 ( void )

SM_port |= 1 IN3 ;

SM_delay ;

void SM_set6 ( void )

SM_port |= 1 IN3 ;

SM_port |= 1 IN2 ;

SM_delay ;

void SM_set7 ( void )

SM_port |= 1 IN2 ;

SM_delay ;

void SM_set8 ( void )

SM_port |= 1 IN2 ;

SM_port |= 1 IN1 ;

SM_delay ;

Ниже мы напишем ещё пару функций, которые будут использовать эти 8 функций, но мало ли, нам захочется в других модулях шагать по 1 шагу, напишем всё-таки для них прототипы в заголовочном файле

void SM_ini ( void );

void SM_set1 ( void );

void SM_set2 ( void );

void SM_set3 ( void );

void SM_set4 ( void );

void SM_set5 ( void );

void SM_set6 ( void );

void SM_set7 ( void );

void SM_set8 ( void );

Вернёмся в файл реализации функций и напишем там функцию, которая будет проворачивать наш мотор сразу на 8 положений вперёд

void SM_forvard ( void )

SM_set1 ();

SM_set2 ();

SM_set3 ();

SM_set4 ();

SM_set5 ();

SM_set6 ();

SM_set7 ();

SM_set8 ();

Ну и напишем такую же функцию для проворачивания двигателя на 8 шагов назад, или правильно сказать, полушагов

void SM_back ( void )

SM_set8 ();

SM_set7 ();

SM_set6 ();

SM_set5 ();

SM_set4 ();

SM_set3 ();

SM_set2 ();

SM_set1 ();

Я думаю, код функций понятен, он очень прост.

Также создадим для данных функций прототипы в хедере

void SM_set8 ( void );

void SM_forvard ( void );

void SM_back ( void );

В функции main() создадим переменную для счётчика

int i = 0;

В бесконечном цикле напишем цикл и попробуем повернуть мотор на все 360 градусов.

Для этого мы делим 4096 на 8, получаем 512, вот столько мы полных циклов по 8 полушагов должны и сделать. Ну считаем мы конечно от 0 до 511

for ( i =0; i i ++)

SM_forvard ();

_delay_ms (300);

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

Ну, собственно теперь повернём его на столько же шагов назад, используя вторую функцию

Читайте также:  Какое масло для двигателя пежо 307

for ( i =0; i i ++)

SM_back ();

_delay_ms (300);

В конце также вставим задержку.

Вот теперь соберём код, прошьём контроллер и посмотрим на поведение ротора по движению нашей прикрепленной скрепочки.

Мы видим, что мотор будет медленно вращаться на 360 градусов сначала по часовой стрелке, а затем против часовой стрелки (видим мы это конечно только в видеоверсии, поэтому я не буду здесь это показывать на рисунке, так как это показать на рисунке невозможно, видеоверсия находится ниже на данной странице).

Также можно попробовать пошагать на другой угол, что мы в видеоверсии и проделали.

Программатор и шаговый двигатель 28YBJ-48 с драйвером ULN2003 можно приобрести здесь:

Смотреть ВИДЕОУРОК (нажмите на картинку)

Управление шаговым двигателем с помощью микроконтроллера.

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

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

Шаговые двигатели бывают трёх основных типов:

  • двигатели с переменным магнитным сопротивлением
  • двигатели с постоянными магнитами
  • гибридные двигатели

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

Гибридные двигатели обладают преимуществами вышеописанных двигателей и лучшими характеристиками: меньшей величиной шага, большим моментом, большей скоростью и как следствие стоят дороже.

Перейдём к практике, для эксперимента возьмём шаговый двигатель MITSUMI M42SP-5 с шагом 7.5°, изображённый на картинке.

Из таблицы понятно, что такие двигатели бывают двух типов:

  • 12 вольтовые с сопротивлением обмотки 50 Ом
  • 24 вольтовые с сопротивлением обмотки 120 Ом

Схема двигателя изображена на картинке ниже.

Из двигателя выходит 5 проводов: 4 фазы и один общий. Общий провод можно найти с помощью мультиметра, сопротивление между ним и оставшимися 4 проводами равно сопротивлению фазы, в нашем случае 50 Ом.

Как писалось выше, необходим посредник, который примет от микроконтроллера 20mA и отдаст двигателю 259mA. Можно как раньше взять полевой транзистор, но есть одно, но фаз здесь целых четыре штуки и для этого случая есть более простое решение — это использовать микросхему ULN2003.

Транзистор Дарлингтона или пара Дарлингтона, представляет собой два соединённых транзистора, его отличительной особенностью является высокий коэффициент усиления, который равен произведению коэффициентов усиления каждого из транзисторов(βс = β1 ∙ β2).

Вращать двигатель можно, подавая питание по очереди на обмотки, при этом в любой момент времени включена лишь одна обмотка, в этом случае двигатель будет работать в режиме шага, то есть при одном переключении обмоток будет поворачиваться на 7.5°.

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

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

Делаем контроллер шагового двигателя. Часть 1.

Читая материалы по STEP/DIR контроллерам шаговых двигателей в интернете, не нашел ни одного более-менее документированного проекта с исходниками на Си для управления шаговым двигателем в режиме «микрошаг» (wave step).

Читайте также:  Как заменить масло двигателе шкода октавия

Где такой контроллер может найти применение?
1) Управление станком ЧПУ
2) Робототехника
3) Всякая хрень где нужно точное перемещение вала ШД

Большинство проектов, найденных мной в интернете имеют ряд недостатков:

1) Слишком навороченная схема (применение дорогих специализированных микросхем, которые иногда труднодоставаемы)
2) Отсутствие режима «микрошаг» (1/4, 1/16, 1/32 шага);
3) Афтар просит бабла за прошитый МК (PIC);
4) Запутанный и неоптимальный код на Басике.

Проанализировав все это было решено начать проект простого STEP/DIR контроллера на распространенных комплектующих. В последствии ПО будет перенесено на STM8 и какую-нибудь tiny2313. В качестве МК подойдет любой контроллер, имеющий хотя-бы два 8-и битных ШИМ выхода. Как два ШИМа распределить на четыре управляющих ключа, я расскажу позже. А пока, чтобы не заморачиваться, возмем atmega48 с четырьмя ШИМами и приступим к написанию ПО.

Шаговые двигатели бывают разных типов. Более подробно о них можно прочитать в Педивикии. На сегодняшний день распростанены два типа униполярный и биполярный ШД. Униполярные постепенно отмирают. Но мы начнем именно с униполярного, т.к. для него не надо городить мост, а можно использовать MOSFETы с материнок.


Рис.1

На Рис.1 представлены три распростаненных режима управления ШД
— Полный шаг
— Полушаг
— Микрошаг

В аттаче два проекта для ATmega48 и для PIC18F252. Оба работают в режиме 1/16 шага. Плюсом к проектам идет симуляция Протеуса — можно двиглом плавно микрошагово покрутить даже.

В проекте на ATmega48 массив полупериода синусойды генерируется при старте МК и отправляется в USART с целью отладки, позже мы запихнем один массив на 128 значений во флеш и будем доставать из него значения для ШИМ в зависимости от требуемой кратности шага. То есть, либо 0,1,2,3-й…, либо 0, 2, 4, 6-й элементы и так далее.

STSPIN820: все управление шаговыми двигателями до 45 В — в одной миниатюрной ИС

Компании STMicroelectronics, за счет отказа от встроенного микроконтроллера, удалось упаковать драйвер шагового двигателя с разрешением 256 микрошагов и напряжением до 45 В в корпус 4х4 мм.

Популярное семейство драйверов шаговых двигателей, к которому принадлежат STSPIN220, STSPIN230, STSPIN233 производства STMicroelectronics, пополнилось еще одним интересным продуктом.

Микросхема STSPIN820 представляет собой драйвер шагового двигателя с напряжением питания 45 В, разрешением до 256 микрошагов и наименьшими габаритами по сравнению с аналогами, представленными на рынке.

Рис. 1. Внешний вид драйвера STSPIN820 в 24-выводном корпусе QFN 4×4 мм

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

Драйвер STSPIN820 размещен в компактном корпусе размером 4×4 мм (рисунок 1) и содержит схему управления, два независимых широтно-импульсных модулятора (ШИМ) с контролем тока и силовой каскад, состоящий из двух мостовых схем с защитой от короткого замыкания нагрузки. Диапазон рабочих напряжений драйвера, составляющий 7…45 В, позволяет использовать его в системах управления двигателями с напряжением 10, 24 или 36 В, при этом во всем диапазоне сохраняется достаточный запас по напряжению с учетом возможных пульсаций на шине электропитания. Таким образом, благодаря максимальному напряжению питания 45 В обеспечивается совместимость драйвера с широкой номенклатурой встраиваемых систем.

Оптимизация характеристик драйвера

Для того чтобы получить разрешение 256 микрошагов, компания ST разработала усовершенствованный прецизионный алгоритм управления двигателем посредством широтно-импульсной модуляции с контролем тока. В данном алгоритме очередной шаг формируется встроенным компаратором, который сравнивает мгновенное значение тока двигателя с порогом, заданным цифро-аналоговым преобразователем (ЦАП).

Читайте также:  Ремонт двигателя ом 366 своими руками

Одной из важных характеристик драйвера STSPIN820 является более тихая и плавная работа двигателя, достигнутая благодаря оптимизации структуры драйвера. Шаговые двигатели являются достаточно шумными устройствами, и разработчики, ориентирующиеся только на свой практический опыт, принимают это как должное, не видя возможности улучшить данную ситуацию. Усовершенствованные алгоритмы, разработанные компанией ST, позволяют контролировать пульсации момента вращения, благодаря чему драйвер способен снизить акустический шум шагового двигателя до уровня, сопоставимого с уровнем шума бесколлекторного двигателя.

Оптимизированная структура STSPIN820 позволила также отказаться от встроенного микроконтроллера (МК), имеющегося в других драйверах серии STSPIN, например, STSPIN32F0(A). Такое решение обусловлено тем, что разработчики мобильных электронных устройств имеют в своем распоряжении широкую номенклатуру МК с вычислительными ресурсами, достаточными для управления двигателями. Отказ от встроенного МК позволил компании ST значительно уменьшить размеры кристалла, сохранив при этом все преимущества нового драйвера без ухудшения его характеристик.

Оптимизация энергопотребления драйвера

Благодаря инновационной структуре (рисунок 2), драйвер шагового двигателя STSPIN820 обладает наименьшими габаритами среди аналогичных устройств, представленных на рынке. Другим фактором оптимизации является использование встроенных МОП-транзисторов с сопротивлением канала в открытом состоянии RDS(ON) = 500 мОм. Некоторые разработчики склонны выбирать МОП-транзисторы со сверхнизким значением RDS(ON), однако такие транзисторы имеют большие габариты и высокую стоимость. Преимуществом STSPIN820 является удачный компромисс между размерами, стоимостью и характеристиками драйвера двигателя. Значение RDS(ON) драйвера STSPIN820 меньше по сравнению с большинством аналогов, в которых используются транзисторы с сопротивлением канала 700 и 800 мОм. При этом встроенные МОП-транзисторы занимают малую площадь кристалла и рентабельны в производстве, что обеспечивает драйверу STSPIN820 широкие возможности применения при привлекательной цене. Учитывая, что для большинства встраиваемых устройств действующее значение тока нагрузки драйверов не превышает 1,5 А, транзисторы с RDS(ON) = 500 мОм имеют достаточный запас по рассеиваемой мощности.

Рис. 2. Структурная схема драйвера шагового двигателя STSPIN820

Другим фактором оптимизации является энергосберегающая технология, разработанная компанией ST и реализованная в драйвере STSPIN820 посредством специального вывода дежурного режима (вывод 16). В тех промежутках времени, когда двигатель неактивен, драйвер можно перевести в режим пониженного энергопотребления, при котором питание силового каскада отключено и ток потребления драйвера снижается до величины не более 45 мкА. Наличие вывода дежурного режима позволяет также быстро активировать драйвер и перевести его из дежурного в рабочий режим.

Начало работы с STSPIN820

Для освоения драйвера STSPIN820 компания ST предлагает плату расширения X-NUCLEO-IHM14A1 (рисунок 3). Использование платы расширения является наиболее быстрым и доступным способом изучения режимов работы и характеристик драйвера, например, режима управления ШИМ с контролем тока и энергосберегающего дежурного режима.

Рис. 3. Плата расширения X-NUCLEO-IHM14A1 на основе драйвера STSPIN820

В дополнение к плате расширения компания ST предлагает пакет программ X-CUBE-SPN14, который может быть полезен как начинающим пользователям, так и разработчикам со стажем. Пакет программ содержит предварительно скомпилированные двоичные файлы, что позволяет сразу же начать работу с шаговым двигателем, выполнив всего три последовательных действия:

  • подключение к плате расширения X-NUCLEO-IHM14A1 шагового двигателя и отладочной платы STM32 NUCLEO;
  • подключение платы STM32 NUCLEO к ПК;
  • перемещение предварительно скомпилированного двоичного файла в соответствующую папку с проектом STM32 NUCLEO и нажатие на кнопку сброса платы.

После запуска тестового приложения разработчик получает доступ ко всем функциям STSPIN820, в частности – к перечисленным в документации режимам установки шага двигателя и другим параметрам драйвера.

Оцените статью