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

来源:互联网 发布:淘宝抢单软件 编辑:程序博客网 时间:2024/05/23 15:48
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); 


0 0
原创粉丝点击