DIA00215 ПИД-регулятор для поддержания темепературы Пропорционально-интегрально-дифференцирующий (ПИД) регулятор — устройство в управляющем контуре с обратной связью. Используется в системах автоматического управления для формирования управляющего сигнала с целью получения необходимых точности и качества переходного процесса. Для настройки коэффициентов ПИД-регулятора требуется сначала получить периодический отклик при воздействии на систему управляющим воздействием пропорционально некоторому коэффициенту умноженному на разницу целевого и текущего значений температуры (ошибку). Далее на шаге обозначим как . Тут — это мощность условного нагревателя или элемента Пельтье в случае охлаждения системы. Далее на шаге обозначим как . Однако, если процесс ассиметричный, к примеру, остывание системы быстрее чем нагрев, то необходимо учесть поправку к этой ошибке перед исследованием периода колебаний. Для определения поправки, охладим систему на максимальной мощности, и потом дождёмся, когда она вновь нагреется. Так примерно мы сможем определить разницу в характерных временах для двух напревлений процесса и умножать либо делить разницу на коэффициент. В нашем случае коэффициент примерно будет равен 2. Теперь нам надо найти такой, чтобы при управляющем воздействии получить гармонические колебания. Для нашей системы был равен 105. При этом период колебаний составил 1,1 c. Тогда согласно теории для управляющего воздействия на шаге справедливо следующее соотношение: , где Формула содержит как дифференциальную часть, где учитывается разница ошибки на текущем и предыдущем шаге, так и интегральная накопительная ошибка. В виде программного кода в прошивке прибора данный алгоритм реализован следующим образом: PROCEDURE SetPeltPWM (data: INTEGER); CONST dt = 0.1; delKp = 2.0; Ku = 105.0; Tu = 1.1; (* 1.1 c *) Kp = 63.0; (* Ku * 0.6 *) Td = 0.1375; (* Tu * 0.125 *) Kip = 1.818; (* 1 / (0.5 * Tu) *) VAR e, u: REAL; BEGIN currentTemp := data; e := FLT(data - temp); IF e > 0.0 THEN (* температура ниже заданной *) e := e * delKp ELSE e := e / delKp END; eInt := eInt + e; u := Kp * (e + Td * (e - ePr) / dt + Kip * eInt * dt); ePr := e; u := - u; coolPWM := FLOOR(u) + 4000; IF coolPWM < 0 THEN coolPWM := 0; eInt := eInt - e; ELSIF coolPWM > 7999 THEN coolPWM := 7999; eInt := eInt - e; END; PWM.SetTIM5(1, coolPWM); END SetPeltPWM;
Ivan Denisov 01 Mar 2023 07:11
© International Open Laboratory for Advanced Science and Technology — MOLPIT, 2009–2024
|