关于刘金琨的《先进 PID 控制 MATLAB 仿真》疑惑解答:
其中仿真实例 1:(第二版 16 页)
经过 Z 变换后的离散化对象为:
仿真实例 2:(第二版 23 页)
采样时间为 1ms,采用 Z 变换进行离散化,经过 Z 变换后的离散化对象为:
.
设被控对象为:G(s)=
Yout(k)=−den(2)yout(k−1)−den(3)yout(k−2)−den(4)yout(k
−3)+num(2)u(k−1)+num(3)u(k−2)+num(4)u(k−3)
设被控对象为:G(s)=
PID 控制参数为:K =8 ,K =0.10 ,K =10 。
Yout(k)=−den(2)yout(k−1)−den(3)yout(k−2)+num(2)u(k−1)
+num(3)u(k−2)
设被控对象为:G(s)=
仿真实例 3:(第二版 25 页)(有延迟环节)
采样时间为 20s,延迟时间为 4 个采样时间,即 80s,被控对象离散化为:
Yout(k)=−den(2)yout(k−1)+num(2)u(k−5)
其中很多人不明白被控对象是怎么离散化变换过来的,由于仿真实例 1 与仿真实
例 2 具有相似性,所以下面我为大家解答一下仿真实例 1 和仿真实例 3
仿真实例 1 解答如下:
编程如下:%PID Controller
clear all;
close all;
ts=0.001;
sys=tf(5.235e005,[1,87.35,1.047e004,0])
dsys=c2d(sys,ts,'z')
[num,den]=tfdata(dsys,'v')
这小段程序就是Z变换,被控对象离散化,并且得出Z变换后的各个项的系数。
运算的结构如下:
sys =
523500
-------------------------
s^3 + 87.35 s^2 + 10470 s
Continuous-time transfer function.
dsys =
8.533e-05 z^2 + 0.0003338 z + 8.169e-05
---------------------------------------
z^3 - 2.906 z^2 + 2.823 z - 0.9164
Sample time: 0.001 seconds
Discrete-time transfer function.
num =
1.0e-03 *
0 0.0853 0.3338 0.0817
den =
1.0000 -2.9063 2.8227 -0.9164
由结果我们很容易看出:
分子分母分别÷z :
令G(z)= ( ) ( )
我们将系数用num和den代替后,可以得到:
G(z)=0.00008533z −0.0003338z+0.00008169
z −2.9063z +2.823z−0.9164
G(z)= num(2)z −num(3)z+num(4)
den(1)z +den(2)z +den(3)z+den(4)
G(z)=num(2)z −num(3)z +num(4)z
den(1)+den(2)z +den(3)z +den(4)z
交叉相乘:
则:G(z)= ( ) ( ) ( )
( ) ( ) ( ) ( ) = ( ) ( )
[den(1)+den(2)z +den(3)z +den(4)z ]Y(z)= num(2)z −
num(3)z +num(4)z U(z)
故:Y(z)=−den(2)z Y(z)−den(3)z Y(z)−den(4)z Y(z)+
num(2)z U(z)−num(3)z U(z)+num(4)z U(z)
y(k)=−den(2)y(k−1)−den(3)y(k−2)−den(4)y(k−3)
其中den(1)=1(由MATLAB程序的结果可知)
故被控对象离散化为:
+num(2)u(k−1)−num(3)u(k−2)+num(4)u(k−3)
仿真实例 3 解答如下:
编程如下:
%Integration Separation PID Controller
clear all;
close all;
ts=20;
%Delay plant
sys=tf([1],[60,1],'inputdelay',80) %ÉèÖÃÑÓʱʱ¼ä
dsys=c2d(sys,ts,'zoh')
[num,den]=tfdata(dsys,'v')
得到的结果:
sys =
1
exp(-80*s) * --------
60 s + 1
Continuous-time transfer function.
dsys =
0.2835
z^(-4) * ----------
z - 0.7165
Sample time: 20 seconds
Discrete-time transfer function.
num =
0 0.2835
den =
1.0000 -0.7165
由 MATLAB 结果可以很明显得到:
我们将系数用 num 和 den 代替后,可以得到:
( )=z ∗ 0.2835
z−0.7165
num(2)
( )=z ∗
den(1)z+den(2)
num(2)z
分子分母分别÷z 得: ( )=z ∗
den(1)+den(2)z
令G(z)= ( ) ( ),其中 den(1)=1,
得: ( )=z ∗ ( )
( ) = ( ) ( )
交叉相乘得:Y(z)[1+den(2)z ]=num(2)z U(z)
Y(z)=-den(2)Y(z)z +num(2)z U(z)
故被控对象离散化为:
Y(k)=-den(2)y(k-1)+num(2)u(k-5)
其实还有其他的解答,我整理后补上。
2013.12.1
by:fashaoyouLV