I'm making a temperature-controlled box. Issue I'm having is that it overshoots and undershoots a lot because it takes a long time between turning the heater on/off and seeing a difference in temperature in the box. I have a SHT30 sensor with 0.1°C accuracy measuring the ambient temperature.
I've reached the conclusion that I need feedforward control, so I've calibrated a NTC thermistor and put it on the heater. The temperature of the heater is my feedforward signal.
...now what?
I checked online and with ChatGPT how one would go about this, but I see nothing useful.
Basically, at 50°C, the box is just below its max temperature, and I want the feedforward to contribute very little to decreasing the PID output. At 30°C, the box is close to room temperature, and I want the feedforward to contribute more to decreasing the PID output. At 30°C setpoint, there are oscillations of +/-2.5°C. Closer to 50°C, these oscillations are less than 1°C, which is fine. My goal is to have all oscillations for any setpoint temperature to be less than 1°C.
The peaks of the overshoots and undershoots are maybe 5 minutes apart. It's only a 20W resistive heater (with a fan) for a 10L insulated box, so changes to both heater and air temperature are very slow.
(The reason why I'm not considering changing my PI tuning is because it has the correct idea of putting output to max right away. It takes ages to heat up the box as is, so I really don't like the idea of having very small PI values.)