Продолжаем изобретать калибровку ПИД-а

Как обычно, повылазили новые нюансы 😃. Рассказываю.

Во-первых, вычисление скорости переписали через свертку за период. Старый способ оказался шумноват для тонких вещей. Во-вторых, мы забыли компенсировать нелинейную характеристику мотора (это добавило проблем ПИД-у). Я залил на гитхаб новые файлы с реальными данными и графиками.

К счастью, снять характеристику мотора не сложно - просто плавнo наращиваем фазу триака и меряем скорость в 20 точках. Ну а потом интерполятором накладываем коррекцию.

Теперь по ПИД-у. Стандартные методы (через отклик на прямоугольный импульс) выдавали фигню, видимо из-за отсутствия коррекции. Надо будет проверить после доработки калибратора. Но есть план Б - имитировать ручную настройку, когда коэффициенты ПИД-а крутятся до возникновения автоколебаний.

Правда, есть вопрос, как обнаруживать автоколебания без сложной математики. Пока в голову пришел такой способ. Подаем на мотор напряжение без ПИД-а и вычисляем дисперсию скорости (стандартная сигма), чтобы определить порог шума. Потом включаем ПИД, и если дисперсия больше - значит начались автоколебания.

Еще надо понять время таких измерений (фактически период автоколебаний, который зависит от времени торможения мотора). Наверное пока просто забьем секунды три - должно хватить для всех моторов подобного типа, чтобы понять, есть автоколебания или нет. Никто ж не будет маховик на мотор ставить.

На неделе продолжим.

  • 981
Comments
gorbln

Скажите, пожалуйста, а где можно почитать про

Стандартные методы (через отклик на прямоугольный импульс)

Это метод Коэна-Куна? Там, где мы повышаем управляющее воздействие и ждём, пока процесс устаканится, потом отрезаем от этого 67, что ли, процентов, и что-то рассчитываем?
В этой связи есть вопрос. Если у нас процесс, такой как мотор, то мы подняли ток - поднялись обороты. Всё, вроде, логично. А если процесс вида “кран” - тогда что? Тут получается, мы дали, например, 10% увеличения управляющего воздействия - и объект поехал, и он не остановится, пока мы не уберём управляющее воздействие, или пока не упрётся в ограничение.
Ну, например, ездит тележка по рельсам. Если мы прикладываем усилие к тележке - она ведь так и будет катиться, пока не упрётся в край. Или пока мы не снимем усилие (допустим, что тележка оснащена тормозом, для простоты). И как в случае такого объекта автонастраивать ПИД? Есть ли какая-нибудь информация на этот счёт?

Vitaly

Не помню имен и явок, лучше погуглить “pid controller autotune”. Физическими процессами и отладкой занимается напарник. Он типа апсирант на кафедре разработки приводов.

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

Сейчас не могу сказать, на чем именно остановимся для нашего конкретного случая, но все в итоге будет запротоколировано в папке документации.

gorbln

Понято, буду посматривать.
Автотюн, конечно же, искал в разных вариантах (и пробовал тоже в разных). Всё равно в итоге всё сводится либо тупо к зиглер-никольсу и вводу в автоколебания (что моветон и фу-фу-фу), либо к каким-то покрытым мраком алгоритмам, изобретённым на коленке для конкретного случая.

Vitaly

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

Есть еще ADRC но не понял как выводится формула для наблюдателя.