Крутим шаговый двигатель

 

 Шаговые двигатели достаточны распространены в устройствах, в которых необходимо добиться точного перемещения механизмов. Существует много типов шаговых двигателей, но самыми дружелюбными в плане управления являются 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


Категория: AVR
Метки:

Написать коментарий

*
= 4 + 7

Добавить изображение

Последние статьи