Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Подскажите по ПИД регулированию
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
TamTam
Имеется термопара, встроенная в нагреватель, Источник тока, МК

что уже сделал:
1. усиливаю сигнал с термопары
2. считаю его на АЦП (получил значение)
3. ШИМ с выходом на полевик.

Вопрос ?

как должна выглядеть формула расчета для шим в зависимости от разницы заданной и действительной температуры и скорости ее нарастания.

если мона пример для данных, заданная Т=350, действительная Т=100, скорость нарастания при ШИМ 100% 10град\сек.

Про ПИД регулирование читал, но так и не въехал как она должна выглядеть.

Заранее всем благодарен
maegg
По моему, не хватает исходных данных.
например необходимая точность установки температуры и величина возмущающих воздействий. Может хватит пропорционального регулятора: берем ошибку умножаем на коэфф. усиления и получаем управляющее воздействие. Усиление пожно подобрать удобное 2,4,8 и т.д. Поиграться, посмотреть результат. При наличии хорошей модели объекта управления помогает Matlab.
Atashi
посмотри Титце и Шенк Смехотехника.
defunct
Можно опытным путем составить две таблицы:
1. таблицу соответсвия показаний АЦП значениям ШИМ.
2. таблицу соответствия показаний АЦП и температур.

Далее при задании требуемой температуры, искать соответствие показания АЦП этой температуре в таблице 2, потом брать значение ШИМ из таблицы 1, которое соответвует найденному значению АЦП, и записывать его в ШИМ.

Потом можно усложнить задачу - разогревать и остужать, например соответвенно на максимальной (FF) и минимальной (0) мощности, а при достижении требуемой температуры - записывать в ШИМ значение из таблицы 1.

Интуитивно простая задача.
defunct
Тут пришел на ум еще один алгоритм решения вашей задачи. По-децки простой, и основан на свойствах инертности нагревательного элемента. Итак.

Потребуется отказаться от ШИМ, управлять непосредственно нагревателем (одним пином МК).

1. Задать требуемую температуру.
2. Прочитать показания датчика температуры.
3. Вывести показания датчика на индикатор.
4. Если температура нагревательного элемента ниже требуемой то включить нагревательный элемент.
5. Если температура нагревательного элемента выше требуемой то выключить нагревательный элемент.
6. Goto 2.
Petka
Ага, называется это термостат =) реализуется одной трёхногой микросхемой ds1820
Serj78
у меня один из первых "автоподстраивающихся" термостатов был сделан так
(я понимаю теперь- что криво, косо, и неправильно smile.gif )

- в течении минуты измеряется скорость настания температуры (t1-t0)при заданной мощности. (сначала мощность максимальна.)
на следующем шаге проверяется- через минуту при этой скорости на этой мощности температура превысит заданный порог?
если да, то убавляем мощность вдвое.
если нет, то прибавляем на 10% smile.gif
если порог превышен более чем на 0.2°, убавляем мощность на 10%.

все цифры были экспериментально подобраны, но надеюсь, принцип ясен.

Было сделано для достаточно инерционных прессформ (прогрев от 20 до 70°С за 30- 40 минут) точность поддержания температуры была +- 0,5°
Abatt
вот интересные линки по ПИД

PID FAQ
http://www.tcnj.edu/~rgraham/PID-tuning.html

настройка ПИД и там же небольшой туториал:
http://www.ctc-control.com/customer/elearn...votut/adjus.asp
SpiritDance
Рекомендую посмотреть на какую-нибудь теорию и аппнот AVR221 discrete PID controller с исходниками. А так расссказывать и показывать что такое пид это целая статья журнальная минимум. smile.gif
Мгу обнадежить: наиболее сложное, а именно получение сигнала с термопары, Вы в своем проекте уже сделали.
vvs157
Цитата(TamTam @ Jun 20 2006, 04:58) *
Про ПИД регулирование читал, но так и не въехал как она должна выглядеть.

