Драйвер шагового двигателя "под микроскопом" на примере DRV8825 (PWM, Overshoot, Slow Decay, Fast Decay, Mixed Decay, SS34, пропуск шагов, ложные выводы, панацея и всё такое)

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

Описанное в статье даёт представление о работе не только DRV8825, но и драйверов двигателей вообще.

Что из себя представляет DRV8825, который «cдвоенный драйвер шагового двигателя с мостовым включением с PWM управлением с возможностью деления шага на 32», как он работает и почему он работает именно так?

Во-первых, он сдвоенный, состоит из двух идентичных половинок (раз у шагового двигателя две обмотки), работу одной из которых мы и рассмотрим.

Во-вторых, он с мостовым включением:
Драйвер шагового двигателя "под микроскопом" на примере DRV8825 (PWM, Overshoot, Slow Decay, Fast Decay, Mixed Decay, SS34, пропуск шагов, ложные выводы, панацея и всё такое)

Есть 4 ключа (полевых транзистора, MOSFET или как угодно), включенных "мостом", этаким квадратом, в одну диагональ которого включена обмотка шагового двигателя (в центре картинки), к другой через токоизмерительный шунт (о нем дальше) подключено питающее напряжение. Драйвер может открывать ключи в нужных комбинациях, подключая обмотку к питающему напряжению VM в прямой или обратной полярности, либо замыкая её саму на себя. Если нумеровать ключи слева направо сверху вниз (подписал красным), то прямое включение – открыты 1 и 4 (путо тока «1»), обратное – 2 и 3 (путь «2»), замкнуто – 3 и 4 («3»). При подаче на обмотку питания через обмотку начинает протекать ток (либо ток спадает) по вполне определённым законам. Обмотка – индуктивность, которая также обладает неким активным сопротивлением, которое вместе с сопротивлением остальных компонент определяет предельный ток I_LIM, который может протекать через всю цепь. Если исходный ток в обмотке равен 0 и на неё подано напряжение, ток в обмотке нарастает (дальше я пишу про обмотку «заряжается», но это неверно, хотя так понятнее – индуктивность как бы «заряжается», накапливает энергию), и этот процесс описывается формулой:

Для конкретного реального примера: напряжение 12В, сопротивление обмотки 2 Ома, сопротивление пары ключей DRV8825, согласно документации, считаем 0.5 Ома, сопротивление токоизмерительного шунта 0.1 Ома, для ровного счёта считаем сопротивление всего остального (провода, PCB, контакты) 0.4 Ома, что суммарно даёт R=3 Ома и I_LIM= 4А.

Но если просто подключать обмотку к питанию и так оставлять, в ней установится ток I_LIM (либо его отрицательное значение), и при смене полярности двигатель в результате сделает всего один полный шаг (на самом деле он сгорит, поскольку допустимый ток, определяемый производителем, для двигателей «в обиходе» не более 1.5-1.7А).

Хорошо бы как-то научиться устанавливать ток в обмотке меньше предельного, причём не просто какой-то, а по определённому закону: чтобы двигатель вращался плавно, ток в его обмотках (которых две) должен меняться синусоидально со сдвигом на 90 градусов.

Детали сейчас не важны, главная мысль – драйвер должен не просто подключать обмотку, но и уметь ограничивать ток в ней, управлять им. Нужен некий регулятор тока, но такой, чтобы на нём не выделялось изрядное количество тепла. Например, если бы драйвер регулировал ток включенным последовательно с обмоткой линейным регулятором, при установке тока в обмотке 1А в нашем примере на обмотке рассеивалось бы 3 Вт, а на регуляторе 9 Вт, т.е. КПД такой схемы = 25%, что, мягко говоря, плохо. И 9 Вт тепла на обмотку – это 9*2*4=72 Вт в тепло в классическом принтере с 4 двигателями.

