0
$\begingroup$

I am trying to model a discrete-time control system in Simulink. The control system contains an inner loop that utilizes the inverse of the plant model. The plant in question takes the form of:

$P(s) = \frac{3.332\times s + 4.679}{s^2+30.97\times s+45.5}$

s = tf('s');
P = (3.332*s + 4.679)/(s^2+30.97*s+45.5);

I inverted the plant, $P(s)^{-1}$:

P_inv = inv(P);

Now I have an inverted model however you cannot explicitly implement an improper function into Simulink. I followed this discussion that has been referred to multiple times scattered throughout forums.

[r,p,k]=residue(P_inv.num{1},P_inv.den{1});
sys1 = tf(r(1),[1,-p(1)]);
sysk1 = k(1)*s;
sysk2 = k(2);

Once the improper function is broken down, I discretized each component separately.

Ts = 0.005;
d_sys1 = c2d(sys1,Ts)
d_sysk1 = c2d(sysk1,Ts,'matched') % <--- problem

A problem now exists in d_sysk1. It results in yet another improper function taking the form of:

d_sysk1 =
    59.99 z - 59.99
Sample time: 0.005 seconds
Discrete-time transfer function.

In my simulation I want to implement a discretized improper transfer function, P(s). Is there something I did incorrectly?

$\endgroup$
0
$\begingroup$

I think you missed the point in the link you posted. Implement the improper function as a differentiator. You cannot get rid of the proper part but only replace it with differentiators. Hope this helps!

| improve this answer | |
$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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