Залили в реп автонастройку ПИД-а бормашинки

github.com/speedcontrols/ac_sc_grinder

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

  • P - сначала отпускаем коэффициенты и меряем дисперсию шума. Автоколебанием считаем если дисперсия больше шума на 10%. Потом двигаемся между минимумом и максимумом, уменьшая шаг, пока не найдем точку где автоколебаний все еще нет.
  • I - тут немного хитрее. Поскольку автоколебаний им не запустить, то дергаем скорость с 0.3 до 0.4 и смотрим чтобы выход не “заносило”. Тоже половинным делением подбираем нужное значение.
  • Уменьшаем оба коэффициента на 0.8, для запаса стабильности.

Крайние значения интервала P взяты [1…5] - типовые номиналы. Крайнее значение I сейчас забито константой (4 сек), но потом подправим, чтобы мерилось время разгона-останова (больше быть точно не может).

Теперь о грустном. Жопа поселилась в измерялке скорости, и похоже свила там гнездо. Магия с линеаризацией характеристики мотора помогла только частично. Попутно выяснилось, что у мотора реально плавает активное сопротивление в зависимости от оборотов и нагрузки. Если вбить коррекцию на глаз, то постоянную интегрирования можно уменьшить в разы. Но как под эту хрень подводить научную базу и рисовать формулы - непонятно.

Наверное пока остановимся на том что есть и возьмем таймаут. Для простых людей и так хватит, а нам еще надо посочинять регули для коллекторников постоянного тока и асинхронников.

  • 530