Fortunately, basic PID analysis, including linear state-space representation and practical tuning methods (e.g. Ziegler-Nichols[1]), is taught in pretty much any first EE control theory course at the undergraduate level.
I took a class in PID and other control systems (PIP) in my 3rd year of undergraduate Electronic Systems Engineering at Lancaster University in the UK.
I enjoyed the class and got good grades, but I've never had to use it in practice.
Now I work for a tech company in Taiwan who make microSD cards, and some of the programming projects I worked on involved writing drivers for the testing machines. That was called "automation and control", but it's all been in software.
I like hardware, but I really don't know how to get back into it after 7 years in software.
There was an "aha" moment for me when I realized that PID loop only works well for linear systems (and sometimes it's not obvious if a system is linear or not).
Real world example: imagine you have a single-axis motion stage driven by electric motor and you want to control position of a carriage.
Usually your control output is motor voltage. Motor voltage approximately translates to current through motor windings, which in turn approximately translates to torque exerted by motor.
Torque exerts a force (T = F * r) on carriage. Applying force to the carriage makes it accelerate (F = m * a). Acceleration linearly increases the carriage velocity (v = v0 + a * t). Carriage having some velocity finally causes the position change (s = v0 * t + a * t^2).
In the essence, the system turns out to be non-linear with the respect to parameter you are controlling.
To improve this system, one solution is to add velocity sensor (or differentiate the position sensor, if it's resolution is high enough) and introduce a cascading PID loop topology- the outer loop takes position error and outputs velocity error, which is fed to inner loop (input = velocity error, output = acceleration). The coefficients for the loops have to be tuned starting from innermost loop.
Another solution is to use different control algorithm which is suited for non-linear systems (e.g. LQR).
We actually ended up using this when writing a controller for a quadcopter[1]. Essentially, we have one PID controller operate on the absolute angle (error = desired angle - actual angle). The output of this controller is fed into the second controller as the desired rate of rotation (RoR) (error = desired RoR - actual RoR). The output of the second controller is finally fed to the motors.
Apart from being easier to tune, I just found a good article[2] for why this approach works better for problems such as this. For quadcopters, of course, this allows one to easily switch between rate/acro mode and angle mode.
Could you clarify what is nonlinear about that system? From your description, it sounds like a high (4+) order (mostly) linear system. The motor probably has nonlinear dynamics, but so does everything and treating it as linear should work ok.
I suspect the difficulties you've experienced stem not from nonlinearity, but from trying to control a system poorly approximated by a second order system with a second order controller. By cascading, both PID controllers effectively "see" a plant that looks more or less second order, so the controllers are much more effective.
I think you're saying that system is nonlinear because there's a t^2, but it's actually linear. The ODE for the system is certainly linear. You could choose a state space and describe the dynamics with linear operators.
Solutions to linear ODEs are in general exponential or polynomial in time. The solution doesn't have to be linear for the system to be linear.
(Unless I've misunderstood and you are modeling the system as actually controlling time. But I doubt that's what you meant)
PID will also work for non-linear systems provided they are not too non-linear. Even simple steam boiler is already non-linear but PID will work fine if you are just interested in practical results.
Oh wow, this brings back memories. I almost wonder if you're the person who sponsored my senior design project.
We were given something almost identical to this, and the customer wanted a control algorithm. I had taken control theory, but there were two problems:
1. A lot of undergrad control theory assumes linear systems.
2. They almost always give you the transfer function.
Our system was likely nonlinear and we had no transfer function.
For simple physical systems, you can use basic physics to derive it. For anything else, figuring out the transfer function is a whole course in itself. I went to the control theory professor and asked for tips and he said "Forget it, it's way beyond the scope of a senior design project. I have students who do it for their MS project". Unfortunately, I couldn't convince the course's professor, and my grade suffered.
Thanks for pointing out an obvious reason of why position control for DC motor requires the cascade topology. Always used it, never understood formally why is was required. Just curious : how have you come to this conclusion / explanation ? Do you have any resources on the subject ? I'm still struggling to find a (formal again) rule on what should be the ratio between the outer and inner loop rates.
Can't edit my comment anymore, but as multiple commentators pointed out, what I'm calling a non-linear system is probably just a higher order linear system.
Just going to throw my 2-cents in - I should note that my knowledge of PID is very limited.
The first time I encountered an explanation of how PID worked that made sense to me, was via the Udacity CS373 course that I took in 2012 (Thrun also had a great explanation on how a Kalman filter worked as well). This explanation of PID was repeated when I took the Udacity Self-Driving Car Engineer Nanodegree (starting in 2016).
In the CS373 course, Thrun detailed a few different ways to tune a PID controller - but one way he covered was rather curious in how it worked. It wasn't perfect, but it got you "close enough". I'm not sure if it would work well for a "real system" but for the purpose of learning it seemed to work well enough.
He called it "twiddle" - I don't know if he was the original author of it, or what - but here's a video that describes how it is implemented and how it works:
Twiddle, AKA coordinate ascent, definitely works in practice. It's basically the same process a human uses to tune PID parameters, cyclically tune one parameter at a time until you're performance is good enough. It's closely related to gradient ascent and suffers from the same problems, namely that it can get trapped in a local minimum, but it's easy to implement and does a good job if you start with an ok guess at the parameters.
I am a little suprised that the author does not use a low-pass filter for the D part, for example 1/(1+s Tf) and instead tells you to modify the hardware.
Sure, you need cut off the noise with hardware in respect to your Nyquist frequence but you can still have a lot of high frequency noise.
And it is not always possible to use hardware filters to get rid of the noise, for example if your are tracking an object with a camera and the x,y is your input to the pid. Ofcourse you can skip the D part.
What am I missing here?
I also find it more easy to use a reset based integrator anti-windup, where you specify your limits on your control signal instead of limiting the integrator.
I always do integrator wind-up similar to how you do it -- apply limits to the overall controller output (which are typically necessary for the system anyway), and use that to limit the integrator. Just putting limits on the integrator is too crude, and it's not like it's any easier to program. Maybe the author introduced that because it's easier for a beginner to understand.
However, I typically do not change the state of the integrator the way you are doing here. I just hold the integrator state (i.e. don't update it) if the controller is limited. That way, noise on the P or D signals doesn't cause my integrator state to hop around. I may do it your way if the controller limits are changing over time for some reason.
I also always low-pass filter the D term, as you mentioned. Otherwise, the D term is just too noisy.
I often find that my P and D terms are limited by how much sensor noise I'm willing to let thru to my controller output.
'Feedback systems: an introduction for scientists and engineers' is another nice reference [1]. I used it and another Wescott text to put together effectively a somewhat extended version of the OP's code [2].
Or you can use my PID simulator, where you can play with the constants in a simulated car to reach different speeds, it updates the output graph instantly
My SW eng program did not even hint at these. Is there a good edX or coursera course that goes through more extensive material than the pdf? I'm also curious what tools are used by professionals? Matlab, simulink???
Not sure if this is allowed but I created a Udemy course on PID control where I go through the theory and then in the assignments you write Python code to create a PID controller for an elevator (with the goal of moving the elevator to the desired height). A PID controller can be written in less than 10 lines of code but understanding the different components is very important for tuning it and getting it to work. If your interested just go to Udemy and search PID Control, you'll find it.
If you'd like a discount code (not worth the full price if your a SW eng) DM me on Twitter as I'm not sure I'm allowed to post it here.
When I did my MSc I did all my PID controllers in MATLAB/Simulink but since the actual code for a PID controller is very simple, it's easy to implement in Python or C++.
Google for a class in (classical) control theory. This is a standard topic for electrical, mechanical, and chemical engineering programs.
For implementing a PID loop, you can do it in pretty much any language you want -- it's relatively straightforward once you know the math. You can even do it in hardware via an analog circuit if you desire. However MATLAB / Simulink are commonly used when experimenting with system parameters due to the presence of straightforward plotting tools and numerical ODE solvers.
All of my own experience in controls (both as a student and professional) uses MATLAB/Simulink to model and generate controller code. Other tools are out there, but I don't know much about them.
So here's an awfully uninformed question that will probably get me laughed at by actual engineers (as in, not 'software engineers' like myself - and yes Canadians please bite your tongues, I've heard your shpiel by now): when you have a more powerful computer to work with, isn't it much easier to just derive some regression parameters and call it a day?
My use case: I have this home-build growhouse that I use to start my seedlings in at the end of winter (and as a fermentation chamber for wine). It's controlled by a Raspberry Pi and as inputs I have 4 groups of LED grow lights, a 30w heating element, a fan that draws warm air out of the box and thus brings the temperature within the box towards ambient temperature, and DHT22 sensors that measure temperature and humidity inside and outside the box. The goal is to keep temperature as close to a certain target temperature as possible, keeping in mind that I want the lights to be on for a certain nr of hours per day and the lights give off so much heat that they will pretty much always make the temperature go over the target (so the fan then needs to bring it down again). It's easy to get this working the naive way with an hysteresis of say +/- 2 degrees (which is fine for my purposes), but the nerd inside me sees it as a game to make that band smaller. So I've been reading up on PID controllers and dear baby jesus I can't even work out how I'd get started. So the pragmatic part of my brain goes 'just run it for a few weeks with incremental inputs between 15 and 35 degrees (C, of course), measure the responses, toss all measurements into R and derive some regression parameters'.
Does anyone do this in industry? Probably not because everywhere I've asked, everybody's who's ever done real work on this uses PID controllers - but is that because they're easier to build on microprocessors (i.e., need less number crunching)?
There will almost always be external influences that change the behaviour over time. If you have a vehicle, going up the hill will require more energy to keep the speed constant.
For your growhouse, if it's hot outside of the box it may requires less heating, etc.
Or the LEDs that you use get less efficient over time.
You really want to have a dynamic algorithm such as PID that can deal with these changes in a near optimal fashion.
> It's easy to get this working the naive way with an hysteresis of say +/- 2 degrees
Yeah that's a bang bang controller. Those actually work really well as long as you don't mind the temp swing.
It mostly sounds like your temperature control is via the fan and the heating element.
The heating element is the simplest to control with a PID loop. Just use a PWM output to control the heater power. Use a solid state relay to switch the power to the heater.
Once you have that you need someway to record and plot the setpoint and temperature.
Once you have that simplest way to get started is just play around with straight proportional control. Then add integral control with some sort of anti-windup. You don't actually need much theory to implement and tune a PI controller.
Three bits. For your case you likely only have to run the control algorithm at 10Hz. Second when tuning don't adjust your tuning constants linearly, instead double or halve them. On a Raspberry Pi use double precision floating point.
What you are describing is called "system identification". If you have a simple mathematical model, it is possible (and in the case of your fermentation chamber, it should be) to measure a couple of step responses and estimate the parameters to design a control system.
Finding good Kp, Ki, Kd gains by just sampling the [Kp, Ki, Kd]- space at random and trying it out on the real system is often not recommended. Firstly, because the state space is relatively large. Secondly, many systems can fail catastrophically if they become unstable, causing potential harm to man and machine. The second objection does not apply to a wine fermentation chamber, as far as I can see.
That gets you through 90% of real world control problems. Filtering the derivative input gives you another 5% for some noisy processes. The other 5% require somebody who knows a bit more.
what I have been searching for years is not theories or tutorials about PID, but a detailed explanation on how to tune a digital controller(instead of a continuous one) in a easy-to-setup environment, whether it be simulation or a cheap hardware. I know examples can include inverted pendulum(IP), double IP, mountain cart, heater with thermometer feedback, line-follower, etc, but where can I easily play around with these examples?
The matlab system identification toolbox is nice to get a casual feel for the systems. Note that pid controllers are mostly used due to their computational rather than control performance. They are math equivalent for linear systems, but thats like saying x=inv(A)b is just as good...
The powerful idea is the linear system model or the stochastic linear system model. Understand them and the properties of recursive filters and pid will come naturally.
It's so sad. I studies this stuff in depth for almost 1 year in college... And now after 2 years of working as a software dev I forgot almost everything.
I wouldn't worry about it. In your career, you're going to forget a ton of stuff (if you're not repeating the same project over and over again). That's just how it works.
The win is that someday you will end up needing either the stuff you learned or the math that you used, and you'll find out it's way easier (and more illuminating) learning it the second time around.
509'd. Does anyone have the PDF for it? Google cache seems to just render the document, not give me the PDF (I like to download and read offline, from time to time).
He stresses regularly spaced sampling. I don't see why high-precision timestamps wouldn't work just as well, though that would complicate the computation of the I and D signals.
Actually, throughout he doesn't seem to acknowledge the different units between the P, the I, and the D, instead implicitly treating the whole system as discrete time for many purposes, in e.g. the recommendations for 100:1 ratios between P, and I; and D and P.
Regarding equal spacing: the sample rate determines a part of the system latency, and therefore performance and stability limitations. Eliminatating the stability of sample rate eliminates the decades of work basic controls analysis relies on. Or said another way, slow your sample rate and pay with your phase margin. Not to say it’s impossible to deal with (small) changes in sample rate, but in a text where he is already wildly simplifying things, this sounds like the wrong place to innovate.
Does anyone here have experience with Fliess iPID controllers?[0] The papers indicate they are superior, Fliess is a generally respected academic, but the math seems the same with slightly different terminology....
This is a great short overview, and timely for the First Robotics Competition season.
I took a course on this in college, and while that course mentioned the notion of sampling the D signal directly from feedback instead of from error, it never laid out why. This guide's practical explanation of why one might want to do that is great.
I just bought an espresso machine, and it’s crazy that something as simple as a PID controller justifies a several hundred dollar markup on some models. The processing power needed is miniscule...!
I love my brewing water to be perfect temperature, too!
I am currently writing model-predictive controller with moving horizon estimator for my Silvia!
The idea of the controller is to model boiler water temperature based on current brew head temperature and previous heating/brewing history. Then the model-predictive part settles the boiler optimally, without any over/undershoots.
The estimator (general case of what is also called Kalman filters) monitors the operation to update model parameters. It is detecting the scale buildup over time! Kinda neat.
[+] [-] metaphor|8 years ago|reply
[1] https://en.wikipedia.org/wiki/Ziegler%E2%80%93Nichols_method
[+] [-] peterburkimsher|8 years ago|reply
http://www.research.lancs.ac.uk/portal/en/publications/-(657...
I enjoyed the class and got good grades, but I've never had to use it in practice.
Now I work for a tech company in Taiwan who make microSD cards, and some of the programming projects I worked on involved writing drivers for the testing machines. That was called "automation and control", but it's all been in software.
I like hardware, but I really don't know how to get back into it after 7 years in software.
[+] [-] beambot|8 years ago|reply
[+] [-] fest|8 years ago|reply
Real world example: imagine you have a single-axis motion stage driven by electric motor and you want to control position of a carriage. Usually your control output is motor voltage. Motor voltage approximately translates to current through motor windings, which in turn approximately translates to torque exerted by motor. Torque exerts a force (T = F * r) on carriage. Applying force to the carriage makes it accelerate (F = m * a). Acceleration linearly increases the carriage velocity (v = v0 + a * t). Carriage having some velocity finally causes the position change (s = v0 * t + a * t^2).
In the essence, the system turns out to be non-linear with the respect to parameter you are controlling.
To improve this system, one solution is to add velocity sensor (or differentiate the position sensor, if it's resolution is high enough) and introduce a cascading PID loop topology- the outer loop takes position error and outputs velocity error, which is fed to inner loop (input = velocity error, output = acceleration). The coefficients for the loops have to be tuned starting from innermost loop.
Another solution is to use different control algorithm which is suited for non-linear systems (e.g. LQR).
[+] [-] darshanrai|8 years ago|reply
Apart from being easier to tune, I just found a good article[2] for why this approach works better for problems such as this. For quadcopters, of course, this allows one to easily switch between rate/acro mode and angle mode.
[1] https://github.com/ThePinkScareCrow/TheScareCrow/blob/master... [2] https://www.controleng.com/single-article/fundamentals-of-ca...
[+] [-] alfla|8 years ago|reply
The nice thing about linear systems is that almost every dynamical system is locally linear near some operating point.
[+] [-] wenc|8 years ago|reply
In practice, PID is applied to nonlinear systems too. The catch is the nonlinear system need to either be:
1) locally linear within the region of interest (very often the case)
2) mildly nonlinear
3) linearizable (by doing a mathematical transformation)
[+] [-] andars|8 years ago|reply
I suspect the difficulties you've experienced stem not from nonlinearity, but from trying to control a system poorly approximated by a second order system with a second order controller. By cascading, both PID controllers effectively "see" a plant that looks more or less second order, so the controllers are much more effective.
[+] [-] gugagore|8 years ago|reply
Solutions to linear ODEs are in general exponential or polynomial in time. The solution doesn't have to be linear for the system to be linear.
(Unless I've misunderstood and you are modeling the system as actually controlling time. But I doubt that's what you meant)
[+] [-] lmilcin|8 years ago|reply
[+] [-] BeetleB|8 years ago|reply
We were given something almost identical to this, and the customer wanted a control algorithm. I had taken control theory, but there were two problems:
1. A lot of undergrad control theory assumes linear systems.
2. They almost always give you the transfer function.
Our system was likely nonlinear and we had no transfer function.
For simple physical systems, you can use basic physics to derive it. For anything else, figuring out the transfer function is a whole course in itself. I went to the control theory professor and asked for tips and he said "Forget it, it's way beyond the scope of a senior design project. I have students who do it for their MS project". Unfortunately, I couldn't convince the course's professor, and my grade suffered.
Oh well, you learn more in failure and all...
[+] [-] pymzor|8 years ago|reply
[+] [-] fest|8 years ago|reply
[+] [-] cr0sh|8 years ago|reply
The first time I encountered an explanation of how PID worked that made sense to me, was via the Udacity CS373 course that I took in 2012 (Thrun also had a great explanation on how a Kalman filter worked as well). This explanation of PID was repeated when I took the Udacity Self-Driving Car Engineer Nanodegree (starting in 2016).
In the CS373 course, Thrun detailed a few different ways to tune a PID controller - but one way he covered was rather curious in how it worked. It wasn't perfect, but it got you "close enough". I'm not sure if it would work well for a "real system" but for the purpose of learning it seemed to work well enough.
He called it "twiddle" - I don't know if he was the original author of it, or what - but here's a video that describes how it is implemented and how it works:
https://www.youtube.com/watch?v=2uQ2BSzDvXs
It's actually pretty neat - and the concept can be applied to virtually any algorithm in which you are trying to minimize an error amount.
[+] [-] gh02t|8 years ago|reply
[+] [-] dosshell|8 years ago|reply
Sure, you need cut off the noise with hardware in respect to your Nyquist frequence but you can still have a lot of high frequency noise. And it is not always possible to use hardware filters to get rid of the noise, for example if your are tracking an object with a camera and the x,y is your input to the pid. Ofcourse you can skip the D part.
What am I missing here?
I also find it more easy to use a reset based integrator anti-windup, where you specify your limits on your control signal instead of limiting the integrator.
Here is an diagram of what I usally do:
The kt gain will reduce the integrator when we have saturated output.Does some one knows the pros and coins with the different anti-windup solutions?
[+] [-] jgable|8 years ago|reply
However, I typically do not change the state of the integrator the way you are doing here. I just hold the integrator state (i.e. don't update it) if the controller is limited. That way, noise on the P or D signals doesn't cause my integrator state to hop around. I may do it your way if the controller limits are changing over time for some reason.
I also always low-pass filter the D term, as you mentioned. Otherwise, the D term is just too noisy.
I often find that my P and D terms are limited by how much sensor noise I'm willing to let thru to my controller output.
[+] [-] balda|8 years ago|reply
[+] [-] RhysU|8 years ago|reply
[1] http://www.cds.caltech.edu/~murray/amwiki/index.php/Main_Pag...
[2] https://github.com/RhysU/helm
[+] [-] xchip|8 years ago|reply
http://codinglab.blogspot.be/2016/04/online-pdi-trainer.html
[+] [-] Tepix|8 years ago|reply
[+] [-] throwawaybbqed|8 years ago|reply
[+] [-] wustangdan|8 years ago|reply
If you'd like a discount code (not worth the full price if your a SW eng) DM me on Twitter as I'm not sure I'm allowed to post it here.
When I did my MSc I did all my PID controllers in MATLAB/Simulink but since the actual code for a PID controller is very simple, it's easy to implement in Python or C++.
[+] [-] tnecniv|8 years ago|reply
For implementing a PID loop, you can do it in pretty much any language you want -- it's relatively straightforward once you know the math. You can even do it in hardware via an analog circuit if you desire. However MATLAB / Simulink are commonly used when experimenting with system parameters due to the presence of straightforward plotting tools and numerical ODE solvers.
[+] [-] ninly|8 years ago|reply
All of my own experience in controls (both as a student and professional) uses MATLAB/Simulink to model and generate controller code. Other tools are out there, but I don't know much about them.
[+] [-] roel_v|8 years ago|reply
My use case: I have this home-build growhouse that I use to start my seedlings in at the end of winter (and as a fermentation chamber for wine). It's controlled by a Raspberry Pi and as inputs I have 4 groups of LED grow lights, a 30w heating element, a fan that draws warm air out of the box and thus brings the temperature within the box towards ambient temperature, and DHT22 sensors that measure temperature and humidity inside and outside the box. The goal is to keep temperature as close to a certain target temperature as possible, keeping in mind that I want the lights to be on for a certain nr of hours per day and the lights give off so much heat that they will pretty much always make the temperature go over the target (so the fan then needs to bring it down again). It's easy to get this working the naive way with an hysteresis of say +/- 2 degrees (which is fine for my purposes), but the nerd inside me sees it as a game to make that band smaller. So I've been reading up on PID controllers and dear baby jesus I can't even work out how I'd get started. So the pragmatic part of my brain goes 'just run it for a few weeks with incremental inputs between 15 and 35 degrees (C, of course), measure the responses, toss all measurements into R and derive some regression parameters'.
Does anyone do this in industry? Probably not because everywhere I've asked, everybody's who's ever done real work on this uses PID controllers - but is that because they're easier to build on microprocessors (i.e., need less number crunching)?
[+] [-] Tepix|8 years ago|reply
[+] [-] Gibbon1|8 years ago|reply
Yeah that's a bang bang controller. Those actually work really well as long as you don't mind the temp swing.
It mostly sounds like your temperature control is via the fan and the heating element.
The heating element is the simplest to control with a PID loop. Just use a PWM output to control the heater power. Use a solid state relay to switch the power to the heater.
Once you have that you need someway to record and plot the setpoint and temperature.
Once you have that simplest way to get started is just play around with straight proportional control. Then add integral control with some sort of anti-windup. You don't actually need much theory to implement and tune a PI controller.
Three bits. For your case you likely only have to run the control algorithm at 10Hz. Second when tuning don't adjust your tuning constants linearly, instead double or halve them. On a Raspberry Pi use double precision floating point.
[+] [-] donquichotte|8 years ago|reply
Finding good Kp, Ki, Kd gains by just sampling the [Kp, Ki, Kd]- space at random and trying it out on the real system is often not recommended. Firstly, because the state space is relatively large. Secondly, many systems can fail catastrophically if they become unstable, causing potential harm to man and machine. The second objection does not apply to a wine fermentation chamber, as far as I can see.
[+] [-] unknown|8 years ago|reply
[deleted]
[+] [-] darshanrai|8 years ago|reply
[1]: http://brettbeauregard.com/blog/2011/04/improving-the-beginn...
[+] [-] carlmr|8 years ago|reply
[+] [-] budadre75|8 years ago|reply
[+] [-] cellularmitosis|8 years ago|reply
[+] [-] matthberg|8 years ago|reply
[+] [-] dokem|8 years ago|reply
[+] [-] msoucy|8 years ago|reply
[+] [-] midjji|8 years ago|reply
The powerful idea is the linear system model or the stochastic linear system model. Understand them and the properties of recursive filters and pid will come naturally.
[+] [-] Double_a_92|8 years ago|reply
[+] [-] rrmm|8 years ago|reply
The win is that someday you will end up needing either the stuff you learned or the math that you used, and you'll find out it's way easier (and more illuminating) learning it the second time around.
[+] [-] clebio|8 years ago|reply
[+] [-] wnoise|8 years ago|reply
Actually, throughout he doesn't seem to acknowledge the different units between the P, the I, and the D, instead implicitly treating the whole system as discrete time for many purposes, in e.g. the recommendations for 100:1 ratios between P, and I; and D and P.
[+] [-] ebrewste|8 years ago|reply
[+] [-] beagle3|8 years ago|reply
[0] https://hal-polytechnique.archives-ouvertes.fr/inria-0037232...
[+] [-] fixermark|8 years ago|reply
I took a course on this in college, and while that course mentioned the notion of sampling the D signal directly from feedback instead of from error, it never laid out why. This guide's practical explanation of why one might want to do that is great.
[+] [-] davidblair|8 years ago|reply
[+] [-] xchip|8 years ago|reply
https://github.com/aguaviva/SousVide
[+] [-] the-dude|8 years ago|reply
[+] [-] jmiserez|8 years ago|reply
[+] [-] lmilcin|8 years ago|reply
I am currently writing model-predictive controller with moving horizon estimator for my Silvia!
The idea of the controller is to model boiler water temperature based on current brew head temperature and previous heating/brewing history. Then the model-predictive part settles the boiler optimally, without any over/undershoots.
The estimator (general case of what is also called Kalman filters) monitors the operation to update model parameters. It is detecting the scale buildup over time! Kinda neat.