What are recommended settings for Sous Vide cooking?

I’m wondering what (if any) are the currently recommended settings for Sous Vide or Sousvide (including both for ease of searching) cooking?

I have read a number of posts that mentioned it when the ‘temporary PWM release’ was in development and I’m wondering if there’s any new information on how to tune the settings or if there’s any agreement on what those settings should be by now?

I gather it has to be in Fridge Constant mode with at least a Fridge Temp sensor assigned. One of the outputs is assigned as the Fridge Heater, connected to a 40A SSR which will drive a water bath with a 1500 - 2000W element in it.

I tried this basic setup with the fridge setpoint set to 58C but got a large overshoot in the heating (it went to 78 before the heater turned off).

I’m not sure which settings to tweak, or how raising them higher or lower will affect things. Do I also need a sensor assigned to Beer Temp sitting in the water bath too?

There was some advice from @Elco in this post: https://community.brewpi.com/t/preliminary-pwm-actuators-release/869/18 but I don’t know if it still applies or which of the several Kps and Kis to change (or how changing them affects things).


Use fridge constant mode.
The only settings affecting the algorithm then are Heater1 PID settings.

My guess would be:

Use a Kp of 40: 1 degree too low = 20% on.
Use a Ti of 300 (5 min).
Use a Td of 30 sec (you don’t expect much overshoot after turning the heater off).

Make sure your sensor is close to the heating element to prevent overshoot due to the delay in the response.

Thank you. I programmed those settings into the Spark Photon and set the fridge set point to 58C. Then I moved it to the kitchen so it could control the water temperature.

I also set the “Dead time when switching between actuators” to 0 based on this post https://community.brewpi.com/t/out-of-the-blue-idling-for-20min/1324/3

There was an initial 10C overshoot when heating the water from tap temperature but after it had cooled down it was able to more closely keep it to 58C. The behavior after cooling down seemed to be:

  • Fridge sensor temp drops to 57.9C
  • Heating begins
  • Initially short heating pulses, getting longer as temperature rises, then shortening again
  • Temperature rises to 59C before heating shuts off for the last time
  • Temperature continues to rise to 60C
  • Water idles and loses heat until it’s at 57.9C and the cycle begins again (still repeating after 2 hours).

So on average it seems to maintain the temperature at more than the 58C setpoint and keeps oscillating.

I do not have a graph screenshot because the Raspberry Pi is connected via ethernet which I don’t have in the kitchen so I don’t maintain the physical USB connection between Spark and Pi.

Can you explain in a little more detail what the effect of each setting is? I have read the text next to them in advanced settings but need some more clarity. I have also read the PID entry on wikipedia here https://en.wikipedia.org/wiki/PID_controller

Does increasing the Heater1 PID Kp increase the duration of the heating pulses? So at the moment that it sees there is a difference in the reading it reacts more or less strongly to correct it? I’m not sure how to calculate “Kp of 40: 1 degree too low = 20% on”. Is the accepted range of Kp from 0 to 100?

Does Ti affect how I see the duration of the heating pulses change? If I increased the value, would I see the duration of the heating pulses increase faster or slower? Or if you increase it too much, does it cause oscillation because it is still ‘remembering’ past errors?

Finally Td is described as looking into the future to predict the outcome of current behaviour. So should I increase it to look further ahead?

Whoops, I understand that this is confusing.

Kp of 40: 1 degree too low = 20% on 40% ON

Ti = how fast does an error accumulate. So with Ti = 300 seconds, this means that the integrator part increases with the error/300 each second.

What you describe, that the pulses get longer without the error increasing, is the integrator that is increasing. The integrator should only correct steady state errors (constant heat loss to environment). So the time constant should be longer Ti than the time constant of the process (how fast it responds to heating).

Td: the derivative part is simply Td * derivative. So in other words, it assumes an overshoot of Td * the current derivative. Td prevents overshoot, by assuming that the temperature will continue to rise if the heater is disabled.

So summary:
Kp: at which temperature difference should the heater be fully ON? Divide 100 by that difference to get Kp.
Ti: how long does it take for the process to respond to the actuator? Ti should be outside of that range, because it should only correct slow changing factors.
Td: if I heat at full power and then turn the heater off, how long does the temperature continue to rise?

Thanks again.

Using the same settings you recommended with a larger volume of water (about 8l) reduced the oscillations to about 1C around the setpoint. I can continue to tweak from there and will see how much closer I can get to totally consistent readings.