Шим в управлении шагового двигателя

> > >

4-х осевой Step/Dir контроллер шаговых двигателей

      В статье описывается step/dir контроллер униполярных шаговых двигателей.
      Контроллер используется для управления самодельным сверлильно-фрезерным станком.
      Предполагается, что читатель уже знаком с самодельными ЧПУ cтанками;
      иначе рекомендуется изучить материалы, указанные в конце статьи.


Контроллер разрабатывался взамен имеющегося примитивного 3-х осевого контроллера(на ATTiny2313). 

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


Характеристики контроллера:

- 4 оси;
- для униполярных двигателей;
- аппаратный контроль тока в обмотках (ШИМ);
- опторазвязка с LPT портом;
- режим удержания с понижением тока до указанного значения;
- full step, half step, 4, 8,16 microstep выбирается отдельно для каждой оси;
- максимальная частота следования импульсов step: 12.5 кГц (период - 80мкс);
- минимальная длина step и dir импульса: 5мкс;
- ток двигателей - до 2А, индивидуально для каждой оси ( больше 2А не проверялось, схема позволяет);
- питание двигателей - до 30В, с возможностью увеличения ( больше 19В не проверялось ).

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

 


Управляющий модуль выполнен на микроконтроллере ATMega8535, работающем на частоте 16МГц.
Задача контроллера - обрабатывать входные сигналы Step/Dir и выдавать сигналы включения и опорные напряжения для силовой части схемы.


Опорные напряжения формируются микросхемой M62359 - это 8-бит 8-канальный DAC с SPI интерфейсом.
Опторазвязка выполнена на оптронах PC817 и является неотъемлемой частью контроллера.
На этот моменте нужно остановиться отдельно.

 

Как видно из схемы, в отличие от аналогичных контроллеров, сигналы Step не подключены к выводам микроконтроллера, которые вызывают аппаратные прерывания.
Вместо этого контроллер "крутится" в бесконечном цикле, проверяя, не изменились ли логические уровни на входах. Это обеспечивает стабильную предсказуемую работу контроллера.

Один цикл ( проверка входов, реакция, вывод управляющих сигналов ) занимает в текущей реализации 26мкс.
При этом заявленная минимальная длина импульса Step - 5мкс.
Каким же образом контроллер не пропускает импульсы?

Это, так сказать, моё ноу-хау :) Секрет - в свойствах оптронов.


В даташите на PC817 можно найти графики Response time.
После исчезновения сигнала на входе, оптрону требуется определённое время (ts + tf), чтобы закрыться.
Это время зависит от тока, который протекает через фототранзистор.

На практике это выглядит так:
Входные импульсы - 5мкс, период - 80мкс:


Нагрузочный резистор 10кОм на 5В - и входной импульс 5мкс превращается в 28мкс
(область уверенного чтения входа AVR как “0” - 0.8Vcc = 1V ):


Таким образом, у микроконтроллера есть, по крайней мере, 28мкс на опрос входов.
В результате он в одиночку может управлять сразу 4-мя осями.



Четыре платы силовой части полностью идентичны и собраны на микросхемах UC3842
и транзисторах IRFZ44 или IRF560 (транзисторы расположены на обратной стороне платы):


Ток в каждой обмотке контролируется отдельной микросхемой и транзистором:


Микросхема UC3842 - это ШИМ контроллер для импульсных источников питания.
Она содержит ШИМ генератор, компаратор тока, RS триггер и драйвер полевого транзистора. В общем, для этих целей подходит идеально :)

Первоначально я пытался собрать контроллер на микросхемах TL494.
Но, как выяснилось, эти микросхемы не предназначены для контроля максимального тока в течении одного периода ШИМ.
Их входные сенсоры тока и напряжения должны быть обрезаны фильтрами с частотой 10-15кГц.


UC3842, напротив, предназначена для ограничения максимального тока через обмотку трансформатора в течении одного периода.
Она выключает транзистор в момент достижения установленного тока:


