I need help on how to implement a PID autotune function for a heating application (small boiler).
My current PID autotune function produces no reliable results. I use the relay feedback method (Åstrom and Hägglund) but it seems that the ultimate period Tu - one of the paramteres determined with the relay feedback test - is directly correlated to the relay output step u. u is an arbitrary value which makes Tu an arbitary value. Since Tu is required to compute Ti and Td (e.g. Ti = 0.5 Tu = Ziegler-Nichols), autotune is not possible.
I believe this is because the machine heats very quickly (1500W boiler) and cools down very slowly, so the process value isn't a sinusoid. An example is attached, green line is setpoint, red plot is process value and the grey vertical bars represent heat output u.
Regardless of u, the temperature always dips the same, small amount below setpoint - because the machine cools slowly, the temperature can not fall far below setpoint before it's reacting to the heat. It then shoots up by an amount that is proportional to u. As a result, the plot resembles mountains above setpoint, not a sinus. If u is large, temperature will shoot high above the setpoint and take very long to cool down. Big mountains, so Tu gets large: Tu ~ u = my problem.
Since all PID temperature congtrollers have Autotune, there must be a solution for this problem. Any ideas?