
Шаговые двигатели достаточны распространены в устройствах, в которых необходимо добиться точного перемещения механизмов. Существует много типов шаговых двигателей, но самыми дружелюбными в плане управления являются 2-х фазные униполярные двигатели. Этот тип двигателей имеет две независимые обмотки с выводами от середины. Их можно встретить преимущественно в старой технике: принтерах, копирах, дисководах (5-и дюймовых) и еще много где.
В зависимости от от того как соединены средние обмотки внутри, из двигателя могут выходить 5 или 6 проводов. Разницы никакой нет, все равно средние выводы обмоток соединяются вместе. Характерной особенностью шаговых двигателей является дискретность поворота ротора, тоесть если взять и покрутить вал двигателя можно ощутить как он фиксируется в определенных моментах. Это и есть шаги двигателя. При запитывании одной из половины обмоток происходит фиксирование вала двигателя в определенном положении. Если снять напряжение с этой обмотки и запитать другую, ротор повернется и зафиксируется в другом положении. Таким образом, если запитывать обмотки в определенной последовательности можно добиться вращения вала двигателя. Существует несколько алгоритмов управления питанием обмоток двигателя. Самым простым является полношаговое управление, когда в любой момент времени запитана только одна из половинок обмоток. Для наглядности накидал табличку показывающую последовательность включения обмоток:
Ротор при таком управлении принимает естественное положение относительно статора. Есть еще способ управления шаговиком в полношаговом режиме, когда одновременно запитываются две фазы, таким образом удается увеличить момент на валу на 40%. Главным недостатком полношагового управления являются аццкие вибрации двигателя и малая дискретность шага, равная паспортному значению.
Для того чтобы уменьшить вибрации и добится более плавного и точного вращения вала существует более продвинутый способ – управление в полушаговом режиме, алгоритм включения половинок обмоток приведен ниже:
При такой работе вал двигателя за один цикл совершает половину шага и фиксируется между двумя естественными состояниями равновесия. Таким образом дискретность поворота вала увеличивается в 2 раза. Есть еще способ увеличить дробленеи шага ротора двигателя – микрошаговое управление – когда обмотка не просто запитывается, а запитывается определенным током. И от отношения тока в соседних обмотках зависит положение ротора – чем больший ток течет в обмотке по отношению к соседней, тем ближе к ней смещается ротор и наоборот. Это позволяет увеличить дробление шага в десятки и сотни (!) раз.
С теорией немного разобрались, теперь нужно выбрать в каком режиме будет управляться двигатель. Полный шаг слишком убог и не эффективен, микрошаг сложен, да и нужен он в основном в управлении приводом высокоточного ЧПУ станка. Поэтому крутить будем в полушаге 🙂
Схема базируется на микроконтроллере attiny2313 и имеет две кнопки. При нажатии на одну вал двигателя будет крутиться в одну сторону, при нажатии другой – в другую. В качестве ключевых транзисторов выбраны КТ829, способные протащить через себя до 8 Ампер.
К клемме Udvig подключаются выводы от середин обмоток и туда же подводится напряжение для питания обмоток. Величина напряжения зависит от самого двигателя, для моего например по документации максимальный ток в обмотках 1,5 Ампера, измерив сопротивление обмоток получил 2 Ома, отсюда вывод что напряжение питания не должно превышать 3 В ну или немного больше, учитывая что запитываться будет индуктивная нагрузка.
Кстати диоды D2-D5 стоят для того, чтобы гасить скачки обратного напряжения после закрытия транзистора. Иначе есть вероятность что ЭДС самоиндукции возникающая во время выключения питания обмотки пробъет транзистор.
Плата управления в сборе:
Красный светодиод загорается при нажатии одной из кнопок. Разъем подключения контроллера по UART сделал опционально, на случай если нужно будет приделать управление шаговиком с компа.
Код в Bascom-AVR:
$regfile = “2313def.dat”
$crystal = 4000000
Dim S As Byte ‘эта переменная следит за номером шага двигателя
S = 1
On Int0 Knopka1 ‘даем имена обработчикам внешних прерываний
On Int1 Knopka2
Config Portb = Output ‘конфигурируем порт на выход
Config Portd.5 = Output ‘конфигурируем ногу для подключения светодиода
Led Alias Portd.5 ‘присваиваем имя LED выводу 5 порта D
‘прерывания будут генерироваться пока на ноге низкий уровень, то есть пока кнопка будет нажата
Config Int0 = Low Level
Config Int1 = Low Level
‘разрешаем прерывания
Enable Interrupts
Enable Int0
Enable Int1
‘основной цикл программы, просто ждем прерывания
Do
Loop
Knopka1: ‘обработчик прерывания первой кнопки
Led = 1 ‘зажигаем светодиод
Incr S ‘увеличим номер шага
If S = 9 Then ‘максимально возможный номер шага = 8
S = 1
End If
Select Case S ‘выбираем какие обмотки включать в зависимости от номера шага
Case 1 : Portb = &B00000001
Case 2 : Portb = &B00000011
Case 3 : Portb = &B00000010
Case 4 : Portb = &B00000110
Case 5 : Portb = &B00000100
Case 6 : Portb = &B00001100
Case 7 : Portb = &B00001000
Case 8 : Portb = &B00001001
End Select
Waitus 1000 ‘задержка между шагами
Led = 0 ‘гасим светодиод
Return
Knopka2: ‘обработчик прерывания второй кнопки
Led = 1 ‘зажигаем светодиод
Decr S ‘тут все тоже самое, только в обратном направлении
If S = 0 Then ‘минимально возможный номер шага = 1
S = 8
End If
Select Case S
Case 1 : Portb = &B00000001
Case 2 : Portb = &B00000011
Case 3 : Portb = &B00000010
Case 4 : Portb = &B00000110
Case 5 : Portb = &B00000100
Case 6 : Portb = &B00001100
Case 7 : Portb = &B00001000
Case 8 : Portb = &B00001001
End Select
Waitus 1000
Led = 0 ‘гасим светодиод
Return
End
Изменяя величину задержки между шагами, можно в больших пределах регулировать скорость вращения вала. При выбранной мной задержке в 1000 мкс с шаговиком имеющем 200 шагов на оборот (400 полушагов) скорость вращения получается примерно 2,5 оборота в секунду.
Скачать файлы к проекту
UPD: Здесь допилил программу, теперь стало возможным управление шаговым двигателем с компьютера.
Взято с: avrproject.ru
Последние статьи
- Лучшая практика проектирования при размещении компонентов печатной платы
- Android 6.0 на lancer X
- Простой усилитель мощности класса АВ своими руками.
- Двухтактный ультралинейный ламповый УНЧ на EL84 (6П14П).
- Люксметр на ATmega8 и цифровом датчике BH1750
- Контроллер для светодиодной ленты с ИК управлением
- Самодельный LED светильник на основе ИК датчика HC-SR501
- Простой усилитель низкой частоты на TDA7377 и NE5532
- Простейший звонок с двумя мелодиями
- LED Cube 8x8x8 на Arduino с RTC