目录
第一章 模拟化设计基础
数字控制系统的设计有两条道路,一是模拟化设计,一是直接数字设计。如果已经有成熟的模拟控制器,可以节省很多时间和部分试验费用,只要将模拟控制器离散化即可投入应用。如果模拟控制器还不存在,可以利用已有的模拟系统的设计经验,先设计出模拟控制器,再进行离散化。
将模拟控制器离散化,如果用手工进行,计算量比较大。借助数学软件MATLAB控制工具箱,可以轻松地完成所需要的全部计算步骤。如果需要的话,还可以使用MATLAB的SIMULINK工具箱,进行模拟仿真。
第一节 步骤
步骤1 模拟控制器的处理
在数字控制系统中,总是有传输特性为零阶保持器的数模转换器(DAC),因此,如果模拟控制器尚未设计,则应以下
1?e?Ts图的方式设计模拟控制器,即在对象前面加上一个零阶保持器,形成一个新对象G(s),然后针对这个新对象求模拟
s控制器D(s)。事实上,模拟控制器一般是已经设计好的,无法或不方便更改了,离散化后的系统只好作为近似设计了。 然而,按照上述思路,可否将已有的控制器除以一个零阶保持器再离散化呢?还没有这方面的实际经验。 以下假设选定的G(s),D(s)如下图,而且不对G(s)作添加保持器的预处理。 步骤2 离散化模拟控制器
离散化模拟控制器之前,先要确定离散化算法和采样时间。离散化算法有好几种,第二章中有详细的论述,现假定采用双线性变换法。确定采样时间,需要考虑被控对象的特性,计算机的性能,以及干扰信号的影响等,初步可按采样时间T<,Tp为被控对象时间常数,或T=~τ,为被控对象的纯滞后,初步确定后再综合平衡其它因素,当然这需要一定的经验,现在假定取秒。
假设模拟控制器为D(s)?8?
转换结果为: s?2,在MATLAB中,用c2d函数进行离散化,过程为:
s?15ds=zpk(-2,-15,8) %建立模拟控制器的s传递函数 dz=c2d(ds,,'tustin') %将模拟控制器按tustin方法转换为z传递函数的数字控制器 步骤3 检验数字控制器的性能
数字控制器的性能项目比较多,我们仅以直流增益,频率特性,零极点分布说明。 直流增益 dcgain(dz)
返回直流增益
频率特性 bode(ds,'r',dz,'g') 伯德图,见下页左图 零极点分布 pzmap(dz) 步骤4 离散化控制对象
为了进行模拟仿真,需要对控制对象进行离散化,由于步骤1所说的原因,应把被控对象视为零阶保持器与原对象的串连,即应对
零极点分布图,见下页右图
1?e?TsG(s)进行离散化,这时可在c2d函数中使用零阶保持器(zoh)方法,如果认为不需要添加零阶保持器,即s直接对G(s)离散化,则应在c2d函数中使用冲击响应不变法(imp)。 借用零阶保持器(zoh)方法,将对象G(s)?
转换结果为: 步骤5 模拟仿真 20带一阶保持器离散化的过程如下:
s(s?2)...... %模拟控制器D(s)转换为D(z)的过程见前 gs=zpk([ ],[0,-2],20) %建立对象的s传递函数 g1z=c2d(gs,,'zoh') %借用c2d函数进行带零阶保持器的对象的离散化 求离散系统的闭环传递函数和连续系统的闭环传递函数。
离散系统的闭环传递函数为:TRCZ? 连续系统的闭环传递函数为:TRCS? 用MATLAB算TRCZ与TRCS:
trcz=dz*g1z/(1+dz*g1z) D(z)G1(z)
1?D(z)G1(z)D(s)G(s)
1?D(s)G(s) 结果为: trcs=ds*gs/(1+ds*gs) 用MATLAB函数STEP画阶跃响应图形:
响应图形为: hold on %图形保持 step(trcs,'r',2) %画连续系统的阶跃响应图,红色,终止时间为2秒 步骤6 求数字控制器的时域表达式 step(trcz,'b',2) %画离散系统的阶跃响应图,兰色,终止时间为2秒 s?2 上面已经求出, 连续传递函数D(s)?8?的tustin离散式为 s?15?1?1U(z)61091.(z?0.9048)6.1091-5.527z?1U(z)?61091E.(z)?5.527E(z)z?0.4545U(z)z,或 。 D(z)???E(z)z?0.45451?0.4545z?1
.091e(k)?5.527e(k?1)?0.4545u(k?1),根据此式就可以写出计算u(k)的 对上式取z反变换,得时域表达式u(k)?61程序代码来了。
除上述步骤之外,在编写程序代码时,还需要考虑几个问题: ① ADC位数
ADC位数是一个硬件问题,在系统设计时,就应该结合控制算法,仔细分析ADC位数对控制精度的影响。 ② 数据类型
在控制算法中有3种数据类型可以采用:无符号整数,定点数,浮点数。我们知道,无符号整数运算既是最简单和速度最快的运算,又是定点数运算和浮点数运算的基础。在数据动态范围比较小的情况下,应尽可能用无符号整数运算代替定点数运算和浮点数运算。
浮点数运算是一整套运算,包括加,减,乘,除,对阶,规格化,溢出处理等一系列子程序,使用浮点数的程序,将占用比较多的代码空间和比较长的运行时间。不论使用汇编语言还是c语言,对于是否使用浮点数运算,都应进行比较仔细的酌斟。 ③ 数值计算误差
数值计算引入的误差有3个方面,一是定点数字长不够或者浮点数有效数字过少,一是两个相近的数相减,一是加减乘除次数过多。在程序设计中,应优化算法以避免计算误差的引入。
第二节 在MATLAB中离散化
1. 建立s降幂传递函数 ① 建立多项式型s降幂传递函数 方法1. sys = tf(num,den) 方法2. s = tf('s'),再令sys = f(s) 例: 已知G0?15s.?30.25s3?1.25s2?s,用tf函数建立多项式型s降幂传递函数,G0?tf([.153],[0.25125.10]),
若G0以零极点形式给出,即已知G0?3(0.5s?1),仍可用tf函数建立多项式型s降幂传递函数,但需用多项式乘
s(s?1)(0.25s?1)法函数conv配合,G0=tf(conv([3],[ 1]),conv(conv([1 0],[1 1]),[ 1])) ② 建立零极点型s传递函数 方法1. sys = zpk(z,p,k)
方法2. s = zpk('s'),再令sys = f(s)。 2. 传递函数的转换
① 将任意形式的s传递函数转换为s降幂传递函数 sys = tf(sys) ② 将任意形式的s传递函数转换为s零极点传递函数 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,?t)
方法2. z = zpk('z',?t),再令sys = f(z) 4. 建立z-1格式的传递函数
直接根据分子和分母建立z-1格式的传递函数
sys_z = filt(num,den,?t)
sys = zpk(sys)
当已有多项式形式的z降幂传递函数时,按以下步骤:
① 取z降幂传递函数a的分子多项式系数 [num,den] = tfdata(sys_s,'v') ② 建立z-1格式的传递函数
sys_z = filt(num,den,?t)
5. 将多项式形式的高阶z-1降幂传递函数转换为并联传递函数,按以下步骤: ① “手工”将z-1降幂传递函数a改写成多项式形式的z降幂传递函数b。 ② 取z降幂传递函数b的分子多项式系数num和分母多项式系数den。
③ 利用residue函数取z降幂传递函数b的分项分式,[an ad ak]=residue(num,den)。
分项结果可能出现共轭复数,在这种情况下应将含有共轭复数的分式合并成二次有理质分式。 ④ 根据分项结果手工写出z降幂多项式形式的并联表达式。
⑤ “手工”将z降幂多项式形式的并联表达式改写成z-1降幂多项式形式的并联表达式。
⑥ “手工”对z-1降幂多项式形式的并联表达式中的每一个分式项降阶,即将每一个分式项变形,使得分式项的分子的阶次比分母的阶次低1阶,变形完毕再将全部常数项合并。 举例
设有z-1降幂传递函数 tz_0??101.?0186z.?0.0864z?21?1.27z?1?0.27z?2
改写成z降幂传递函数 tz_01?0.1z2?0.186z?0.0864z2?1.27z?0.27,
取分项矢量 [an ad ak]=residue(nz,dz) 得 an=[ ] ad=[ ] ak=
0.51010.51010.5101z?10.5101 手工写分项分式 , 令 ???0.5101?tz_p1?z?11?z?11?z?11?z?1
?0.73?0.1971?0.1971z?1?0.73, 令 tz_p2???0.73?z?0.271?0.27z?11?0.27z?11?0.27z?1 又令 tz_p3?0.1?0.5101?0.73?0.3199
1?tz_p2?0.3199? 故 tz_0?tz_p3?tz_p 验证 0.3199?0.51011?z?1?0.731?z?1?0.51011?z?1?0.731?z?1
0.1?0.186z?1?0.08637z?21?1.27z?1?0.27z?2 实际上,大多数数字控制器的传递函数都是一阶或者二阶的,所以需要分解的并不是很多。 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-T s,可按如下方法处理: 1. 在tf函数中使用属性’inputdely’或者’iodely’ ,例如:
>> tf([1 -1],[1 3 5],'inputdelay', 将返回以下形式的传递函数 exp*s) * --------------
s – 1 s^2 + 3 s + 5
1?e?Ts使用这个方法不能建立形如的传递函数,因为带延时的传递函数不能与不带延时的传递函数相加,但可以使
s用tf函数建立2个传递函数,主体部分相同,但一个无输入延时,一个有输入延时,
用c2d进行离散化,但要求延时时间t必须是采样时间?t的整数倍,若不是整数倍,则在转换时不理会延时环节,例如:
>> a=tf([1 -1],[1 4 5]) s - 1 ---------------- s^2 + 4 s + 5 >> a1=tf([1 -1],[1 4 5],'iodelay', s - 1
exp*s) * ---------------
s^2 + 4 s + 5
若采样时间为,因为延时时间是采样时间的整数倍,转换结果的主体部分完全一样: >> c2d(a,,'imp') z^2 - z +
------------------------------ sampling time:
相关推荐: