Главная » Статьи » Как подключить

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

 

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

 

Категория: Как подключить | Добавлено: 12.05.2011
Просмотров: 128803 | Комментарии: 77 | Теги: контроллер, шаговый двигатель, ATtiny2313 | Рейтинг: 4.4/11
Всего комментариев: 771 2 3 »
77 Vasja181207   (07.10.2017 21:28) [Материал]
Понравился проект, но можете сбросить код программы но для програми CodeVisionAVR , буду благодарен

0  
76 exersizze   (24.09.2017 15:47) [Материал]
Если без программирования тогда хорошо подойдет связка L298+L297+генератор сигналов (хоть на NE555). Можно поискать у китайцев готовые решения на этих микросхемах.

75 Serg-24   (19.09.2017 10:30) [Материал]
У Вас прекрасный материал для творчества и все понятно. Перерыл нет потратив 2 дня и нашел ваш сайт.
Есть вопрос. Можно шаговый двигатель запустить без программируемой МС (без контроллера), что бы не программировать контроллер и простым переменным резистором регулировать скорость?
Варианты же должны быть и кто не знаком с программированием (не имеет этого оборудования) = сможет добиться примитивной работы двигателя как такого что стоит в СД приводе и движет головку считывателя. Лично мне нужно таким двигателем управлять что бы поднимать и опускать нажатием на переключатель (что имеет вид джойстика и из среднего положения может при его нажиме в низ - переключать питание от центрального контакта = на нижний и если поднять в верх = то на верхний контакт) можно было переключать полярность для его работы.
Подскажите какую схему собрать или купить где её можно. Спасибо!

0  
74 exersizze   (06.04.2016 21:49) [Материал]
А зачем вам в протеусе мотор?

73 skydog   (06.04.2016 20:20) [Материал]
Я новичек. Как правильно подсоединить в схеме с протеусом к мотору? Кто-то может скинуть рабочую схему?

0  
72 exersizze   (05.08.2015 08:56) [Материал]
Stim, должно хватить, сейчас код занимает 30% памяти, с использованием дисплея (знакосинтезирующего 16х2) съедается еще процентов 20.

71 Stim   (04.08.2015 13:41) [Материал]
Спасибо за советы. Нашел человека с моей работы который может помочь собрать контроллер, он оказывается тоже на этом сайте частый гость. Будем собирать с LCD дисплеем. Скажите а если добавить энкодер, не придется ли менять микроконтроллер на другой?

0  
70 exersizze   (04.08.2015 00:08) [Материал]
Согласен, без дисплея будет не информативно настраивать. Регулировка или энкодером/кнопками, или переменным резистором(потребуется сменить камень, но реализация упрощается существенно)

+1   Спам
69 sany2   (03.08.2015 16:57) [Материал]
Если нужно регулировать вручную,надо бы ещё дисплей приколхозить

68 Stim   (03.08.2015 12:02) [Материал]
Благодарю за внимание. После двигателя еще будет стоять редуктор, но его еще предстоит найти. Скорость будет зависеть от передаточного числа, поэтому хотелось бы чтобы в контроллере имелась возможность вручную менять скорость вращения.

0  
67 exersizze   (03.08.2015 08:19) [Материал]
Stim, а с какой скоростью надо чтобы вал вращался?

66 sany2   (02.08.2015 13:55) [Материал]
Waitus 1000 -задержка между шагами.Изменяйте задержку.

65 Stim   (02.08.2015 13:51) [Материал]
Спасибо за наглядный пример, все очень толково написано!
Я увлекаюсь астрономией, люблю наблюдать в телескоп за звездным небом и делать фотографии. Но на больших выдержках, из-за вращения земли, фотографии часто получаются смазанными. Хотелось бы решить эту проблему путем автоматического поворота телескопа вслед за звездами, для этого прикинул механику... дело остановилось за исполнительным устройством. Ваша схема как нельзя лучше подходит для этого, но нужно чтобы мотор делал один шаг (полушаг) через задаваемый промежуток времени. Сможете помочь?

64 pchela5   (20.11.2013 16:24) [Материал]
to Vitek1977
Есть пару готовых и работающих решений, написанных на бейсике: первый на меге 16 на три оси - но там на мелкие моторы рассчитана схемотехника и на униполярный двигатель. Гуглить как hCNC3+. Второй - разработка на тиньке 2313 - микрошаг и т.п. - гуглить как Mardus-Kreutz - там уже серьезней все, но при цене набора на ось на тошибовской микрухе под 300 рублей проще наверное будет купить его у китайцев.
PS Микрухи ко мне с Китая не доехали, продаван возвращает деньги - может и попробую сделать данный вариант.

63 exersizze   (19.11.2013 22:35) [Материал]
На второй картинке показано схематично расположение обмоток. Остается только прозвонить свой двигатель и найти средние и крайние выводы (между любым крайним и средним выводами сопротивление будет в два раза меньше, чем между двумя крайними). Если с первого раза не удалось правильно подключить (вал двигателя крутится туда-сюда) - меняем местами крайние выводы на одной из обмоток.

62 Vitek1977   (09.11.2013 21:09) [Материал]
спасибо за совет, мало мальски посчитал, для надежной работы не хватит 16 мГц на одном камне если делать.