Опорное напряжение, сформированное ЦАП на управляющем модуле, поступает на вход Comp микросхемы.
В начале периода ШИМ микросхема открывает транзистор. Ток в обмотке начинает плавно нарастать.
Как только ток превышает заданное значение, микросхема закрывает транзистор.

UC3842 измеряет ток в обмотке по падению напряжения на токоизмерительном резисторе.
Кроме сравнения с опорным напряжением, в микросхеме предусмотрена защита по максимальному
току, которая отключает транзистор при напряжении на Isense выше 1В.
Поэтому токоизмерительный резистор нужно выбирать таким образом, чтобы при максимальном токе падение напряжения на нём составляло чуть меньше 1В.
Точное значение максимального тока задаётся в прошивке.

На плате предусмотрены места для резисторов R9-R11, которые позволяют набрать требуемое сопротивление.

Микросхема содержит встроенный генератор, частота которого задаётся цепочкой R3C2:


Во время разряда конденсатора, выходной транзистор закрывается (это dead time).
Таким образом, выбором номиналов R3C2 можно задавать и частоту, и dead time.
Естественно, эти элементы должны быть одинаковыми для всех обмоток.

Частоту ШИМ выбирают индивидуально для двигателя, учитывая повышение нагрева двигателя с повышением частоты.

Чтобы не устанавливать дополнительные компоненты, можно использовать сигнал Clock, который формирует микроконтроллер.
Частота и dead time при этом задаются в прошивке. Элементы R3C2 не устанавливаются - устанавливается резистор R4.

Один выход ЦАП формирует опорное напряжение для пары обмоток ( только одна из которых может быть включена в данный момент ).
Поэтому управляющий модуль отключает ( высоким логическим уровнем ) парную обмотку сигналом /M_L1EN.

Цепочка R1C1 подбирается таким образом, чтобы погасить всплеск тока, возникающий при открывании транзистора:


Диод D1 устанавливается опционально. Мне хватило встроенных в MOSFET.

При выключении транзисторов возникают выбросы противоЭДС, при этом выбросы напряжения на Drain-Source транзисторов могут превышать напряжение питания в 3 раза.
Питание - 19В, ДШИ-200:


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

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


Желательно просто выбрать транзисторы с достаточно большим Vdss.
Я использовал IRF540N (Vdss = 100В) для двигателя ДШИ-200 и IRFZ44N (Vdss = 55В) для двигателей от принтеров.

Напомню, что Vdss - это напряжение между Drain и Source, при котором транзистор самопроизвольно открывается.
На практике это вызывает неправильную работу контроллера, нагрев транзисторов при относительно малых токах через них, или выход транзисторов из строя.
Для двигателей до 3А, мосфеты должны быть холодными; радиаторы на них не устанавливаются.

Контроллер запитан от блока питания от ноутбука на 19В 3А:


5В получены с помощью готового модуля DC-DC преобразователя на LM2596, доступного на ebay:

 

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


Чем больше индуктивность обмотки, тем дольше будут происходить нарастания и спады тока.
При повышении скорости вращения, ток не будет успевать нарастать до максимального значения, и момент двигателя начнёт падать:


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

Следует упомянуть ещё один способ повышения оборотов.
Напряжение питания двигателя повышают, а сам двигатель включают через мощное сопротивление.
Этим мы уменьшаем долю реактивного сопротивления в цепи обмотки.
Таким образом эффективно решаются сразу две задачи: повышение оборотов двигателя и обогрев мастерской :)

Режим работы двигателя указывается в прошивке индивидуально для каждой оси.

 

Full Step, Full phase
(полный шаг, одна обмотка)


Классический режим, в котором в каждый момент времени включена одна обмотка.

 

Full Step, Half phase
(полный шаг, две обмотки)


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

 

Half step

 

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

 

Microstep 4, 8, 16

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

Так работает станок, при создании которого вопрос снижения шума не рассматривался:


Здесь всё плохо - мощные двигатели в режиме полного шага, огромный резонирующий корпус из ДСП…
Совсем как в моём первом станке, который и пришлось разобрать из-за шумности :)
В жилом помещении вопрос снижения шума - это не прихоть, это - вопрос, будет ли возможно использовать станок вообще.

