|
Регулировка температуры (П ПИ ПИД регуляторы), Начнем с ликбеза по вышке ... нервным не открывать :-) |
|
|
|
Nov 20 2007, 12:43
|
Частый гость
 
Группа: Свой
Сообщений: 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% ... выходит сразу и красиво на нужную температуру ... почти без "проскока в жарко" ... но получается такая колебалка, что лампы долго не выдержат  (а в инкубаторе, в котором сгорел штатный регулятор ... лампы уж 40 скоро как работают ... если я их попалю за сезон - спасибо не скажут) Третий вариант: "холодно" - 100% "жарко"-0% "норма"-XX%. XX - задаю кнопками сам ... вроде как можно и подобрать (методом тыка) для данного ящика ... но в полном итоге - фигня полная. Полез в Сеть искать чужой опыт и теорию .. нашел ... и понял, что не помню нифига я с вышки и вообще не умею привязать знания к жизни. Нашел "ПИД в картинках" http://www.pidregulator.com/index.html ... понял, что все мои три варианта - извратные методы ПИД регуляторов ... решил, что мне нужен ПИ регулятор. (П - прост, а ПИД-очень крут) http://icm-tec.com/main1_10.htm - еще один ресурс .. более-менее доступно (формул нет в несколько этажей  ) Самое противное, что не знаю как задать вопрос ... Как в теме написано .. наверно стоит начать с ликеза по вышке ... объясните, пжлст, на пальцах ... что такое интеграл и как он влияет на график регулирования в ПИ регуляторе? Не нужно посылать читать определение интеграла и т.д. -- начитался ... вот только неувязывается у меня "площадь под функцией" и "температура 36, надо 40 -- значит мощность +3" Эх! Надежда, что найдется кто-нить, кто понимает, что я не знаю и что мне нужно ... спасибо за прочтение.
|
|
|
|
|
Nov 20 2007, 13:14
|

Знающий
   
Группа: Свой
Сообщений: 562
Регистрация: 25-07-06
Из: Зеленоград, Новосибирск
Пользователь №: 19 088

|
Всё просто: интегралл в данном случае есть среднее значение контроллируемого параметра (температуры), за определённый период, которое и может получиться в вашем случае 36. Т. е. к примеру температура колебалась в пределах 34, 36, 38 при этом среднее значение будет (34+38+36)/3=36, в данном случае период интегрирования равен трём. Таким образом уменьшается ошибка измерения, которая бы возникла, если бы взяли только значение 34. Затем это значение сравнивается с заданным 40. И исходя из разницы этих значений (40-36) пропорционально увеличивать мощность (или уменьшать).
--------------------
"Отсутствие вашей судимости - это не ваша заслуга, а наша недоработка." Ф.Дзержинский.
|
|
|
|
|
Nov 20 2007, 14:59
|
Частый гость
 
Группа: Свой
Сообщений: 139
Регистрация: 23-05-05
Из: UA
Пользователь №: 5 317

|
Цыплят и мне жалко - посему и на форуме сижу. Теорию штудирую ... но проблема в том, что не грызется гранит нифига ... объясните с привязкой к жизни, что такое интеграл и интегральная составляющая ... и почему и к чему мы тут вообще интеграл вспомнили? ___ P.S. Татьяна ... это лучше, чем Надежда  красивое имя.
|
|
|
|
|
Nov 20 2007, 15:24
|
Гуру
     
Группа: Модераторы
Сообщений: 8 752
Регистрация: 6-01-06
Пользователь №: 12 883

