double sensor (void) // 读AD转换器,这里给出的是一个空函数 {
return ; }
/*============================================================================================*/ void actuator(double rDelta) // 向DA转换器输出,也是给出一个空函数 { }
/*============================================================================================*/ void main(void) // 主函数 {
PID sPID; double rOut;
// 变量定义,PID 数据结构 // 变量定义,PID 响应值 (输出)
// 这个返回值是虚设的
double rIn; // 变量定义,PID 反馈 (输入) PIDInit ( &sPID ); // 初始化PID 数据结构 = ; = ; = ;
= ; // 设定“设定点” for (;;) {
// 进行PID 处理 // 初始设计PID参数
//在这里写检查是否改变PID参数的语句和改变PID参数的语句 rIn = sensor (); // 读反馈值 rOut = PIDCalc ( &sPID,rIn ); actuator ( rOut ); } }
// PID 迭代
// 系统输出
第五章 保持器
第一节 零阶保持器
特
点 零阶保持器是一个连续环节,它对输入的脉冲在一个周期内按恒值外推后输出。
脉冲响应: 设在某一k=0时刻e(0?T)?k0,则零阶保持器单位脉冲输入的响应为
t)?k0[u(t)?u(t?T)],u(t)传递函数: 用延时函数将零保持器的脉冲响应函数表示为两个阶跃函数的代数和 h(式中,
t?T)是纯滞后为T的单位阶跃函数。 是单位阶跃函数,u(1?e?Ts h(t)的拉氏变换为H(s)?k0,这是零阶保持器的输出值传递函数。因为脉冲输入e0=e(t)?(kT),
sH(s)1?e?Tst)?k0,?并且,在时刻kT时e(所以脉冲输入的拉氏变换为E0(s)?k0,所以零阶保持器的传递函数Ha(s)?。
E0(s)s第二节 一阶保持器
特 点: 一阶保持器是一个连续环节,它对输入的脉冲在一个周期内按线性外推后输出,图中,采样周期的斜率是k0?00?k0,如图中虚线(-T,k0)所示,退出采样周期后的斜率是,如图中(k0,T)所示。 TT脉冲响应式: 设在某一k=0时刻e(0?T)?k0,则零阶保持器单位脉冲输入的响应为 传递函数: 为了求得一阶保持器的传递函数,将脉冲响应图形表达为6个波形的代数和:
t)?k0(u(t)? h(tt?Tt?2Tu(t)?2u(t?T)?2u(t?T)?u(t?2T)?u(t?2T))。 TTTt)是单位阶跃函数,u(t?T),u(t?2T)分别是纯滞后为T和2T的单位阶跃函数,此式的拉氏变 式中,u(112e?Ts2e?Tse?2Tse?2Ts换为 k0?(?????)。
sTs2ssTs2Ts2Ts?11?e?Ts2(),这是一阶保持器输出值的输出表达式,因为脉冲输入 将上式整理后得H(s)?k0TsH(s)Ts?11?e?Ts2e0=e(t)?(kT),而脉冲输入的拉氏变换为E0(s)=k0,所以一阶保持器的传递函数为Ha(s)??()。
E0(s)Ts --------------------------------------------------- 附录
两种一阶离散化方法的结果的比较
(在MATLAB 上运行)
%第一套\一阶离散化\方法用到的公式
1(1?e?Ts)s2Te?Ts?1(1?z?1)s2Tz?1
22Ts?1(1?e?Ts)1(1?z?1)?2%第二套\标准一阶离散化\方法用到的两部分
TTs2s%两种\一阶离散化\方法的对比 Clc %清除窗口 Clear %清除工作区
s0=tf(1,[1,1,1]); %原传递函数 t=;
%设定
z=tf('z',t);
s11=tf(1,[1,0,0]); %第一套\一阶离散化\方法的两部分 z11=tf([1,-2,1],[t,0],t); s12=tf([t,1],[1,0,0]);
%第二套\一阶离散化\方法的两部分
z12=tf([1,-2,1],[t,0,0],t); z0=c2d(s0,t,'foh');
%与第一套\一阶离散化\对应的MATLAB的\方法
%进行第一套\一阶离散化\%进行第二套\一阶离散化\
z1=(c2d(s0*s11,t,'imp'))*z11; z2=(c2d(s0*s12,t,'imp'))*z12; zpk0=zpk(z0); zpk1=zpk(z1); zpk2=zpk(z2);
%以下提取零极点和增益 z_x(1)=z1; z_x(2)=z2; for r=1:2
[zx,px,kx]=zpkdata(z_x(r),'v'); x=length(zx); y=length(px);
%观察分子分母上的公因子
%以下z约去分子和分母中的公因数 for i=x:-1:1 for j=y:-1:1
if abs(zx(i)-px(j))< %这一个数值不能太小 zx(i)=[]; px(j)=[]; y=y-1; break; end end end
%得到最简的零极点形式的传递函数 zpkn(r)=zpk(zx,px,kx,t); end
disp('************************************ zpk0') zpk(zpk0)
disp('************************************ zpkn(1)') zpk(z_x(1)) zpkn(1)
disp('************************************ zpkn(2)') zpk(z_x(2)) zpkn(2)
%以下绘图部分,仅供参考------------------------------- figure
figure figure figure(1) step(z0) figure(2) step(zpkn(1)) figure(3) step(zpkn(2)) ◆ 下面的包对象中包含,本文使用的,用autoCAD制作的图形:离散化图,信流图,比较图等。用“好压”压缩软件压缩。
相关推荐: