0
votes

I am working with Matlab to perform some control analysis on a system I'm working with. I have developed a model of the system in state space representation and have designed a feedback compensator to produce the closed loop response I want.

The method of selecting feedback gain K and estimator gain L using the Matlab place() function results in a system root locus which shows one pole and zero in the RHP in the same location. Ideally, these should be exactly the same leading to pole-zero cancellation however the step response of the system is still unstable.

Looking at the poles and zeros of the combined compensator-plant system, the poles and zeros of the closed loop response are:

Poles

 1.0e+02 *    
      -2.5547 + 0.3423i
      -2.5547 - 0.3423i
      -0.0087 + 0.0000i
      -0.0003 + 0.0000i
      -0.0027 + 0.0000i
      -2.8542 + 0.0000i
      -2.2717 + 0.0000i
       0.2108 + 0.0000i
      -0.3119 + 0.3874i
      -0.3119 - 0.3874i
      -0.0200 + 0.0000i
      -0.0300 + 0.0000i
      -0.0400 + 0.0000i
      -0.0500 + 0.0000i
      -0.1200 + 0.0000i
      -0.2000 + 0.0000i
      -2.5500 + 0.0500i
      -2.5500 - 0.0500i
      -2.5500 + 0.0100i
      -2.5500 - 0.0100i

Zeros

 1.0e+02 *
  -3.6118 + 0.0000i
  -2.1330 + 0.0000i
  -2.8542 + 0.0000i
  -2.5547 + 0.3423i
  -2.5547 - 0.3423i
  -2.2717 + 0.0000i
  -0.3119 + 0.3874i
  -0.3119 - 0.3874i
   0.2108 + 0.0000i
  -0.0022 + 0.0067i
  -0.0022 - 0.0067i
  -0.0100 + 0.0000i
  -0.0003 + 0.0000i
  -0.0027 + 0.0000i
  -0.0087 + 0.0000i

Looking specifically at the RHP values, there is a pole at 1e+02*(0.2108 + 0.0000i) as well as a zero. Since this is the only unstable pole, the step response should be stable but it isn't.

I'm guessing it has something to do with significant figures or improper system scaling but I'm not sure. Any thoughts as to why these pole-zeros aren't cancelling?

1

1 Answers

1
votes

It is hard to say anything without seeing the plant but step response is very much dependent on the conditioning of the plant. Pole zero cancellation is not performed behind the scenes and numerically hoped to cancel each other during the system response.

In other words, matlab doesn't check whether there is a cancellation and very small numerical mismatches grow over time with the differential equation solver. Wherever these poles and zeros belong to, pass it through minreal() and use that plant.