|
ПИД регулирование, все что с ним связано |
|
|
|
Nov 18 2004, 16:05
|
Участник

Группа: Участник
Сообщений: 24
Регистрация: 15-11-04
Пользователь №: 1 137

|
Может кто нибудь видел сишные исходники ПИД регулятора. Хотчется глянуть как народ решает эту задачку.
|
|
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 27)
|
Nov 22 2004, 13:27
|

Частый гость
 
Группа: Свой
Сообщений: 146
Регистрация: 4-11-04
Из: Московская область
Пользователь №: 1 040

|
Цитата(Akakiy @ Nov 18 2004, 07:05 PM) Хотчется глянуть как народ решает эту задачку. Не только читали, но и писали. А что ж в этом такого сложного - в этой хорошо известной формуле ? Берем ее - и вперед !
--------------------
- ЗАМЕНЯТЬ ДЕТАЛИ НА ХОДУ ВОСПРЕЩАЕТСЯ !!! -
|
|
|
|
|
Jan 13 2005, 17:35
|
Участник

Группа: Новичок
Сообщений: 43
Регистрация: 12-01-05
Пользователь №: 1 914

|
Цитата(Axel @ Nov 23 2004, 18:44) Есть классная книга - "Искусство программирования на С" (Хэффлд, Кирби). Там есть все, что надо. Если трудно достать, то на сайте Diasoft (www.diasoft.kiev.ua) можно скачать диск с исходниками. Море интересных тем, но мне нужен доступ на фтп. Про цифровой пид регулятор тоже интересно, кто бы чего поподробнее выложил. Например так ..... Чтобы реализовать эту функцию управления в цифровой вычислитель-ной машине, должно быть выполнено квантование непрерывной функции в соответствии с периодическими замерами значения ошибки с последующим расчетом регулирующего воздействия. Соответствующее уравнение, являю-щееся основой для решения на цифровой вычислительной машине, имеет вид (3.3): . Q(n)=Qf(n)+Qi(n)+Qd(n) (3.3) где: Q(n) – расчетное значение регулирующего воздействия в момент квантования n; QP(n) – значение пропорциональной составляющей регулирующего воздействия в момент квантования n; QI(n) – значение интегральной составляющей регулирующего воздействия в момент квантования n; QD(n) – значение дифференциальной составляющей регулирующего воздействия в момент квантования n; Модифицированное уравнение имеет вид (3.4): . Q(n)=Kc*e(n)+Ki*{сумма от i=1 до n}e(i) +Qнач+Kd*(e(n)-e(n-1)) (3.4) где: Q(n) - расчетное значение регулирующего воздействия в момент квантования n; KC - коэффициент усиления контура регулирования; e(n) - значение ошибки регулирования в момент квантования n; e(n-1) - предыдущее значение ошибки регулирования (в момент квантования n-1); KI - коэффициент пропорциональности интегральной составляющей; Qнач - начальное значение регулирующего воздействия; KD - коэффициент пропорциональности дифференциальной составляющей; .... ну и дальше в таком же духе
|
|
|
|
|
Feb 4 2005, 11:35
|

Участник

Группа: Свой
Сообщений: 51
Регистрация: 18-01-05
Из: Пермь
Пользователь №: 2 024

|
Цитата(veter @ Feb 3 2005, 23:21) почему все стремяться к таким сложностям? есть же решения, которые проще настраиваются Например?
--------------------
У кошки четыре ноги: вход, выход, земля и питание;)
|
|
|
|
|
Feb 7 2005, 08:37
|
Участник

Группа: Новичок
Сообщений: 43
Регистрация: 12-01-05
Пользователь №: 1 914

|
Мда... Нужно было лучше Теорию Автоматического Управления учить тут интересный материал http://www.telesys.ru/wwwboards/mcontrol/8...ages/3748.shtmlобъявления signed int mem_UPR, mem_DAT;float R_E1[3], U_E2[2]; формулы R_E1[0] = (float) (mem_UPR - mem_DAT);U_E2[0] = C0 * R_E1[0] - C1 * R_E1[1] + C2 * R_E1[2] + U_E2[1];U_E2[1] = U_E2[0];R_E1[2] = R_E1[1];R_E1[1] = R_E1[0]; R_E1 - разность между управляющим напряжением и напряжением обратной связи U_E2 - управляющее воздействие C1, C2, C3 из коэффициентов ПИД считаются так. mem_UPR - измеренное управлющее воздействие в кодах АЦП mem_DAT - измеренное напряжение обратной связи в кодах АЦП Эти коды в приниципе надо привести к вольтам, но можно и в коэффициентах учесть. C0 := Kp + ((Ki * T) / 2 ) + Kd /T;C1 := Kp + (2 * Kd) / T;C2 := Kd / T; Здесь Т - время квантования, Кр - пропорциональный коэффициент, Кi - итегральный коэффициент, Кд - дифференциальная. Формулы проверенные и рабочие -------------------- То что приводил я выше взято из документации к логическим контроллерам фирмы siemens simatic s7. В принципе работает, но хочу попробовать новый алгоритм
|
|
|
|
|
Feb 7 2005, 12:38
|

Частый гость
 
Группа: Свой
Сообщений: 146
Регистрация: 4-11-04
Из: Московская область
Пользователь №: 1 040

|
Цитата(veter @ Feb 4 2005, 19:11) сначала вдарились в ПИДрегулирование - настраивали такой регулятор месяца два. ничего не выходило - при выходе на режим наблюдался выброс на 100 град, а если его убрать (в смысле выброс )- до 1000 доходил аж за 7-10мин. Что значит "убрать" ? Убрать переригулирование до 0 или до 20 градусов это разные получатся времена. Да, дело известное. Это "интегратор виноват ". Тут можно рекомендовать применить разные параметры ПИД - регулятора для первоначального нагрева и для регулирования в установившемся режиме. (Теоретически можно поэкспериментировать с уровнем насышения интегратора. Это тоже может (могло) помочь.) В общем, при первоначальном нагреве - релейный алгоритм, при выходе на режим - ПИД.
--------------------
- ЗАМЕНЯТЬ ДЕТАЛИ НА ХОДУ ВОСПРЕЩАЕТСЯ !!! -
|
|
|
|
|
Feb 7 2005, 13:33
|
Частый гость
 
Группа: Свой
Сообщений: 119
Регистрация: 26-01-05
Из: С-Пб
Пользователь №: 2 210

|
Цитата Здесь Т - время квантования, Кр - пропорциональный коэффициент, Кi - итегральный коэффициент, Кд - дифференциальная. Формулы проверенные и рабочие а как выбирать их значения?
|
|
|
|
|
Feb 9 2005, 03:55
|
Участник

Группа: Новичок
Сообщений: 43
Регистрация: 12-01-05
Пользователь №: 1 914

|
Цитата(veter @ Feb 7 2005, 16:33) Цитата Здесь Т - время квантования, Кр - пропорциональный коэффициент, Кi - итегральный коэффициент, Кд - дифференциальная. Формулы проверенные и рабочие а как выбирать их значения? Вот я и говорю, что лучше нужно было ТАУ изучать Остается только опытным путем. Т беретется самым минимальным, сколько можно достичь, остальными коэффициентами играться. Вот тут без графиков переходных процессов не обойтись. Строишь график измеряемой переменной и смотришь веоичину перерегулирования, колебательность и т.п.
|
|
|
|
|
Feb 10 2005, 12:09
|

Частый гость
 
Группа: Свой
Сообщений: 146
Регистрация: 4-11-04
Из: Московская область
Пользователь №: 1 040

|
Цитата(veter @ Feb 7 2005, 16:33) а как выбирать их значения? Что то тут можно почитать: http://www.dian.ru/sh_autm.html Автор этой статьи предлагает такую методику: 1. Отключаем все звенья, кроме ПЭ. 2. Увеличиваем Кп до тех пор, пока не появятся колебания. Это и будет - Кп. 3. Измеряем период (частоту) этих колебаний. 4. Выбираем Tдиф = ~ этому периоду. Это значит, запас по фазе будет 45 градусов, что достаточно. 5. Выбираем Tинт = ~10 * Tдиф. 6. после параметры можно еще уточнить используя: http://members.vicard.net/sensor/main1_10.htm
--------------------
- ЗАМЕНЯТЬ ДЕТАЛИ НА ХОДУ ВОСПРЕЩАЕТСЯ !!! -
|
|
|
|
|
Mar 14 2005, 09:39
|
Участник

Группа: Свой
Сообщений: 57
Регистрация: 10-03-05
Пользователь №: 3 197

|
[quote=-Tумблер-,Feb 10 2005, 15:09] [quote=veter,Feb 7 2005, 16:33] а как выбирать их значения? Не уверен, но по-моему, стоит посмотреть программы по автонастройке контуров. Например, www.ExperTune.com. Она есть у меня немного вылеченная  Если возражений не будет, то в ближайшее время сброшу (где-то 8 МБ). А также посмотри www.atm.h1.ru - очень подробно говорится о настройке регуляторов.
|
|
|
|
|
Mar 14 2005, 15:14
|
Гуру
     
Группа: Свой
Сообщений: 3 439
Регистрация: 29-12-04
Пользователь №: 1 741

|
Приблудилось из Сети. Код /*
. position = ReadPlantADC(); drive = UpdatePID(&plantPID, plantCommand - position, position); DrivePlantDAC(drive); . */
typedef struct { double dState; // Last position input double iState; // Integrator state double iMax, iMin; // Maximum and minimum allowable integrator state double iGain, // integral gain pGain, // proportional gain dGain; // derivative gain } SPid; double UpdatePID(SPid * pid, double error, double position) { double pTerm, dTerm, iTerm; pTerm = pid->pGain * error; // calculate the proportional term // calculate the integral state with appropriate limiting pid->iState += error; if (pid->iState > pid->iMax) pid->iState = pid->iMax; else if (pid->iState < pid->iMin) pid->iState = pid->iMin; iTerm = pid->iGain * iState; // calculate the integral term dTerm = pid->dGain * (position - pid->dState); pid->dState = position; return pTerm + iTerm - dTerm; }
|
|
|
|
|
Mar 20 2005, 23:05
|
Участник

Группа: Участник
Сообщений: 23
Регистрация: 18-03-05
Пользователь №: 3 481

|
Цитата(Akakiy @ Nov 18 2004, 20:05) Может кто нибудь видел сишные исходники ПИД регулятора. Хотчется глянуть как народ решает эту задачку. линк вдогонку http://www.jashaw.com/pid/code.htmэто конечно примитивщина, но на 1й раз пойдет теория http://atm.h1.ru/root/theory/theory.html на "сруском" а вообще для прграммирования удобней u(k+1)=K1*u(k)-K2*u(k-1)+K3*u(k-2) u(i)- управляющее воздействие на i шаге K1,2,3-коэффициенты
|
|
|
|
|
Apr 5 2005, 04:25
|
Участник

Группа: Свой
Сообщений: 54
Регистрация: 23-03-05
Пользователь №: 3 615

|
Модель ПИ регулятора.
Управление осуществляется по формуле:
Управление = Управление + Кп * (Текущее_рассогласование - Предыдущее_ рассогласование) + 1/ Ти * Текущее_рассогласование.
Управление(Out) выход регулятора шкала 0-100 Кп - коэффициент пропорциональности = 0.1 Ти - время интегрирования = 5 с
Регулятор должен вызываться с какой то периодичностью допустим раз в 1 секунду, тогда значение Ти будет в секундах
Интегральная часть (Ui) = 1/ Ти * Текущее_рассогласование
Шаг 1 Pv Расход воздуха равен 10 м3/ч Sp Задание по воздуху 20 м3/ч Текущее_рассогласование = Sp- Pv = 20 - 10 = 10 Предыдущее_рассогласование = 0 При первом включении регулятора Ui = - Кп * Текущее_рассогласование , что бы выход регулятора был равен 0. Out = 0 + 0.1 * ( 10 - 0 ) + (- 0.1 * 10 ) = 0
Через 1 секунду
Шаг 2 Pv Расход воздуха равен 10 м3/ч Sp Задание по воздуху 20 м3/ч Текущее_рассогласование = Sp- Pv = 20 - 10 = 10 Предыдущее_рассогласование = 10 Ui = 1/5 * 10 = 2 Out = 0 + 0.1 * ( 10 - 10 ) + 1/5 * 10 = 2
Через 1 секунду
Шаг 3 Pv Расход воздуха равен 15 м3/ч Sp Задание по воздуху 20 м3/ч Текущее_рассогласование = Sp- Pv = 20 - 15 = 5 Предыдущее_рассогласование = 10 Ui = 1/5 * 10 = 2 Out = 2 (Out) + 0.1 * ( 5 - 10 ) + 1/5 * 10 = 2 - 0.5 +2 = 3.5
И т д
Если выход регулятора будет больше 100 или меньше 0 то выход регулятора нужно замораживать
|
|
|
|
|
Apr 27 2005, 16:57
|
Группа: Новичок
Сообщений: 9
Регистрация: 26-04-05
Пользователь №: 4 522

|
Прежде всего нужно начать с того, каков объект и его передаточная функция. Тип регулятора и инженерные методы его синтеза выбираются исходя из модели объекта. Да, классический случай прост, но, например для температурных процессов можно добавить форсирование, так как они медленные... и.т.д А задача программирования достаточно проста. Выбрать дискретный регулятор(модель) и вперед. Есть простой способ получения С кода регулятора. Берется MATLAB с Control System ToolBox, синтезируется и моделируется в нем система управления, а далее можно получить C- код регулятора, там даже некое API есть и библиотеки нужные, как это сделать, написано в документации.
|
|
|
|
|
Apr 28 2005, 15:03
|
Местный
  
Группа: Свой
Сообщений: 216
Регистрация: 31-03-05
Из: Зеленоград
Пользователь №: 3 839

|
Цитата(pschl @ Apr 27 2005, 19:57) Прежде всего нужно начать с того, каков объект и его передаточная функция. Тип регулятора и инженерные методы его синтеза выбираются исходя из модели объекта. Вот такой обобщенный вопрос: А если не знаем объект и его передаточную функцию - и все это черный ящик. И модель объекта построить сложно, чтоб адекватно все свойства отражала. Есть только входные воздействия и выходные отклики (и мы знаем какой он должен быть с вероятностью < 1). Что делать ?? То есть, как строить систему с обучением в общем я знаю, но как обучать, чтобы добиться лучшего приближения и макс. быстрой стабилизации(захвата) - очень хочу знать. Что значит "форсирование" Цитата(pschl @ Apr 27 2005, 19:57) ..можно добавить форсирование, так как они медленные...
|
|
|
|
|
May 5 2005, 04:34
|
Участник

Группа: Свой
Сообщений: 27
Регистрация: 28-04-05
Пользователь №: 4 557

|
Была аналогичная проблема. Достаточно долгий выход на режим из за перерегулирования и достатачно длительного затем успокоения системы. Причем требовалось убрать перерегулирование температуры совсем. Задача была в поддержании температур в диапазоне от 30 до 400 градусов с точностью не менее 0.2 градусов. выход на режим осуществляется с со скоростью от 0.5 до 100 грд/мин. Перерегулирование происходит по двум причинам 1. влияние интегральной, накопившейся за время выхода на режим. 2. из за тепловой инерции системы. Решилось следующим образом: Был взят класический ПИД закон. при выходе на заданную температуру интегральная составляющая не участвует. т.к. ее влияние важно только на этапе поддержания. Затем империческим путем определена тепловая инерция системы. т.е. Перелет без участия интегральной. Таким образом получили формулу расчета, дельты когда при выходе на режим регулирование надо прекращать. Тзаданная = Тзаданная - дельта. После прекращения регулирования ждем падения скорости прироста температуры практически до нуля. и начинаем регулирование. Чтобы не было провала в регулировании из за отсутствия интегральной ее надо начинать накапливать с температуры зависящей от скорости выхода и заданной температуры. (формулу получили также империческим путем)
Кстати. Можно еще не ждать перелета, а принудительно понижать скорость на конечном этапе. Таким образом время выхода на режим уменьшается в разы
|
|
|
|
|
May 5 2005, 06:07
|
Участник

Группа: Свой
Сообщений: 27
Регистрация: 28-04-05
Пользователь №: 4 557

|
Кстати ПИД регудятор можно усовершенствовать. Добавив к нему постоянную составляющую, зависящую от заданного значения. Мы ведь знаем какое воздействие надо оказывать на систему в состоянии поддержания. Возьмем это воздействие вычтем где-то 5-10%. и добавим к резульату ПИД расчета. Тем самым мы уменьшим время выхода на режим поддержания. т.к. интегральную составляющую надо копить меньше
|
|
|
|
|
May 6 2005, 11:40
|

Частый гость
 
Группа: Свой
Сообщений: 146
Регистрация: 4-11-04
Из: Московская область
Пользователь №: 1 040

|
Цитата ..при выходе на заданную температуру интегральная составляющая не участвует. т.к. ее влияние важно только на этапе поддержания. .. Цитата(yuriyc @ May 5 2005, 09:07) Кстати ПИД регудятор можно усовершенствовать. Добавив к нему постоянную составляющую, зависящую от заданного значения. Удивительно, как иногда разные разработчики независимо друг от друга приходят к одним и тем же выводам. Что удивительно приятно. Могу лишь добавить, что иногда может быть удобно определить массив "постоянных составляющих" для разных температур. Так сказать, "равновесную кривую". А значения между этими точками считать посредством кусочно-линейной апроксимации.
--------------------
- ЗАМЕНЯТЬ ДЕТАЛИ НА ХОДУ ВОСПРЕЩАЕТСЯ !!! -
|
|
|
|
|
May 6 2005, 17:23
|
Участник

Группа: Свой
Сообщений: 27
Регистрация: 28-04-05
Пользователь №: 4 557

|
Цитата(-Tумблер- @ May 6 2005, 14:40) Могу лишь добавить, что иногда может быть удобно определить массив "постоянных составляющих" для разных температур. Так сказать, "равновесную кривую". А значения между этими точками считать посредством кусочно-линейной апроксимации. Полностью согласен. При не линейности характеристик это очень даже поможет  Скорее это будет даже более правильным решением
|
|
|
|
|
May 11 2005, 06:34
|
Участник

Группа: Свой
Сообщений: 27
Регистрация: 28-04-05
Пользователь №: 4 557

|
Цитата(khach @ May 6 2005, 22:46) При ПИД регулировке нагревателей (и охладителей) столкнулся с ситуацией, когда постоянная времени "вверх" сильно отличаеться от постоянной времени "вниз". Кто нибудь сталкивался с регуляторами с двумя P (одна-"вверх", другая -"вниз")? И что говорит академическая теория устойчивости о таких системах? Ну на счет академическай теории устойчивости о таких системах не скажу. Не вкурсе. Но мне кажется, что конечная устойчивость будет связана с точностью управляющего воздействия. Так в систевах нагрева ее можно довести до сотых градуса используя электронагреватели. А вот при охлаждении уже нет такого результата. Так для крио установок на жидном азоте, заявленная точность крана впрыска +-5грд/сельсия. Охладить можно до -400грд. Тут уже вопрос в реализации системы и общем диапазоне рабочих температур. Точность можно повысить, я думаю, за счет константы холода и регулированным подогревом. Что касается постоянной времени, то если нагрев принудительный, то охлаждение наверняка естественное ну или обдув воздухом. Отсюда и разница. Эфективность то нагрева выше.
|
|
|
|
|
May 11 2005, 09:47
|

Частый гость
 
Группа: Свой
Сообщений: 146
Регистрация: 4-11-04
Из: Московская область
Пользователь №: 1 040

|
Цитата(khach @ May 6 2005, 22:46) Кто нибудь сталкивался с регуляторами с двумя P (одна-"вверх", другая -"вниз")? И что говорит академическая теория устойчивости о таких системах? Специально ничего такого от академической науки найти не удалось. Что касается регуляторов температуры, то подозреваю что "все они такие". Причем в Якутии это будет не так, как в Сахаре. Что можно было бы предложить ? Если очень надо, можно использовать разные передаточные функции регулятора для процесса нагревания и охлаждения. Видимо, так можно улучшить динамические свойства системы. Общие законы устойчивости, конечно, не меняются. '' ..достаточный запас по фазе на частоте единичного усиления разомкнутой системы..''
--------------------
- ЗАМЕНЯТЬ ДЕТАЛИ НА ХОДУ ВОСПРЕЩАЕТСЯ !!! -
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|