Подогнали клёвый видос нашей поделки: https://github.com/speedcontrols/ac_sc_grinder Если собирать больше 1 штуки (например, себе и друганам), получается совсем бюджетно. Детальки и платы заказываются в полтора клика. Чтобы собрать, великим электронщиком быть не обязательно.
Оказывается есть довольно современные разработки: (AN863) Improved sensorless control with the ST62 MCU for universal motor. Кому интересно - почитайте, там довольно красивые картинки и понятные пояснения. Если кратко - девайс меряет ток во время zero-cross и пытается его стабилизировать. А конские формулы заменяются табличками компенсаций. Только диапазон скоростей приходится бить на полосы, и строить свою табличку для каждой полосы. Если речь о серийном производстве - вполне годное решение. Но в нашем случае это плохо, потому что:Нужен стенд, чтобы снимать показания мотора, причем потребуется давать нагрузку на вал. Выше требования к входным фильтрам, давящим шумы. Одна табличка параметров будет работать только для узкого диапазона скоростей. Отсюда кстати понятно, почему регулятор на U2010B хорошо работать не сможет - там просто таблички компенсаций отсутствуют. Точнее, ...
https://github.com/speedcontrols/ac_sc_grinder Там еще овердохрена приключений с теорией, но видимо остановимся на том что есть. Ибо уже подзадолбало ковыряться, да и работает приемлемо. Опишу в общих чертах что вышло. Решили подбирать методом половинного деления, по отсутствию автоколебаний и перерегулирования. Каждый шаг занимает пару секунд, всего около 6 шагов - довольно быстро, и нет смысла мудрить с продвинутыми техниками. Получилось примерно так:P - сначала отпускаем коэффициенты и меряем дисперсию шума. Автоколебанием считаем если дисперсия больше шума на 10%. Потом двигаемся между минимумом и максимумом, уменьшая шаг, пока не найдем точку где автоколебаний все еще нет. I - тут немного хитрее. Поскольку автоколебаний им не запустить, то дергаем скорость с 0.3 до 0.4 и смотрим чтобы выход не "заносило". Тоже половинным делением подбираем нужное значение. Уменьшаем оба коэффициента на 0.8, для запаса стабильности. Крайние значения интервала ...
Сегодня без графиков, залью по окончании, когда полностью закончим. А пока новые леденящие душу подробности . Как известно, для вычисления коэффициентов ПИ-регулятора, надо подать на девайс "импульс" и померить время разгона и торможения. Удивительно, но время торможения оказалось меньше времени разгона. Если б не видел графики лично - не поверил бы. Но нам это только на пользу - торможение не будет мешать поджимать коэффициенты регулятора посильнее. А вот с самими измерениями есть нюансы. Сигнал ОЧЕНЬ шумный. Если посмотреть ...
Обновлено 10.10.2018 в 23:28 [ARG:5 UNDEFINED]
Залил обновленные графики, поправил инструкции, то-сё. Все-таки график измерения скорости пришлось исправлять более серьезно. Как уже писал, в середине графика скорости есть аномальный провал. Из-за него пришлось сильно разжимать коэффициенты PI-регулятора, что не приемлемо. Поэтому стали думать, как быть. Интерполяция полиномом тут не прокатывает, так как она борется с шумами, а не с откровенно кривыми исходными данными. Т.к. с нормальными идеями туго, решили временно обойтись "магическими константами" - на глаз разметили диапазоны, где измерения заслуживают доверия, а остальное "достроили". Улучшать надо, но времени нет. Как-нибудь потом. Получилось так: На низких оборотах выбрали интервал ~ 0.2-0.4 от максимума, и провели прямую, достроив ноль (стандартной полиномиальной регрессией). На высоких оборотах (фаза 0.6-1.0) просто взяли 3 точки, там шаманить особо нечего. Дырку достроили сплайном https://github.com/speedcontrols/ac_...aster/doc/data ...
https://github.com/speedcontrols/ac_sc_grinder Напоминаю предысторию - перед тем как химичить с калибровкой ПИ-регулятора, понадобилось компенсировать нелинейность мотора (rpms/volts). Над этим и бились. Вроде победили, не считая пары нюансов, которые закроем в понедельник. Картинки можно посмотреть в файле https://github.com/speedcontrols/ac_...terpolated.ods. Там 3 графика: Красный - что померили тахометром. Синий - что показывает измерялка Back EMF. Желтый - после отбрасывания шумов и вычисления полинома пятой степени. Шаг измерений нелинейный, чтобы сократить время калибровки - в начале почаще, в конце пореже. На синем графике в середине возникает загадочный провал, объяснения которому нет. Но поскольку он не очень сильный и мешать ...
Как оказалось, корректно снять характеристику мотора (зависимость оборотов от напряжения) не так просто. Те шумы скорости, которые пофик при реальной работе, в калибраторе довольно сильно мешают. Определить что скорость стабилизировалась (перед началом измерений), тоже тот еще квест. В общем, вместо того чтобы семимильными шагами писать калибровку ПИД-а, буксуем на предыдущем этапе. Пока на тестовых данных сделали апроксимацию графика полиномом. С виду симпатично. Думаем, как детектить что скорость выросла и перестала меняться. В общем, текущая неделя уйдет на суровую математику и эксперименты. Одно радует - вся эта хренотень потом перенесется на следующие типы регуляторов. Текущая железка - это ведь полигон, для того чтобы разобраться в технологиях разработки. Так что время тратится с большой пользой.
Как обычно, повылазили новые нюансы . Рассказываю. Во-первых, вычисление скорости переписали через свертку за период. Старый способ оказался шумноват для тонких вещей. Во-вторых, мы забыли компенсировать нелинейную характеристику мотора (это добавило проблем ПИД-у). Я залил на гитхаб новые файлы с реальными данными и графиками. К счастью, снять характеристику мотора не сложно - просто плавнo наращиваем фазу триака и меряем скорость в 20 точках. Ну а потом интерполятором накладываем коррекцию. Теперь по ПИД-у. Стандартные методы ...
https://github.com/speedcontrols/ac_...ree/master/doc Обновил подробности про калибровке параметров моторов. Сейчас калибруется все, кроме ПИД-а. С ним надеюсь что на неделе тоже закончим. А пока резюме по той практике, которая фигово вписывается в теорию. Сопротивление и индуктивность мотора Во-первых, когда мотор остановлен, можно легко насытить железки тестовым импульсом. В итоге мы подаем только 10% от полупериода синусоиды. Во-вторых, вычисляемые R и L зависят от длины поданного импульса (смотрите по выложенным файлам с выборками). Сопротивление на минимальном импульсе в полтора раза больше чем на максимальном. Придумать правдоподобную модель сходу не получилось (одному аллаху известно, что там со щетками). В итоге просто используем результаты с 10% импульса. Нормализация скорости Значение скорости ОЧЕНЬ шумное. Есть шумы в пределах одного периода. Давятся ...
Как обычно, новые кровавые подробности . Сегодня отладили новый медианный фильтр, эмулятор EEPROM и стали ковырять калибраторы. Выплыл досадный косяк в управлялке триаком. Изначально симистором рулили короткими импульсами (через оптрон), откладывая нужный кусок синусоиды. И все было бы хорошо, если бы нагрузкой была простая лампочка. Но там же ж блин моторчик, у которого смещен ток. В итоге триак закрывается не когда напряжение падает до нуля, а позже. Поэтому на макимуме следующий импульс идет когда триак все еще не до конца закрылся, ...
Обновлено 24.08.2018 в 20:45 [ARG:5 UNDEFINED]