61 exersizze   (09.11.2013 19:21) [Материал]
Ну я бы взял на каждый канал по отдельной микрухе, так хотябы сигналы могут идти параллельно, а не по очереди для каждой из осей. Ну и только с использованием прерывания.
А по скорости думаю 12кГц осилит, когда тестировали частотомер на меге то 20 кГц брало в легкую http://avrproject.ru/publ/capture_timer1_avr/1-1-0-24

60 Vitek1977   (09.11.2013 16:37) [Материал]
входной сигнал планируется до 12 кГц на каждую ось

59 Vitek1977   (09.11.2013 14:27) [Материал]
хочется давненько собрать станочек чпу, но все как то не добирался. работал на таких станках 13 лет. было и издевательство над оборудованием. когда фрезерный высотой метра в 4 рисовал и сверлил мне платку 100*100.:))) но производство похерили. а платки делать охота да и че нить пообрабатывать. пока все только в разработке, зима длинная, хочу заняться. и вот суть вопроса... ваше мнение уважаемые. собрать степ-дир контроллер трех осевой на одном кристалле. 8я или 16 мега. из-за наличия необходимых пинов, с тактовой частотой 16мгц. использовать без прерывания, на сколько хватит скорости камня, или лучше на каждый канал отдельную микруху?

58 pchela5   (28.10.2013 11:02) [Материал]
Ну хвастать пока рано, да и особого результата я не ожидаю - собираю из "говна и палок" © пробный вариант - руку надо набить без особого ущерба для бюджета. Механика в принципе готова, посылка с микрухами из Китая идет. Весь бюджет, не считая нескольких инструментов: держателя для дрели, струбцин, регулируемой развертки, сверел и пилок, составил, наверное, не более 3000 в итоге (потому что все остальное - дрель, болгарка, лобзик и т.д. и т.п. было в наличии). Шаговики подарили советские с консервации, часть направляющих Y, Z - из принтеров, по оси Х - с копиров линейные, втулки и ходовые гайки из капролона + держатели осей - выточили/отфрезеровали на заводе. В качестве материала - оргстекло 8 мм с 17 дюймовых мониторов - 5 штук. В остальном - пообщаемся через аську.

57 exersizze   (27.10.2013 21:38) [Материал]
pchela5, похвастаешь тем что получилось в итоге? Давнишняя страсть к чпу-строительству не дает покоя  biggrin лет так 5 назад собирал фрезер из дсп на принтерных валах и мебельных направляющих. Получилось конечно в итоге так себе, поэтому до сих пор взращиваю идею на более серьезный проект, с нормальными направляйками и швп.

56 pchela5   (25.10.2013 14:30) [Материал]
>> Как реализовать в программе зацикленный поворот, например, от 0 до 120 градусов и обратно , так сказать включение и отключение цикла по кнопке?

Надо знать параметры шаговика. ДШИ, например, имеет 200 шагов на полный оборот - 1,8 градуса. На 120 градусов, соответственно, надо 67 оборотов - организовываем цикл - выставлем ногу DIR в 1, на каждом шаге дергаем ногу STEP. Потом выставляем DIR в 0 и снова шагаем.

Как то так:

DO

Toggle DIR

For i=0 to 66

set STEP

waitms 100

reset STEP

waitms 100

next i

loop

PS Прочитал что написал и понял, что данная схема работает не так. Т.к. я счас пытаюсь сделать ЧПУ, то писал я для готовой схемы с управлением STEP/DIR - например связка L297 + L298

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

55 belcof   (22.10.2013 18:40) [Материал]
Спасибо за статью! Помогите с вопросом. Как реализовать в программе зацикленный поворот, например, от 0 до 120 градусов и обратно , так сказать включение и отключение цикла по кнопке?

54 Oleg-galaxy   (07.10.2013 19:00) [Материал]
Собрал в железе, работает без нареканий. Можно ли перекомпилировать проект под мегу8 или 48?

53 exersizze   (07.10.2013 09:07) [Материал]
Нормально, у меня в протеусе тоже делает только один шаг. В железе будет крутиться постоянно. 
Фьюзы на частоту 4 МГц от внутреннего RC. Waitus может меняться в диапазоне от 1 до 65535

52 Oleg-galaxy   (06.10.2013 21:31) [Материал]
В протеусе что-то не работает, при нажатии кнопки делает только один шаг, а должно как я понимаю крутиться постоянно, или так и должно быть. В каких пределах можно регулировать Waitus? Как выставить правильно фьюзы?

51 exersizze   (18.08.2013 15:07) [Материал]
Прошивка занимает 30% памяти 2313, так-что для модернизации места хватит. Тут дело в другом, для обработки кнопок я использовал внешние прерывания, которых в этом микроконтроллере всего 2. Поэтому если добавлять еще кнопок, нужно переписывать всю программу, примененный алгоритм не пойдет.

50 vpashko   (18.08.2013 14:22) [Материал]
Я понимаю что лучше, но хотелось компактно, но все же: нет прошивки??? или в 2313 не влезет кекс???

49 exersizze   (18.08.2013 12:47) [Материал]
Лучше возьмите вторую тиньку и сделайте второй такой же контроллер на вторую ось.

48 vpashko   (17.08.2013 18:25) [Материал]
Здравствуйте, у меня вопрос к автору статьи: а можете прошивку и добавить еще один шаговик к этому МК, хочу приспособить к видеокамере (улица), чтоб влево-вправо, вверх и в низ.Я так думаю к выводам 16,17,18,19, ну и 2 кнопки.

1-30 31-60 61-77
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]






авторизация