реклама на сайте
подробности

 
 
> ПИД регулирование, все что с ним связано
Akakiy
сообщение Nov 18 2004, 16:05
Сообщение #1


Участник
*

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



Может кто нибудь видел сишные исходники ПИД регулятора. Хотчется глянуть как народ решает эту задачку.
Go to the top of the page
 
+Quote Post
2 страниц V   1 2 >  
Start new topic
Ответов (1 - 14)
-Tумблер-
сообщение Nov 22 2004, 13:27
Сообщение #2


Частый гость
**

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



Цитата(Akakiy @ Nov 18 2004, 07:05 PM)
Хотчется глянуть как народ решает эту задачку.


Не только читали, но и писали. wink.gif
А что ж в этом такого сложного - в этой хорошо
известной формуле ? Берем ее - и вперед !


--------------------

- ЗАМЕНЯТЬ ДЕТАЛИ НА ХОДУ ВОСПРЕЩАЕТСЯ !!! -
Go to the top of the page
 
+Quote Post
Axel
сообщение Nov 23 2004, 15:44
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 480
Регистрация: 21-11-04
Пользователь №: 1 188



Есть классная книга - "Искусство программирования на С" (Хэффлд, Кирби).
Там есть все, что надо. Если трудно достать, то на сайте Diasoft (www.diasoft.kiev.ua) можно скачать диск с исходниками.
Go to the top of the page
 
+Quote Post
gek
сообщение Jan 13 2005, 17:35
Сообщение #4


Участник
*

Группа: Новичок
Сообщений: 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 - коэффициент пропорциональности дифференциальной составляющей;
....
ну и дальше в таком же духе
Go to the top of the page
 
+Quote Post
veter
сообщение Feb 3 2005, 17:21
Сообщение #5


Частый гость
**

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



почему все стремяться к таким сложностям?
есть же решения, которые проще настраиваются
Go to the top of the page
 
+Quote Post
Артемка
сообщение Feb 4 2005, 11:35
Сообщение #6


Участник
*

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



Цитата(veter @ Feb 3 2005, 23:21)
почему все стремяться к таким сложностям?
есть же решения, которые проще настраиваются
*

Например?


--------------------
У кошки четыре ноги: вход, выход, земля и питание;)
Go to the top of the page
 
+Quote Post
veter
сообщение Feb 4 2005, 16:11
Сообщение #7


Частый гость
**

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



решали задачу управления процессом аустенизации патрубков после сварки, поддержка температуры трубы на 1000 градусах

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

к нам подошел ответственный за работу и говорит: сделайте пока в релейном режиме - дошла Т до уставки вырубайте, снизилась врубайте. - таким методом достигли точности установки примерно в 20 градусов

потом попробовали итерационный алгоритм. первый выброс не более 20 град, поддержка Т - +-5Град.
а коэффициентов всего два 1 - частота съема показаний с датчика,
2 - шаг одной итерации.
потом разогрев по прямой делали, тоже никаких проблемм.
Go to the top of the page
 
+Quote Post
gek
сообщение Feb 7 2005, 08:37
Сообщение #8


Участник
*

Группа: Новичок
Сообщений: 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. В принципе работает, но хочу попробовать новый алгоритм
Go to the top of the page
 
+Quote Post
-Tумблер-
сообщение Feb 7 2005, 12:38
Сообщение #9


Частый гость
**

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



Цитата(veter @ Feb 4 2005, 19:11)
сначала вдарились в ПИДрегулирование - настраивали такой регулятор месяца два. ничего не выходило - при выходе на режим наблюдался выброс на 100 град, а если его убрать (в смысле выброс )- до 1000 доходил аж за 7-10мин.

*

Что значит "убрать" ? Убрать переригулирование до 0 или до 20 градусов
это разные получатся времена.
Да, дело известное. Это "интегратор виноват ".
Тут можно рекомендовать применить разные параметры
ПИД - регулятора для первоначального нагрева и для
регулирования в установившемся режиме.
(Теоретически можно поэкспериментировать с уровнем
насышения интегратора. Это тоже может (могло) помочь.)
В общем, при первоначальном нагреве - релейный алгоритм,
при выходе на режим - ПИД.

smile.gif


--------------------

- ЗАМЕНЯТЬ ДЕТАЛИ НА ХОДУ ВОСПРЕЩАЕТСЯ !!! -
Go to the top of the page
 
+Quote Post
veter
сообщение Feb 7 2005, 13:33
Сообщение #10


Частый гость
**

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



Цитата
Здесь Т - время квантования, Кр - пропорциональный коэффициент, Кi - итегральный коэффициент, Кд - дифференциальная.  Формулы проверенные и рабочие


а как выбирать их значения?
Go to the top of the page
 
+Quote Post
gek
сообщение Feb 9 2005, 03:55
Сообщение #11


Участник
*

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



Цитата(veter @ Feb 7 2005, 16:33)
Цитата
Здесь Т - время квантования, Кр - пропорциональный коэффициент, Кi - итегральный коэффициент, Кд - дифференциальная.  Формулы проверенные и рабочие


а как выбирать их значения?
*


Вот я и говорю, что лучше нужно было ТАУ изучать blush.gif
Остается только опытным путем. Т беретется самым минимальным, сколько можно достичь, остальными коэффициентами играться. Вот тут без графиков переходных процессов не обойтись. Строишь график измеряемой переменной и смотришь веоичину перерегулирования, колебательность и т.п.
Go to the top of the page
 
+Quote Post
-Tумблер-
сообщение Feb 10 2005, 12:09
Сообщение #12


Частый гость
**

Группа: Свой
Сообщений: 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
smile.gif


--------------------

- ЗАМЕНЯТЬ ДЕТАЛИ НА ХОДУ ВОСПРЕЩАЕТСЯ !!! -
Go to the top of the page
 
+Quote Post
sergag
сообщение Mar 14 2005, 09:39
Сообщение #13


Участник
*

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



[quote=-Tумблер-,Feb 10 2005, 15:09]
[quote=veter,Feb 7 2005, 16:33]

а как выбирать их значения?

Не уверен, но по-моему, стоит посмотреть программы по автонастройке контуров. Например, www.ExperTune.com. Она есть у меня немного вылеченная smile.gif Если возражений не будет, то в ближайшее время сброшу (где-то 8 МБ).
А также посмотри www.atm.h1.ru - очень подробно говорится о настройке регуляторов.
Go to the top of the page
 
+Quote Post
khach
сообщение Mar 14 2005, 15:14
Сообщение #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;
}
Go to the top of the page
 
+Quote Post
sergag
сообщение Mar 17 2005, 11:25
Сообщение #15


Участник
*

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



Поможет или нет - не знаю, но посморите форум http://forum.cta.ru/forum_posts.asp?TID=758&PN=1 - там обсуждали настрйку регуляторов
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 12:03
Рейтинг@Mail.ru


Страница сгенерированна за 0.01463 секунд с 7
ELECTRONIX ©2004-2016