Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: ПИД регулятор на ARM
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Страницы: 1, 2
SpyBot
ИМХО против ограничения интегральной части выступают те, кто не работал с двигателями smile.gif
Т.е. понятно, что при регулировке температуры или потока газа, ошибка будет минимальной и, видимо, беспокоится об интегральной части не нужно.
Но в приводе двигателя, когда нагрузка может поменяться от минус фактически бесконечности smile.gif к плюс, интегральной части надо уделять самое пристальное внимание.
Да и вобще не понятно - измеряем целыми числами, на выходе (тот же ШИМ) тоже целые, так зачем нам плавучка??? smile.gif
Цитата(маша @ Jul 22 2008, 10:19) *
Вобщем мысль была такая: при ограничении интеграла по знаку ошибки, необходимо учитывать и величину ошибки... всё.

На таком принципе удавалось сделать более-менее устойчивый И-регулятор smile.gif
маша
Еще как вариант неявного ограничения интеграла это применение селективного регулятора с одним основным регулятором (например частоты того же двигателя) и несколькими ограничительными (макс давления, макс температуры, темпов набора, сброса частоты, мин и макс частоты, макс подачи топлива и т.д. и т.п.). Выходы нескольких регуляторов проходят селекторы (мин/макс) и получается один, который в итоге и регулирует нужный параметр. интеграл выбранного регулятора присваивается всем остальным. Интеграл приэтом может насытится только если не наступают ограничения, тогда конечно нужно применять дополнительные меры по защите интеграла.
Dir
Цитата(SpyBot @ Jul 23 2008, 21:42) *
ИМХО против ограничения интегральной части выступают те, кто не работал с двигателями smile.gif
Т.е. понятно, что при регулировке температуры или потока газа, ошибка будет минимальной и, видимо, беспокоится об интегральной части не нужно.
Но в приводе двигателя, когда нагрузка может поменяться от минус фактически бесконечности smile.gif к плюс, интегральной части надо уделять самое пристальное внимание.
Да и вобще не понятно - измеряем целыми числами, на выходе (тот же ШИМ) тоже целые, так зачем нам плавучка??? smile.gif

Вообще то это я говорил, что делал регулятор для стабилизации потока и, наверное, должен ответить.
Приведите пример бесконечно отрицательной и бесконечно положительной нагрузки, тогда я вам может и поверю. А так нагрузка либо есть, либо ее нет. Соответственно нельзя приложить бесконечное регулирующее воздействие любого знака, чтобы компенсировать возмущение.
И, в конце концов, пояснит ли кто-нибуть чем конкретно не нравится простая и логичная операция из одной команды, которая не позволяет неограниченно расти интегральному терму, которое я привел в начале темы (топик 12):
Код
...
    fError = fSetPoint - fProcessValue;
...
    fsError = pid->fSumError + fError;
    fIterm = pid->fKi * fsError;
...
    fRet = fPterm + fDterm + fIterm + pid->fMinPID;
//
    if (fRet > pid->fMaxPID)
        return (WORD)(pid->fMaxPID);
    else if (fRet < pid->fMinPID)
        return (WORD)(pid->fMinPID);
    pid->fSumError = fsError;
    return (WORD)fRet;

Т.е. сравнимаем полученное регулирующее воздействие (fRet) с границами регулирования (pid->fMinPID, pid->fMaxPID) и если оно выходит за эти границы, то интегральный терм (pid->fSumError) замораживается, т.к. просто программа не доходит до его обновления. Мы, фактически, выбором этих границ и регулируем наш I-терм. О каком пристальном внимании речь? И просьба пояснить чем плохо именно данное решение, а не приводить примеры, вводящие дополнительные ограничения I-терма.
А насчет того, зачем тут плавучка я уже говорил: сравните текст программы в AVR221 в целочисленном виде и приведенный в топике 12 данной темы ее плавучий аналог и все станет ясно. Программа скукоживается в несколько раз, все внимание разработчика к процессу, а не к особенностям реализации в целых числах. Запасов производительности у ARMа, как правило, хватает.
PS. Для профи это, конечно, не аргумент. Они оперируют понятиями "робастности" и т.п. У них свои критерии и свои объекты регулирования: атомные станции, ракетоносители, авиатехника... А что делать простым программистам и электронщикам у которых такая задача как, например, управление потоком CO2 или его температурой стоит раз в 3 года и занимает 0,01%. Утром поставили задачу и до обеда ждут решения в железе. Отлаживать целочисленку ни времени, ни аргументов не хватает.
Tanya
Цитата(SpyBot @ Jul 23 2008, 22:42) *
ИМХО против ограничения интегральной части выступают те, кто не работал с двигателями smile.gif
Т.е. понятно, что при регулировке температуры или потока газа, ошибка будет минимальной и, видимо, беспокоится об интегральной части не нужно.
Но в приводе двигателя, когда нагрузка может поменяться от минус фактически бесконечности smile.gif к плюс, интегральной части надо уделять самое пристальное внимание.
Да и вобще не понятно - измеряем целыми числами, на выходе (тот же ШИМ) тоже целые, так зачем нам плавучка??? smile.gif

На таком принципе удавалось сделать более-менее устойчивый И-регулятор smile.gif

Математика - это искусство называть совершенно разные вещи одинаковыми словами...
Уравнения могут быть такими же и для двигателя и для печки...
А весь сыр-бор, как всегда, разгорелся из-за терминологических разногласий.
Если ограничивать какой либо член в ПИД-регуляторе, то это уже не будет ПИД-регулятор...
_Pasha
Цитата(маша @ Jul 24 2008, 08:13) *
Еще как вариант неявного ограничения интеграла


Это ужЕ комбинация FUZZY LOGIC & PID - имхо, самый правильный и общий подход
alexander55
Цитата(Tanya @ Jul 24 2008, 10:10) *
Если ограничивать какой либо член в ПИД-регуляторе, то это уже не будет ПИД-регулятор...

Теория автоматического регулирования рассматривает все процессы при малых рассогласованиях и хорошо работает.
Одна из стандартных входных воздействий - ступенька подразумевает не насыщение регуляторов, не вход ШИМ на ограничение, не ограничение энергетических показателей исполнительных двигателей и т.д. и т.п.
Исследование нелинейных систем сводится только к расчету параметров возможного колебательного процесса качающейся замкнутой системы.
Здесь САУ и ТАР заканчиваются и начинается моделирование и опыт.
Понятно, что ограничение интегральной части в момент ограничение изменяет его структуру (пропадает интегральная часть, а точнее уменьшается коэффициент передачи интегральной части).
В любой системе реально присутствуют нелинейности, а где-то они выходят на передний план.
Задача сводится к тому, чтобы не вводить такие условия, при которых система устойчивая в малом становилась неустойчивой в большом.
Извините, за наукообразность, но тут уже без этого никак.
PS.
Чего это меня в курилку не пускают, я там никого не обижаю. Странно.
маша
Цитата(Dir @ Jul 24 2008, 10:09) *
И, в конце концов, пояснит ли кто-нибуть чем конкретно не нравится простая и логичная операция из одной команды, которая не позволяет неограниченно расти интегральному терму

Да куда же еще ему позволять расти интегральному терму, когда выход у вас уже в максимуме??? Это же равносильно ограничивать сам интеграл значениями fMaxPID и fMinPID, разница на П и Д составляющие небольшая и скорее всего не принципиальная. Это базовый вариант любого ПИД.
Нужно решать проблему, когда при неизменной уставке знак ошибки сохраняется длительное время, а интеграл накапливается. Вскоре он дойдет конечно же до максимума или минимума значения выхода. Но что будет с самим объектом, выдержит ли он максимальное управляющее воздействие чтобы отрегулировать параметр, который ни в какую не хочет регулироваться?
А может у вас есть еще методика расчета значений fMaxPID и fMinPID для всех режимов работы объекта? или это просто максимальное значения разрядности, например ШИМ?
Dir
Цитата(маша @ Jul 24 2008, 11:23) *
А может у вас есть еще методика расчета значений fMaxPID и fMinPID для всех режимов работы объекта? или это просто максимальное значения разрядности, например ШИМ?


Особой методики нет. Просто экспериментальным путем подбираю эти макс. и мин. значения ШИМ, чтобы регулируемая величина достаточно быстро доходила до минимума и максимума и при возврате назад в регулируемую область ощутимой задержки не было. Обычно 2...4 итераций хватает. Занимает времени меньше, чем подбор коэффициентов ПИД. А потом, как правило, пересчитываю параметры регулятора так, чтобы диапазон регулировки ШИМ был от 5 до 95% для всего диапазона выходных величин.
PS. Пересчитывать или нет, переделывать или нет определяется чаще всего причинами, напрямую к регулированию касательства не имеющими.
alexander55
Цитата(Dir @ Jul 24 2008, 23:32) *
Особой методики нет.

Пусть закон регулятора ПИ
U[i]=Kп*X[i] + Ки*Sum(X[i])
Пусть Umax - модуль максимальной величины U[i]
Sum_max=Umax/Ki - модуль максимального значения интегральной суммы, т.е.
ограничения в (+) Sum_max, а в (-) -Sum_max.
Не правда ли очень просто и ясно ?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.