Because your beer is around the setpoint, there is about as much reason for cooling as for heating.
Your mutex is only 30m and your cooling PWM period is probably something similar, so while they are waiting, the heater can trigger. They alternate and keep each other in balance.
Try increasing the mutex to 1 or 2 hours and I expect the cyclic behavior will go away.
Thanks, I’ll try that (the cooling pwm period is 10m, btw). I’m still a bit surprised by the difference in fluctuation lately though. It used to look like this; Tuning of brewblox FTSS setup
Do you have a minimum cool time? Can you export your full blocks? With the mutex at 3x pwm, I wouldn’t expect this.
From your first graph, I do see a delay in process response after heating. The overshoot when heating is what triggers the cooling later.
I think your heating and cooling integrator keep each other at non zero. They grow too quickly. The process takes 2 hours to respond to actuators, so Ti should be around 6h for both.
I think the minimum on is 10s, but now I’m not able to check until I get home in the afternoon. I can export full blocks then as well. Ti is 2h. I think I followed the suggestions in the other thread pretty much to the letter.
I checked your settings.
I would change these things:
your filtering for the beer setpoint is pretty high. This averaging causes a delay. The delayed PID input causes overheating and overcooling. Reduce it to 1 min. The beer temp is stable enough without filtering.
increase heater Kp to 100. The heater is pretty weak so it can heat full power if more than a degree off. Faster heating results in less integral buildup time.
increase Ti to 6h for both. It should be longer than your process time constant.
I think the filter is the main cause here.
In graph, I would display pwm values instead of pin state. The state doesn’t make much sense with a 10s period and a 5s sample interval.