Заранее всем благодарен


Например так
--------------------
/*

Setpoint - уставка
Sysout - текущее значение регулируемого параметра
Acc_out_prev - предыдущее значение регулируемого параметра
Acc_Ti - накопитель для интегрального канала
Acc_Tds - накопитель для фильтра диф. канала
output - выходное значение регулятора
Maxout - максимальное значение выхода регулятора

Перед запуском
Acc_out_prev = 0;
Acc_Ti = 0;
Acc_Tds = 0;

При переходе с ручного режима управления на автоматический установить

Acc_Ti = Kp*output-Setpoint+Sysout;


Ti - Постоянная времени интегр. в единицах периода дискретизации
Tw = (0.1 - 0.5) Ti
Td - Постоянная времени диф. в единицах периода дискретизации
Tds = (0.2 - 1) Td
Кр - зона пропорциональности

*/

Acc_Ti=Acc_Ti+1/Ti*(Setpoint-Sysout)-1/Tw*Sat_out;
Acc_Tds=Acc_Tds+1/Tds*(Td*(Acc_out_prev-Sysout)-Acc_Tds);
Kp_val=Setpoint-Sysout;
output=1/Kp*(Kp_val+Acc_Ti+Acc_Tds);
Sat_out=0;
if (output>Maxout) {
Sat_out=output-Maxout;
output=Maxout;
};
if (output<0) {
Sat_out=output;
output=0;
};



----------------------
TamTam
Цитата(vvs157 @ Jun 24 2006, 00:16) *
Цитата(TamTam @ Jun 20 2006, 04:58) *



Про ПИД регулирование читал, но так и не въехал как она должна выглядеть.

Заранее всем благодарен


Например так
--------------------
/*

Setpoint - уставка
Sysout - текущее значение регулируемого параметра
Acc_out_prev - предыдущее значение регулируемого параметра
Acc_Ti - накопитель для интегрального канала
Acc_Tds - накопитель для фильтра диф. канала
output - выходное значение регулятора
Maxout - максимальное значение выхода регулятора

Перед запуском
Acc_out_prev = 0;
Acc_Ti = 0;
Acc_Tds = 0;

При переходе с ручного режима управления на автоматический установить

Acc_Ti = Kp*output-Setpoint+Sysout;


Ti - Постоянная времени интегр. в единицах периода дискретизации
Tw = (0.1 - 0.5) Ti
Td - Постоянная времени диф. в единицах периода дискретизации
Tds = (0.2 - 1) Td
Кр - зона пропорциональности

*/

Acc_Ti=Acc_Ti+1/Ti*(Setpoint-Sysout)-1/Tw*Sat_out;
Acc_Tds=Acc_Tds+1/Tds*(Td*(Acc_out_prev-Sysout)-Acc_Tds);
Kp_val=Setpoint-Sysout;
output=1/Kp*(Kp_val+Acc_Ti+Acc_Tds);
Sat_out=0;
if (output>Maxout) {
Sat_out=output-Maxout;
output=Maxout;
};
if (output<0) {
Sat_out=output;
output=0;
};



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


Если не в напряг помогите разобраться.

Те параметры которые я понял для чего,

Setpoint - к примеру 300 градусов
Sysout - 200 градусов
Acc_out_prev - 196 градусов
Acc_Ti - сюда надо плюсовать значения после измерения (значения за последние 10 измерений складываем и / на 10)
Acc_Tds - накопитель для фильтра диф. канала
output - ?
Maxout - (надеюсь что понял) у меня шим поэтому 100%

Ti - Постоянная времени интегр. в единицах периода дискретизации (в чем она должна быть выражена)
Tw = (0.1 - 0.5) Ti
Td - Постоянная времени диф. в единицах периода дискретизации (в чем она должна быть выражена)
Tds = (0.2 - 1) Td
Кр - зона пропорциональности (это я так понял если мне надо нагреть до 300 то сюда пишем 300)