Чтобы обеспечить плавное вращение двигателя, необходимо питать двигатель синусоидальным током.
Для этого в контроллерах шаговых двигателей момент перехода от одной обмотки к другой делят на 4-16 микрошагов.
На каждом микрошаге ток в первой обмотке уменьшается, а во второй - увеличивается, по синусоидальному закону:


При этом частота импульсов Step в управляющей программе должна быть увеличена в 4-16 раз соответственно.

Использование микрошага позволяет значительно снизить шум двигателя и получить более высокий момент на больших скоростях.
Станок начинает “звучать профессионально”:


Я лично не рассматриваю микрошаг как способ повышения точности позиционирования, потому что конструкция ротора и статора не гарантирует равномерного распределения микрошагов.
Кроме того, при небольшом усилии, или при переключении в режим удержания, вал двигателя может “выпадать” в положения полного шага.

 

При отсутствии импульсов Step в течении 2 секунд, контроллер понижает ток в обмотках до значений, указанных индивидуально для каждой оси в прошивке. 

Популярность самодельных 3D принтеров вызвала появление на ebay готовых модулей на чипах A4983, конкурировать с которыми “рассыпухой” достаточно сложно.
С другой стороны, мне было спокойнее экспериментировать со схемой, где в худшем случае придётся заменить ключи, чем с микросхемой 3x3мм, которая взорвётся при любой ошибке.


Кроме того, в будущем планируется расширить контроллер для автономной работы с небольшого пульта,
так как составлять программу каждый раз, когда требуется сделать ровный рез - неудобно.
А в совсем отдалённом будущем, возможно, получится реализовать управление по USB
( это когда контроллер принимает описание шагов с USB-UART и сам генерирует шаги ).

Описываемый контроллер эквивалентен 4-м таким модулям + плата опторазвязки.

Отличия:

- в чипах Allegro выбросы тока при включении транзисторов моста игнорируются фиксированный интервал времени - 1us. Здесь выбросы подавляются цепочкой R1C1;
- чипы Allegro умеют включать “режим быстрого снижения тока”. Если на следующем микрошаге ток в обмотке должен снизится, чип кратковременно шунтирует обмотку, открывая транзисторы моста. Введение такой возможности в данный (униполярный) контроллер слишком сильно усложнило бы схему;
- у A4983 максимальная частота импульсов Step составляет 1/2мкс = 500кГц.

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

 

 

 

 

 

Прошивка написана на С для CodevisionAVR 2.05.
При большом желании, основной цикл можно переписать на ассемблере и увеличить максимальную частоту импульсов Step до 20кГц.

При программировании микроконтроллера нужно отключать питание от силовой части.

 

В идеальном случае, управляющая программа должна уметь формировать импульсы Step точно с требуемой частотой.
На практике в программе Mach3 и подобных, драйвер работает на фиксированной частоте (Kernel speed):


Поэтому Mach3 умеет формировать импульсы только на границах периодов Kernel speed.

Например, если необходимо сформировать импульсы с частотой 16kHz (период - 62,5мкс)
при частоте ядра 25kHz (период - 40мкс), то импульсы будут следовать неравномерно - с периодами, кратными 40мкс:


Из осциллограммы на выходе оптрона видно, что время восстановления для уверенного чтения “1” микроконтроллером составляет примерно 50мкс.
После этого нужно выдержать “единицу” один цикл программы (26мкс), итого 76мкс.

Поэтому при частоте ядра 25кГц, максимальная частота импульсов Step не должна превышать 12500кГц, чтобы между импульсами было как минимум два периода по 40 мкс:


Для этого должно соблюдаться условие:

Steps per Velocity / 60 < 12500


Полярность импульсов Step выставляется положительной:

 

Напряжение на токоизмерительном резисторе, низкая и средняя скорость вращения (Microstep 8x):

(должно быть близким к abs(sin(x))).

 

Напряжение на токоизмерительном резисторе, высокая скорость вращения:

 

 

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


Платы силовой части разводились “на все случаи жизни”. Возможно имеет смысл убрать посадочные места для опциональных деталей и уменьшить габариты. Или сделать весь контроллер на одной большой плате в SMD варианте.

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