Так нельзя, и потому в подобных случаях используются импульсные схемы управления. Суть проста – поскольку в нагрузке есть инерционные компоненты (конденсаторы, индуктивности), если подавать на эту нагрузку питание импульсно (быстро-быстро открывать-закрывать ключ, через который подаётся питание), токи и напряжения в нагрузке будут изменяться, но не успеют установиться на максимальное значение, и будут некими промежуточными, причем их значения будут зависеть от скважности (соотношения времени «включено-выключено») сигнала, управляющего ключем. Это как бассейн, в который ведёт огромная наливная труба, а выходит мелкая сливная. Если просто открыть первую – бассейн переполнится, но если первую трубу открывать ненадолго, можно сделать так, что поступившая порция воды выльется через сливную трубу до следующего открывания наливной. Или выльется не вся - например, когда осталось 50% воды, открыли наливную трубу, наполнили до 55%, закрыли, ждем, как сольётся опять до половины. Это и будет «PWM управление».

Потому драйвер, в-третьих, «с PWM управлением». PWM – Pulse Width Modulation, модуляция управляющего сигнала шириной импульса, т.е. драйвер, меняя ширину испульса (время открытого состояния ключей по отношению ко времени «включено-выключено»), управляет токами-напряжениями. Когда, к примеру, открыты ключи 1 и 3, ток в обмотке начинает нарастать (индуктивность же), и, при достижении какого-то значения тока, драйвер переключает ключи. Чтобы «понять», когда пора переключать, драйвер получает сигнал обратной связи – напряжение с токоизмерительного шунта, которое пропорционально току в обмотке (ведь шунт включен последовательно в цепь протекания тока). Затем это напряжение усиливается (у DRV8825 – в 5 раз) и сравнивается (компаратором) с неким эталонным. Как только усиленный сигнал обратной связи совпал с эталоном – наступает переключение. Сколько тепла такая схема рассеивает? Сопротивление открытого ключа DRV8825 порядка 0.25 Ома, при токе 1А два ключа рассеивают 0.5Вт тепла, 1 Вт на двигатель (моста же два). Когда ключ закрыт, ток не протекает и ключ ничего не рассеивает.

Эталонное напряжение устанавливается самим DRV8825 согласно таблице состояний. Для каждого шага эталонное напряжение равно значению синуса для угла, соответствующего текущему шагу, помноженному на то напряжение, которое Вы устанавливаете «крутистором» на плате драйвера.

Угол определяется так – 90 градусов делим на кол-во микрошагов в полном шаге, умножаем на номер текущего шага

Для примера, при режиме деления 32 микрошага, считаем (микро)шаг номер 16: синус (90/32*16)=0.707. «Крутистором» установлено 0.5В, шунт 0.1 Ома, значит, эталонное напряжение = 0.707*0.5В=0.353В, и, чтобы компаратор переключился, на его другом входе должно быть равное напряжение, и оно будет таким при токе через обмотку =0.353/5/0.1=0.707А (5 - коэфф. усиления сигнала обратной связи DRV8825, 0.1 – сопротивление шунта).

Именно потому в документации и написано, что верхний предел протекающего через обмотку тока:

В общем, если уметь вовремя включать-выключать ключи, можно поддерживать ток в обмотке близко к требуемому значения. «Близко» - потому, что бассейн был наполнен от 50% до 55%. В теории, можно открывать-закрывать трубы быстро быстро сразу, как только потребовалось, но в схемах всегда есть переходные процессы – ключи не могут открываться-закрываться моментально, а, как помните, мало или нисколько тепла они выделяют только, когда совсем открыты или закрыты. В промежуточных состояних всё намного хуже, и потому чем выше частота, на которой работает схема, тем больше тепла она выделяет. Это в общих чертах. В случае с бассейном работник, который управляет трубами, будет уставать тем больше, чем жёстче будут к нему требования по соответствию уровня воды нужному значению (а, уставая, он будет кушать всё больше, пока не случится что-нибудь нехорошее). Так и со схемами. Потому можно сильно облегчить режим работы схемы, допуская некие отклонения от строгого соответствия (иначе схема превращается из импульсной в линейную, а это плохо).

