连续传递函数离散化的方法与原理Word格式.docx
《连续传递函数离散化的方法与原理Word格式.docx》由会员分享,可在线阅读,更多相关《连续传递函数离散化的方法与原理Word格式.docx(49页珍藏版)》请在冰豆网上搜索。
步骤2离散化模拟控制器
离散化模拟控制器之前,先要确定离散化算法和采样时间。
离散化算法有好几种,第二章中有详细的论述,现假定采用双线性变换法。
确定采样时间,需要考虑被控对象的特性,计算机的性能,以及干扰信号的影响等,初步可按采样时间T<
,Tp为被控对象时间常数,或T=~τ,为被控对象的纯滞后,初步确定后再综合平衡其它因素,当然这需要一定的经验,现在假定取秒。
假设模拟控制器为,在MATLAB中,用c2d函数进行离散化,过程为:
ds=zpk(-2,-15,8)%建立模拟控制器的s传递函数
dz=c2d(ds,,'
tustin'
)%将模拟控制器按tustin方法转换为z传递函数的数字控制器
转换结果为:
步骤3检验数字控制器的性能
数字控制器的性能项目比较多,我们仅以直流增益,频率特性,零极点分布说明。
直流增益dcgain(dz)返回直流增益
频率特性bode(ds,'
r'
dz,'
g'
)伯德图,见下页左图
零极点分布pzmap(dz)零极点分布图,见下页右图
步骤4离散化控制对象
为了进行模拟仿真,需要对控制对象进行离散化,由于步骤1所说的原因,应把被控对象视为零阶保持器与原对象的串连,即应对进行离散化,这时可在c2d函数中使用零阶保持器(zoh)方法,如果认为不需要添加零阶保持器,即直接对G(s)离散化,则应在c2d函数中使用冲击响应不变法(imp)。
借用零阶保持器(zoh)方法,将对象带一阶保持器离散化的过程如下:
......%模拟控制器D(s)转换为D(z)的过程见前
gs=zpk([],[0,-2],20)%建立对象的s传递函数
g1z=c2d(gs,,'
zoh'
)%借用c2d函数进行带零阶保持器的对象的离散化
步骤5模拟仿真
求离散系统的闭环传递函数和连续系统的闭环传递函数。
离散系统的闭环传递函数为:
连续系统的闭环传递函数为:
用MATLAB算TRCZ与TRCS:
trcz=dz*g1z/(1+dz*g1z)
trcs=ds*gs/(1+ds*gs)
结果为:
用MATLAB函数STEP画阶跃响应图形:
holdon%图形保持
step(trcs,'
2)%画连续系统的阶跃响应图,红色,终止时间为2秒
step(trcz,'
b'
2)%画离散系统的阶跃响应图,兰色,终止时间为2秒
响应图形为:
步骤6求数字控制器的时域表达式
上面已经求出,连续传递函数的tustin离散式为
,或。
对上式取z反变换,得时域表达式,根据此式就可以写出计算的程序代码来了。
除上述步骤之外,在编写程序代码时,还需要考虑几个问题:
①ADC位数
ADC位数是一个硬件问题,在系统设计时,就应该结合控制算法,仔细分析ADC位数对控制精度的影响。
②数据类型
在控制算法中有3种数据类型可以采用:
无符号整数,定点数,浮点数。
我们知道,无符号整数运算既是最简单和速度最快的运算,又是定点数运算和浮点数运算的基础。
在数据动态范围比较小的情况下,应尽可能用无符号整数运算代替定点数运算和浮点数运算。
浮点数运算是一整套运算,包括加,减,乘,除,对阶,规格化,溢出处理等一系列子程序,使用浮点数的程序,将占用比较多的代码空间和比较长的运行时间。
不论使用汇编语言还是c语言,对于是否使用浮点数运算,都应进行比较仔细的酌斟。
③数值计算误差
数值计算引入的误差有3个方面,一是定点数字长不够或者浮点数有效数字过少,一是两个相近的数相减,一是加减乘除次数过多。
在程序设计中,应优化算法以避免计算误差的引入。
第二节在MATLAB中离散化
1.建立s降幂传递函数
①建立多项式型s降幂传递函数
方法1.sys=tf(num,den)
方法2.s=tf('
s'
),再令sys=f(s)
例:
已知,用tf函数建立多项式型s降幂传递函数,,若G0以零极点形式给出,即已知,仍可用tf函数建立多项式型s降幂传递函数,但需用多项式乘法函数conv配合,G0=tf(conv([3],[1]),conv(conv([10],[11]),[1]))
②建立零极点型s传递函数
方法1.sys=zpk(z,p,k)
方法2.s=zpk('
),再令sys=f(s)。
2.传递函数的转换
①将任意形式的s传递函数转换为s降幂传递函数sys=tf(sys)
②将任意形式的s传递函数转换为s零极点传递函数sys=zpk(sys)
3.建立z传递函数
①将连续传递函数转换为离散传递函数
sysd=c2d(sysc,t,method)
②建立多项式形式的z传递函数
方法1.sys=tf(num,den,?
t)
方法2.z=tf('
z'
?
t),再令sys=f(z)
③建立零极点z传递函数
方法1.sys=zpk(z,p,k,?
方法2.z=zpk('
t),再令sys=f(z)
4.建立z-1格式的传递函数
直接根据分子和分母建立z-1格式的传递函数sys_z=filt(num,den,?
当已有多项式形式的z降幂传递函数时,按以下步骤:
①取z降幂传递函数a的分子多项式系数[num,den]=tfdata(sys_s,'
v'
)
②建立z-1格式的传递函数sys_z=filt(num,den,?
5.将多项式形式的高阶z-1降幂传递函数转换为并联传递函数,按以下步骤:
①“手工”将z-1降幂传递函数a改写成多项式形式的z降幂传递函数b。
②取z降幂传递函数b的分子多项式系数num和分母多项式系数den。
③利用residue函数取z降幂传递函数b的分项分式,[anadak]=residue(num,den)。
分项结果可能出现共轭复数,在这种情况下应将含有共轭复数的分式合并成二次有理质分式。
④根据分项结果手工写出z降幂多项式形式的并联表达式。
⑤“手工”将z降幂多项式形式的并联表达式改写成z-1降幂多项式形式的并联表达式。
⑥“手工”对z-1降幂多项式形式的并联表达式中的每一个分式项降阶,即将每一个分式项变形,使得分式项的分子的阶次比分母的阶次低1阶,变形完毕再将全部常数项合并。
举例
设有z-1降幂传递函数
改写成z降幂传递函数,
取分项矢量[anadak]=residue(nz,dz)
得an=[]
ad=[]
ak=
手工写分项分式,令
,令
又令
故
验证
实际上,大多数数字控制器的传递函数都是一阶或者二阶的,所以需要分解的并不是很多。
6.将高阶z-1降幂传递函数生成串联传递函数
使用zpk函数sys_zpk=zpk(sys_pl)
零极点的概念是相对于z而不是相对于z-1说的,但对于以z-1为变量的降幂传递函数sys_pl来说,仍然可以用zpk(sys_pl)生成以z-1为变量的因式积形式传递函数,权且也称为零极点形式。
zpk函数对于z降幂传递函和z-1降幂传都能得到合理的结果,原因是zpk函数的作用就是把分子多项式和分母多项式分别进行因式分解。
第三节延时环节e-Ts的处理
在建立s传递函数的LTI模型时,对于延时环节e-Ts,可按如下方法处理:
1.在tf函数中使用属性’inputdely’或者’iodely’,例如:
>
>
tf([1-1],[135],'
inputdelay'
将返回以下形式的传递函数
s–1
exp*s)*--------------
s^2+3s+5
使用这个方法不能建立形如的传递函数,因为带延时的传递函数不能与不带延时的传递函数相加,但可以使用c2d进行离散化,但要求延时时间t必须是采样时间?
t的整数倍,若不是整数倍,则在转换时不理会延时环节,例如:
用tf函数建立2个传递函数,主体部分相同,但一个无输入延时,一个有输入延时,
a=tf([1-1],[145])s-1
----------------
s^2+4s+5
a1=tf([1-1],[145],'
iodelay'
s-1
exp*s)*---------------
s^2+4s+5
若采样时间为,因为延时时间是采样时间的整数倍,转换结果的主体部分完全一样:
c2d(a,,'
imp'
)z^2-z+
------------------------------samplingtime:
z^2-z+
c2d(a1,,'
z^(-7)*-----------------------------samplingtime:
若采样时间为,因为延时时间不是采样时间的整数倍,结果的主体部分不一样:
-----------------------------samplingtime:
)z-
z^(-3)*--------------------samplingtime:
z^2-z+
2.将e-Ts有理化
设,因e-Ts的一阶有理表达式是,故。
为了对ts进行离散化,首先使用tf函数建立lti模型的ts。
若,则。
3.在离散化时使用恒等式
设,因,采样时间为Δt,若T=mΔt,则,因为离散化时总是认为,故取。
根据以上假设,用MATLAB的c2d函数对g(