PID Controller: A Simple Control Loop Mechanism
vaclavkosar.com
vaclavkosar.com
https://www.wescottdesign.com/articles/pid/pidWithoutAPhd.pd...
https://en.wikipedia.org/wiki/PID_controller
Proportional–integral–derivative
P: proportional, this one is obvious. Water is WAY too cold, turn the knob WAY up
I: integral, how long does it take for feedback to take effect. You don't want to turn the knob up and up each second if it takes 10 seconds for the change to take effect.
D: derivative, a bit trickier.
What's really interesting is seeing how humans apply these concepts, which are so intuitive to things like balance, we don't even think about them. In face we'll apply them to where they don't apply or are faulty. You'll see it when people learn to back up a car for the first time or start winning at blackjack.
Proportional: set the control based on a multiple of the difference between the current and the target.
Integral: adjust that setting based on cumulative difference over time. This handles the case where the proportional setting isn't providing enough of a change.
Derivative: adjust the setting based on how fast the current value is approaching the target value. This provides damping when the error is decreasing rapidly to minimize overshoot and oscillation around the target.
What's interesting is that a lot of controllers leave out the derivative term. Car cruise controls are often only PI, for instance. This works best when it's ok to approach the target slowly anyway, so oscillation is minimal.
This is because a PD controller controlling system X is equivalent to a PI controller for the system (dX/dt). For example, a PI controller adjusting force to control velocity is equivalent to a PD controller adjusting force to control position.
If your system has a strong "momentum-like" term (larger than its damping), you need a derivative term to stabilize it. So a force-position controller needs D, but a room heater does not, because when you stop heating the room, the temperature doesn't keep coasting upwards (usually - there can be some phase lag if your sensor is far from your heater, or if your room is on fire).
A force-velocity controller (cruise control) also does not have "momentum", as you can see from the fact that if you stop applying force, velocity stops increasing immediately.
It's a little bit disappointing when I later realized that most of heater/air conditioner basically just use on/off control with a deadband. I guess the limiting factor here isn't the controller but the actuator part, but still a let-down to see them being so primitive.
Edit: It's called a bang-bang controller [0]
[0]: https://en.wikipedia.org/wiki/Bang%E2%80%93bang_control
It's a natural choice when your furnace can't throttle, or can but operates most efficiently at one output level anyway.
Since the system always pushes as hard as it can, it automatically reaches the setpoint in the minimum possible time. It's almost like a PID controller with infinite gain. But the tradeoff is jitter -- all the error gets pushed up to the highest frequency bands. As long as you don't care about that in your system, it's a great choice and effortless to tune.
It can also be a bad choice if there's any cost to changing or toggling the output, like if your furnace wears out from switching on and off a lot.
Properly set, this dampens the swings of temperature in the rooms as the heat gain is more closely matched to the heat loss, increasing comfort and economy of the system.
- With a home thermostat you probably want it to reach the desired temperature as quickly as possible. PID will never reach the setpoint as fast as bang-bang control since bang-bang control will always use the maximum possible power.
- PID might help you avoid overshooting the desired temperature but that's not really an important issue for a home furnace. In fact it might be better if it overshoots the desired temperature a bit on very cold days.
- The air in the home acts like a big thermal battery that helps negate the need for a sophisticated controller.
PID works very good for a wide variety of situations but it's important to remember it is not always the best tool for every job. In that way it is kind of like "quicksort".
If the only thing you can do is turn something on and off, a bang-bang controller is the only thing that works.
In a real system this is exactly how MOSFETS are used to control a voltage; you would almost never use an analog amplifier for high power because of the losses, so voltage control is binary on/off, but that doesn't restrict you to just bang-bang control despite the GP's statement.
In fact, an electric heater can and often will be controlled via a PWM method with a continuous controller rather than via hysteresis.
For example, suppose you have a vehicle that is suppose to automatically follow a straight line painted on the road. You have a sensor that can tell you how far you are from the line, and you can set the steering angle.
The car is supposed to go straight when the steering angle is 0, but if there is a misalignment so that to go straight you actually have to set the steering angle to some constant non-zero value, if you just do PD you can end up with the car following a fixed distance to the side of the line instead of centered on the line like you want.
Make it a PID controller instead of just PD, and the I term will fix this.
P some value multiplied by how far off you are from the setpoint.
Integral term is just that from calculus... adding stuff up over time. some value (gain) multiplied by the error every N (min/milliseconds/seconds) and sent to the output. usually clamped at some value to avoid runaway errors. aka turn up the heat a little more periodically to eventually reach the setpoint.
another math term(derivative being the rate of change of something with respect to something else basically)... the derivative term is supposed to be a way to dampen the output so you don't overshoot it and oscillate around the output value. if you can critically dampen the output you hit the setpoint without overshooting it and quickly. the trick is knowing which to use when because all systems are a little bit different with differing responses to the outputs and some systems are cascading and rely on other pid loops which is another bag of worms.
P is a spring (the spring equation is k * delta x, same as the P term, but in terms of the error). Adding a P term will make the controller “want” to eliminate any error.
D term is a mass damper (again, equation is the same). It will fight oscillations, but it is extremely sensitive to noise in your input (calculating discrete derivatives in noisy signals is hard).
The I term makes your output converge to the desired value. Your system will have an inherent friction or stiction which can’t be overcome with just a P term. The I helps with that but introduces other issues like windup.
This allows the asset to remain relatively stable[2] in response to actual market forces. At the time of posting there are over $35m worth of Rai in circulation[3].
[1]: https://reflexer.finance/faq
What I always have problems with, is using pid controllers for angular movements. Like turning an object to a desired angle or approaching a desired angular velocity. Are PID controllers suited for this task? For example: You want to turn right and specify a large angular velocity. But now, after a few turns the integral part adds up to a huge value. Then you want to turn back, but now the response is very slow, because of the large integral part. Never got around this problem. How would you approach this?
For games you might just get away with a PD controller and not need to worry about the I term at all.
https://twitter.com/The___Missile/status/1378190268520927234
in college to tune PID controllers in C. Fun times.