Electronic – Pole placement to create a full-state feedback controller

controlcontrol systemMATLABsignal

I am learning about control theory by going through Oagata's Modern Control Engineering.

As part of a practice exercise I am trying to design a full-state feedback controller that satisfies my design requirements using the pole placement technique.

MathWorks provides high quality documentation about pole placement.


Design Requirements:

  1. Less than 5% overshoot
  2. Less than 2s settling time
  3. Steady State Error Minimised

My 4th order system:

                 - 0.00198 s + 2
  ----------------------------------------------
   s^4 + 0.1201 s^3 + 12.22 s^2 + 0.4201 s + 2

Step Response:

enter image description here


What I have done so far:

I first started by understanding the pole placement technique. Since closed-loop pole locations have a direct impact on overshoot, settling time and steady state error, these can be adjusted accordingly to get the desired response. Pole placement may be done using state-space techniques, and thus require a state space model of the system. Therefore:

NUM4 = [-0.00198 2];
DEN4 = [1 0.1201 12.22 0.4201 2];
sys = tf(NUM4,DEN4)
[A, B, C, D] = tf2ss(NUM4,DEN4)


A = -0.1201  -12.2200   -0.4201   -2.0000
     1.0000        0         0         0
         0    1.0000         0         0
         0         0    1.0000         0

B = [1; 0; 0; 0]

C = [0 0 -0.0020 2.0000]

D = 0

Next, the closed-loop poles are the eigenvalues of A-BK, where K can be computed using the place function.

K = place(A,B,p); where p contains the desired locations of the closed loop poles. I proceeded with:

p = [-0.424+1i*1.263, -0.424-1i*1.263, -0.626+1i*0.4141, 
-0.626-1i*0.4141];
K = place(A,B,p)

And the result I got was:

K =

1.9799   -8.8200    2.2799   -1.0001

This means that I have to poles on the right hand side of the plane, resulting in an unstable system. Since I need to design a full-state feedback controller that satisfies the design requirements, this is clearly wrong.

Best Answer

As directed by @TimWescott's helpful comments, I am taking K to be the eigenvalues of the system with feedback.

The closed loop dynamics are dictated by \$A_cl = A -BK\$ and not \$K\$.

Therefore one should proceed further:

Acl = A - B*K;
e = eig(Acl)

Result:

e =

  -0.4240 + 1.2630i
  -0.4240 - 1.2630i
  -0.6260 + 0.4141i
  -0.6260 - 0.4141i

The closed loop system in ss form for this case(D=0) is:

\$αΊ‹ = (A-BK)x + Bu\$

Plotting response to a step input:

[n,d] = ss2tf(Acl,B,C,D)

n =

         0         0         0   -0.0020    2.0000


d =

    1.0000    2.1000    3.4000    2.7000    0.9999

enter image description here

Even though I set the final value on Simulink to 1 the output settles at 2. Will need to investigate why this happens.