Контроллер не проверялся с токами больше 2А - возможно, следует уделить больше внимания разводке.

Напряжение питания двигателей можно поднять вплоть до 60В. При этом нужно установить транзисторы в большим Vdss и подобрать сопротивление R8 в цепи питания UC3842 (микросхема содержит внутренний стабилитрон на 30В). Напряжение питания нельзя поднимать бесконечно, потому что можно получить пробой в обмотках двигателя.

Также обратите внимание на (нестандартный) разъём программатора.

Сразу хочу предупредить, что для настройки контроллера обязательно нужен осциллограф.
Без него понять, что происходит в обмотках, будет невозможно.

UC3842 CURRENT MODE PWM CONTROLLER
http://www.ti.com/lit/ds/symlink/uc3842.pdf

DMOS Microstepping Driver with Translator A4983
http://www.allegromicro.com//media/Files/Datasheets/A4983-Datasheet.ashx

Ускорение шаговых двигателей
http://vri-cnc.ru/modules.php?name=News&file=article&sid=22

Ускорение шаговых двигателей 2
http://vri-cnc.ru/modules.php?name=News&file=article&sid=4&mode=&order=0&thold=0

Losing steps in Mach3: Kernel Speed, Pulse Width and "Sherline 1/2 Pulse mode"
http://ivan.blogs.chimerical.com.au/post/2010/07/07/Losing-steps-in-Mach3-Kernel-Speed-Pulse-Width-and-Sherline-12-Pulse-mode.aspx

Электроника и механика домашнего 3-х координатного станка ЧПУ (Hobby CNC).
http://radiokot.ru/lab/hardwork/33/

hCNC3+ (ATMega16, StepDir, 3 axis, ШИМ, ручное управление).
http://vri-cnc.ru/modules.php?name=Forums&file=viewtopic&t=1438&start=0&postdays=0&postorder=asc&highlight=

Простой биполярный драйвер на Pic
http://cncmasterkit.ru/viewtopic.php?f=3&t=1393

Микрошаговый контроллер шагового двигателя на базе PIC18F2320 V4.1
http://robozone.su/cnc-home/50-mikroshagovyjj-kontroller-shagovogo-dvigatelja-na.html

STEP/DIR контроллер 3-х шаговых двигателей на микроконтроллере (для станка ЧПУ)
http://radiokot.ru/circuit/digital/automat/25/

3 axis STEP-DIR controller
http://www.deep-shadows.com/hax/wordpress/?page_id=455


 


 


Файлы:
Схема, печатки ( Proteus )
Исходные коды (Codevision AVR 2.05)


Все вопросы в Форум.


ID: 1756

Как вам эта статья?

Заработало ли это устройство у вас?

Maxix2014
Евгений степ1

Подробно

 Заработало сразу:
Maxix2014
Евгений степ1


Закрыть ... [X]

Как Управлять Шаговым Двигателем При Помощи Шим Описание поделок из пластилина

Шим в управлении шагового двигателя L6208PD, Драйвер шагового двигателя, 52В, 2.8А, ШИМ
Шим в управлении шагового двигателя Управление шаговым двигателем с помощью AVR
Шим в управлении шагового двигателя Драйвер шагового двигателя своими руками
Шим в управлении шагового двигателя Управление шаговым двигателем, микрошаг
Шим в управлении шагового двигателя Урок 25. Управление шаговым двигателем AVR
Шим в управлении шагового двигателя Arduino UNO урок 13 - драйвер двигателя L298N
Шим в управлении шагового двигателя Управление ШД
Вологодское кружево схемы сколки - Imgur Вязание для полных женщин - подбор фасона с учетом особенности фигуры Вязание крючком с бисером: воротник с острыми углами, фото и схема Вязание спицами для начинающих схемы с подробным описанием Вязаные тапочки крючком (12 моделей с описанием) Как нарисовать повара » Маленькая писательница Кардиган спицами. 24 схемы вязания кардиганов на спицах Купальник сшить - реально? -2