从传递函数到差分方程的转换

1、传递函数的形式 
             假设传递函数为:G(s)=exp^(-0.004s)*400/(s^2+50s); 
             其中^后表示指数,如:2^3=8;4^2=16; 
    在matlab里面建立这个传递函数的命令就是:sys=tf(400,[1,50,0],'inputdelay',0.004); 

2、脉冲传递函数 
    把传递函数离散化就得到脉冲传递函数,这个我就不多说了。。。。 
    G(z) =z^(-4) *( 0.0001967 z + 0.0001935)/( z^2 - 1.951 z + 0.9512) 
    = z^(-4) *[0.0001967z ^(-1)+ 0.0001935z^(-2)]/[ 1 - 1.951 z^(-1) + 0.9512z^(-2)] =Y(z)/U(z)……(2)式 
    在matlab里面离散化命令是:dsys=c2d(sys,0.001,'z');其中0.001为采样时间; 
  (2)式可写成: 
   z^(-4) *[0.0001967 z ^(-1)+ 0.0001935z^(-2)] U(z) = [ 1 - 1.951 z^(-1) + 0.9512z^(-2)] Y(z) (3)式 

3、差分方程形式 
由(3)式可得 
0.0001967 z ^(-5)+ 0.0001935z^(-6)]U(z) = [ 1 - 1.951 z^(-1) + 0.9512z^(-2)] Y(z) (4)式 
把(4)式得z^(-n)中的(-n)写成(k-n),如z^(-5)U(z)写成u(k-5),可得: 
0.0001967 u(k-5)+ 0.0001935u(k-6)= y(k) - 1.951 y(k-1) + 0.9512y(k-2) (5)式 
由(5)式得 
y(k) = 1.951 y(k-1) - 0.9512y(k-2)+0.0001967 u(k-5)+ 0.0001935u(k-6) 
即差分方程形式 

[num,den]=tfdata(dsys,'v')这个命令其实就是取式(2)的分子分母

ts=0.001;采样时间=0.001s 
sys=tf(400,[1,50,0]);建立被控对象传递函数 
dsys=c2d(sys,ts,'z');把传递函数离散化(问题1) 
[num,den]=tfdata(dsys,'v');离散化后提取分子、分母 

rin=1.0;输入为阶跃信号 
u_1=0.0; u_2=0.0; 什么东西的初始状态(问题2) 
y_1=0.0; y_2=0.0; 是不是输出的初始状态 
error_1=0;初始误差 
x=[0 0 0]';PID的3个参数Kp Ki Kd组成的数组 
p=100;仿真时间100ms 

for k=1:1:p 
r(k)=rin; 
u(k)=kpidi(1)*x(1)+kpidi(2)*x(2)+kpidi(3)*x(3) 

if u(k)>=10 
u(k)=10; 
end 

if u(k)<=-10 
u(k)=-10; 
end 

yout(k)=-den(2)*y_1-den(3)*y_2+num(2)*u_1+num(3)*u_2;(问题3) 
error(k)=r(k)-yout(k); 

%返回pid参数 
u_2=u_1;u_1=u(k); 
y_2=y_1;y_1=yout(k); 

x(1)=error(k); 
x(2)=(error(k)-error_1)/ts; 
x(3)=x(3)+error(k)*ts; 

error_2=error_1; 
error_1=error(k); 


你可能感兴趣的:(从传递函数到差分方程的转换)