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

 
 
> Регулировка температуры (П ПИ ПИД регуляторы), Начнем с ликбеза по вышке ... нервным не открывать :-)
AndryG
сообщение Nov 20 2007, 12:43
Сообщение #1


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

Группа: Свой
Сообщений: 139
Регистрация: 23-05-05
Из: UA
Пользователь №: 5 317



Доброго времени суток.
Начало истории банально - регулятор для инкубатора.
Железо - Tiny2313, DS18B20, симистор ...
каждые 2-е сек. читает температуру unsigned char ds_term "в десятых градуса" (366 -> 36.6 C)
может выставлять мощность нагревателя unsigned char pwr_level 0%-100% (управляем пропусками полупериодов по алгоритму Брезенхама) с дельтой в 1%
индикатор, кнопочки, проверка пропажы напруги, подача тревоги и другая хрень.

Теперь самое интересное - регулировка температуры.
На телесистемах нашел регулятор -- через время t проверяется температура: "жарко" - мощность--; "холодно" - мощность++ ... закинул лампу,вентилятор, датчик (спрятал в тень лампы) в коробку... температура то устанавливается через некторое время ... но с большими проскоками - сильно "жарко" порой бывает... если потом открыть коробку (проветривание/переворачивание яиц/любопытный нос), то опять пока установится ... сильно колеблется.

Второй вариант: "релейное управление" -- холодно/жарко - мощность 100/0% ... выходит сразу и красиво на нужную температуру ... почти без "проскока в жарко" ... но получается такая колебалка, что лампы долго не выдержат sad.gif (а в инкубаторе, в котором сгорел штатный регулятор ... лампы уж 40 скоро как работают ... если я их попалю за сезон - спасибо не скажут)

Третий вариант: "холодно" - 100% "жарко"-0% "норма"-XX%. XX - задаю кнопками сам ... вроде как можно и подобрать (методом тыка) для данного ящика ... но в полном итоге - фигня полная.

Полез в Сеть искать чужой опыт и теорию .. нашел ... и понял, что не помню нифига я с вышки и вообще не умею привязать знания к жизни.

Нашел "ПИД в картинках" http://www.pidregulator.com/index.html ... понял, что все мои три варианта - извратные методы ПИД регуляторов ... решил, что мне нужен ПИ регулятор. (П - прост, а ПИД-очень крут)
http://icm-tec.com/main1_10.htm - еще один ресурс .. более-менее доступно (формул нет в несколько этажей smile.gif )

Самое противное, что не знаю как задать вопрос ...

Как в теме написано .. наверно стоит начать с ликеза по вышке ... объясните, пжлст, на пальцах ... что такое интеграл и как он влияет на график регулирования в ПИ регуляторе?

Не нужно посылать читать определение интеграла и т.д. -- начитался ... вот только неувязывается у меня "площадь под функцией" и "температура 36, надо 40 -- значит мощность +3"

Эх! Надежда, что найдется кто-нить, кто понимает, что я не знаю и что мне нужно ... спасибо за прочтение.
Go to the top of the page
 
+Quote Post
3 страниц V  < 1 2 3  
Start new topic
Ответов (30 - 42)
AndryG
сообщение Apr 21 2008, 08:03
Сообщение #31


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

Группа: Свой
Сообщений: 139
Регистрация: 23-05-05
Из: UA
Пользователь №: 5 317



Теорию переварил ... а на практику вернуться - нет времени ... да и сложновато одному ковыряться.
Go to the top of the page
 
+Quote Post
Kass
сообщение May 8 2008, 08:48
Сообщение #32





Группа: Новичок
Сообщений: 6
Регистрация: 11-03-08
Пользователь №: 35 809



AndryG , Я тоже задался целью создать такой регуляторю. Элементная база такая-же. Пожалуйста, поделитесь опытом, как у вас все получилось.
И еще вопрос: При опросе датчика, вы пользуетесь стандартными функциями С-компилятьра (у меня CodeVision) или писали свои на asме?
Меня беспокоит такая штука: просто стандартная функция опроса датчика на С не любит когда в нее врывается прерывание, а опрос датчика продолжается довольно долго. У меня по прерыванию считаются полупериоды сетевой частоты, и т.д.; как у вас это сделано?
Go to the top of the page
 