|
Цитата(AndryG @ Nov 20 2007, 17:59)  Цыплят и мне жалко - посему и на форуме сижу. Теорию штудирую ... но проблема в том, что не грызется гранит нифига ... объясните с привязкой к жизни, что такое интеграл и интегральная составляющая ... и почему и к чему мы тут вообще интеграл вспомнили? ___ P.S. Татьяна ... это лучше, чем Надежда  красивое имя. Все это Вы уже, наверное читали... Банально, но в двух словах на пальцах... Пропорциональная составляющая дает мощность пропорциональную невязке. Поэтому, если инкубатор не полностью теплоизолирован, следовательно нужна некая средняя мощность, то эта средняя мощность появится только при некотором среднем отклонении температуры - температура в среднем будет ниже заданной. Интегральная составляющая устраняет это безобразие путем медленной подстройки мощности. И.С. пропорциональна интегралу от невязки по времени... Когда мы достигнем того, чего хотели, она перестает меняться. В установившемся (стационарном) режиме мощность полностью определяется ИС. А почитайте-ка Титце с Шенком. Там все очень хорошо описано...
|
|
|
|
|
Nov 22 2007, 08:20
|

Частый гость
 
Группа: Свой
Сообщений: 114
Регистрация: 14-08-07
Из: Харьков, Украина
Пользователь №: 29 773

|
Цитата(Bird2 @ Nov 20 2007, 21:43)  Да и еще - с датчиком DS нужно аккуратно, добиться заявленной точности не так просто. Хотя для узкого коридора температур... нормально будет Да было замечено, что при частом опросе - греется сам термометр, что приводит в свою очередь к ошибке измерения температуры до 2-4 градусов  ("Рядом" (около 5 см), находился ещё один такой же термометр, опрашиваемый в 10 раз реже)
--------------------
Жизнь сложна и не предсказуема, незачем её усложнять.
|
|
|
|
|
Nov 22 2007, 08:36
|

Знающий
   
Группа: Свой
Сообщений: 568
Регистрация: 8-07-07
Из: Занзибар
Пользователь №: 28 964

|
Я бы все таки начал с составления системы уравнений и расчета передаточной функции системы (см. пример). Все остальное это скорее управление, чем регулировка. А во вторых любой регулятор надо просимулировать, т.к. есть некоторые нюансы, которые не просчитать (что касается нестабильности), а это обязывает в наличии передаточной функции системы.
Сообщение отредактировал sergeeff Jr. - Nov 22 2007, 08:38
--------------------
"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино". А. и Б. Стругацкие
|
|
|
|
|
Nov 22 2007, 10:45
|
Гуру
     
Группа: Модераторы
Сообщений: 8 752
Регистрация: 6-01-06
Пользователь №: 12 883

|
Цитата(sergeeff Jr. @ Nov 22 2007, 11:36)  Я бы все таки начал с составления системы уравнений и расчета передаточной функции системы (см. пример). Все остальное это скорее управление, чем регулировка. А во вторых любой регулятор надо просимулировать, т.к. есть некоторые нюансы, которые не просчитать (что касается нестабильности), а это обязывает в наличии передаточной функции системы. Инкубатор с яйцам, вентилятором и датчиком в коробке - увы, нелинейная система... Автору надо ехать, а не шашечки... В его случае можно поставить еще ограничение скорости изменения задатчика, ограничение мощности (чтобы лампы были целы) и все будет хорошо... чтобы по-осени считать цыплят...
|
|
|
|
|
Nov 22 2007, 11:41
|
Профессионал
    
Группа: Свой
Сообщений: 1 210
Регистрация: 24-01-05
Из: Россия Волгодонск
Пользователь №: 2 134

|
Цитата(Bird2 @ Nov 20 2007, 18:09)  А может применить трехпозиционный закон регулирования в данном случае? Для отопления помещений он вполне подходит. Вполне подойдет и двухпозиционный регулятор. Но есть тонкости. Первое датчик температуры должен находится по возможности вблизи Нагревателя. Мощность нагревателя должна быть минимальна. только чтобы обеспечить нужную температуру, это значительно уменьшит перебег при отключении. Желательно обеспечить максимально быстрое выравнивание температуры в камере.(принудительная конвенция,теплопроводящие трубки, распределеный нагреватель.) В случае применения ПИД регуляторов следует учесть очень большие постоянные времени. И "емкостный характер нагрузки" в виде теплоемкости объэкта регулирования. И большой "люфт" (низкая скорость выравнивания температуры в камере).
|
|
|
|
|
Nov 22 2007, 11:53
|
Частый гость
 
Группа: Свой
Сообщений: 139
Регистрация: 23-05-05
Из: UA
Пользователь №: 5 317

|
По термометруУ меня термометр живет на паразитном питании Управляется двумя функциями: ds_convert()-> инициализирует датчик и запускает конвертацию; и ds_read() -> читает температуру. В основном цикле прокручиваются функции -> ds_convert ... 2 сек(время преобразования при 12 бит. 1.75 сек) ... ds_read ... ds_convert и т.д. Саморазогрев идет 0.1 градуса. Посчитал, что пока можно смирится. а там посмотрим. По трех-позиционном алг. управления Насколько я понял, такой алгоритм прокатит в довольно инерционной системе ... а у меня ящик остывает с скорость примерно 0.75 от скорости нагрева  Примерно с таким алгоритмом я уже возился -- мощность нагревателя постоянно прыгает. Ну и П-регулятор http://icm-tec.com/main1_10.htm Y=К·(U-X) , для П-регулятора К= 1/R·t0 Я так понял, что первым делом надо данные с датчика завести на комп и сварганить логгер - построить криву разогрева моего ящика ... тогда можно думать о расчете коф. Но пока пара вопросов ... Следуя закону Y=К·(U-X) при уменьшении невязки мощность нагревателя падает ... и в один прекрасный момент становится нулю ... коробка остывает - невязка увеличивается - нагреватель включается - невязка уменьшается - нагреватель выключается ... одним словом получаем колебания ... период которых зависит от качества изоляции моей коробки и К. Амплитуда в большей степени зависит от К ... вроде. Если этот алгоритм впихнуть в мою коробку, которая остывает всего немного медленне, чем ее лампа нагревает ... то d (стат. ошибка) у меня должна быть ну Очень большой. Верно? Ну это всё пока изыски ... "а что, а как" Вот теперь интереснее вопрос .. как X превратить в конкретный показатель мощности, который у меня в пределах 0..100 ? А если невязка отрицательную получу при "проскоке" или смене задания? Лампу в холодильник как превратить  ? или просто мощность в 0 ?
|
|
|
|
|
Nov 22 2007, 18:36
|
Частый гость
 
Группа: Свой
Сообщений: 80
Регистрация: 19-12-06
Пользователь №: 23 672

|
Сорри за офф Я в детстве книжку читал, как два мальчика делали инкубатор. Использовали настольную лампу, термометр и тетрадки. Подкладывая или вынимая тетрадки со стопки они регулировали температуру! Может стоит занятся созданием РОБОТА ДЛЯ ПОДКЛАДЫВАНИЯ ТЕТРАДОК? Не бейте меня больно, я понимаю, что тема серъезная...
|
|
|
|
|
Nov 23 2007, 16:24
|

Знающий
   
Группа: Свой
Сообщений: 648
Регистрация: 11-02-06
Из: Санкт-Петербург
Пользователь №: 14 237

