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

[Translate to English

Статья опубликована на сайте radiokot.ru

В статье описывается step/dir контроллер униполярных шаговых двигателей.
Контроллер используется для управления самодельным сверлильно-фрезерным станком.

Предполагается, что читатель уже знаком с самодельными ЧПУ cтанками; иначе рекомендуется изучить материалы, указанные в конце  статьи.

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

controller2

 Характеристики:

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

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

http://www.youtube.com/watch?v=0DMpauxEPgk

 

Управляющий модуль

StepperController2

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

Опорные напряжения формируются микросхемой M62359 – это 8-бит 8-канальный DAC с SPI интерфейсом.

controller1

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

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

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

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

pc817recovery

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

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

input_5ms_max_rate

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

input_5ms_to_30ms_10k

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

Силовая часть

UnipolarDriver2

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

powermodule

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

UnipolarDriver2a

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

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

uc3842

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

 UC3842coil

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

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

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

rtct

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

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

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

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

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

R1C1

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

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

draintosource55v

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

UnipolarDriver2b

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

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

Питание

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

PSU

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

DCDC

Почему важен контроль тока

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

current1

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

current2

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

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

Режимы работы двигателя

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

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

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

Full Step, Half phase

fullstephalf

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

Half step

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

Microstep 4, 8, 16

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


http://www.youtube.com/watch?v=YQvpDsHbOX8

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

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

microstep4

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

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


http://www.youtube.com/watch?v=Xa-EOXH8j98

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

rotor

 

Режим удержания

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

Сравнение с модулями на чипах Allegro

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

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

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

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

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


http://www.youtube.com/watch?v=UT1nMZGH0vg

Печатные платы

 StepperController2_pcb

StepperController2_pcb_view

StepperController2_photo

 

UnipolarDriver_pcb

UnipolarDriver_pcb_view

UnipolarDriver_pcb_photo

Прошивка, фъюзы

Прошивка написана на С для CodevisionAVR 2.05. 

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

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

fuses

Настройка Mach 3

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

m3config1

Поэтому Mach3 умеет формировать импульсы только на границах периодов Kernel speed. Например, если необходимо сформировать импульсы с частотой 16kHz (период – 62,5 мкс) при частоте ядра 25kHz (период – 40мкс), то импульсы будут следовать неравномерно – с периодами, кратными 40 мкс:

mach3step

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

m3config3

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

Steps per * Velocity / 60 < 12500

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

m3config2

Осциллограммы

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

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

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

coil_max_good

Повторение конструкции/недостатки/улучшения

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

pcbsmall

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

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

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

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

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

 

Исходные коды

Исходные коды (Codevision AVR 2.05)
http://www.deep-shadows.com/hax/downloads/CNCController2_src.zip

Схема, печатки
http://www.deep-shadows.com/hax/downloads/CNCContoller2_schematics.zip

 

Материалы

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, Step\Dir, 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