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

|
ИМХО против ограничения интегральной части выступают те, кто не работал с двигателями  Т.е. понятно, что при регулировке температуры или потока газа, ошибка будет минимальной и, видимо, беспокоится об интегральной части не нужно. Но в приводе двигателя, когда нагрузка может поменяться от минус фактически бесконечности  к плюс, интегральной части надо уделять самое пристальное внимание. Да и вобще не понятно - измеряем целыми числами, на выходе (тот же ШИМ) тоже целые, так зачем нам плавучка???  Цитата(маша @ Jul 22 2008, 10:19)  Вобщем мысль была такая: при ограничении интеграла по знаку ошибки, необходимо учитывать и величину ошибки... всё. На таком принципе удавалось сделать более-менее устойчивый И-регулятор
|
|
|
|
|
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, 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. Не правда ли очень просто и ясно ?
|
|
|
|
Сообщений в этой теме
kanzler ПИД регулятор на ARM Jul 17 2008, 04:02 маша Цитата(kanzler @ Jul 17 2008, 08:02) Госп... Jul 17 2008, 06:36 KSN Возьмите PID регулятор для AVR в Application Note.... Jul 17 2008, 07:05 MrYuran Цитата(kanzler @ Jul 17 2008, 07:02) Госп... Jul 17 2008, 07:42 маша Продолжая оффтоп... А вы смайлики вообще правильно... Jul 17 2008, 08:29 Dir Цитата(MrYuran @ Jul 17 2008, 10:42) А че... Jul 17 2008, 09:46  SpyBot Цитата(Dir @ Jul 17 2008, 13:46) О, очень... Jul 17 2008, 15:47   Dir Цитата(SpyBot @ Jul 17 2008, 18:47) Я счи... Jul 20 2008, 16:55    Tanya Цитата(Dir @ Jul 20 2008, 20:55) Куда в р... Jul 20 2008, 17:43     Dir Цитата(Tanya @ Jul 20 2008, 20:43) ... Пр... Jul 20 2008, 17:53      Tanya Цитата(Dir @ Jul 20 2008, 21:53) Не иллюз... Jul 21 2008, 07:11     _Pasha Цитата(Tanya @ Jul 20 2008, 20:43) интегр... Jul 20 2008, 18:01      Dir Цитата(_Pasha @ Jul 20 2008, 21:01) +1000... Jul 20 2008, 18:09  alexander55 Цитата(Dir @ Jul 17 2008, 13:46) О, очень... Jul 21 2008, 06:44 khach Может глупость скажу. National Instruments недавно... Jul 17 2008, 10:50 VAI Вот здесь ещё посмотрите:
http://src.caxapa.ru/297 Jul 17 2008, 11:26 kanzler Всем кто откликнулся - Огромное спасибо! Согла... Jul 17 2008, 14:55 Rst7 Цитатада и быстродействие нужно, с чем AVR вряд ли... Jul 17 2008, 16:38 _Pasha Цитата(Dir @ Jul 20 2008, 21:09) Какая де... Jul 20 2008, 18:40 Dir Пока не рабирал, т.к. воскресенье и думать совсем ... Jul 20 2008, 19:52  _Pasha Цитата(Dir @ Jul 20 2008, 22:52) Т.е. поч... Jul 20 2008, 19:57   Dir Цитата(_Pasha @ Jul 20 2008, 22:57)
Не ... Jul 20 2008, 20:00 _Pasha Повторю, что сказала Таня, но своими словами.
Выхо... Jul 20 2008, 20:28 Dir Дневная жара спала и наконец-то возратилась способ... Jul 20 2008, 22:12  _Pasha Цитата(Dir @ Jul 21 2008, 01:12) Структур... Jul 20 2008, 22:46   Dir Цитата(_Pasha @ Jul 21 2008, 01:46) fLast... Jul 21 2008, 05:17 маша Некоторые соображения по поводу ограничения интегр... Jul 21 2008, 05:02 _Pasha Цитата(маша @ Jul 21 2008, 08:02) Некотор... Jul 21 2008, 06:18 маша Цитата(_Pasha @ Jul 21 2008, 10:18) Зачем... Jul 21 2008, 12:00 Dir Цитата(_Pasha @ Jul 21 2008, 09:18) Ну не... Jul 21 2008, 19:52  alexander55 Цитата(Dir @ Jul 21 2008, 23:52)
Я уже н... Jul 22 2008, 05:45   маша Цитата(alexander55 @ Jul 22 2008, 09:45) ... Jul 22 2008, 06:19    alexander55 Цитата(маша @ Jul 22 2008, 10:19) Вобщем ... Jul 22 2008, 06:28   Dir Цитата(alexander55 @ Jul 22 2008, 08:45) ... Jul 22 2008, 20:39    alexander55 Цитата(Dir @ Jul 23 2008, 00:39) ??? А мо... Jul 23 2008, 04:32 Goofy Для того, чтобы регулятор функционаровал прогнозир... Jul 21 2008, 17:16 _Pasha Цитата(маша @ Jul 21 2008, 15:00) Огранич... Jul 21 2008, 19:45 alexander55 Цитата(_Pasha @ Jul 21 2008, 23:45) Нет, ... Jul 22 2008, 05:29 маша Цитата(_Pasha @ Jul 21 2008, 23:45)
Нет... Jul 22 2008, 05:38 _Pasha Цитата(alexander55 @ Jul 22 2008, 08:29) ... Jul 22 2008, 07:39 alexander55 Цитата(_Pasha @ Jul 22 2008, 11:39) В смы... Jul 22 2008, 08:44  MrYuran Цитата(alexander55 @ Jul 22 2008, 12:44) ... Jul 22 2008, 09:01   alexander55 Цитата(MrYuran @ Jul 22 2008, 13:01) А пр... Jul 22 2008, 09:29    _Pasha Цитата(alexander55 @ Jul 22 2008, 12:29) ... Jul 22 2008, 10:07     alexander55 Цитата(_Pasha @ Jul 22 2008, 14:07) У мен... Jul 22 2008, 10:17      _Pasha Цитата(alexander55 @ Jul 22 2008, 13:17) ... Jul 22 2008, 10:32       alexander55 Цитата(_Pasha @ Jul 22 2008, 14:32) Обман... Jul 22 2008, 10:34        Tanya Цитата(alexander55 @ Jul 22 2008, 14:34) ... Jul 22 2008, 11:05         alexander55 Цитата(Tanya @ Jul 22 2008, 15:05) Вы не ... Jul 22 2008, 11:21   Tanya Цитата(MrYuran @ Jul 22 2008, 13:01) Я не... Jul 22 2008, 10:16 Tanya Цитата(SpyBot @ Jul 23 2008, 22:42) ИМХО ... Jul 24 2008, 06:10  alexander55 Цитата(Tanya @ Jul 24 2008, 10:10) Если о... Jul 24 2008, 07:46 маша Еще как вариант неявного ограничения интеграла это... Jul 24 2008, 05:13 _Pasha Цитата(маша @ Jul 24 2008, 08:13) Еще как... Jul 24 2008, 06:13
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|