Как управлять шаговым двигателем микроконтроллером
Перейти к содержимому

Как управлять шаговым двигателем микроконтроллером

  • автор:

Как управлять шаговым двигателем микроконтроллером

Когда хочется чего-то более существенного чем просто помигать светодиодами, и когда усвоены основы работы с микроконтроллером можно переходить к более серьёзным проектам. Предлагаю научится управлять шаговым двигателем, той штукой, которая стоит во всех принтерах, копирах, дисководах, и многих других разнообразнейших устройствах. Шаговые двигатели делятся на два типа:
— униполярные шаговые двигатели,
— биполярные шаговые двигатели.

Униполярный шаговый двигатель

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

Рис. 1

У униполярного шагового двигателя есть 4-ре обмотки соединенные по схеме показанной на рис. 1
Принцип работы униполярного шагового двигателя следующий: поочередно на каждую из 4-х обмоток подается напряжение положительной полярности, в это время общий вывод соединен с отрицательным проводом питания. Получается за каждую коммутацию(подачу напряжения на одну из 4-х обмоток) ротор шагового двигателя смещается на один шаг, ширина этого шага зависит от конструкции самого шагового двигателя, для униполярного шагового двигателя показанного на рис. 2 и рис. 3 шаг составляет примерно:
22х8=176(шагов)
365/172=2,104 градуса.

Шаговый двигатель в сборе

рис. 2

Шаговый двигатель разобранный

рис. 3

выходной каскад на IRF7105

Его я успешно выкурочил из древнего привода магнитных дисков размером 5,25 дюйма, кстати привод известной фирмы TEAC ))) Данный шаговый двигатель выполнял функцию перемещения магнитной головки по пазу в дискете, собственно через который и считывалась вся информация с магнитного диска.
Для управления этим шаговым двигателем при помощи микроконтроллера нам понадобится собрать силовой каскад, сам микроконтроллер просто сгорит, если подключить униполярный шаговый двигатель напрямую к его портам. В качестве силового каскада можно успешно применить 4 пары полевых транзистора из уже известной сборки IRF7105(схема показана на рис. 5),

Рис. 5
или четыре мощных биполярных транзистора или если у вас есть лишние деньги, можно воспользоваться драйвером мощной нагрузки, таким как микросхема L293 или L293DNE что практически одно и то же. Я пользовался именно драйвером L293DNE.

схема включения шагового двигателя на L293DNE

Принципиальная схема включения шагового двигателя через драйвер L293DNE:

Алгоритм управления униполярным шаговым двигателем очень простой, необходимо выполнять поочередную коммутацию четырех обмоток двигателя. То есть выдавать на четыре бита порта микроконтроллера последовательность типа:
1000
0100
0010
0001

Соответственно крутим поочередно обмотки A, B, C, D:
1000 — обмотка A
0100 — обмотка B
0010 — обмотка C
0001 — обмотка D

Данный вид коммутации называется «полношаговым режимом», то есть за каждую коммутацию происходит смещение ротора шагового двигателя на один целый шаг. Так же существует «полушаговый режим», коммутация обмоток при полушаговом режиме следующая:
1000 — 1-е пол шага обмотки А
1100 — 2-е пол шага обмотки А
0100 — 1-е пол шага обмотки B
0110 — 2-е пол шага обмотки B
0010 — .
0011 — .
0001 — .
1001 — 2-е пол шага обмотки D

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

Программа подходит для любого микроконтроллера AVR Attiny2313, Atmega8, Atmega16.
Итак, вот и сама программа (программа для полношагового режима):

Таким образом скорость вращения шагового двигателя будет замедлятся или ускорятся в зависимости от того, будут вы увеличивать (m=m+1;) или уменьшать (m=m-1;) время задержки между командами.

