Expecting but not getting steady state error proportional motor controller

47 Views Asked by At

I am designing a proportional controller for a DC motor. I am expecting to get an error of $$\dfrac{K_p}{1+K_p}$$ but the step response of my closed loop system has practically no steady state error (< 1.0e-6).

The $A$ and $B$ matrices of my closed loop system are

$$ A = \begin{bmatrix} 0 & 1 & 0 \\\ 0 & 0 & 1 \\\ -b_0 k_1 & a_1 -b_0 k_2 & a_2 - b_0 k_3 \end{bmatrix}, \qquad B = \begin{bmatrix} 0 & 0 & 0 \\\ 0 & 0 & 0 \\\ b_0 k_1 & b_0 k_2 & b_0 k_3 \end{bmatrix} $$

For simulation using Python Control Systems Library's control.forced_response(), I use

$$ C = \begin{bmatrix} 1 & 0 & 0 \\\ 0 & 1 & 0 \\\ 0 & 0 & 1 \end{bmatrix}, \qquad D = \begin{bmatrix} 0 & 0 & 0 \\\ 0 & 0 & 0 \\\ 0 & 0 & 0\end{bmatrix} $$

Simulating the system with $ k_p = \begin{bmatrix} 1 & 0 & 0 \end{bmatrix}$.

  1. Re(Eigenvalues) all < 0 so system is stable.
  2. Responses shown in figure below.

plots

I expect the position to have a steady state value of 0.5 radians since

$$\frac{k_1}{1 + k_1} = \frac{1}{1 + 1} = \frac12$$

Why am I not getting a steady state error in my position response, or if I am, why is it so small?

The process maps voltage to position.

$$ \dfrac{\Theta(s)}{E(s)} = \dfrac{b_0}{a_2s^3 + a_1s^2 + a_0s}$$

1

There are 1 best solutions below

0
On BEST ANSWER

If your plant is,

$$P(s) = \frac{b_0}{a_2 s^3 + a_1 s^2 + a_0 s}$$

and your controller is,

$$C(s) = K_p$$

then the TF from the reference $R(s)$ to the error $E(s)$ is,

$$\frac{E(s)}{R(s)} = \frac{1}{1 + P(s) C(s)} = \frac{a_2 s^3 + a_1 s^2 + a_0 s}{a_2 s^3 + a_1 s^2 + a_0 s + K_p}$$

Assuming closed-loop stability, we can see the DC gain of this TF is $0$, implying no error in the steady-state response to a step reference. This principle generalizes in a way that is known as the Internal Model Principle: usually it is used to figure out what poles to put in the controller, but it applies just as well to analysis when the plant has the right poles.