PID tuning Gain Scheduling Technique for Temperature Control System
4 views (last 30 days)
Sam Chak on 25 May 2022
Edited: Sam Chak on 25 May 2022
Thanks for showing the model of the furnace system. First things first, perform a basic analysis to understand the behavior of system. Since a transfer function is given, then the model is obviously a linear system.
num = [-0.1125 0.15];
den = [0.75 1.825 1.25 0.2];
Gp = tf(num, den)
p = pole(Gp)
All of its poles have negative real parts and so the furnace is inherently stable to begin with. Since the poles have no imaginary parts, then the response is overdamped. The steady-state value is 0.75.
steadystate = dcgain(Gp)
It means if the input is set as 100°C as the desired furnace temperature, then the output converges to 75°C at approximately 20 sec.
To fix this issue, you can connect a proportional gain K before the plant Gp, in series to properly rescale the output. This is an open-loop system.
K = 1/steadystate
Gol = series(K, Gp)
S = stepinfo(Gol)
struct with fields:
If the settling time (~20 sec) of the furnace temperature control system is acceptable, then Gc = K is the simplest controller (open-loop, non-feedback) and no Gain-scheduling technique is required.
If you want to shorten the settling time, then a feedback PID controller can be implemented.
% to improve the settling time via adjusting the crossover frequency, wc
wc = linspace(0.25, 0.5, 11);
for i = 1:11
Gc = pidtune(Gp, 'PID', wc(i));
Gcl = feedback(Gc*Gp, 1);
S = stepinfo(Gcl)
Gain-scheduling technique is unnecessary unless you really want to have multiple PID controllers the heat up the furnace at different settings of settling times.