Acc_Ti=Acc_Ti+1/Ti*(Setpoint-Sysout)-1/Tw*Sat_out; что такое Sat_out

Kp_val=Setpoint-Sysout; (Kp_val - это разница между заданным и достигнутым ?)
SpiritDance
Неудачный термин, Кр - это коэффициэнт усиления пропорционального звена. Интуитивно это скорость нагрева или (при пропорциональном регулировании) коэффициэнт наклона прямой закона регулирования. От этого коэффициэнта зависит как быстро будет разогреватся объект управления.
Посмотрите все-таки на аппнот там доходчиво достаточно. С бухты-барахты не разберетесь.
Abatt
в апноуте AVR492 теория и код для IAR
LordN
Цитата
Кр - это коэффициэнт усиления пропорционального звена. Интуитивно это скорость нагрева или (при пропорциональном регулировании) коэффициэнт наклона прямой закона регулирования.
для ПИД регуляторов удобней пользоваться обратной величиной Zp = 1/Кр (Kp = 1 / Zp).
Zp - "зона пропорциональности".
её физический смысл - величина ошибки, при которой пропорциональная часть = 1.
имеет ту же размерность, что и ошибка.
Abatt
вот готовые проект что вам нужен

http://www.circuitcellar.com/library/print...e_168/index.htm

печь для пайки сделана из тостера.
SpiritDance
Цитата
Zp - "зона пропорциональности".

Ну так написано Kp - зона пропорциональности. Просто неудачно буковки подобраны. smile.gif
vvs157
Цитата(TamTam @ Jun 24 2006, 04:33) *
Если не в напряг помогите разобраться.

Те параметры которые я понял для чего,

Setpoint - к примеру 300 градусов
Sysout - 200 градусов


Нет, не совсем так. Приведенный фрагмент кода "крутится в цикле" с той частотой, с какой производится изменение выходного напряжения. И соответственно Sysout бутет менятся

Цитата(TamTam @ Jun 24 2006, 04:33) *
Acc_out_prev - 196 градусов


Аналогично, это значение температуры, которое было на предыдущем цикле измерения



Цитата(TamTam @ Jun 24 2006, 04:33) *
Ti - Постоянная времени интегр. в единицах периода дискретизации (в чем она должна быть выражена)


Выражается в секундах. Если цикл раз в секунду - то непосредственно в секундах и будет выражено
TamTam
Цитата(vvs157 @ Jun 24 2006, 00:16) *
Например так
--------------------
/*

Перед запуском
Acc_out_prev = 0;
Acc_Ti = 0;
Acc_Tds = 0;

При переходе с ручного режима управления на автоматический установить

Acc_Ti = Kp*output-Setpoint+Sysout;

*/

Acc_Ti=Acc_Ti+1/Ti*(Setpoint-Sysout)-1/Tw*Sat_out;
Acc_Tds=Acc_Tds+1/Tds*(Td*(Acc_out_prev-Sysout)-Acc_Tds);
Kp_val=Setpoint-Sysout;
output=1/Kp*(Kp_val+Acc_Ti+Acc_Tds);
Sat_out=0;
if (output>Maxout) {
Sat_out=output-Maxout;
output=Maxout;
};
if (output<0) {
Sat_out=output;
output=0;
};



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


Еще раз а то вы меня несовсем поняли.


Setpoint - 300
Sysout - Значение наростает если нагреваем 0 ---> 300 я хочу расчитать для одного шага поэтому возьму равным 200
Acc_out_prev - значение меняется но возьмем к примеру 196
Acc_Ti - накопитель для интегрального канала
Acc_Tds - накопитель для фильтра диф. канала
output - выходное значение регулятора
Maxout - у меня шим поэтому max=100


Может я несовсем понял прочтя ПДФ от AVR221 но берем равным
Ti - 0,5
Tw = (0.1 - 0.5) Ti
Td - 0,12
Tds = (0.2 - 1) Td
Кр - 0,65

