by Mole : 13th July 2008
updated : 4th October 2008
Find and bookmark our home page at http://www.coffeetimeuk.com/
Don't forget to add your name to the Worldwide Owners List
Issue: The Izzo Alex Duetto PID settings are too aggressive, causing overshoots on the brew boiler temperature, or simply not matching your coffee making routine.
Solution: Re-program the PID controller with more conservative settings to match your environment and routine.
For more information, read on…
PID Controller Profiles for the Duetto
For those interested mainly in what settings they should use, and less interested in self-tuning, or wanting a basis to work from, here are some easy-set profiles which I believe will give good results… For instructions on how to program the PID controller in the Duetto with one of these profiles continue on to the next section.
The European Variant
The following profiles have been developed on my personal machine, which is a European variant of the Duetto running on 240V. The European model has a 1kW brew boiler element and (approximately) 1.4kW steam boiler element and utilises a 1C increment PID temperature controller. The machine is normally set to around 93C in an ambient temperature of about 20C and has a temperature offset of 10C. My steam boiler pressure is about 1.4bar top of cycle1. Remember that the machine must be on for at least an hour before tuning and that all machines could have minor differences: depending on what brew temperatures you test at (e.g. extremes of, say, 88C or 97C), the steam pressure you run at and the offset you use, your results could be slightly different.
In particular, if your ambient temperature is particularly lower or higher than 20C or your supply voltage is significantly less than 240V you may need to tweak your chosen profile for your own situation. For example, when running at 220V you may need a slightly higher Proportional gain (P) and/or Derivative gain (D) from those in the table below. Also, insulating your brew boiler will almost certainly require the parameters to be lowered somewhat, but I have no information yet as to how far!
I would be extremely interested to hear from Duetto owners (through the Coffeetime UK forum) to see if this information is useful, and what PID profile you've settled on using… I can add user profiles to the article.
|P=3.0 I=0.05 D=2.0||Default (most aggressive)||It isn't that bad, exactly, and is still much better than thermostat control. I can see why these values were chosen - it is to try to prevent overshoots, but also to ensure that recovery is as fast as possible. Personally, I don't care if it takes 30 seconds for the brew boiler to return to the set temperature instead of 10 to 20 seconds, I just don't want to wait for an overshoot to cool down.|
|P=1.6 I=0.04 D=9.6||Preheat Off [Mole] (Steam Boiler Off - less aggressive, some chance of overshoot)||These settings were found using the manual tuning guide whilst the steam boiler (brew water preheat) was off. Proportion had to be reduced to 1.6 from 2.0 to avoid overshoots where possible. These are great all-round settings, and very good with preheat off, but runs the risk of regular 1C overshoots with the preheat.|
|P=1.7 I=0.04 D=8.0||Preheat Off [DaveC] (Steam Boiler Off - less aggressive, slightly higher chance of overshoot)2||DaveC tried my settings above, but found he did not like the slightly slower recovery time from the default settings. He chose to up the proportional gain a little and decrease the derivative to speed up recovery just a little. I haven't tested these settings, since I use the steam boiler most of the time, but they should be good all-round settings as well.|
|P=1.4 I=0.01 D=4.4||Preheat On (Steam Boiler On - conservative)||With steam boiler on (preheat enabled) these settings work extremely well. Recovery is good, although a bit slower than defaults or even the preheat disabled settngs above. However, even with preheat enabled overshoots are virtually non-existant (and would never be more than 1C). These settings also work adequately with preheat off, but I have found that the boiler can suffer a fair drop in temperature, perhaps 3-4C, even during a single shot. Don't worry, it makes no (noticeable) difference to the quality of the shot, and of course does not happen with preheat on.|
|P=1.2 I=0.03 D=6.0||Preheat On (Steam Boiler On - alternative conservative)||With steam boiler on (preheat enabled) these settings work very well. Recovery is similar to the conservative settings above. With preheat enabled it rarely overshoots, perhaps once or twice a day, and never by more than 1C. With preheat off, performance is similar to the other conservative settings: the boiler can suffer a fair drop in temperature, perhaps 3-4C, even during a single shot. Again, it makes no (noticeable) difference to the quality of the shot, and does not happen with preheat on.|
|P=1.4 I=0.02 D=4.8||Preheat On (Steam Boiler On ) [Sebastian from vanpommeren.nl]||With steam boiler on (preheat enabled) these settings apparently work well.|
What am I Using?
I use the conservative profile - P=1.4, I=0.01, D=4.4 - since I use my machine with the steam boiler on during most sessions. It gives a great recovery with preheat on and adequate recovery with preheat off. It is incredibly rare to see any overshoot, but if it does, it is limited to 1C (and never more, regardless of small or large flushes!).
The US Variant
The European profiles may not work well on the US variant of the Duetto. The US variant has a 0.8kW brew boiler element and 1.2kW steam boiler element. If running the same PID controller, the lower powered brew boiler element will probably require higher settings (about 25%, I would guess) than the European models in order to respond in a similar manner. However, the US variant is being fitted with a 1F increment PID temperature controller, which probably makes the European profiles useless! At a guess, I might consider decreasing the values by about a third and see if this gives a good starting point… but I am at this point only guessing that the programming of the controller will be similar, just modified to use Fahrenheit rather than Centrigrade.
After some testing by Jim of http://www.pidkits.com, we now have a good PID profile for the US version of the Duetto:
|P=1.3 I=0.06 D=1.5||General Profile [Jim from pidkits.com]||Apparently these are good settings with preheat both on or off, offering good stability, recovery and little to no chance of overshoot.|
However, I would still be extremely grateful to obtain some feedback from early users in the US who spend some time playing with the PID settings of their Duetto. I would like to be able to build up a table of multiple profiles for both variants that are generally useful for most consumers… please contact me via the Coffeetime UK forum if you have a good profile you want to share.
Final Comment on These Profiles
With such a low proportional setting (which I use), don't be surprised to find that from stone cold the machine can take 10 to 15 minutes to hit the set temperature for the first time when the machine is initially turned on. It makes no difference, since the machine needs 30 to 40 minutes or more to heat up and stabilise the group, but it might make you wonder what is happening the first time you notice it! This behaviour is simply a result of the conservative parameters not being able to keep up with the excessive heat loss of the brew boiler to the group when the machine is cold. As it warms up and stabilises, the set temperature is easily maintained. It seems to me that this might be why the default settings were chosen, as a user wants to see that the set temperature can be reached quickly.
Programming and Tuning the Duetto's PID Controller
If you just want to know how to program the controller, continue on to the 'Solution' section… For more information about the Duetto and PID controllers, read on…
History of the Issue
At the time of writing, the Izzo Alex Duetto is new to the market, with only a few machines in circulation. I am lucky enough to own Duetto number 0002. Given that Duetto number 0001 went to the reviewer (who gave valuable feedback to Izzo), this is the best possible outcome for me!
The Duetto is a dual boiler, rotary pumped, tanked or plumbed-in (including built-in drain kit), PID controlled espresso machine for the high-end consumer market. A great overview of the machine can be found in the review on the BellaBarista website: http://www.bellabarista.co.uk.
The Duetto's brew boiler temperature is controlled using a PID controller. A PID controller uses an algorithm to determine when to turn on the heating element rather than a simple thermostat or pressurestat, allowing more intelligent application of heat to the brew boiler and attempting to control overshoots (common with thermostat controlled boilers) whilst also reacting fairly quickly to sudden drops caused by flushing (such as when cleaning the group) or actual shots. A PID controller (for a heating application) looks at the history of the current temperature against the required (set) temperature and applies power to the heating element appropriately. PID stands for the three parameters it considers: The Proportion, the Integral and the Derivative. These three parameters can be tuned in order to optimise the heating of the brew boiler.
So, what is wrong with the stock settings in the Duetto? I found that the brew boiler could recover very quickly from a temperature drop, but that there was a tendency to overshoot by a degree or two… sometimes three. The Duetto has brew water preheat using a (custom) heat-exchanger through the steam boiler. This works tremendously well, preventing cold shock in the brew boiler during even large double shots, without causing temperature overshoots. However, the Duetto also allows the steam boiler to be turned off independently of the brew boiler. Great for saving power if you don't always need to steam milk, but it does mean you lose the preheat function. With a 0.8l brew boiler and 1kW heating element (in the European market) there is less need of a preheat, but the brew boiler will lose two or three degrees during a large double. (Remember that this makes no difference to the temperature of the water hitting the puck as the group stabilises this water's temperature - and this water was mostly pushed into the group at the start of the shot.) However, this cold shock to the boiler can subsequently cause overshoots using the standard PID parameters as the PID tries to recover from the reduction in temperature. It is not a large problem, but if you are making back-to-back shots quickly, you may wish to wait for the temperature to stabilise before starting the next shot. If you have to wait for the brew boiler temp to fall, this can take a little while. This is not how I wanted to use my machine. So, I decided to see what could be done about it…
Just to note that the Vibiemme Domobar Double Boiler with PID (or VBM DoubleDomo) also has a Gicar PID controller which seems very similar to the Duetto's. DoubleDomo owners may find that the information in this article applies to their controller as well. If so, let us know what parts of this are applicable by posting on the Coffeetime forum!
The PID controller in the Duetto is a custom built unit made by Gicar. It has a three digit display and two push-buttons, marked with a down arrow (left button) and up arrow (right button). In normal operation, the display shows the actual temperature of the brew boiler in 1C increments (so you can see exactly what it is doing) as well as a dot (decimal point) to the right of the temperature which illuminates when the heating element is receiving power (hence in a steady state it normally flashes regularly). To set the desired temperature, you press the left button - the display changes to read PrG (program) - and then immediately press the right button - the display changes to show the current set temperature. Now, pressing the down or up buttons changes the temperature. If at any point you delay by more than a second or two, the display returns to the current boiler temperature and the process must be started again (press the left button then immediately press the right button).
When the Duetto is turned on, the PID controller displays 1.01 (or like mine, just 101), which we believe to be the revision of the PID controller (not that this matters).
Entering Programming Mode on the Gicar PID Controller
Fortunately, there are some settings that we can program ourselves to change the behaviour of the PID algorithm. To do this, turn off the Duetto and, whilst simultaneously holding down both PID buttons, turn the Duetto back on again. Keep the buttons held down whilst the PID controller shows the 1.01 (or 101 in my case) and then the display should read F.03 (or F03).
It can be quite difficult to get both buttons to depress whilst turning on the machine, so you may need to repeat this until the programming mode is entered. One of three things may happen…
(1) The machine shows a temperature, which means that the buttons were not properly held down or for long enough whilst the machine is turned on. Simply start the process again (beginning by turning off the machine at the main switch).
(2) The machine shows PrS (or Pr5, since it is hard to tell what the digit is meant to represent). This means the the left button was not held down properly or for long enough, but the right button was. The PrS mode is a general reset, which reverts all PID settings to their factory defaults. Note that it also resets the desired (set) temperature to 96C, so be ready for this if you want a lower temperature when you next turn the machine on! Turn off the machine and start again.
(3) The machine shows F.03 (or simply F03, with no decimal point). Congratulations! You have successfully entered the programming mode.
What are the Proportion, Integral and Derivative?
PID control loops form the basis of many devices. A good overview can be found here: http://en.wikipedia.org/wiki/PID_controller. Here we will see what affect the P, I and D parameters have in terms of an espresso machine PID controller for boiler temperature management…
The Proportional gain of the PID controller determines how much heat to apply based on how far the current temperature is from the set temperature (the proportion of the error). A higher value instructs the controller to apply more heat to small differences between desired and current temperatures.
The Integral gain determines how much heat to apply based on the length of time that there has been a difference between desired and current temperatures. Essentially, this is a term derived from the sum (over time) of the errors seen historically. Again, a higher value gives more gain to the sum of these errors.
Finally, the Derivative gain uses the rate of change of boiler temperature to either increase of decrease the heat applied. So, if the boiler temperature is increasing quickly, and approaching the desired temperature, the heat will be reduced. Similarly, if a large flush is performed (particularly without brew water preheat if the steam boiler is off) then the temperature can begin to fall quite sharply. The derivative term will apply a lot of heat to try to prevent further loss. Once again, a higher value gives more importance to this term.
Resetting the Gicar PID Settings
As stated above, there is a general reset built into the Gicar PID controller. If at any point you want to reset the PID to factory defaults, follow the instructions above for entering programming mode, but instead of holding down both buttons, simply hold down only the right hand (up) button. So, turn machine off, hold down right button, turn machine on, keep holding down the right button until the display shows PrS as in point (2) above. Turn off the machine, and either turn it back on again to use the defaults (including set temperature of 96C) or start programming the device again.
Programming the Gicar PID Controller
So, you have managed to get the PID controller to enter programming mode. It is displaying F.03 (or F03). It is time for a quick digression…
DaveC has machine number 0001. I have machine number 0002. His PID controller has a decimal point after the first digit which displays sometimes. Ours does not seem to. Either our unit has no such decimal point, or it is not working. No big deal. Either way, in the instructions that follow, the reader should ignore any decimal points in case there is a difference in units being supplied in the Duetto. You should know whether your machine displays a decimal point when you turn the machine on, since it should display the PID revision as either 1.01 or 101. Similary, option F.03 may display as F03. If your settings look different than those I show here, consider ignoring all decimal points and going on the digits shown. For example, the proportional gain might be 3.0 or 30. If I suggest 1.2, you would enter 12 if your decimal point does not show. Now, back to the programming information…
There are five options in the Gicar PID controller (revision 1.01). The controller begins in the first option (F.03) and awaits an input. To change an option, press the right button - the display shows the current setting - and then immediately press either down or up to modify the option. If you wait too long, the unit returns to the name of the current option being modified (for example F.03). If this happens, you must press the right button again to enter the setting mode before pressing the left or right button to modify the setting. Pressing the left button whilst the name of an option is displayed changes the option to the next option to be modified. You cannot go back - if you need to, you have to turn off the machine and re-enter programming mode. The options are:
(1) F.03 - This is the display unit of the PID temperature, in degrees C or degrees F. The display shows the setting as either oC or oF. Unfortunately, the Fahrenheit setting does not give more resolution than the Centigrade setting, instead sometimes skipping two degrees F (since the controller simply converts C to F).
(2) P. - This is the proportional gain. The units are in 0.1 increments and the default is 3.0.
(3) I. - This is the integral gain. The units are in 0.01 increments (mine does not show the decimal point here) and the default is 0.05 (005 on mine).
(4) d. - This is the derivative gain. The units are in 0.1 increments and the default is 2.0.
(5) F.04 - This is the temperature offset between the brew boiler and the shown temperature. The default is 10 degrees C.
I will work in degrees C in this article. You can change the display unit (option F.03) at will later. Let us quickly examine the offset option, then continue to the P, I and D parameters.
Setting the Offset
There needs to be an offset because an E61 group loses heat to the environment and sits at an idle temperature which is lower than the boiler temperature. As such, the boiler needs to be hotter than the desired brew temperature so that when a shot is pulled the desired brew temperature is achieved. By default in the Duetto, the offset is set to 10C.
DaveC describes how to verify that this value is correct in his user guide. I will briefly describe this process here. I suppose this works only at sea level (where water boils at 100C) but hey, I'm not covering anything more complex here ;)
Briefly, in normal operation mode, set the machine to 97C and allow 15 minutes for the group to warm up. Flush some water (wihtout any portafilter loaded) - watch and listen for any signs of boiling. If the offset is correct, there should be none. Increase the temp 1C at a time, with 15 minutes warm up after each change, and do the flush test again. At 99C you should begin to notice the boiling water (bubbles and hissing/spluttering). At 100C it should be very clear. The offset is set correctly if this is the case. Otherwise, adjust the offset so that the 99C to 100C boundary is where the flash boiling becomes distinct. If you find this is lower, at say 98C, then the offset needs to be decreased (in this case probably by 2C to 8C). If it is higher, at say 102C, then the offset needs to be increased (again, in this case probably by 2C to 12C).
Proportion, Integral and Derivative
To come up with my profiles, I followed a manual PID tuning guide described as part of a wiki article found here: http://en.wikipedia.org/wiki/PID_controller. It describes what a PID control loop is and how to manually tune one for the desired response. Our use is a little different, in the sense that we cannot reduce the temperature in the boiler by force (except by flushing) and must wait for it to reduce by heat loss (a slow process). However, we can tune the heating part of the control loop to prevent overshoots, and that is what we will do…
The Wikipedia article explains that the first step is to set the P value. So, set the Duetto's PID controller to have I and D both set to zero, and start with P set to something like 2.0. Set your brew temperature to a predetermined value that you will leave alone - I chose 93C, and base this description on this value.
It should be noted that you probably want to tune the machine with the steam boiler in the condition that you normally use the machine. That is, if you normally have the steam boiler off, make sure you have the steam boiler off (and left for a good few hours to be fully cold) before tuning the PID parameters. However, if you normally have the steam boiler on whilst making drinks (like me) because someone always wants a milk drink (like my dad!) then make sure the steam boiler is on. I actually use the Duetto by turning on the steam boiler at the start of a drink-making session, then turning it off at the end of the session to conserve power and reduce heat-related stress on the internal components. However, the brew water preheat is at full effect pretty much as soon as the steam boiler is up to pressure, so if this is the way you use your machine, tune the PID controller with the steam boiler on.
After waiting some time for the machine to stabilise at 93C watch what the PID controller shows is happening to the temperature and heating element (remember that little decimal point which shows when the heating element is being powered). The Wikipedia article says to increase P until an oscillation is formed. What I wanted to do was increase P until I saw the temperature oscillate between dropping to 92C, heat being applied until it gets back to 93C but then a slight overshoot to 94C. I tried to achieve the same time in the 94C band as in the 92C band, so that I assumed the average temperature was 93C (or 93.5C). Achieving an overshoot also meant that I could tell that a substantial oscillation had occurred. At this point we do not flush any water, we are leaving the machine at idle since we are testing the steady state. For me, the P value found was 3.2 with steam boiler on and 4.0 with steam boiler off. It is expected that the value with be lower with steam boiler on or in a hotter ambient temperature since the brew boiler will gain some heat input from its environment.
According to the Wikipedia article, the P value is then set to half the value found to cause oscillation in the above routine. I thus set mine to 1.6. This is much lower than the default value of 3.0, which helps prevent overshoots. Further "normal use" testing revealed that this was still a little high for my liking, and I subsequently went to 1.4 and then to 1.2. Similarly, with brew water preheat off, I found 2.0 using the method above, but had to reduce it to 1.6 after testing.
A lower than default proportional gain means that heat is not applied quickly or with enough duration to quickly recover from large temperature drops. We therefore set the derivative gain next. This is increased until the recovery during a large flush is adequate. With low D value, if you perform a large flush to cold shock the brew boiler (8-10 seconds with steam boiler off or up to 20 seconds with steam boiler on) then the heating element does not come on for long enough nor early enough to (help) prevent the temperature from falling too much (obviously it is possible to over flush and reduce the boiler temperature significantly - the heating element cannot keep up with a continuous running of water). The problem with a high D value is that the PID controller also assumes that as the temperature rises again, it will increase too fast, so backs off the heat with even a slow rise in temperature. Also, if an overshoot does occur, it is hard for the boiler to reduce to the set temperature again - as the temperature falls a degree, the derivative term says to give heat as it is expecting a fast fall, which can push the temperature back into an overshoot again! So, low D values mean slow to react to large falls - high D values can give instability. However, it was surprising to find that a much larger than default value is needed to gain some level of control on the recovery of the boiler after a large flush. The default is 2.0. I found that 6.0 works well with steam boiler on, and as high as 9.6 when the steam boiler if off. These values really do help prevent overshoots from a cold shock (large flush), since they tell the PID controller to back off the heat as the set temperature is approached and thus slow the rate of increase of brew boiler temperature.
This brings us to the Integral term. With such a high D value, it can be the case that heat is backed off a little too much from small flushes or as the set temperature is very nearly reached. The integral term allows us to tune this behaviour out. We increase the I value until the boiler recovers sufficiently quickly from a small flush (down to 91C or 92C only) whilst still not overshooting. If the I parameter is too low, it can take too long to recover. If it is too high, it can cause steady state overshoots to 94C from 93C. I found that 0.03 is a good value with steam boiler on, and perhaps raising it to 0.04 with steam boiler off.
It is also the integral term which causes the PID controller to pulse the heating element (every couple of seconds) once the set temperature is reached in order to maintain it from falling again. Unfortunately, we have to allow a gradual drop to 92C from 93C every 70 seconds or so, otherwise I found that the temperature can instead overshoot to 94C occasionally, which to me is more offensive! I don't mind waiting the 10 seconds for the brew boiler to recover from a steady state drop by 1C, but I hate waiting a minute for it to drop after an overshoot (or I just pull the shot a fraction too hot, not that I notice this!).
Play with the settings during normal use (make espresso!) and see what you think. If you get a little overshoot after a shot, you might want to reduce the proportial gain a little, or perhaps the derivative gain, or both. For example, I had to reduce the proportional from the original 1.6 I found to 1.2 to prevent overshoots. If you find a steady state overshoot occurs, you might want to reduce the integral gain 0.01 at a time. If the recovery isn't fast enough for your liking, try a slightly higher parameter, keeping in mind the tuning above, that is: proportion might cause overshoots after a large or small flush; derivative might cause overshoots after a small flush, prevent the temperature from recovering after a large flush or even prevent temperature reductions by natural cooling; integral might cause steady state overshoots or even recovery overshoots.