|
Цитата(AndryG @ Nov 22 2007, 14:53)  Следуя закону Y=К·(U-X) при уменьшении невязки мощность нагревателя падает ... и в один прекрасный момент становится нулю ... Вот где ошибка. При уменьшении невязки падает не мощность, а приращение мощности, и при нулевой невязке мощность равна не нулю, а некоторому установившемуся значению. То есть я предлагаю сделать Вам не пропорциональный, а пропорционально-интегральный (ПИ) регулятор. Теперь подробнее "на пальцах". 1) Измеренное значение температуры фильтруем (усредняем) на интервале, скажем, 10 секунд 2) Формируем сигнал ошибки (невязки) как разность заданной температуры (уставки) и фильтрованного значения текущей температуры 3) Теперь главный параметр - коэффициент усиления K, на него умножаем ошибку и ... 4) интегрируем полученное значение, т. е. U = U + K*Error на каждом цикле управления (например, раз в секунду). Это U и есть выдаваемая мощность на нагреватель, её нужно ограничить условием 0<=U<=100. Настройка этого регулятора заключается в подборе коэффициента K , по теории автоматического управления он равен 1/T, где T - время выхода инкубатора на установившийся режим, т е холодный инкубатор -> включаем нагреватель на 100 % -> измеряем время до момента, когда температура практически не меняется, это и есть T в первом приближении, K = 1/T, затем K в процессе эксперимента нужно подобрать более точно. Если K будет завышен - интегратор слишком лихо будет гонять мощность, Вы будете всё время пролетать уставку. Если К будет слишком мал - инкубатор будет очень медленно выходить на режим и компенсировать открывание дверцы. Чтобы в районе нужной температуры не гонять нагреватель, разумно сделать "зону нечувствительности" - коридор температуры вокруг уставки, где интегратор перестает интергрировать.
--------------------
Сделано в Китае. Упаковано в России.
|
|
|
|
|
Nov 23 2007, 17:16
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
Я делал инкубатор в голодное начало девяностых. Неудачно :-) Вместо мудреной электроники был ртутный термометр с размыкателем через ртуть. Результат был печален - я не учел градиент температуры по объему. Произошло ужасное - яйца вверху - спеклись, яйца внизу - протухли, яйца в середине - наполовину. Самое обидное, что даже непонятно было, что с этими яйцами делать  Есть было боязно. Так что там про ПИД? Достаточно просто ПИ - регулятора. Можно не париться диф составляющей, все равно инкубатор периодически проветривать и остужать. И еще. Аппаратура и программа должна иметь возможность плавно управлять мощностью через ШИМ. Напишите и отладьте такую промежуточную функцию SetHeaterPower(char percentage). Тогда регулятор сведется до одной формулы. Успехов
--------------------
Уходя, оставьте свет...
|
|
|
|
|
Nov 23 2007, 17:38
|
Частый гость
 
Группа: Свой
Сообщений: 139
Регистрация: 23-05-05
Из: UA
Пользователь №: 5 317

|
Спасибо за ответ ... Я дальше ПИ и не дергаюсь  Но хочется разобраться с теорией хоть немного. Demeny Если не против, то давайте пока про П-регулятор ... без интегралов... Если в Y=К·(U-X) Y- [u]изменение[u] мощности, то тогда понятно и что будет при "проскоке" - уменьшение текущей мощности. R=Ymax/tи ... Здесь именно (я так понял ) и идет привязка к моей макс. мощности. А здесь необходимо указывать мощность нагревателя (40Вт лампа) или 100 единиц, которыми я оперирую в прошивке сейчас? Если нужно ставить 40 - реальную мощность ... то, получается, потом придется делать перевод с реальной мощности в мою процентную шкалу Ааааааа! Капут! Dog Pawlowa, мощностью я плавно уже управляю - 100 градаций от 0 до 100%
|
|
|
|
|
Nov 24 2007, 13:31
|
Гуру
     
Группа: Модераторы
Сообщений: 8 752
Регистрация: 6-01-06
Пользователь №: 12 883

|
Цитата(AndryG @ Nov 23 2007, 15:07)  Я так понял, что все махнули на меня рукой - безнадежен  Что Вы так странно реагируете? Уже столько было советов, отчасти правильных. Вот еще. Не знаю, какой у Вас Контроллер, но советую для настройки коэффициентов П и И использовать переменные резисторы, которые Вы будете крутить, а контроллер считывать... Не переживайте - точность подбора этих параметров низкая... Я один раз была на экскурсии в инкубаторе - он был очень большой - целый дом. Глаза только резало от формалина... Оказалось, что бедные цыплята вылупляются не одновременно. Первые ждут освобождения пару дней... Без еды и питья. В темноте. Какая-то часть не дожидается. Дышат формалином. Там еще влажность стабилизируется. Еще зачем-то кассеты с яйцами переворачивались автоматически. Как часто - не знаю.
|
|
|
|
|
Nov 24 2007, 17:51
|
Частый гость
 