Попробую расчетать из того что имею. Расчет в экселе.


и еще что такое - Sat_out ?
vvs157
Цитата(TamTam @ Jun 25 2006, 15:10) *
Может я несовсем понял прочтя ПДФ от AVR221 но берем равным
Ti - 0,5
Tw = (0.1 - 0.5) Ti
Td - 0,12
Tds = (0.2 - 1) Td
Кр - 0,65

и еще что такое - Sat_out ?


Ti, Td, Kp - эти параметры определяются исходя из конкретных параметров объекта регулирования (запаздывание, нелинейность итп)
Если эти параметры подобраны неверно - то либо система войдет в автоколебательный режим, либо будет иметь очень плохие харатеристики (например будет очень долго по сравнению с оптимальной настройкой выходить на заданное значение)

Sat_out - эта переменная, которая нужена для предотвращения так называемого насыщения интегратора (в иностранной литературе integrator windup). Зачем это нужно - при больших рассогласованиях расчетный выход регулятора становится больше (или меньше - выход терморегулятора не может быть <0) того, что может выдать выхожной каскад регулятора, в результате - ошибка интегрируется, а выход не изменяется, что приводит к существенному увеличению времени выхода. Подробнее - посмотрите в Яндексе на "насыщения интегратора ПИД регулятора"
Shurmas
А у кого нибудь есть исходник на Си автоподстройки ПИД регулятора ? Самонастраивающийся короче.
SpiritDance
Цитата(Shurmas @ Jun 25 2006, 17:28) *
А у кого нибудь есть исходник на Си автоподстройки ПИД регулятора ? Самонастраивающийся короче.

ХЕХЕХЕ СМИШНО!!! laugh.gif
Не в обиду... Вы хоть представляете себе сложность задачи самомподстраивающегося ПИД регулятора? Просто припомните как он в ручную настраивается. Припоминаете? Ага... на глаз... по форме переходного процесса. Исхоники вам дать... Даже если они есть у кого... сколько чатлов Вы за него готовы отдать? smile.gif

У меня кстати есть дока по подстройке с помощью генетических алгоритмов (чья-та буржуйская студенческая работа) плюс код в на матлабе. Сам не вникал. Не до регуляторов пока.
Shurmas
Я не считаю что это сложно, просто спросил нет ли у кого. Процес настройки достаточно прост и легко алгоритмизируется.
Rst7
Цитата(Shurmas @ Jun 25 2006, 21:58) *
Я не считаю что это сложно, просто спросил нет ли у кого. Процес настройки достаточно прост и легко алгоритмизируется.


Ну если сам регулируемый объект более-менее стабилен (ну, или, скажем так, предсказуем wink.gif ), то в автонастройке проблем нет - единичный импульс на вход, снятие отклика, расчет характеристик объекта и по ним расчет значений для пид-регулятора. Это дело искать гуглей. А если у вас объект меняет свои свойства случайным образом (или еще какая кака) - то это тема для диссера...
SpiritDance
Rst17
Да только вы еще не учли тот факт что в реальной жизни требуется автоподстройка во время работы, а не в специальном режиме по еденичному возмущению.

Ну да прост и легко алгоритмизируется, ага... smile.gif попробовали бы его сначала алгоритмизировать, потом бы уж...smile.gif хотя может для Вас это и легко...
Shurmas
Цитата(SpiritDance @ Jun 26 2006, 10:00) *
в реальной жизни требуется автоподстройка во время работы, а не в специальном режиме по еденичному возмущению.


В реальной жизни автоподстройка производится по оценке реакции на естественные возмущения.

Цитата(SpiritDance @ Jun 26 2006, 10:00) *
Ну да прост и легко алгоритмизируется, ага... smile.gif попробовали бы его сначала алгоритмизировать, потом бы уж...smile.gif хотя может для Вас это и легко...


Ну что филосовствовать то ? я ж спросил пример кода - може валяется у кого. Если б я сам попробовал то не спрашивал бы, а выложил код в специальный раздел на форуме.
SpiritDance
Цитата(Shurmas @ Jun 26 2006, 10:36) *
В реальной жизни автоподстройка производится по оценке реакции на естественные возмущения.

В реальной жизни в советские времена этой проблемой занимались целые группы инеженеров-исследователей в различных НИИ.

Цитата(Shurmas @ Jun 26 2006, 10:36) *
Ну что филосовствовать то ? я ж спросил пример кода - може валяется у кого. Если б я сам попробовал то не спрашивал бы, а выложил код в специальный раздел на форуме.

Да не я не философствую я просто съязвить пытаюсь. smile.gif Просто Вы спросили что-то вроде "А не завалялось ли у кого докторской диссертации? Выложите плиз нахаляву." smile.gif
vvs157
Цитата(SpiritDance @ Jun 26 2006, 10:49) *
Да не я не философствую я просто съязвить пытаюсь. smile.gif Просто Вы спросили что-то вроде "А не завалялось ли у кого докторской диссертации? Выложите плиз нахаляву." smile.gif


У очень многих промышленно выпускаемых терморегуляторов есть функция автоматического определения параметров ПИД регулирования. Очевидно, что можно найти объекты на которых эта автонастройка работать не будет. Но на объектах без "заморочек" работает вполне нормально. Я не думаю, что в каждом из них сидит внутри докторский диссер.
okela
Цитата(vvs157 @ Jun 26 2006, 11:09) *
Цитата(SpiritDance @ Jun 26 2006, 10:49) *

Да не я не философствую я просто съязвить пытаюсь. smile.gif Просто Вы спросили что-то вроде "А не завалялось ли у кого докторской диссертации? Выложите плиз нахаляву." smile.gif


У очень многих промышленно выпускаемых терморегуляторов есть функция автоматического определения параметров ПИД регулирования. Очевидно, что можно найти объекты на которых эта автонастройка работать не будет. Но на объектах без "заморочек" работает вполне нормально. Я не думаю, что в каждом из них сидит внутри докторский диссер.


Там действительно нет ничего труднореализуемого. Автонастройку делают либо по колебательному процессу (регулятор переводится в режим 2-хпозиционного) , либо по отклику на еденичный импульс.
В первом случае измеряются амплитуда и период колебаний, и на их основе всё расчитывается.
Во втором случае снимается передаточная характеристика и по ней всё определяется.
http://www.contravt.ru/?id=242
http://atm.h1.ru/root/theory/theory.html
SpiritDance
Ну с известными возмущениями действительно все решаемо, а я вот вроде где -то видел регуляторы которые подстраивались под печки в процессе работы (убейте не помню кто их делает помню только многоконтурные и в каком-то институте делали их). Колебания нельзя делать - спалишь нагреватель в печке. Вот кто бы объяснил как ни это делают...

Про докторский диссер я же не буквально, просто задача мне по прежнему не кажется такой уж простой и такие исходники за просто так не выкладывают.
Shurmas
Цитата(SpiritDance @ Jun 26 2006, 14:30) *
Колебания нельзя делать - спалишь нагреватель в печке.


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

Цитата(SpiritDance @ Jun 26 2006, 14:30) *
такие исходники за просто так не выкладывают.


это от широты души зависит - я ж в Россее !
Serg_greS
Хорошее описание ПИД регуляторов:
://lord-n.narod.ru/download/books/walla/automatica/kurs.lekziy.PID.rar
Kovrov
Тут на родненьком сайте появилась аппнота по пидам..
вроде неплохо
TamTam
Цитата(Kovrov @ Jul 30 2006, 17:31) *
Тут на родненьком сайте появилась аппнота по пидам..
вроде неплохо


Если можно дайте ссылку.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.