Хочу сказать что униполярные шаговые двигатели не очень мощные, то есть использовать их для перемещения предмета весом больше 40-80 грамм нет смысла, он просто не потянет. Тем более в полушаговом режиме. Для таких целей лучше всего применять шаговые двигатели из принтеров, те которые перемещают каретку с печатной головкой принтера.
Для экономичного управления униполярным шаговым двигателем необходимо отключать напряжение на обмотках во время простоя, то есть не давать обмотке шагового двигателя все время находится под напряжением, так как это приводит к нагреву самого шагового двигателя и соответственно к большой потере энергии (хотя конечно если преследуете цель обогрева помещения при помощи ШД тогда да 🙂 ). Максимальная скорость вращения ротора униполярного шагового двигателя не столь велика, её можно определить при помощи небольшого кусочка, который я разместил в самом низу программы. То есть для устройств требующих больших скоростей вращения униполярные шаговые двигатели не годятся.

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

Всё началось с того, что в одном из устройств надо было поворачивать вал электродвигателя на определённое количество оборотов, большая точность не требовалась плюс-минус четверть оборота, поэтому было принято решение реализовать это с помощью электродвигателя постоянного тока. В качестве управляющего элемента был выбран микроконтроллер — Atmega16, но так как выходное напряжение выводов Atmega16 всего 5 вольт, а максимальный ток не должен превышать 20mA, а для управления двигателем необходим ток около десятка ампер и напряжение в несколько десятков вольт, управлять напрямую двигателем не получится. Нужен какой-то посредник, который получал бы на вход то, что может отдать микроконтроллер, а отдавал бы то, что хочет получить двигатель, такого посредника легко найти среди полевых транзисторов серии IRL, управляемых логическим уровнем .

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

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

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

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

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

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

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

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

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

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

Скачиваем на него даташит и находим таблицу.

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

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

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

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

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

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

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

ULN2003 состоит из 7 транзисторов Дарлингтона, каждый из которых может пропустить через себя до 500mA, а рабочее напряжение не должно превышать 50V, чего нам вполне достаточно. На самом деле каждая ячейка ULN2003 состоит не только из транзистора Дарлингтона, а также включает в себя весь необходимый обвес, её структуру можно посмотреть в даташите.

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

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

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

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

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

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

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

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

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

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

Управление шаговым двигателем с использованием микроконтроллера ATmega16 и LabVIEW

Шибеко, Р. В. Управление шаговым двигателем с использованием микроконтроллера ATmega16 и LabVIEW / Р. В. Шибеко, А. В. Ульянов. — Текст : непосредственный // Молодой ученый. — 2016. — № 9 (113). — С. 341-346. — URL: https://moluch.ru/archive/113/27780/ (дата обращения: 05.02.2024).

Управление шаговым двигателем сиспользованием микроконтроллера ATmega16 иLabVIEW

Шибеко Роман Владимирович, старший преподаватель;

Ульянов Александр Владимирович, старший преподаватель

Комсомольский-на-Амуре государственный технический университет

В настоящей статье рассмотрен один из множества вариантов управления шаговым двигателем (ШД) Nanotec ST5918M1008. Статья будет полезна разработчикам столкнувшихся с реализацией управляющей программы для разработки алгоритмов связанных с шаговыми двигателями.

Ключевые слова: шаговый двигатель, управление, драйвер шагового двигателя, микроконтроллер, Atmel, AVR, ATmega 16, L297, L298N, LabVIEW.

В современной технике, в качестве исполнительного устройства для различных систем управления часто используют ШД. В качестве примера будет рассмотрен восьми- проводной ШД модели Nanotec ST5918M1008. Данный ШД будем подключать по схеме подключения 8-ми проводного ШД с последовательным соединением обмоток (см. рисунок 1).

Рис. 1. Схема подключения ШДNanotec ST5918M1008

В качестве драйвера ШД будем использовать распространенную связку микросхем L297 + L298N схема включения, которых взята с технической документации показана на рисунке 2.

Рис. 2. Драйвер для управления ШД на базе связки микросхем L297 + L298N