+Quote Post
AndryG
сообщение May 8 2008, 10:01
Сообщение #33


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

Группа: Свой
Сообщений: 139
Регистрация: 23-05-05
Из: UA
Пользователь №: 5 317



http://andryg.ho.ua/index.php?p=ds18b20_simple - мой код для CV по работе с датчиком. Встроенные функции используются, но только по работе с шиной.

Никак у меня не получилось ... с теорией в общем виде разобрался ... но перевести это всё на практику ... забросил ... хотя точнее сказать "отложил в сторону".

последний затык был ... выбор времени интегрования ... через какие промежутки читать температуру? сколько выборок использовать в интеграторе? и т.д.
Go to the top of the page
 
+Quote Post
PhX
сообщение May 8 2008, 12:35
Сообщение #34


Местный
***

Группа: Свой
Сообщений: 473
Регистрация: 10-09-06
Из: Тольятти. Самарская обл.
Пользователь №: 20 249



Для начала разберемся с П-регулятором.
Итак, есть какая-то система допустим инкубатор.
1. У инкубатора есть выходная контролируемая величина - температура.
2. У инкубатора есть управляющее воздействие (допустим ток, протекающий через нагреватель) - u.

Стоит задача поддержать температуру на заданном уровне.

П - регулятор

Алгоритм. (Исполнитель - робот)
Итак робот каждую секунду (можно меньше или больше) просыпается и
1. Сравнивает желаемую температуру с температурой фактической и вычисляет ошибку
e=tзад - tфакт.
2. Вычисляет необходимое в данный момент времени управляющее воздействие по закону:
u=k*e,
где k - некоторый коэффициент (подбираемый эмпирически);
3. Проверяет находится ли величина требуемого управляющего воздействия в допустимых пределах.
Если u<0 то u=0 (ток через нагр. элемент выключить).
Если u>uмакс, то u=uмакс. (чтобы ничего не сгорело).

Это понятно?


--------------------
Если все, то не я...
Go to the top of the page
 
+Quote Post
PhX
сообщение May 8 2008, 20:13
Сообщение #35


Местный
***

Группа: Свой
Сообщений: 473
Регистрация: 10-09-06
Из: Тольятти. Самарская обл.
Пользователь №: 20 249



Теперь о И-регуляторе (чисто интегральный регулятор).
Интегральный регулятор предназначен для повышения точности стабилизации регулируемой величины.

Математическое описание в непрерывном виде
u = kинт*integ(e,dt),
где
integ(e,dt) - интеграл от ошибки регулирования по времени. Отметим, что этот интеграл вычисляется не зарание и не после, а во время процесса управления.

Переведем алгоритм И-регулирования в дискретную форму.


Алгоритм
1. Сравнивает желаемую температуру с температурой фактической и вычисляет ошибку
e=tзад - tфакт.
2. Робот вспоминает, какое управляющее воздействие он использовал на предыдущем шаге uпр_шаг.
Вычисляет управляющее воздействие для данного шага:
u= T*kинт*e+uпр_шаг (очень грубое представление интеграла, но при малых T подойдет).
3. Проверяет находится ли величина требуемого управляющего воздействия в допустимых пределах.
Если u<0 то u=0 (ток через нагр. элемент выключить).
Если u>uмакс, то u=uмакс. (чтобы ничего не сгорело).
4. Записывает значение u в uпр_шаг.
5. Исполняем оставшуюся часть подпрограммы. Засыпаем до следующего прерывания.

Почитайте апноту. Полное решение вашей задачи. Проц другой но, я надеюсь это не проблема.

Сообщение отредактировал PhX - May 8 2008, 20:07
Прикрепленные файлы
Прикрепленный файл  spra873.pdf ( 378.26 килобайт ) Кол-во скачиваний: 278
 


--------------------
Если все, то не я...
Go to the top of the page
 
+Quote Post
Kass
сообщение May 12 2008, 09:27
Сообщение #36





Группа: Новичок
Сообщений: 6
Регистрация: 11-03-08
Пользователь №: 35 809



PhX, есть некоторые вопросы. 1)u= T*kинт*e+uпр_шаг что такое Т, какой "kинт" хоть примерно, и на что эти величины влияют?
2) Как соединить П и И законы (напишите пож алгоритм для ПИ.)
Сразу говорю что с математикой туговато, но вобщем мозги вроде бы имеются.
AndryG писал "последний затык был ... выбор времени интегрования ... через какие промежутки читать температуру? сколько выборок использовать в интеграторе? и т.д. "
Количество выборок интегратора это количество запомненых uпр_шаг, или как? Объясните на пальцах пожалуйста. Что такое время интегрирования, как оно влияет на результат, какое должно быть для такого обьекта как инкубатор?
Go to the top of the page
 
+Quote Post
Aesthete Animus
сообщение May 12 2008, 10:49
Сообщение #37


Местный
***

Группа: Свой
Сообщений: 222
Регистрация: 9-06-07
Пользователь №: 28 317



- это коэффициент интегральной составляющей. Подобные коэффициенты обычно подбираются опытным путем из "общих" инженерных соображений.

Закон ПИ выглядит довольно просто:



Тоесть, все предельно просто. Берете рассогласование - умножаете на коэффициент , берете интеграл от рассогласования (фактически, накопленную сумму рассогласований) и умножаете на в результате получаете виличину управляющего воздействия. Пропорциональная составляющая реагирует на малые расхождения желаемой и задfной величин. Интегральная составляющая - на большие, она как бы подтягивает точку равновесия в ту область, где будет эффективно пропорциональное регулирование.

Цитата(Kass @ May 8 2008, 12:48) *
Меня беспокоит такая штука: просто стандартная функция опроса датчика на С не любит когда в нее врывается прерывание, а опрос датчика продолжается довольно долго. У меня по прерыванию считаются полупериоды сетевой частоты, и т.д.; как у вас это сделано?

Какой датчик используете? Если что-нибудь наподобее ds1820, то можно проверять контрольную сумму.
Go to the top of the page
 
+Quote Post
Kass
сообщение May 12 2008, 17:38
Сообщение #38





Группа: Новичок
Сообщений: 6
Регистрация: 11-03-08
Пользователь №: 35 809



Что значит :
Цитата(PhX @ May 8 2008, 23:13) *
integ(e,dt) - интеграл от ошибки регулирования по времени. Отметим, что этот интеграл вычисляется не зарание и не после, а во время процесса управления.
Это как понимать???
Go to the top of the page
 
+Quote Post
Aesthete Animus
сообщение May 12 2008, 18:15
Сообщение #39


Местный
***

Группа: Свой
Сообщений: 222
Регистрация: 9-06-07
Пользователь №: 28 317



Цитата(Kass @ May 12 2008, 21:38) *
Что значит : Это как понимать???

Это значит, что сей интеграл вычисляется в время работы железяки, к примеру, банальным суммированием рассогласований.
Go to the top of the page
 
+Quote Post
PhX
сообщение May 12 2008, 19:30
Сообщение #40


Местный
***

Группа: Свой
Сообщений: 473
Регистрация: 10-09-06
Из: Тольятти. Самарская обл.
Пользователь №: 20 249



Цитата(Kass @ May 12 2008, 14:27) *
2) Как соединить П и И законы (напишите пож алгоритм для ПИ.)

Что-то я отвлекся smile.gif
Алгоритм для ПИ:
Робот каждую секунду (интервал интегрирования T) просыпается и
1. Сравнивает желаемую температуру с температурой фактической и вычисляет ошибку
e=tзад - tфакт.
2. Вычисляет пропорциональную составлющую упр. возд. по закону:
uпр=kпр*e,
3. Робот вспоминает, какое значение интегральной составляющей он использовал на предыдущем шаге uи_пр_шаг.
Вычисляет интегральную составляющую упр. возд. для данного шага:
uи= T*kинт*e+uи_пр_шаг
4. Запоминает интегральную составляющую
uи_пр_шаг = uи
5. Вычисляет общее упр. возд. суммированием пропорц. и интегральной составляющей
u= uпр + uи
6. Проверяет находится ли величина требуемого управляющего воздействия в допустимых пределах.
Если u<0 то u=0 (ток через нагр. элемент выключить).
Если u>uмакс, то u=uмакс. (чтобы ничего не сгорело).
5. Исполняет оставшуюся часть подпрограммы. Засыпает до следующего прерывания.