И, вкратце, в-четвёртых, про «с возможностью деления шага на 32». В идеале нужен двигатель, который можно было бы «повернуть» на произвольный угол, обеспечив таким образом перемещение связанной с ним оси на произвольное, расчётное расстояние. Но ротор (то, что вращается) в шаговом двигателе может занимать одно из нескольких стабильных состояний, их количество определяется количеством магнитных полюсов, и в распространенных двигателях таких состояний (полных шагов) 200. Это, конечно, много, но поворот такого двигателя на 1 полный шаг даст, скажем, сдвиг каретки в классическом принтере на (1/200)*16*2=0.16мм (16 – кол-во зубцов у шестерни на валу двигателя, 2 – шаг зубца, мм) – это не особо прецизионно. Чтобы уменьшить дискретность поворота вала, используется техника деления полного шага на микрошаги, когда драйвер, подавая ток в обмотки по нужным правилам, удерживает ротор в промежуточном состоянии между соседними стабильными, и, меняя ток, может вращать ротор между промежуточными состояниями. Драйвер A4988 умеет делать 16 таких промежуточных состояний (делить полный шаг на 16 или «у него есть режим 16 микрошагов») – точность подачи каретки становится 0.01мм. У DRV8825 есть режим 32 микрошага, и точность подачи каретки становится 5 мкм. В теории.

Вернёмся к словам «если уметь вовремя включать-выключать ключи» и «допуская некие отклонения от строгого соответствия, можно сильно облегчить режим работы схемы». Вот здесь-то и начинается отличие реальности от всей вышеописанной теории про красоту PWM управления. Вся суть и все «грабли» – в конкретной его реализации.
Согласно документации, DRV8825 обладает следующими ограничениями:

1) Время прямого включения обмотки не бывает меньше некоего минимального, оно называется t_BLANK и составляет 3.75 мкс. Более того, прямое включение бывает каждый цикл, обязательно, всегда. Т.е. каждый PWM цикл в обмотку «закачивается» энергия. Даже, если уже не нужно. Существование t_BLANK объясняется банально – сразу после переключения нужно какое-то время, за которое в схеме угаснут переходные процессы, и в это время драйвер не проверяет, «как там у нас дела с током», дабы избежать случайных хаотичных срабатываний сигналов управления. Т.е. всё так – подключил обмотку и 3.75 мкс вообще не заботится, что с ней происходит. Потом, конечно, спохватывается…

2) Полный PWM цикл у DRV8825 составляет 1000/30=33.3мкс (по документации частота PWM=30кГц). Плюс-минус. Всегда. Вообще ни от чего не зависит (в смысле – нельзя менять по своему желанию).

Еще немного наглядно (помогут формулы выше и ниже по тексту): при установочном («крутистором») токе 1.0А эталонный ток первого шага DRV8825 = 1000*sin (90/32*1)=49.1мА. Драйвер включает обмотку в прямом включении, исходный ток I0=0 (самое начало работы), и за первые «безнадзорные» 3.75мкс ток в обмотке (I1 в формулах) достигнет 15.0мА – это меньше эталонного, так что включение остается прямым, и к 12.3 мкс от начала цикла ток в обмотке сравняется с эталонным, и драйвер переключает обмотку. Казалось бы, всё хорошо.

Пришло время кратенько поговорить о путях «2» и «3» с первой картинки. Путь «3», когда обмотка замкнута сама на себя, и ток в ней в перспективе падает до 0, называется Slow Decay.

