part 2 · Foundations of Control Systems
Feedback and System Behavior
How closing the loop changes the speed of a simple first-order system and how sensitive its output is to plant errors and disturbances, checked with a short simulation.
Feedback is the central idea of control engineering: measure what a system is doing, compare it with what you want, and let the difference drive the input. This note uses the smallest model that shows the effect, a first-order system, to see exactly what changes when the loop is closed. The answer is less obvious than it first looks. When the plant is known exactly, feedback does not make this system more accurate. It makes it faster, and it makes the output far less sensitive to errors in the model and to disturbances.
The plant without feedback
Take a plant described by
where is the output, is the input, and and are constants. With no input the state decays as , so the time constant is .
In open loop the input is chosen without looking at . For a constant reference the natural choice is the input that makes at , which is . With this is simply , and the output settles at with time constant . On the nominal plant, then, open loop is already exact. Its weakness is that it works only if and are known exactly and nothing pushes on the plant: if the plant changes, or a disturbance acts on it, the input cannot react.
Closing the loop with proportional feedback
Now let the input depend on the error between a constant reference and the measured output:
Substituting into the plant gives the closed-loop equation
Two things follow directly. First, the decay rate changed from to , so the closed-loop time constant is . A larger gain makes the system respond faster. Second, for a constant reference the output settles where :
The steady-state error shrinks as grows but never reaches zero with proportional action alone, because this plant has no integrator to hold the input at the required value.
The table compares this with the open loop above for and , on the nominal plant.
| Controller | Pole | Time constant | Steady-state error (fraction of ) |
|---|---|---|---|
| Open loop, | -1 | 1 | 0 |
| Feedback, | -2 | 0.5 | 0.50 |
| Feedback, | -5 | 0.2 | 0.20 |
| Feedback, | -10 | 0.1 | 0.10 |
Read the last column carefully. On the nominal plant the open loop has no error at all, so proportional feedback does not improve accuracy here. What it changes is speed: the time constant falls from 1 to 0.5, 0.2 and 0.1. The reason to accept the offset appears when the plant is not exactly what the model says.
A short simulation
The explicit Euler method is enough to check the algebra. With and the table predicts .
a, b, k, r = 1.0, 1.0, 4.0, 1.0
dt, x = 0.001, 0.0
for _ in range(int(5 / dt)): # simulate 5 seconds
u = k * (r - x) # proportional feedback
x += dt * (-a * x + b * u) # explicit Euler step
print(round(x, 3)) # 0.8
Running this prints 0.8, matching .
When the plant or the load changes
Two perturbations show what the feedback buys. Both use , and the open-loop input , which was designed for .
A plant that decays 20% faster (). Open loop settles at . Closed loop settles at .
A constant disturbance added to the plant, so that . In open loop the output settles at , so the disturbance moves it by . In closed loop the equation becomes , and the disturbance moves the output by only . For and that is one fifth as much.
def settle(a, control, d=0.0, b=1.0, dt=0.001, T=10.0):
x = 0.0
for _ in range(int(T / dt)):
x += dt * (-a * x + b * control(x) + d) # explicit Euler step
return x
r = 1.0
open_loop = lambda x: r # u = r, exact when a = b = 1
closed_loop = lambda x: 4.0 * (r - x) # k = 4
cases = [("nominal", 1.0, 0.0), ("a = 1.2", 1.2, 0.0), ("d = 0.2", 1.0, 0.2)]
for label, a, d in cases:
print(label, round(settle(a, open_loop, d), 3), round(settle(a, closed_loop, d), 3))
The three lines it prints are collected below, with the shift from the nominal output in brackets.
| Case | Open loop, | Closed loop, |
|---|---|---|
| Nominal (, ) | 1.000 | 0.800 |
| Plant changed () | 0.833 (-0.167) | 0.769 (-0.031) |
| Disturbance () | 1.200 (+0.200) | 0.840 (+0.040) |
Notice what is being compared: how far the output moves, not how far it ends from the reference. The closed loop still carries its offset from the reference, and with a disturbance of the opposite sign its absolute error would be larger than the open loop’s. What feedback has done is make the output move about five times less when the plant or the load changes. Removing the offset itself takes more than proportional action, typically an integrator.
What this model hides
A higher gain is not automatically better. The first-order model has no delay, no actuator limit and no measurement noise, and real systems have all three.
Delays and unmodelled dynamics can turn a large gain into oscillation or instability, and saturation means the input cannot grow without bound. Treating as freely adjustable is an artifact of the model. Later notes in this series use state-space descriptions to reason about these limits more carefully.