Перейти к содержанию
    

Подскажите по ПИД регулированию

Имеется термопара, встроенная в нагреватель, Источник тока, МК

 

что уже сделал:

1. усиливаю сигнал с термопары

2. считаю его на АЦП (получил значение)

3. ШИМ с выходом на полевик.

 

Вопрос ?

 

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

 

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

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

По моему, не хватает исходных данных.

например необходимая точность установки температуры и величина возмущающих воздействий. Может хватит пропорционального регулятора: берем ошибку умножаем на коэфф. усиления и получаем управляющее воздействие. Усиление пожно подобрать удобное 2,4,8 и т.д. Поиграться, посмотреть результат. При наличии хорошей модели объекта управления помогает Matlab.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можно опытным путем составить две таблицы:

1. таблицу соответсвия показаний АЦП значениям ШИМ.

2. таблицу соответствия показаний АЦП и температур.

 

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

 

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

 

Интуитивно простая задача.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

1. Задать требуемую температуру.

2. Прочитать показания датчика температуры.

3. Вывести показания датчика на индикатор.

4. Если температура нагревательного элемента ниже требуемой то включить нагревательный элемент.

5. Если температура нагревательного элемента выше требуемой то выключить нагревательный элемент.

6. Goto 2.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

у меня один из первых "автоподстраивающихся" термостатов был сделан так

(я понимаю теперь- что криво, косо, и неправильно :) )

 

- в течении минуты измеряется скорость настания температуры (t1-t0)при заданной мощности. (сначала мощность максимальна.)

на следующем шаге проверяется- через минуту при этой скорости на этой мощности температура превысит заданный порог?

если да, то убавляем мощность вдвое.

если нет, то прибавляем на 10% :)

если порог превышен более чем на 0.2°, убавляем мощность на 10%.

 

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

вот интересные линки по ПИД

 

PID FAQ

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

 

настройка ПИД и там же небольшой туториал:

http://www.ctc-control.com/customer/elearn...votut/adjus.asp

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Рекомендую посмотреть на какую-нибудь теорию и аппнот AVR221 discrete PID controller с исходниками. А так расссказывать и показывать что такое пид это целая статья журнальная минимум. :)

Мгу обнадежить: наиболее сложное, а именно получение сигнала с термопары, Вы в своем проекте уже сделали.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

 

Например так

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

/*

 

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 - уставка

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 - это разница между заданным и достигнутым ?)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Неудачный термин, Кр - это коэффициэнт усиления пропорционального звена. Интуитивно это скорость нагрева или (при пропорциональном регулировании) коэффициэнт наклона прямой закона регулирования. От этого коэффициэнта зависит как быстро будет разогреватся объект управления.

Посмотрите все-таки на аппнот там доходчиво достаточно. С бухты-барахты не разберетесь.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гость LordN
Кр - это коэффициэнт усиления пропорционального звена. Интуитивно это скорость нагрева или (при пропорциональном регулировании) коэффициэнт наклона прямой закона регулирования.
для ПИД регуляторов удобней пользоваться обратной величиной Zp = 1/Кр (Kp = 1 / Zp).

Zp - "зона пропорциональности".

её физический смысл - величина ошибки, при которой пропорциональная часть = 1.

имеет ту же размерность, что и ошибка.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

вот готовые проект что вам нужен

 

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

 

печь для пайки сделана из тостера.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...