В нашем примере именно в 12.3 мкс драйвер закорачивает обмотку саму на себя, наступает Slow Decay, и до конца цикла ток в обмотке падает до… 48.1 мА. Теперь подать бы ток на очень недолго, но – наступает тот самый t_BLANK, прямое подключение продлится не менее 3.75мкс, за которые ток вырастет до 62.8 мА, что уже сразу по окончании t_BLANK больше эталонного, драйвер переключает мост в Slow Decay до конца цикла, и ток упадёт до… 61 мА. В общем, дайвер не в состоянии удерживать ток «близко» к требуемым 49.1 мА, вместо этого с каждым циклом ток будет нарастать до того момента, когда заливаемое за 3.75 мкс не сравняется со "сливаемым" за остаток цикла (описано и иллюстрировано дальше, пока вкратце – установится ток почти в 10 раз больше эталонного).

Далее идёт демонстрация всего описанного, после чего ненадолго перейдём к пропущенному пока пути «2» на картинке в самом начале статьи.

Для примера я считал индуктивность обмотки L=3 мГн, сопротивление всей цепи «заряда-разряда» R=3 Ома, время «заряда» t_BLANK=3.75 мкс, время «разряда» = 33.3-3.75 мкс.

Поскольку первый «заряд» останавливается при достижении тока в обмотке, соответствующего выбранному шагу, для разных шагов графики процесса отличаются, и начальные этапы для шагов 1…5 выглядят так (ось X – мкс, ось Y – мА):

Все эти графики асимптотически стремятся к одному и тому же значению (вернее, паре значений из-за разделения процесса на два этапа):

Выводы просты: каким бы ни был шаг (до определённого значения), ток в обмотке со временем устанавливается один и тот же, предельное значение этого тока будет установлено сразу же при переходе с микрошага 0 на 1, и оно будет неизменным до тех пор, пока эталонный ток очередного шага (назовём его StepA) не превысит этот предел (в этот момент предельный ток начнёт соответствовать установочному благодаря «растягиванию» процесса «заряда» - «заряд» не будет прекращаться по окончании времени t_BLANK). Фактически это выглядит, как переход от шага 0 сразу к шагу StepA (или чуть до него) – тот самый «пропуск шагов».

Также из графика понятно, почему при увеличении скорости печати проблема пропуска шагов становится не так заметна - ток не успевает вырасти до I_skip, и при печати на скоростях «ближе к началу графика» всё неплохо (но там есть свои проблемы).

Номер шага StepA можно рассчитать, исходя из таких соображений: при достижении тока I_skip график состоит из идентичных участков, каждый из которых состоит из периода «заряда» и периода «разряда», и ток в момент окончания участка равен току в момент начала следующего, и, поскольку все участки становятся одинаковы, он равен току в начале самого этого участка. Проще говоря, если ток в начале участка = I0, за период «заряда» он вырастет до некоего I1, но затем за период «разряда» опять снизится до I0. Ток I1 можно рассчитать:

Для указанных выше L, R и т.д., и U=12 В, ток получается равен 457 мА, и для драйвера DRV8825 с установленным предельным током в обмотке 1000 мА он практически соответствует шагу 8, т.е. работа этой системы на малых скоростях печати будет выглядеть так – шаг 0, шаг 8, шаг 8, … шаг 8, шаг 9 и дальше по расписанию – пропущено 7 микрошагов, 1…7.

В реальности этот кошмар выглядит примерно так (установочный ток 1000мА, масштаб Y =1/2 мА/мВ):

Частота управления 300Гц, микрошаг 32, на стандартном Prusa с двигателями 200 шаг/об, 16-зубчатой шестерней на X это 90мм/мин («F90»).

Вот эти "горбы" и представляют собой пропуски шагов.

На F450 это будет так:

Почти хорошо (но всё равно ерунда какая-то, скачки больше микрошага).

(продолжение про путь «2»)

Проще говоря, при жёстко заданной скважности 3.75/33.3 в режиме Slow Decay обмотка не всегда успевает отдать энергию – ток не успевает снизиться до нужного значения, энергия сбрасывается долго. Потому этот режим и называется Slow Decay. И тут приходит время поговорить про путь «2» – ведь можно подключить катушку к источнику в обратном включении. Теперь в той самой экспоненциальной перспективе ток должен упасть с текущего не до 0, а до I_LIM со знаком минус, в нашем случае до -4000мА, и через значение «0» ток пролетает очень быстро, и потому режим называется Fast Decay. Чтобы вслед за пересечением «0» ток на самом деле не улетел в минус, в момент пересечения драйвер снимает с катушки питающее напряжение до начала следующего цикла.

