Производственное оборудование Медицинская техника, а также другое промышленное оборудования. Обсуждение и ремонт. |
27.02.2007, 14:52
|
|
Временная регистрация
Регистрация: 11.01.2005
Сообщений: 81
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
|
ПИД регулятор
Привет всем. Есть задача, управлять треходовым клапаном. Клапан приводиться в движение специальным сервоприводом. Упр. напряжение на котором от 2-х до 10В изменяю с помощью ШИМа. Температуру меряю с помощью DS1820 с точностью до 1 градуса,. т.к. большая точность не требуеться.
Есть задача написать ПИД на Си. Для данной задачи достаточно только ПИ-закон. Т.е диф. составляющую не используем.
Вот кусок кода, нарыл в инете и немного доработал, выкинув лишнее. Может быть кто сталкивался с подобной задачей, будет ли такое работать.
Заранее благодарен.
/***************************************
Themp - текущая температура
Themp_Set - установленная температура
delta_Themp - ошибка регулятора задача регулятора держать ее как можно ближе
равной 0.
old_delta_Themp - старый отсчет ошибки регулятора.
S - полный сигнал
I - интегральная составляющая
Kp - зона пропорциональности
Ti - интегральная постоянная
*/
void PID()
{
delta_Themp = Themp_Set - Themp;
I += (delta_Themp + old_delta_Themp)/(2 * Ti);
if(I ‹ 0) I = 0;
else if (I › Kp) I = Kp;
S = (delta_Themp + I) / Kp;
if(S ‹ 0) S = 0;
else if(S › 1) S = 1;
old_delta_Themp = delta_Themp;
}
// Все величины нормированные к единице.
// Td как минимум в десять раз меньше Ti.
__________________
Музыка и звук - не одно и тоже...
|
|
|
|
27.02.2007, 17:19
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.05.2006
Адрес: Москва
Сообщений: 3,559
Сказал спасибо: 76
Сказали Спасибо 326 раз(а) в 230 сообщении(ях)
|
возможно будет.
ПИД есть
в openservo.org с исходниками под WinAVR
в апноуте AVR рассмотреном на avr123.nm.ru/01.htm
а апноутах Microchip.com
AN696 an899 an582 AN937
архив со списком апноутов на avr123.nm.ru/01.htm
__________________
Обучалка AVR PIC ARM начинающим программирование курс самоучитель шаг за шагом с нуля, CVAVR, PROTEUS, MPLAB, WinAVR, IAR, KEIL электроника - http://proavr.narod.ru
|
|
|
|
27.02.2007, 20:17
|
|
Временная регистрация
Регистрация: 11.01.2005
Сообщений: 81
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
|
Попробовал приведенный выше вариант, и вот в чем загвоздка: ШИМ работает неправильно, при переполнении регистра сравнения таймера, заслонка возвращаеться в исходное положение и начинает закрываться заново. Если я температуру стабилизации выставляю 20 градусов и грею паяльником датчик, то такой процесс замечаеться два раза. Тоже самое если лед приложить и охлаждать датчик. Может быть так и должно быть, а вся проблема в коэффициентах?
__________________
Музыка и звук - не одно и тоже...
|
|
|
|
27.02.2007, 21:22
|
|
Временная регистрация
Регистрация: 12.10.2006
Сообщений: 53
Сказал спасибо: 1
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
|
Сегодня написал програмку управления эл.нагревателем(ТЭНы), для вентиляции.
Суть такова:
proc=50; - процент нагрева PWM 0..100%
OCRx=proc*2.55;
tic++; // некий программный счётчик считающий до ~10..~500
if (tic›=~10..~500) tic=0;
Процедура:
if (tic==0 & t'C реальная › t'C установленной) { OCRx=проц.открытия клапана вычесть 1% (OCR2=proc--) }
if (tic==0 & t'C реальная ‹ t'C установленной) { OCRx=проц.открытия клапана прибавить 1% (OCR2=proc++) }
Теперь корректность работы зависит от времени реакции нагревателя, т.е. мы можем регулировать длину пересчёта счётчика (tic), при tic=0 происходит пересчёт значения процента(ШИМ), соответственно и плавно подходить к искомому значению...
Чем больше проходит времени между изменениям значения тем меньше будет процент перерегулирования системы.
КАК у настоящего ПИДа.
Тебе же надо начинать со 100% открытия клапана (дорогие нынче калориферы) и плавно его закрывать.
Правильно отстроенный tic не должен даже перерегулировать клапан.
Пусть медленно но верно!
Завтра принесу исходник и если интересно то выложу.
Правда ещо не успел проверить в работе.
__________________
Б.га нет, есть только двоичный код.
|
|
|
|
27.02.2007, 21:43
|
|
Временная регистрация
Регистрация: 11.01.2005
Сообщений: 81
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
|
Я тэном тоже управляю, использую для этого ШИМ с большим (порядка 50-250 секунд) периодом. В принципе все как у тебя. Очень понравилось. Мо мере приближнния к заданой температуре реле включаеться на меньшие промежутки времени. Это сделано, чтобы не было большого колебательного процесса. тем более, что тэны сильно инерционны.
А здесь нужен ПИД, без диф. составляющей, т.е ПИ-регулятор. Вот о нем и идет речь.
А БОГ есть, но об этом уже в другом форуме
__________________
Музыка и звук - не одно и тоже...
|
|
|
|
27.02.2007, 22:08
|
|
Временная регистрация
Регистрация: 12.10.2006
Сообщений: 53
Сказал спасибо: 1
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
|
Я упровляю семисторами (BTA26,BTA41 - 26Amper,41Amper) через оптопару (MOC3063).
3 фазы - L1 напрямую, L2 L3 два семистора.
__________________
Б.га нет, есть только двоичный код.
|
|
|
|
27.02.2007, 23:01
|
|
Временная регистрация
Регистрация: 11.01.2005
Сообщений: 81
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
|
На счет управления тэнами у меня вопросов нет. Мне сейчас заслонка горит. Управляеться ШИМом. ШИМ поступает на вход ОУ, на выходе которого меняеться напряжение, которое и подаеться на заслонку. Такими приборами лучше всего только с помощью ПИД регуляторов.
__________________
Музыка и звук - не одно и тоже...
|
|
|
|
04.03.2007, 03:48
|
|
Частый гость
Регистрация: 06.06.2006
Адрес: Украина, Винница
Сообщений: 15
Сказал спасибо: 1
Сказали Спасибо 1 раз в 1 сообщении
|
по теме ПИД-регуляторов посмотрите топик:
https://kazus.ru/forum/topic_849-0-0-asc-.html
по моему мнению для управления задвижками совсем не обязателен ПИД, вполне можна обойтись и ПИ-регулятором.
И еще, время интегрирования нужно выставлять побольше, т.к. время полного хода задвижки достаточно продолжительно.
|
|
|
|
04.03.2007, 12:46
|
|
Временная регистрация
Регистрация: 11.01.2005
Сообщений: 81
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
|
Сообщение от omkravets
|
по теме ПИД-регуляторов посмотрите топик:
https://kazus.ru/forum/topic_849-0-0-asc-.html
по моему мнению для управления задвижками совсем не обязателен ПИД, вполне можна обойтись и ПИ-регулятором.
И еще, время интегрирования нужно выставлять побольше, т.к. время полного хода задвижки достаточно продолжительно.
|
Смотрел топик, интересный вариант, непонятна толко одна переменная - INTERVAL. Еще все коэффициенты принято держать в типе float или double. У меня На выходе ПИ регулятора значения в типе float от 0 до 1. Я этот результат обрабатываю и запихиваю в регистр сравнения таймера проца, чтобы ШИМ получить.
INTERVAL по моему время квантования, поправте если я не прав. И если прав, то как лучше выбирать это время?
Вот цитата из топика:
"Ну вообще довольно обширная тема...но я использовал простой алгоритм :
signed int pid_control(signed char setpoint, signed char currentpoint)
{
static signed int last_error;
signed int P;
signed int D;
static signed int I;
signed int PID;
P = (setpoint - currentpoint);
I = (I + (setpoint - currentpoint) * INTERVAL);
D = (((setpoint - currentpoint) - last_error) / INTERVAL);
last_error = setpoint - currentpoint;
PID = (Kp * P) + (Ki * I) + (Kd * D);
return (PID);
}
Где Kp, Кi, Kd - коэффициенты которые нужно подбирать под конкретную задачу или приблизительно вычислять. Не помню ссылку..но видел сайт с теорие по АСУ - там были все формулы и пояснения".
__________________
Музыка и звук - не одно и тоже...
|
|
|
|
04.03.2007, 14:06
|
|
Временная регистрация
Регистрация: 11.01.2005
Сообщений: 81
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
|
Сообщение от omkravets
|
по теме ПИД-регуляторов посмотрите топик:
|
ВОТ ЭТО ДА!!! Только сейчас заметил, что omkravets из моего города! Где б еще встретились
__________________
Музыка и звук - не одно и тоже...
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 08:54.
|
|