Вроде добили измерялку скорости
github.com/speedcontrols/ac_sc_grinder
Напоминаю предысторию - перед тем как химичить с калибровкой ПИ-регулятора, понадобилось компенсировать нелинейность мотора (rpms/volts). Над этим и бились. Вроде победили, не считая пары нюансов, которые закроем в понедельник.
Картинки можно посмотреть в файле github.com/speedcontrols/…/rpms_interpolated.ods. Там 3 графика:
- Красный - что померили тахометром.
- Синий - что показывает измерялка Back EMF.
- Желтый - после отбрасывания шумов и вычисления полинома пятой степени.
Шаг измерений нелинейный, чтобы сократить время калибровки - в начале почаще, в конце пореже.
На синем графике в середине возникает загадочный провал, объяснения которому нет. Но поскольку он не очень сильный и мешать не должен, в итоге плюнули.
Пришлось пободаться с определялкой стабильной скорости. Пока меряем каждые 0.25сек (фильтруя медианным фильтром), и проверяем что результаты 3 измерений отличаются меньше чем на 0.1%. На случай, если из-за помех не впишемся в этот критерий, ограничиваем общее время измерений 3 секундами - за это время скорость точно стабилизируется.
Дальше пришлось придумать как отбросить шумы (по графикам видно, что в начале показывается явный бред). Чтобы сильно не залипать в математике - использовали “магические константы” (поглядели на график и прикинули как резать). Пробегаемся сверху вниз, пока значение не станет < 0.2, прихватываем еще одну точку, а остальное считаем мусором. Это конечно не очень красиво, но уже сил нет буксовать, надо двигаться вперед.
Обратите внимание, что полином нельзя использовать для экстраполяции (за пределы измерений). Поэтому вместо отбрасывания начальных точек заполняем их нулями.
В результате получаем то что на желтом графике.
Ну и на всякий случай в конфиге прописываем, что минимальные обороты 5000-7000 RPMs, чтобы “проскочить” явно стремный участок. В реальной жизни меньше все равно не надо. Обновил доку, чтобы “сохранить мудрость для потомков”. Мало ли кому понадобится делать что-то подобное.
По предварительным тестам получилось весьма прилично (с точки зрения юзера). Есть надежда, что теперь удастся закалибровать ПИ(Д) простым измерением разгона-торможения.
Понимаю, что все затягивается больше чем ожидалось, но было бы глупо потратить кучу времени и в конце налажать в мелочах. Раз уж взялись - надо хотя бы для себя все выяснить до конца. Тем более что финал уже близок. Как уже говорил, вся эта катавасия по большей части вызвана самим мотором (коллекторником переменного тока):
- У него очень нелинейная передаточная характеристика.
- Из-за отсутствия магнитов довольно сильные помехи на низких оборотах.
Но вроде почти справились, а с другими типами моторов должно быть попроще.