Причина выбора такой комбинации драйвера (рисунок 2) послужила повсеместное широкое распространение данной связки для задачи с вязанной с управлением ШД.

 CLOCK (CLK, pin 18): тактовая частота вращения ротора ШД;

 CW/CCW (DIR, pin 17): задается направление вращения ротора ШД (условно — при лог. «1», присутствующей на данном входе, ротор ШД будет вращаться по часовой стрелке, при лог. «0» — против часовой стрелки);

 Vref (pin 15): управление максимальным током обмотки ШД. Если напряжение на токосчитывающих резисторах R15 и R16 превысит напряжение на входе Vref, соответствующая обмотка отключается до того момента, пока напряжение на R15/R16 не станет меньше Vref;

 HALF/FULL (H/F, pin 19): выбор между полношаговым и полушаговым режимами вращения ротора ШД. Если на этом входе логический 0 — выбран полношаговый режим работы, если единица-полушаговый;

 CONTROL (CTRL, pin 11): по этой линии можно выбрать группу сигналов управления ШД, которые будут промодулированы («изрезаны») сигналом от внутренних «токовых» компараторов (это которые осуществляют контроль тока обмотки). Если на данной линии логический нуль — модулируются сигналы INH1 и INH2, если единица — сигналы A, B, C, D.

На имеющимся отладочном стенде для изучения основ микропроцессорной техники установлен 8 — разрядный микроконтроллер семейства Atmel AVR модель ATmega 16A, его мы и будем использовать в качестве микроконтроллера для рассматриваемой задачи управления ШД.

Отладочный стенд подключен к ПК, на ПК написана программа управления ШД, программа посылает команды на наш МК, а тот в подает нужные управляющие сигналы на драйвер ШД такой подход применялся за частою во всех проектах где требуется участие ПК [1–3].

Функция приема команд от ПК:

// USART Receiver buffer

#define RX_BUFFER_SIZE 2

#if RX_BUFFER_SIZE шаговый двигатель, управление, драйвер шагового двигателя, микроконтроллер, Atmel, AVR, ATmega 16, L297, L298N, LabVIEW

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

Сегодня мы попробуем к микроконтроллеру Atmega8a подключить шаговый двигатель.

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

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

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

Мне в руки попался именно вот такой вот шаговый двигатель 28-BJ48 компании Kiatronics

image00

Питается данный двигатель от 5 вольт, питание подается попеременно на различные обмотки, которых 4, и если питание снимается с одной обмотки и подается на другую, то ротор. соответственно. устремляется к ней.

Данные обмотки своими сердечниками в статоре находятся не в 4 местах, а намного чаще, а именно каждая повторяется 2048 раз, поэтому когда мы подаем напряжение на соседнюю обмотку, ротор поворачивается на очень малый угол. А если напряжение подавать ещё и на 2 соседние обмотки, то ротор можно расположить между ними, и количество положений при этом вообще удваивается. А есть вообще микрошаговый режим, когда мы на одну обмотку подаём меньшее напряжение, а на другую большее, то и вообще можно потеряться в количестве шагов и вообще крутить данный шаговый двигатель очень плавно.

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

image01

Данный модуль представляем собой микросхему ULN2003. Можно использовать ее не только для двигателей. Но мы будем использовать здесь 4 входа и 4 выхода, так как у нашего двигателя 4 провода. каждый из которых подключен к определённой обмотке, а пятый провод является общим. Подключенный таким образом мотор уже не влияет на ножки портов, у которых ограничен максимальный ток и можно уже ничего не бояться на этот счёт. При подключении к ножкам контроллера мы используем входы модуля IN1, IN2, IN3 и IN4, а разъём двигателя просто соединим с разъёмом модуля.

Нарисуем вот такую схему, чтобы лучше понять принцип работы двигателя (чтобы увидеть процесс рисования, смотрите видеоверсию урока, ссылка на которую внизу страницы)

image02

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

Данные обмотки потом по кругу так циклически и повторяются.

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

1 режим — этот простейший режим, при котором мы по очереди подаём логические единицы или высокие логические уровни на каждую обмотку. Называется он также полношаговый режим или One Phase Step Mode.

Схематично данный режим можно изобразить таким образом

image03

Существует также ещё один интересный режим — это режим когда ротор будет шагать между обмотками, то есть мы единички будем подавать на 2 соседние обмотки

А также есть ещё и третий решим — это полушаговый режим, когда мы уже чередуем комбинации, сначала ротор будет находиться у обмотки, потом наполовину переместится к соседней обмотке, потом совсем к соседней обмотке и т.д. Это полушаговый режим или one and two-phase-on

Вот таких вот три режима существуют. мы остановимся на 3 режиме, так как он будет самый плавный и самый интересный.

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

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

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *