Пытался немножко разобраться с режимами Slow, Fast, Mixed decay для A4988 и вот что получилось. Для начала немного школьной физики. Из-за того что любая катушка имеет
ЭДС самоиндукции, ток в ней не может нарастать мгновенно. Шаговый двигатель управляется током, а не напряжением. Поехали.
На рисунке показан
H-Bridge и ток идущий от Vbat, через Q1, обмотку двигателя, Q4 и землю - мотор делает шаг. На самом у шаговика две обмотки и все намного сложнее, но мы пока опустим эти подробности.
вращение
Любой H-Bridge нуждается в операции break-before-make, чтобы предотвратить короткое замыкания (появление сквозных токов) при переключении транзисторов. Время для break-before-make называется dead-time - в этот промежуток все транзисторы закрыты. Если закрыть Q1 и Q4 вся энергия запасенная в катушке начнет медленно рассасываться через защитные диоды D2 и D3. Это не очень хорошо если вы планируете вращать ротор с большой скоростью и высокой точностью.
Вот тут и появляется режим быстрого затухания/Fast decay. Он позволяет очень быстро рассеивать запасенную энергию в катушках до нуля. Для этого мы откроем Q2 и Q3 подавая на обмотку напряжение питания, но с обратной полярностью по отношению к току самоиндукции. Ток резко падает, блок питания нагревается.
Fast decay
Как правило Fast decay используется для двигателей с высокой индуктивностью (способных запасать большое количество энергии), высокой скоростью движения или при высоких микро шагах, где для удержания ротора в промежуточных значениях нужно очень быстро изменять ток в обмотках с высокой точностью. Упрощенно Fast decay выглядит так:
Fast decay
Где tON это вращение, а tOFF это подача на обмотку Vbat. Драйвер пытается удерживать ток Target current.
В режиме медленного затухания/Slow decay вместо Q1, Q4 открывают Q2 и Q4. Ток рассеивается в виде тепла на катушке и сопротивлениях переходов Q2 и Q4. Это способ медленнее чем Fast decay, но быстрее чем через диоды.
Slow decay
Slow decay используют в режиме full-step. Размах пульсаций минимальный (меньше громкость писка от двигателей), увеличивается крутящий момент из-за того, что средний ток протекающий через обмотку больше, чем при Fast decay с его высокими пульсациями. Упрощенно Slow decay выглядит так.
Slow decay
Где tON это вращение, а tOFF это сброс энергии запасенной в катушке. Драйвер пытается удерживать ток Target current.
Ни один двух методов не подходит для режима micro-stepping. Fast decay слишком быстр, а Slow decay слишком медленный. Поэтому используют Mixed decay - винегрет из обоих. Драйвер сначала применяет Fast decay, а потом переходит на более медленный Slow decay чтоб бы поймать ток в обмотке с более высокой точностью. Вот как это выглядит.
Mixed decay
Недостатки micro-stepping - потеря на 8%..10% крутящего момента и потеря абсолютной точности позиционирования по сравнению с full-step. Преимущества - увеличение относительной точности позиционирования, плавность хода и тишина (если правильно подобран тип затухания/decay mode).
Небольшое пояснение про абсолютную и относительную точность. Возьмем для примера шаговый двигатель с углом поворота 1.8° на шаг (200 шагов на полный оборот) и попробуем нарисовать круг диаметром 300мм. Он будет представлять нечто из 200 точек соединенных прямыми линями. Это называется относительная точность. Теперь если через противоположные точки провести линию и измерить диаметр мы получим 300мм. Это называется абсолютная точность. Возьмем тот же двигатель, но с микро шагом 1/16 (3200 шагов на полный оборот). Круг диаметром 300мм будет представлять из себя 3200 точек соединенных прямыми линями и выглядеть как круг. Это относительная точность. Теперь если через противоположные точки провести линию и измерить диаметр мы вряд ли получим 300мм. Это абсолютная точность.
Теперь объясню почему на микрошагах вряд ли получится диаметр 300мм. Низкое качество двигателей и неправильная комбинация механизм + мотор наше все. Народ ломится за углом и моментом, но забывают про
момент инерции. Если отношение между моментом инерции ротора и моментом инерции мехаизма больше 1:10, вы никогда не обеспечите четкое позиционирование ротора. Представать груз на резинке. Резинка - это момент инерции ротора, а моментом инерции механизма является ваш груз. Теперь пытайтесь быстро перемещать груз вверх-вниз и фиксировать его в 1см от земли. Удар об пол гарантирован. Добавим сюда дешевые двигатели не способные повернуть ротор на маленький микро шаг, зазоры и силы трения в механизмах. Народ меняет шариковые линейные подшипники с коэффициентом трения 0.002 на пластиковые втулки с коэффициентом трения 0.2. Разница в 100 раз!!! За то тихо, говорят они. И таких примеров сотни. В 99.99% случаев микро шаги они не для абсолютной точности, они для плавности и уменьшения шума от chopping frequency.
У драйвера A4988 за выбор Slow, Fast или Mixed decay отвечает 13 нога/ROSC.
Allegro A4988 pinout
Если ROSC замкнуть на +V: tOFF всегда 30мкс, Slow decay в режиме full-step и Automatic Mixed decay (комбинация из Slow decay + Mixed decay) в режиме micro-stepping. В сочетании медленное + быстрое затухание, Slow decay применяется если обмотки "заряжаются" - энергии закачивается больше чем рассеивается. Mixed decay применяется если обмотки "разряжаются" - энергии рассеивается больше чем закачивается.
ROSC замкнут на +V или ROSC подключен к GND через резистор
Если ROSC замкнуть на GND: tOFF всегда 30мкс и Mixed decay при любых типах шагов.
ROSC замкнут на GND
Если ROSC подключить к GND через резистор: tOFF (в микросекундах) рассчитывается по формуле, Slow decay в режиме full-step и Automatic Mixed decay (комбинация из Slow decay + Mixed decay) в режиме micro-stepping.
tOFF = Rrosc(в омах) / 825
Если Rrosc = 25кОм, tOFF получается 30мкс.
Если сильно увеличить горизонтальный кусок синусоиды соответствующей одному микро шагу он будет состоять из МНОЖЕСТВА пилообразных сигналов длительностью tON + tOFF. Драйвер A4988 в Mixed decay в течении 31.25% от tOFF будет пытаться удержать ток, расходуя ЭДС самоиндукции в режиме Fast decay, а оставшееся время будет ограничивать ток в режиме Slow decay превращая его в тепло.
сильно увеличенный горизонтальный кусок синусоиды A4988
Частота на которой работает шаговый двигатель равна сумме tOFF + tON и называется - chopping frequency. Если она низкая двигатели начинают противно пищать. Если очень высокая, драйвер начинает сильно греться. Чтоб увеличить частоту ШИМ и вывести писк за порог слышимости нужно использовать более высокое напряжение питания, которое сокращает время включения tON или уменьшать tOFF. Однако все не так просто...
Максимальное время включения on time/tON зависит от того, сколько времени потребуется, чтобы ток снова поднялся до порога ITripMax. На китайских платах ITripMax устаналивается подстоечником соединенным с 17 ногой REF. Компаратор сравнивает падение напряжения на шунтах Rs1, Rs2 с напряжением сформированным ЦАП и REF
блок схема драйвера A4988
Так на 1-м и 17-м шаге ток через одну обмотку будет раен 0, а через вторую 100% от ITripMax.
таблица транслятора для A4988
Напряжение двигателя может быть любым, драйвер не даст подняться току выше ITripMax. Однако, чем больше напряжение тем быстрее нарастает ток в катушке, тем выше ускорение ротора и механики. Формулы в доказательство.
Минимальное время включения on time/tON связанно с длительностью периода импульсов STEP. Эти импульсы генерируются платой управления и не могут быть меньше 2мкс = 1мкс высокий уровень + 1мкс низкий уровень. Потому что A4988 всегда на 1мкс отключает компаратор, измеряющий ток через обмотку. Драйвер на время tBLANK слепнет и не способен контролировать ток. Сделано это для предотвращения ложного срабатывания защиты по току/Over-current Protection из-за обратных выбросов токов восстановления диодов и переходных процессов в нагрузке. Время на которое драйвер слепнет и есть наш минимальный tON.
Если использовать слишком высокое напряжение питания, то промежуток tON = 1мкс может оказаться слишком длинным для МАЛЕНЬКИХ токов, а промежуток tOFF слишком коротким для Slow decay. Представьте что вы захотели измерить расстояние до машины и моргнули, открыли глаза, а машины уже нет. Это очень хорошо видно на следующем графике.
пропуски шагов в режиме Automatic Mixed decay
Пропуск микрошага получается между 17 и 18 шагом - ток в одной из обмоток близок к нулю (смотри таблицу транслятора) и драйвер находится в Slow decay. Минимальное время tON = tBLANK оказывается слишком длинным - ток в катушке за это время успевает улететь за расчетные 9.80% от ITripMax для 18 шага. Включается компаратор и драйвер пытается вернуть ток с помощью медленного Slow decay, но не успевает, потому что не хватает времени tOFF. На 19 шаге ток увеличится, но в это раз он не уходит далеко за 19.51% от ITripMax и Slow decay хватает tOFF вернуть его за буйки.
И вроде бы решение проблемы очевидно - надо увеличить tOFF в Slow decay. Однако все не так просто... Вместе с tOFF мы увеличиваем Fast decay часть в режиме Mixed decay, который 31.25% от tOFF. Если Fast decay будет слишком длинным, то появится сильная пульсация тока в Mixed decay - утолщения на осциллограмме во 2-й и 4-й четвертях. Как альтернативный вариант можно пообовать уменьшить напряжение или заменить двигатели на более индуктивные.
Пора переходить к практике. Вот так выглядит сигнал на обмотке выдаваемый A4988 при напряжении 12в, в режиме 1/16 micro-stepping, ITripMax 0.8А, частота импульсов STEP 50Гц (эквивалентно скорости перемещения 30мм/мин) и ROSC подключен к GND через резистор 10кОм.
пропуски шагов в режиме Automatic Mixed decay c ROSC 10кОм
Подключим между A4988 и мотором плату TL Smoother, которую придумал
cabristor.
схема TL Smoother
Вот таким становится сигнал после шайтан-схемы. Пропуски ушли.
режим Automatic Mixed decay c ROSC 10кОм и TL Smoother
Происходит это из за того, что на 2-х диодах падает 1.4в и обмотки питаются от 10.6в соответственно по закону ома ток через катушки меньше. Драйвер A4988 об этом ничего не знает, его цепи работают от 12в и все значения чип берет для большего тока. Поэтому длительность tOFF в Slow decay взятая для энергии запасенной от 12в, оказывается достаточно продолжительной для сброса энергии в катушке, подключенной к 10.6в. Как тебе такое Илон Маск? Улетевший ток успевает вернуться к 9.80% от ITripMax.
Теперь отключим TL Smoother и замени резистор 10кОм на 47кОм. В Slow decay пропуски ушли, но появился расколбас тока в Mixed decay.
режим Automatic Mixed decay c ROSC 47кОм
Происходит это из-за того, что теперь Fast decay, равный 31.25% от tOFF, оказался слишком длинным. Регулировка в Mixed decay происходит очень быстро, поэтому на синусоиде такие утолщения. Кстати именно эти колебания тока и вызываю сильный писк мотора. Нужно искать такой номинал резистора Rrosc при котором на slow decay еще нет пропусков, а на Mixed decay еще не сильно разносит Fast decay часть. Сразу огорчу, идеальной синусоиды не получится, но 90% от идеала запросто. Вот вам живая гифка в доказательство того, что это возможно.
подбор резистора Rrosc
Как по мне, решение с TL Smoother не очень - слишком много уходит на нагрев диодов. Глупо использовать драйвер с высоким КПД, а потом рассеивать кучу энергии в тепло. Решение с резистором Rrosc выглядит элегантнее и дешевле в 100 раз, но допускаю что TL Smoother может победить. Все будет зависеть от уровня и противности писка на низких скоростях. Чем больше Rosc тем меньше частота переключения - можно запросто уползти в звуковой диапазон.
Для всех владельцев А4988 есть другой метод - замена микросхемы на drop in replacement A5985 с патентованной функцией Adaptive Percent Fast Decay (APFD) устраняющей проблему детектирования малых токов в режиме микро шагов. Цена сопоставима с TL Smoother, есть в наличии на Digi-Key.
Еще один повод поменять на А4988 - на форумах давно сомневаются, что царь то настоящий. Ну не могут готовые шилды на али стоить в несколько раз дешевле закупочной цены одной микросхемы в партиях от 1000 штук. Может поэтому глюки и ужасная работа драйвера? Кстати я его нашел - HR4988. Подключение как у A4988, но умеет делить шаг аж 1/128!!! Не понятно только зачем? Уже на скоростях 200 мм/сек скважность сигнала STEP в режиме 1/16 шага 20кГц. Кормить такой частотой 4-е двигателя не каждая Arduino со
спагетти-кодом сможет. А еще расчет координат, PID стола, вывод на экран, парсер g-code и вот 8-bit ATmega встает колом. Особо одаренные еще умудряются Octoprint навесить, создавая нехилый трафик по uart.
И таки да Allegro А4988 лучше чем Texas Instruments DRV8825, хотя бы потому что tBLANK 1мкс, а не 3.75мкс. Драйвер от Allegro пропустит меньше микро шагов.
Ну и о шумах. Вот эти все замыкания ЭДС катушек двигателя на блок питания, вызывают микро КЗ. Появляются шумы. Обычно для борьбы с ними возле каждого драйвера ставят большой электролит. Кто мешает поставить еще 1000мкф параллельно клеммам питания материнской платы. У меня БП на 24в и вместе с электролитом добавил
MOV на 25в и
TVS на 30в.
шумы в блоке питания при включенных моторах
Всем хорошей печати.
UDP: Пролетел с заменой A4988 на A5985 в MKS Robin Mini. Datasheet на A5985 обещал drop in replacement. На деле оказалось, что никакого drop in replacement нет - ноги и установка шагов не совпадает. К тому же на моей плате
MKS Robin Mini все выводы MS, MS2, MS3 посажены 5 вольт, что соответствует 16 микро шагам на A4988 и только 8 на A5985. При первом включении голова со всей дури уехала в стол. Вот и доверяй потом этим datasheet.
UDP2: Попытался подобрать резистор Rrosc - получить красивую синусойду не удалось. Перевел драйвер в Mixed decay и все стало красиво. На деталях пропал salmon skin эффект.