DRV8825 допускает выбор режима, потому посчитаем, что будет с нашим первым шагом в режиме Fast Decay.
Итак, со слов «… и к 12.3 мкс от начала цикла ток достигнет эталонного 49.1 мА, и драйвер переключает обмотку.» - теперь в Fast Decay. Начинается быстрый спад тока, и ток обнуляется за 12.2мкс (почти время накопления энергии, что логично, ведь ток в обмотке в обоих случаях начинался с 0 или почти с 0, и предельным был оди и тот же 4А). Остальные 33.3-12.3-12.2=8.8мкс ток будет нулевым. Средний ток через катушку за этот цикл составит около 18мА, что как-то сильно меньше требуемых 49.1. На втором шаге: эталонный ток 98 мА, «заряд» занимает весь первый цикл 33.3мкс, затем еще через 3.75мкс второго цикла неконтролируемого «заряда» ток вырастет уже до 111.8 мкс, начинается «разряд» до 0 («в момент пересечения драйвер снимает с катушки питающее напряжение») длительностью 27.6 мкс, еще 33.3-3.75-27.6=2мкс ток=0. Средний ток за 2 цикла (и обратите внимание, что эти 2 цикла фактически представляют из себя единый цикл «заряда»-«разряда» двойной длительности, т.е. визуально частота PWM сигнала как будто упала в 2 раза, до 15 кГц) 54.2, что тоже меньше требуемых 98. В общем, Fast Decay хорош, но это никак не решение проблемы. Кроме того, этот режим не особо гуманен к питающим цепям. Судите сами - весь ток обмотки, все эти сотни-тысячи миллиампер, в этом режиме направлен через внешние, по отношению к драйверу, цепи, причём этот ток направлен к плюсу источника питания - ток вливается в источник, что для него не очень привычно, и приводит к высокому уровню пульсаций по питанию. Да, фильтрующие конденсаторы помогают. Нет, не особо.

Про 15 кГц – есть отличная статья с иллюстрациями http://cabristor.blogspot.com/2015/02/drv8825-missing-steps.html (которая и подтолкнула меня ко всем этим измерениям и расчётам). Уважаемый автор задаётся очень резонными вопросами, хотя и остаётся ощущение, что не все рассуждения корректны, например «some microsteps that are done continuously at 15kHz instead of 30kHz» - очевидно, что не микрошаги совершаются на частоте 15 или 30 кГц, а PWM сигнал выглядит так, как будто его частота 15 кГц – выше я описал, почему. Также в статье есть неочевидная путаница между напряжениями и токами («the minimum voltage it can do is 12% of the supply voltage (1.4V in my case) my motors are rated for 3.1V, so 1.4V is half of the nominal voltage, that is a very big minimum step» - драйвер не регулирует напряжение, его задача – ток, и именно ток, не напряжение, номинируется для двигателя). Еще пример: «We will be subtracting 1.4V from each side of the sine wave, and the driver would be able to drive low currents» - диоды-то да, снизят напряжение на 1.4 (1.6В), но вычитать надо не из некоей синусоиды (посколько синусоидой аппроксимируется ток, а не напряжение), а из питающего напряжения. Но вообще очень стоит почитать и посмотреть.

