|
|
  |
ПИД регулятор на ARM |
|
|
|
Jul 23 2008, 18:42
|
Местный
  
Группа: Свой
Сообщений: 285
Регистрация: 5-11-05
Пользователь №: 10 491

|
ИМХО против ограничения интегральной части выступают те, кто не работал с двигателями  Т.е. понятно, что при регулировке температуры или потока газа, ошибка будет минимальной и, видимо, беспокоится об интегральной части не нужно. Но в приводе двигателя, когда нагрузка может поменяться от минус фактически бесконечности  к плюс, интегральной части надо уделять самое пристальное внимание. Да и вобще не понятно - измеряем целыми числами, на выходе (тот же ШИМ) тоже целые, так зачем нам плавучка???  Цитата(маша @ Jul 22 2008, 10:19)  Вобщем мысль была такая: при ограничении интеграла по знаку ошибки, необходимо учитывать и величину ошибки... всё. На таком принципе удавалось сделать более-менее устойчивый И-регулятор
|
|
|
|
|
Jul 24 2008, 05:13
|
Участник

Группа: Свой
Сообщений: 45
Регистрация: 7-11-05
Пользователь №: 10 537

|
Еще как вариант неявного ограничения интеграла это применение селективного регулятора с одним основным регулятором (например частоты того же двигателя) и несколькими ограничительными (макс давления, макс температуры, темпов набора, сброса частоты, мин и макс частоты, макс подачи топлива и т.д. и т.п.). Выходы нескольких регуляторов проходят селекторы (мин/макс) и получается один, который в итоге и регулирует нужный параметр. интеграл выбранного регулятора присваивается всем остальным. Интеграл приэтом может насытится только если не наступают ограничения, тогда конечно нужно применять дополнительные меры по защите интеграла.
|
|
|
|
|
Jul 24 2008, 06:09
|

Местный
  
Группа: Свой
Сообщений: 201
Регистрация: 6-01-05
Пользователь №: 1 830

|
Цитата(SpyBot @ Jul 23 2008, 21:42)  ИМХО против ограничения интегральной части выступают те, кто не работал с двигателями  Т.е. понятно, что при регулировке температуры или потока газа, ошибка будет минимальной и, видимо, беспокоится об интегральной части не нужно. Но в приводе двигателя, когда нагрузка может поменяться от минус фактически бесконечности  к плюс, интегральной части надо уделять самое пристальное внимание. Да и вобще не понятно - измеряем целыми числами, на выходе (тот же ШИМ) тоже целые, так зачем нам плавучка???  Вообще то это я говорил, что делал регулятор для стабилизации потока и, наверное, должен ответить. Приведите пример бесконечно отрицательной и бесконечно положительной нагрузки, тогда я вам может и поверю. А так нагрузка либо есть, либо ее нет. Соответственно нельзя приложить бесконечное регулирующее воздействие любого знака, чтобы компенсировать возмущение. И, в конце концов, пояснит ли кто-нибуть чем конкретно не нравится простая и логичная операция из одной команды, которая не позволяет неограниченно расти интегральному терму, которое я привел в начале темы (топик 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%. Утром поставили задачу и до обеда ждут решения в железе. Отлаживать целочисленку ни времени, ни аргументов не хватает.
|
|
|
|
|
Jul 24 2008, 06:10
|
Гуру
     
Группа: Модераторы
Сообщений: 8 752
Регистрация: 6-01-06
Пользователь №: 12 883

|
Цитата(SpyBot @ Jul 23 2008, 22:42)  ИМХО против ограничения интегральной части выступают те, кто не работал с двигателями  Т.е. понятно, что при регулировке температуры или потока газа, ошибка будет минимальной и, видимо, беспокоится об интегральной части не нужно. Но в приводе двигателя, когда нагрузка может поменяться от минус фактически бесконечности  к плюс, интегральной части надо уделять самое пристальное внимание. Да и вобще не понятно - измеряем целыми числами, на выходе (тот же ШИМ) тоже целые, так зачем нам плавучка???  На таком принципе удавалось сделать более-менее устойчивый И-регулятор  Математика - это искусство называть совершенно разные вещи одинаковыми словами... Уравнения могут быть такими же и для двигателя и для печки... А весь сыр-бор, как всегда, разгорелся из-за терминологических разногласий. Если ограничивать какой либо член в ПИД-регуляторе, то это уже не будет ПИД-регулятор...
|
|
|
|
|
Jul 24 2008, 07:46
|
Бывалый
    
Группа: Свой
Сообщений: 1 584
Регистрация: 7-08-07
Пользователь №: 29 615

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

Группа: Свой
Сообщений: 45
Регистрация: 7-11-05
Пользователь №: 10 537

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

Местный
  
Группа: Свой
Сообщений: 201
Регистрация: 6-01-05
Пользователь №: 1 830

|
Цитата(маша @ Jul 24 2008, 11:23)  А может у вас есть еще методика расчета значений fMaxPID и fMinPID для всех режимов работы объекта? или это просто максимальное значения разрядности, например ШИМ? Особой методики нет. Просто экспериментальным путем подбираю эти макс. и мин. значения ШИМ, чтобы регулируемая величина достаточно быстро доходила до минимума и максимума и при возврате назад в регулируемую область ощутимой задержки не было. Обычно 2...4 итераций хватает. Занимает времени меньше, чем подбор коэффициентов ПИД. А потом, как правило, пересчитываю параметры регулятора так, чтобы диапазон регулировки ШИМ был от 5 до 95% для всего диапазона выходных величин. PS. Пересчитывать или нет, переделывать или нет определяется чаще всего причинами, напрямую к регулированию касательства не имеющими.
|
|
|
|
|
Jul 25 2008, 04:58
|
Бывалый
    
Группа: Свой
Сообщений: 1 584
Регистрация: 7-08-07
Пользователь №: 29 615

|
Цитата(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. Не правда ли очень просто и ясно ?
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|