Temperature control

Hello, We are working on a heating chamber whose temp needs to be maintained at 300C. We are using SSR to switch heating elements on and off to achieve 300C, but we tested the system upto 100C. The temp reached the setpoint by does not maintain although we used a couple of methods such as switch off heaters at 90C, start fast switching of SSRs etc. But it keeps fluctuating, sometimes overshoots, sometimes does not reach the setpoint, and sometimes does not maintain itself at 100C.

Your suggestions will be appreciated.


Without a lot more information it is going to be difficult to help.

Please post your program.

And give details of the heater and the space that is being heated - for example is it well insulated? - does it have material that will retain heat? The problem might be mainly with the physical system rather than the control system.

How long does it take for the temperature to rise from (say) 90° to 100° and how long does it take to fall by the same amount?


Have you considered using PID to control the system?

Yes. We are using PID in such a way that we give values of k, ki and kd to the library and the library gives us a single value based on which we made our algorithm as to when we should switch the heaters on or off. But what I think is the values of kp, ki and kd are the main culprits. At this time, we are giving random values but I think there should be a criterion for these constants.

Yes. We are using PID

In that case your response to Reply #1 is even more important (IMHO)


Usually you don't need Kd, the other two are important but it's very hard to come up with good starting values. A lot of trial and error involved.

Start with Kp until the oscillations are nice and stable, then start fiddling with Kd to dampen the oscillations. That should roughly be your strategy.

If you heat a heavy insulator throughout from one side with often-fluctuating heat, the other side won't fluctuate as much. Perhaps thermal mass can dampen your variation.

proper sizing of the heater is vital.
if you leave it on for a week and it never reaches temperature, it is sized wrong.
if you turn it on and a short time later, it is too hot, it is sized wrong
your heater should need to stay on 1 minute in 20. to 1 minute of 5 minutes.
these numbers are only a starting point.
if your heater can heat in seconds, it is too large
if it takes hours, it is too small, or you need more insulation.

if your heater is sized wrong, then your control will suffer.

also, it sounds like you want to measure air temperature.
as you know, heaters offer heat in 3 ways, conduction, convection and radiation.
if the radiated heat effects your readings, then your control will suffer.
a simple heat shield would help if that is the case.

do some timing tests.

also, the type of heater is important. a resistive heater will get hot and stay hot for some period after.
pulse width modulation will offer longer pulses and allow your heater to get hotter.
if your pulse width were set, then frequency of pulses might stabilize your control.

since we have not seen your code. we do not know the conduction losses of your chamber or the power of your heater, it is hard to offer much of an answer other than try some things and note what works better than other things.
then do more of what works and less of what does not work.

computer control is not magical. it cannot fix mismatched parts.
you would not put a 300 HP motor on a skateboard then expect a computer to make it work.

it is a simple matter to time how long your heater is on. I would target something around 10- 50% as a starting point.
then test and work towards your optimum.