Помимо путей «2» и «3» есть смешанный режим Mixed Decay, в DRV8825 он включен по умолчанию и реализован так – сразу по окончании t_BLANK драйвер включает обмотку в режим Fast Decay (с обратным подключением к источнику), но через 75% от начала цикла переключает в Slow Decay (обмотка замкнута на себя). Это призвано улучшить ситуацию с «переразрядом» обмотки до 0 (который приводит к снижению эффективного тока за время цикла), но…. этот режим есть только на на тех микрошагах, когда эталонный ток в обмотке должен падать от шага к шагу. Когда же он должен нарастать (как при переходе от микрошага 0 к 1, от 1 к 2,… от 30 к 31), используется или Soft Decay (по умолчанию), или Fast Decay (если так включить).

Итак, Вы всё это, наверное, прочитали, но не нашли ответа на самый главный вопрос: что же делать? Или (в рамках статьи) что можно сделать, чтобы снизить I1 в режиме Slow Decay, как не дать току так быстро нарастать?

Ответы - в кучке формул в середине статьи. Вернее, в последней из них.

Можно было бы пытаться снизить значение дроби в последней формуле, но из 4 переменных, от которых оно зависит, менять можно только 2, L и R, и уменьшать их нельзя. Увеличение же L ведёт к росту значения дроби, а увеличение R – к снижению, но увеличение с 3 до 10 Ом меняет значение всего на 3.4%. Можно сказать, что фиксированные (у DRV8825 именно так) t_BLANK и t_DIS фиксируют это значение.

Можно понижать I_LIM снижением U и увеличением R.

В любом случае, I_LIM должен быть не ниже установленного предельного тока, иначе драйвер не сможет обеспечить нужный ток на шагах, соответствующих максимальному току.

В данном случае R не может быть суммарно больше, чем 12В/1000мА=12 Ом. Но надо не забывать, что любые дополнительные компоненты, увеличивающие сопротивление либо снижающие напряжение, будут рассеивать тепло. Например, если последовательно с обмоткой включить сопротивление 12-3=9 Ом, при указанных токах на нём будет рассеиваться 9*(1.0*1.0)/2 = 4.5 Вт, для двух обмоток – 9 Вт, и это только для одного шагового двигателя. При таком R I1 будет = 119.3 мА – ток между установочными токами 2 и 3-го шагов. Шаги будут выглядеть так: 0, 2.5, 2.5, 3, 4 и т.д. – фактически будет пропущен 1 микрошаг.

И нельзя снижать напряжение питания ниже минимального предела для данного драйвера (для DRV8825 - 8.2В).

Если снизить напряжение питания драйвера до 8.2 В, но не увеличивать R, I1 будет 312.1 мА.

Но это уже даёт вот, что (сравните с картинками выше, сравниваем "горбы" при переходе через 0).

F90:

F450:

Если снизить напряжение питания до 8.2В и увеличить суммарно сопротивление до 8.2 Ома, I1 будет 117.1 мА, и на резисторах будет рассеиваться (в расчёте на 1 двигатель) 5.2 Вт против 9 Вт без снижения напряжения.

Как бы ещё «хитро» снизить напряжение на обмотке, не снижая ещё больше напряжение питания самого драйвера? Как описано в вышеприведённой статье, очень просто – снижать напряжение на выходе драйвера, например, включив последовательно с обмоткой два-три диода, причем делать это надо парно, не забывая, что ток в обмотке биполярный. Установка 2+2 диодов SS34 (то, что массово продаётся на aliexpress под названием «Stepstick Smoother») снизит эффективное напряжение с 12 до 11.3В. Что это даст? I1=430 мА, что соответствует микрошагу 7.5 - в общем-то, ничего не должно давать. Плацебо. Если снижать не диодами Шоттки, а, как в статье, 1N5404 (0.8В при 1-2А), устанавливая их, как в статье, по 2 подряд, I1 будет 395.8мА. Тоже так себе. Да, в статье есть иллюстрации, как это всё эффективно, однако попытка проверить результат расчётно ни к чему не приводит (похоже, помимо диодов были и другие изменения).

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

Графиков со снижением напряжения и доп. резисторами пока нет (пока только заказал резисторы).
Источник: 3dtoday.ru
2018 3dtrands.ru - самые последние тренды в 3D мире.