6 ms·
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).
by fest 9y ago
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).
- lmilcin 9y agoPID 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.
- fest 9y agoSure, but for such systems even a simple on-off controller works fine, if the sensor is close enough to heating element (and if it's too much decoupled, PID won't help either). The biggest issue for me was spending a lot of time trying to achieve a better system response (fast settling time with minimal overshoot) for system that was just designed badly.
- lmilcin 9y agoI was able to achieve optimal control and no overshoot with my espresso machine by using Model Predictive Control (https://en.wikipedia.org/wiki/Model_predictive_control https://en.wikipedia.org/wiki/Model_predictive_control) aided by Moving Horizon Estimation (https://en.wikipedia.org/wiki/Moving_horizon_estimation https://en.wikipedia.org/wiki/Moving_horizon_estimation) to continually update model parameters. Additionally, the set value for the boiler temperature is calculated using separate model that takes the group head temperature into the account. The end result is that the controller is able to stabilize immediately, with maximum power of the heater and with no overshoots or undershoots to a temperature that takes into the account the state of group head to provide the ideal water when brewing. While PID is able to control the temperature very accurately I found even in best case it took additional 50% of the time to stabilize and also it was difficult to optimally use 100% power of the heater until last possible moment. Being able to achieve stability almost immediately means I can keep lower water temperature in the boiler and bring it to temperature at the last possible moment. End result being that it is now much faster to get it ready.
- catbird 9y agoWhat type of espresso machine do you use that allows you to program a controller for the heating element?
- lmilcin 9y agoI am using Rancilio Silvia. It is well built machine but has absolutely no electronics and it is easy to disassemble and plenty of free space internally which makes it perfect for experimentation. My research of mods that are described on the Internet shows that most people put some kind of existing PID controller, SSR to control the heating element and a temperature probe which gets mounted on the outside of the boiler. Minority is using Raspberry Pi, Arduino or some other kind of existing microcontroller board to allow for nice display and more functionality. Few people are doing completely custom boards which is what I am doing for this project. I am currently learning electronics after almost 20 years in software and I find it very good exercise from design perspective.
- alfla 9y agoWhat do you mean LQR is suited for non linear systems? This is all misinformation. LQR is a linear systems tool. The nice thing about linear systems is that almost every dynamical system is locally linear near some operating point.
- fest 9y agoI don't have a lot of first-hand experience using LQR but I definitely have seen it being applied to systems that traditionally are thought of as non-linear with the respect of variable you can control. Maybe it's explained by the state space containing more terms than PID controller, so the transfer function can be linear for each individual term?
- gugagore 9y agoLet's see, LQR is an optimal control technique for linear systems given a model. Given a linear plant model and a PID controller, you can compute all the classic control metrics like phase and gain margins, settling time, and even how the controller would perform according to the LQR metric. That's the theory. All linear. Theoretically it's as appropriate to apply LQR to a nonlinear plant as it is to apply PID. If you tweak the four LQR matrices (say, for a second-order system), and couple the gain matrix with the output of a linear observer (Luenberger), that combination system should be able to generate any PID controller. It's an over-parameterization, however (which is why I think PID controllers are ubiquitous. Not many parameters). Many settings will produce the same controller. If anyone knows a reference that discussed PID and LQR like this, I'd love to see it
- wenc 9y agoWell, LQR is a linear control law. It's in the name: Linear Quadratic Regulator. But as noted in my comment above, linear controllers can be used to control nonlinear systems under certain circumstances. p.s. btw, having more states in the model does not linearize a nonlinear system per se. Only nonlinear transformations like log-transforms are capable of linearizing a system.
- pymzor 9y agoThanks 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.
- fest 9y ago> how have you come to this conclusion / explanation? Through personal suffering while working on firmware for UAVs (PX4/Ardupilot), CNC controllers (grbl, Marlin), inverted pendulum balancing exercises, RC car control etc. Sadly, no resources. I guess the best advice I could give on this subject is: increase the visibility of internal state of the system. I have lost track of number of times I've seen people trying to tune PID controller just by outside observation (hmm, looks a bit better than last time) instead of real-time plots of measured process error. Add high-resolution logging, look at the plots of error and P/I/D terms, have a simulation where you can replay the sensor values and observe the system output.
- jackhack 9y agoYou've just summarized the difference between hacking and engineering -- data! Without data we're just somebody with an opinion. It should be the root of our decisions.
- darshanrai 9y agoWe 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. [1] https://github.com/ThePinkScareCrow/TheScareCrow/blob/master/controls.cpp#L284-L285 https://github.com/ThePinkScareCrow/TheScareCrow/blob/master... [2] https://www.controleng.com/single-article/fundamentals-of-cascade-control/bcedad6518aec409f583ba6bc9b72854.html https://www.controleng.com/single-article/fundamentals-of-ca...
- fest 9y agoThis is also the approach PX4/Ardupilot folks use. It's actually even more elaborate in their case: position loop -> velocity loop -> acceleration/angle loop -> angular rate loop -> motor outputs.
- gugagore 9y agoI think it's worth noting that cascaded PIDs are no more expressive than having a state-space controller. But probably it is easier to tune, as you say. Each integrator is one dimension of state.
- andars 9y agoCould 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.
- wenc 9y ago> I realized that PID loop only works well for linear systems 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)
- airbreather 9y agoI have found that fuzzy logic control has proven to be useful for non-linear and multi-order systems in the past. The first time I build a fuzzy logic controller for an industrial plant optimisation I was very surprised at performance vs complexity and how imprecise the characterisations can be and still get very good results.
- gugagore 9y agoI 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)
- BeetleB 9y agoOh 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. Oh well, you learn more in failure and all...
- wenc 9y ago1. Yes, but linear controllers can be applied to nonlinear systems given criteria I listed in a comment above. 2. Yes, but the transfer function is usually only to simulate the system in Simulink or some such software. In the real-world, you never have the transfer function. So how do people do it? You either identify the transfer function model using step/impulse tests (covered in undergrad courses and not that hard to do -- the least sophisticated way is to just measure the response to a step and graphically estimate parameters K and tau; it gives you a good starting point), or you can tune a controller by hand starting with a tuning heuristic and then refining. https://en.wikipedia.org/wiki/PID_controller#Loop_tuning https://en.wikipedia.org/wiki/PID_controller#Loop_tuning More advanced ways of identifying the transfer function is to collect data (either using pseudorandom binary sequence, i.e. PRBS step tests, or just simple plant step tests) and then doing "system identification", that is, fitting a transfer function model via statistical methods. Matlab's System Identification toolbox is designed for this purpose. I suspect your course professor did not specialize in control, and/or doesn't have real world experience. This is not unusual of course. Faculty are often assigned courses to teach, and some of these courses are outside their area of expertise.
- BeetleB 9y ago>You either identify the transfer function model using step/impulse tests This is what I tried (step, not impulse). Did not work well. The result was too dependent on the "starting position". The course professor probably knew less about controls than I did. He was a computer engineering professor.
- fest 9y agoCan'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.