Группа: Участник
Сообщений: 104
Регистрация: 21-12-06
Пользователь №: 23 770

|
Цитата Результат был печален - я не учел градиент температуры по объему А ведь товарищ прав. Неплохо иметь это ввиду. Если объем большой, то и колебания будут большими. Может, поставить еще один датчик температуры ? И при вычислениях учитывать их разность.
--------------------
Затравленный и прижатый к стене кот превращается в тигра. Мигель Сервантес.
|
|
|
|
|
Nov 25 2007, 12:03
|
Частый гость
 
Группа: Свой
Сообщений: 139
Регистрация: 23-05-05
Из: UA
Пользователь №: 5 317

|
Спасибо всем за ответы ... не стоит поднимать тему высиживания цыпляток :-) ... давайте лучше о П-регуляторе  А? Может ответите на пост 17 и 22 ?
|
|
|
|
|
Nov 26 2007, 10:26
|

Знающий
   
Группа: Свой
Сообщений: 648
Регистрация: 11-02-06
Из: Санкт-Петербург
Пользователь №: 14 237

|
Цитата(AndryG @ Nov 25 2007, 15:03)  Спасибо всем за ответы ... давайте лучше о П-регуляторе  А? Может ответите на пост 17 и 22 ? Давайте. П-регулятор не подходит для Вашей задачи. Инкубатор - достаточно сложный объект с большой постоянной времени. Лучше использовать ПИД-регулятор, но поскольку у Вас нет опыта построения и отладки систем автоматического управления, Вам будет сложно настроить дифференциальную составляющую регулятора. Поэтому я предложил Вам ПИ-регулирование несколькими постами выше, расписав всё подробно "на пальцах" и указав единственный параметр, который придётся подстроить, чтобы регулятор не вошел в колебательный режим. Не нужно бояться слова "интеграл" - это всего лишь сумма в контексте данной задачи
--------------------
Сделано в Китае. Упаковано в России.
|
|
|
|
|
Nov 26 2007, 10:44
|
Частый гость
 
Группа: Свой
Сообщений: 139
Регистрация: 23-05-05
Из: UA
Пользователь №: 5 317

|
 не боюсь ... и я понимаю, что П мало и надо ПИ ... но хочется по порядку ... так легче разобраться. Вот и спрашиваю ... насколько я понял "чтиво" привязка к моим отсчетам мощности происходит при вычислении R ? Понимаю, что с практикой куча вопросов отпадет ... вот доделаю опторазвязку на ком-порт - нарисую на компе кривую разгона моего ящика .. да буду считать
|
|
|
|
|
Apr 21 2008, 07:11
|
Группа: Новичок
Сообщений: 14
Регистрация: 20-04-08
Пользователь №: 36 922

|
Интересно узнать как разрешилась Ваша проблема?
|
|
|
|
|
May 8 2008, 08:48
|
Группа: Новичок
Сообщений: 6
Регистрация: 11-03-08
Пользователь №: 35 809

|
AndryG , Я тоже задался целью создать такой регуляторю. Элементная база такая-же. Пожалуйста, поделитесь опытом, как у вас все получилось. И еще вопрос: При опросе датчика, вы пользуетесь стандартными функциями С-компилятьра (у меня CodeVision) или писали свои на asме? Меня беспокоит такая штука: просто стандартная функция опроса датчика на С не любит когда в нее врывается прерывание, а опрос датчика продолжается довольно долго. У меня по прерыванию считаются полупериоды сетевой частоты, и т.д.; как у вас это сделано?
|
|
|
|
|
May 8 2008, 10:01
|
Частый гость
 
Группа: Свой
Сообщений: 139
Регистрация: 23-05-05
Из: UA
Пользователь №: 5 317

