How to properly set up my Transfer function

syms s
J1 = 0.0024;
C1 = 0.007;
K12 = 2.8;
a = 0;
z = 1;
b = 1;
p = 1;
Kc = .1;
Kh = ((16000)*(1/(2*pi))*(32));
Ka = (10/32768)*2*0.1*3;
Gn = (Kh*Ka)/J1
Gd = s^2 + (C1/J1)*s + K12/J1
Cn = Kc*(a*s+z)
Cd = (b*s+p);
% Cs = Cn/Cd;
num = [Cn * Gn]
dem1 = Cd*Gd
dem2 = Cn * Gn
dem = (dem1 + dem2)
% Tf = num/(dem1 + dem2)
sys = tf(num,dem)
step(10000*sys)

 採用された回答

Reshma Nerella
Reshma Nerella 2020 年 11 月 10 日

0 投票

Hi,
The numerator and denominator coefficients of transfer function should be a row vector or a cell array of row vectors. In the above of code
num = [Cn * Gn]
>> 6835652755764317/10995116277760
class(num)
>> 'sym'
You need to convert 'num' to a vector.
dem = (dem1 + dem2)
>> (s + 1)*(s^2 + (35*s)/12 + 3500/3) + 6835652755764317/10995116277760
class(dem)
>> 'sym'
Convert 'dem' to a vector of polynomial coefficients.
For example,
sys(s)=1/(2s2+3s+4);
Specify the numerator and denominator coefficients ordered in descending powers of s, and create the transfer function model.
numerator = 1;
denominator = [2,3,4];
sys = tf(numerator,denominator)
sys =
1
---------------
2 s^2 + 3 s + 4
%Continuous-time transfer function.
For more information on tf function, refer to the documentation page

7 件のコメント

Jorje German
Jorje German 2020 年 11 月 10 日
Is that what class(num) and class(dem) do? So I also need to add the "sys" after each of them?
Jorje German
Jorje German 2020 年 11 月 11 日
So I was able to refine my code with your help and ended up with something that looks and provides the correct transfer functions. However I know what when p = -.5 or -.1 my sys should explode and become unstable. However, right now when I plot it, it doesnt really grow exponentially. I cant figure out why.
syms s
J1 = 0.0024;
C1 = 0.007;
K12 = 2.8;
a = 0;
z = 1;
b = 1;
p = -.1;
Kc = .1;
Kh = ((16000)*(1/(2*pi))*(32));
Ka = (10/32768)*2*0.1*3;
%plant Transfer Function
numg = [(Kh*Ka)/J1];
demg = [1 (C1/J1) (K12/J1)];
%Controller Transfer Function.
numc = [Kc*a z*Kc];
demc = [b p];
%verying that they are correct.
sysg = tf(numg,demg)
sysc = tf(numc,demc)
%Combining them
Tfnum = conv(numc,numg);
% Tfd= conv(demc,demg) + Tfnum
Tfdem = [1 (2.916+p) (2.916*p+1166.67) (1166.67*p+627.7)];
TF = tf(Tfnum,Tfdem);
step(10000*TF)
Paul
Paul 2020 年 11 月 11 日
Why do you think that p = -0.1 and p = -0.5 should make the system unstable, when using all of your other parameters?
I don't think the equation for Tfdem is quite correct. Instead of trying to do it by hand, you can get the closed loop transfer function directly:
TF = feedback(sysc*sysg,1)
Jorje German
Jorje German 2020 年 11 月 11 日
really? I didn't know I was able to do this. Let me give it a shot.
Jorje German
Jorje German 2020 年 11 月 11 日
Thank you for the advise. I do have one more question. How do I go about finding the zeros, poles, and gains. Ive tried doing
rlocus(TF)
and just clicking on the information. Ive also tried
[z,p,k] = zpkdata(TF)
but I cannot access the data.
Paul
Paul 2020 年 11 月 12 日
zpkdata returns z and p in cell arrays; they need to be accessed as such:
>> TF=feedback(sysc*sysg,1)
TF =
621.7
------------------------------
s^3 + 2.817 s^2 + 1166 s + 505
>> [z,p,k]=zpkdata(TF);
>> z{:}
ans =
0×1 empty double column vector
>> p{:}
ans =
-1.1916 +34.1163i
-1.1916 -34.1163i
-0.4334 + 0.0000i
>> k
k =
621.6990
Jorje German
Jorje German 2020 年 11 月 12 日
Thank you very much. You were very hepful

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

ヘルプ センター および File ExchangeControl System Toolbox についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by