uпр(0) = 0; uи(0) = 0
Алгоритм в виде рекурентной формы:
uпр(i) = kпр*e(i)
uи(i) = T*kинт*e(i) + uи(i-1)
u(i) = uпр(i) + uи(i)
i = 0,1,2... 0 - начало, 1 - первре прерывание, 2 - второе прерывание and so on smile.gif

Рекомендации по поводу выбора коэффициентов:
Если Вы не дружите с математикой выбор коэффицентов осуществляется эмпирически.
0. Для таких объектов как инкубатор время (постоянная времени инкубатора Tинк>100 с.), через которое происходит вызов прерываний должно быть T<= 0.1 сек (в принципе можно больше, но все современные МК легко уложатся в 0.1 с. T это то самое T, которое в алгоритме).
1. В начале установите kинт = 0.
2. Подберите kпр таким, чтобы достичь требуемого быстродействия (слишком высоко также задирать не надо. Следите за током нагр. элементов он должен изменяться плавно, а не релейно).
3. Аккуратно увеличивайте величину kинт. Добивайтесь требуемой точности.


--------------------
Если все, то не я...
Go to the top of the page
 
+Quote Post
Andrey_B
сообщение May 14 2008, 11:08
Сообщение #41


Местный
***

Группа: Свой
Сообщений: 221
Регистрация: 20-06-07
Из: Россия, Тула.
Пользователь №: 28 569



Цитата(AndryG @ May 8 2008, 14:01) *
последний затык был ... выбор времени интегрования ... через какие промежутки читать температуру? сколько выборок использовать в интеграторе? и т.д.


Все временные параметры нужно выбирать исходя из инерционности всей системы.
Основные проблемы при реализации ПИ-, ПИД-регуляторов, это механизм
антинасыщения, и собственно подбор коэффициентов. Вот небольшой кусок
из фидошной эхи RU.EMBEDDED, где простым языком описана реализация
ПИ-регулятора на МК :

==============================================

Изложенный ниже (1)алгоритм не мой, и уже публиковался в эхе, но без привязки к
системе Физическая величина-АЦП-процессор(2).
(1)
И так:
Uz - задание регулятора , code
Uos - обратная связь , code
e=Uz-Uos - рассогласование , code
Ky - коэффициент усиления , byte
Ti - постоянная времени интегрального звена , sec
t - период опроса АЦП , sec
E=E+e - "виртуальный"конденсатор интегрального звена
Итоговая формула ПИ регулятора:
Uout=Ky*(e+Е*t/Ti)
(2)
Для оптимизации работы параметры Uz, Uos, e, Uout - это числа с разрядностью
как у АЦП (8, 10, 12, 16 ... и т.д. бит) процессору ведь всё равно, что он
считает, 0.001В(Вольт) или 0х0001 (только для 0.001 неплохо было бы иметь FPU).
Коэффициент усиления пусть будет целым однобайтным числом (ни разу на практике
не встречал коэффициент больше 100)
t/Ti вычисляются заранее и представляют собой число с фиксированной точкой,
размерность которого зависит от максимальной Ti которую ты планируешь
использовать в системе регулирования
Пример:
Частота опроса АЦП - 14500 Гц
т.е. t=1/14500=0.00006897 сек
максимальная Ti = 3 сек
t/Ti=0.00002299
Перевод в число с фиксированной точкой с точностью 4 знака после запятой:
0.00002299*0х10000 =1.5066.. полученная целая часть и есть значение с
точностью 4знака после запятой (0х10000 - кл-во нулей после 1 определяет
точность) после чего можно записать, что t/Ti=0.0x0001 - если ты не собираешся
использовать постоянные времени меньше 0.001 сек то смело можешь считать что
полученная константа - двухбайтовое беззнаковое число 0х0001.
Если Ti будут небольшими (в данном случае меньше 0.00006 сек) то придётся
учитывать и целую часть числа (0х01.0х2640).
Если тебе нужны Ti>10 то увиличивай точность 0х10000... но чтобы точность
всегда была чётной иначе будут серьёзные тормоза при умножении (особенно на
восьмибитке)

Выбор разрядности Е:
Требование одно, чтобы Е не переполнялся при самой большой постоянной
времени, а то получишь генератор пилообразного напряжения (или температуры smile.gif
Контролируй и ограничивай Uout на предмет максимального значения (не больше чем
макмальный код АЦП) после этого нужно обходить процесс интегрирования до тех
пор
пока е (рассогласование) не сменит знак, иначе регулятор уйдёт в глубокой
насыщение
что при больших Ti чревато серьёзными последствиями (например на двигатель
совершенно бесконтрольно (допустим ты написал регулятор и решил его проверить,
а
защиты ещё не реализовал) подаётся максимальное напряжение в течении
длительного
времени).
Из произведения E*t/Ti для дальнейшихз вычисления (сложение с е) бери только
челую часть , в данном случае отбрасываешь два младших байта. При сложении не
забывай учитывать знак е, т.к. результат будет многобайтовым, перед сложением
расширяй е до разрядности Е с учётом знака (аналог movsx в х386).

Как и чем управлять:
Uout имеет тоже кол-во разрядов что и АЦП, соответственно напрашивается
таблица КодУправленияПреобразователем=ТаблицаКодов[Uout] что при большом
количестве памяти совершенно логично, целесообразно и экономит немалое кол-во
вычислительных ресурсов.
Допустим у меня тиристорный преобразователь (ТП), угол управления кодируется -
2х байтным числом, следовательно при разрядноси АЦП 12бит размер таблицы
0xFFF*2=8Кб.
С ШИМ всё гораздо проще т.к. он чаще всего реализован аппаратно.
Таблицу нужно сразу расчитать для получения наилучшей характеристики эдс
преобразователя от кода управления ,для ТП это синус.

==============================================

На этом форуме обитает авторитетный человек, по этим вопросам - LordN,
поищите поиском, тема уже обсуждалась.
h_t_t_p://lord-n.narod.ru/walla.html#Automatica

И по поводу градиента температуры, для ее выравнивания нужно перемешивать
воздух, например вентилятором.


--------------------
vodaspb.ru
Go to the top of the page
 
+Quote Post
Kass
сообщение May 15 2008, 07:57
Сообщение #42





Группа: Новичок
Сообщений: 6
Регистрация: 11-03-08
Пользователь №: 35 809



PhX и Andrey_B , большое спасибо за исчерпывающие ответы. Вчера сделал только П-регулирование. Результат превзошел ожидания: при коэф. усил (Кпр) 0,5 наблюдалась статическая ошибка 0,6 градуса. (как и в теории) При Кпр = 5, - небольшое перерегулирование (0,1градуса), и общая раскачка 0,3градуса. Выходит на режим долго. Испытывал в банке с водой (0,5литра), нагреватель - миникипятильник 350Вт. Чтитал в теории, что для правильного подбора коэффициентов нужно знать кривую разгона(если есть соображения - поделитесь). И еще, датчик DS1820 имеет погрешность около 0,5градуса, т. е. надо калибровать. Если кто занималься этим, напишите, интересно узнать как это делали вы.
Go to the top of the page
 
+Quote Post
Andrey_B
сообщение May 15 2008, 08:26
Сообщение #43


Местный
***

Группа: Свой
Сообщений: 221
Регистрация: 20-06-07
Из: Россия, Тула.
Пользователь №: 28 569



Цитата(Kass @ May 15 2008, 11:57) *
Вчера сделал только П-регулирование. Результат превзошел ожидания: при коэф. усил (Кпр) 0,5 наблюдалась статическая ошибка 0,6 градуса. (как и в теории) При Кпр = 5, - небольшое перерегулирование (0,1градуса), и общая раскачка 0,3градуса. Выходит на режим долго. Испытывал в банке с водой (0,5литра), нагреватель - миникипятильник 350Вт. Чтитал в теории, что для правильного подбора коэффициентов нужно знать кривую разгона(если есть соображения - поделитесь). И еще, датчик DS1820 имеет погрешность около 0,5градуса, т. е. надо калибровать. Если кто занималься этим, напишите, интересно узнать как это делали вы.


У атмела есть путевая апнота http://www.atmel.com/dyn/resources/prod_do...nts/doc2558.pdf хоть на английском, но понятная.
Погрешность датчика даст статическую ошибку, которую действительно можно убрать калибровкой. Она не влияет на точность(стабильность) поддержания температуры. А вот дрейф(шум) датчика влияют, их можно минимизировать фильтрацией и усреднением поступаемых данных.
По поводу подбора коэффициентов, обычно применяют метод Циглера-Hиколса, вот еще вырезки из фидо на эту тему :

==================================================

Для рассчета необходимо знать Ku (ultimate gain). Для этого при настройке
система включается в релейный (триггерный)
режим с небольшим гистерезисом. Hужно зафиксировать амплитуду A и период Tk
установившихся колебаний температуры
нагревателя (объекта).

Ku = (4*d)/(Pi*A), где d - амплитуда колебаний выходной мощности (в нашем
случае 50, т.к. полная мощность 100), А -
амплитуда колебаний температуры (не перепутай с двойной амплитудой). Эта
формула упрощенная, но дает неплохие
результаты.

Тогда по Циглеру-Hиколсу:

Kp = 0.6 * Ku;
Ti = Tk / 2;
Td = Tk / 8;

==================================================

Рассчет коэффициентов регулятора (K, Ti, Td, Tt) исходя из значений Ku
(ultimate gain) и Tu (ultimate period). Как будут получены Tu и Ku, дело десятое.
Можно и step response применить, и relay feedback (optional with hysteresis) и
даже метод свободных колебаний.

По Ц-H для ПИД-регулятора:

K = 0.6 * Ku;
Ti = 0.5 * Tu;
Td = 0.125 * Tu;
Tt = SQRT(Ti * Td); // или приближенно Tt = 0.25 * Tu;

==================================================

Обычно можно начать с того, что yстановить максимально возможный
Ti и минимально возможный Td и затем подбиpая Kp добится пеpвого
пpиемлемого pезyльтата. После этого yменьшают Ti с той же целью,
и в последнюю очеpедь yвеличивают Td.
Окончательнyю доводкy ведyт на pеальном yстpойстве в pеальном
pежиме pаботы.

==================================================

Для любителей настраивать PID на глаз есть такой метод:

1) D = 0, I = 0. Увеличиваем P, пока не начнутся колебания.
Откатываем P назад вдвое относительно порога автоколебаний.
2) Теперь оставляем P там же и настраиваем I до порога колебаний
и откатываем вдвое назад.
3) Теперь оставляем P и I, точно так же настраиваем D.

EK> Хочется побороться за меньшее значение, может быть посредством
EK> автоматической настройки - хостовой PC пишет в контроллер коэфиициенты,
EK> задает тестовую траекторию, меряет отклик и т.п.
EK> Хотелось бы почитать умные мысли на этот счет, а то что-то "ручками и
EK> глазками" получается таки лучше чем посредством дурной программы.

Классика. Меряется step response, дальше методом Циглера-Hикельса.


EK> А чем оно лучше/ хуже
EK> 1) выставляем P в минимум, I - в ноль
EK> 2) поднимаем D до состояния "critically dumped"
EK> 3) поднимаем P до максимума, при котором остается "critically dumped" или
EK> чуть больше с небольшим переколебанием
EK> 4) поднимаем I для уменьшения статической ошибки и тоже чтобы не выйти на
EK> колебательный режим.

==================================================


--------------------
vodaspb.ru
Go to the top of the page
 
+Quote Post

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

 


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


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