4
$\begingroup$

I'm given an assignment in which I have to design a full state feedback controller by pole placement. The state space system is fully controllable and I've been using Matlab/Simulink to determine the required feedback gain K using the place() command for several sets of poles, however once I use poles that are "too negative", for example p=[-100,-200,-300,-400,-500], my controlled system starts showing bounded oscillatory behaviour.

Is it possible that too negative poles can cause marginal stability? And if so, why? I've read that this is only possible when the real part of one or more poles equals 0, which certainly isn't the case here.

$\endgroup$
2
  • 1
    $\begingroup$ How are you simulating the system? You can get instability due to time-step issues -- if your poles have a very high frequency (not just the imaginary part) and your time-step is too big. If you are using a crude forward integration in a script then try making your constant time-step larger. If you are using Simulink with a proper solver, then try making the tolerances smaller. $\endgroup$ Oct 25, 2015 at 23:28
  • $\begingroup$ Also, can you post your state space model? $\endgroup$ Oct 26, 2015 at 0:10

1 Answer 1

6
$\begingroup$

You are most likely running into problems with the maximum time step in your simulation. This phenomenon is known as stiffness, where your equations of motion are highly sensitive to the size of the time step in a discrete solution.

Consider a simple mass-spring system with mass $m$, spring stiffness $k$, displacement $x$ and velocity $\dot{x}$ for states $q$, and an input force $F$ for the input $u$.

$q = \begin{bmatrix} \dot{x} \\ x \end{bmatrix}$

$A = \begin{bmatrix} 0 & -\frac{k}{m} \\ 1 & 0 \end{bmatrix}$

$B = \begin{bmatrix} \frac{1}{m} \\ 0 \end{bmatrix}$

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

$D = 0$

We apply a full-state feedback control law (which ends up being PD control), with:

$u = -Kq$

And use MATLAB's place function to determine the gain matrix $K$ for desired poles $p$. Package this into a setup script like this:

% system coefficients
k = 1000;               % spring stiffness (N/m)
m = 1;                  % mass (kg)

% state-space model
A = [0 (-k/m); 1 0];
B = [(1/m); 0];
C = [0 1];
D = 0;

% desired poles
p = [-1000, -2000];

% gain matrix
K = place(A,B,p);

% initial conditions
x_dot_0 = 0.5;
x_0 = 0.2;

Then create a Simulink model:

enter image description here

Now if we use poles $p = \begin{bmatrix} -10 & -20 \end{bmatrix}$, we get an acceptable albeit slower response. But when we use poles $p = \begin{bmatrix} -1000 & -2000 \end{bmatrix}$ we find that there is only marginal stability with some steady-state error (although the bandwidth of the steady-state error is small).

This is happening because the closed-loop system frequency is so high that there is numerical instability in the simulation caused by the solver's choice of time-step. To get around this, we can switch the maximum time step from auto to something appropriate like 1-e5. You can do this in the "Solver options" found in the "Simulation -> Model Configuration Parameters" menu (it might be called something a bit different in your version of MATLAB).

Here is the comparison of the low gain result, high gain result with default auto maximum time-step, and high gain result with maximum time-step of 1e-5.

enter image description here

enter image description here

$\endgroup$
4
  • $\begingroup$ Thank you very much! This is indeed the problem. I've adjusted the maximum solver timestep and the oscillations are gone. $\endgroup$
    – Steven
    Oct 26, 2015 at 10:02
  • $\begingroup$ Good to hear, always glad to help! $\endgroup$ Oct 26, 2015 at 10:18
  • 1
    $\begingroup$ In case you're interested, this phenomenon is called "stiffness" in the system of ODE's: en.m.wikipedia.org/wiki/Stiff_equation $\endgroup$
    – Paul
    Oct 27, 2015 at 2:10
  • $\begingroup$ Ah yes, thanks, I'm going to add that to the answer. $\endgroup$ Oct 27, 2015 at 2:37

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.