|
http://andryg.ho.ua/index.php?p=ds18b20_simple - мой код для CV по работе с датчиком. Встроенные функции используются, но только по работе с шиной. Никак у меня не получилось ... с теорией в общем виде разобрался ... но перевести это всё на практику ... забросил ... хотя точнее сказать "отложил в сторону". последний затык был ... выбор времени интегрования ... через какие промежутки читать температуру? сколько выборок использовать в интеграторе? и т.д.
|
|
|
|
|
May 8 2008, 20:13
|

Местный
  
Группа: Свой
Сообщений: 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
--------------------
Если все, то не я...
|
|
|
|
|
May 12 2008, 09:27
|
Группа: Новичок
Сообщений: 6
Регистрация: 11-03-08
Пользователь №: 35 809

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

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

|
 - это коэффициент интегральной составляющей. Подобные коэффициенты обычно подбираются опытным путем из "общих" инженерных соображений. Закон ПИ выглядит довольно просто:  =k_1\eps(t) + k_2 \int\limits_{t_0}^{t}\eps(\tau)d\tau) Тоесть, все предельно просто. Берете рассогласование ) - умножаете на коэффициент  , берете интеграл от рассогласования (фактически, накопленную сумму рассогласований) и умножаете на  в результате получаете виличину управляющего воздействия. Пропорциональная составляющая реагирует на малые расхождения желаемой и задfной величин. Интегральная составляющая - на большие, она как бы подтягивает точку равновесия в ту область, где будет эффективно пропорциональное регулирование. Цитата(Kass @ May 8 2008, 12:48)  Меня беспокоит такая штука: просто стандартная функция опроса датчика на С не любит когда в нее врывается прерывание, а опрос датчика продолжается довольно долго. У меня по прерыванию считаются полупериоды сетевой частоты, и т.д.; как у вас это сделано? Какой датчик используете? Если что-нибудь наподобее ds1820, то можно проверять контрольную сумму.
|
|
|
|
|
May 12 2008, 17:38
|
Группа: Новичок
Сообщений: 6
Регистрация: 11-03-08
Пользователь №: 35 809

|
Что значит : Цитата(PhX @ May 8 2008, 23:13)  integ(e,dt) - интеграл от ошибки регулирования по времени. Отметим, что этот интеграл вычисляется не зарание и не после, а во время процесса управления. Это как понимать???
|
|
|
|
|
May 12 2008, 19:30
|

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

|
Цитата(Kass @ May 12 2008, 14:27)  2) Как соединить П и И законы (напишите пож алгоритм для ПИ.) Что-то я отвлекся Алгоритм для ПИ: Робот каждую секунду (интервал интегрирования 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 Рекомендации по поводу выбора коэффициентов: Если Вы не дружите с математикой выбор коэффицентов осуществляется эмпирически. 0. Для таких объектов как инкубатор время (постоянная времени инкубатора Tинк>100 с.), через которое происходит вызов прерываний должно быть T<= 0.1 сек (в принципе можно больше, но все современные МК легко уложатся в 0.1 с. T это то самое T, которое в алгоритме). 1. В начале установите kинт = 0. 2. Подберите kпр таким, чтобы достичь требуемого быстродействия (слишком высоко также задирать не надо. Следите за током нагр. элементов он должен изменяться плавно, а не релейно). 3. Аккуратно увеличивайте величину kинт. Добивайтесь требуемой точности.
--------------------
Если все, то не я...
|
|
|
|
|
May 14 2008, 11:08
|

Местный
  
Группа: Свой
Сообщений: 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... но чтобы точность всегда была чётной иначе будут серьёзные тормоза при умножении (особенно на восьмибитке) Выбор разрядности Е: Требование одно, чтобы Е не переполнялся при самой большой постоянной времени, а то получишь генератор пилообразного напряжения (или температуры  Контролируй и ограничивай 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
|
|
|
|
|
May 15 2008, 07:57
|
Группа: Новичок
Сообщений: 6
Регистрация: 11-03-08
Пользователь №: 35 809

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

Местный
  
Группа: Свой
Сообщений: 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
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|