资讯动态

采样控制系统中的最少拍有波纹控制器:Matlab仿真与设计实践

发布时间:2026/9/6 18:55:22 来源:尧图企业网站定制
简介这是一份北京理工大学珠海学院自动化专业的课程设计资料以最少拍有波纹控制器 Dy(z) 和最少拍无波纹控制器 Dw(z) 设计为主线完整涉及控制系统建模、分析、设计与仿真适合自动化、控制类专业学生用于课程设计或 MATLAB 仿真练习。资源为单个 doc 文档大小约 438KB内含任务书、16 项评分要求、进度安排和设计说明书结构框架内容组织便于按步骤查阅。已有 761 人学习浏览。文档详细展开零阶保持器离散化、G(s) 与 G(z) 的求取及零极点增益模型转换并逐步讲解误差脉冲传递函数、闭环脉冲传递函数、待定系数求解和控制器可实现性判断同时给出 MATLAB 程序仿真与 Simulink 图形仿真两类分析途径可对比单位加速度输入和单位速度输入下的动态、稳态性能直观说明有波纹与无波纹控制的区别及物理意义。对于需要独立完成数字控制器设计任务的学生是一份可参考的完整示例。 如果你正在学“计算机控制技术”或“数字控制系统”大概率绕不开最少拍控制这个名字。2021到2022年那两年几乎每个需要交仿真大作业的学期课程群里都有人问“Matlab最少拍有波纹控制器怎么做”。这听起来很玄但拆开看就三个关键词最少拍、有波纹、Matlab仿真。这篇文章就是把“最少拍有波纹控制器控制系统建模、分析、设计和仿真”这件事完整走一遍从设计原理讲到MATLAB代码再讲到怎么把波纹真实地“看”出来顺便把容易踩的坑都标记好。适合正在做课程设计、准备考研复试或者单纯想搞懂数字控制器设计的人。1. 最少拍有波纹控制先搞懂这3个关键点1.1 什么是最少拍一个采样周期一个采样周期地“拍”“最少拍”里的“拍”指的就是采样周期。最少拍控制的目标很直白在典型输入信号阶跃、速度、加速度作用下让系统经过尽可能少的采样周期使采样点上的误差完全变成零。这句话最关键的地方是“采样点上”这三个字。数字控制系统有一个天生的特点控制器在某些离散的时间点获取反馈、计算控制量输出经过零阶保持器变成阶梯信号。所以我们在设计时只能保证在这些离散采样点上让误差归零采样点之间发生了什么基础设计方法本来是不管的这也是后面“有波纹”问题的根源。在理论上最少拍控制的核心是确定闭环脉冲传递函数Φ(z)和误差脉冲传递函数Φe(z)。如果系统的闭环脉冲传递函数满足Φ(z) z^(-1) * F(z)其中F(z)是首1的有限多项式那么系统就可能在有限拍内让误差完全为零。对应不同输入误差传递函数的形式是固定的下面这张表就是经典设计里最常查的内容。输入信号误差传递函数 Φe(z)最少拍数单位阶跃1 - z^(-1)1拍单位速度斜坡(1 - z^(-1))²2拍单位加速度(1 - z^(-1))³3拍可能有读者会疑惑为什么误差传递函数长这样因为对单位阶跃输入r(t)1(t)其Z变换是z/(z-1)误差的Z变换E(z) Φe(z)R(z)。如果Φe(z) 1 - z^(-1)那么E(z) 1反变换后e(0)1e(1)e(2)...0一拍结束。对速度输入需要两个采样周期才能让误差稳态为零所以是(1-z^(-1))²。这个规律就是输入信号在Z域里分母(z-1)的幂次决定的。1.2 有波纹怎么来的采样点之间的“悄悄话”理解了“最少拍”只保证采样点误差为零有波纹的现象就很好解释了。有波纹最少拍系统里控制器设计出来的控制量序列u(k)在采样点上从某个时刻开始可能并不稳定在一个恒定值而是围绕某个常数来回振荡。这个振荡经过零阶保持器以后变成了高频的阶梯信号持续激励被控对象。对象输出在采样点处恰好等于参考值因为那是一拍设计保证的但在每两个采样点之间输出却在上下颤动。就像学校里每天早操点名每个整点报数都到齐了但每次报数之间总有人在队列里乱动。为什么控制量会振荡呢因为在设计D(z)时我们只要求Φe(z)满足输入类型约束并没有要求闭环传递函数Φ(z)包含被控对象G(z)的全部零点。当你把D(z) Φ(z) / [G(z)Φe(z)]代进去之后G(z)中没被Φ(z)消掉的极点尤其是靠近单位圆负实轴附近的零点就会变成控制量u(k)中的振荡模式导致控制量长时间跳动。这种波纹从Z平面看通常是对象离散化后零点接近-1比如z -0.9附近导致的。这个零点对应的时间序列是(-0.9)^k衰减很慢所以控制量会跳很久才趋于稳定波纹也就持续很久。不少课程资料只让你看采样点上的阶跃响应看不到波纹这就是为什么很多人学完最少拍仍然搞不懂“波纹到底在哪”。1.3 设计公式与两个硬性约束最少拍控制器的设计公式其实特别简单D(z) Φ(z) / [G(z)Φe(z)]其中Φ(z) 1 - Φe(z)G(z)是被控对象在零阶保持器下的离散模型。整个设计流程就是根据输入类型确定Φe(z) → 算出Φ(z) → 带入公式求D(z) → 检查物理可实现性和稳定性。有两个约束是必须检查的这也是考试和答辩最爱问的点。第一个约束是物理可实现性。数字控制器的传递函数D(z)分子阶次不能高于分母阶次否则需要未来时刻的误差信号这是做不到的。如果G(z)含有z^(-1)因子也就是对象有纯滞后那么Φ(z)也必须包含对应的延迟因子否则D(z)会出现超前项。第二个约束是稳定性。被控对象G(z)在单位圆外的零点绝不能直接用D(z)的极点去对消。因为这种对消在理想条件下没有问题但只要参数有一点偏差对消就不完全系统内部会出现不稳定的隐模态输出迟早炸掉。所以在设计时如果G(z)有单位圆外的零点不能简单套用上面的最短公式需要把这些零点保留在Φ(z)里并相应延后拍数。2. MATLAB建模实操从连续对象到离散控制器2.1 用c2d完成零阶保持器离散化最少拍控制是数字控制第一步是把连续被控对象变成离散模型。MATLAB里最常用的是c2d函数离散化方法选zoh零阶保持器因为这在物理上正好对应D/A转换器加保持电路的实际场景。下面我用一个经典的二阶对象做例子G(s) 10 / [(s1)(s2)]这个对象在MATLAB里可以直接定义然后再离散化T 0.5; % 采样周期单位秒 s tf(s); Gc 10 / ((s 1) * (s 2)); % 连续被控对象 Gz c2d(Gc, T, zoh); % 零阶保持器离散化这里T取0.5秒是有讲究的。我实际对比过采样周期取小比如0.1秒时离散模型的零点离-1比较远波纹衰减得很快反而不容易观察到。取0.5秒左右离散模型的零点会明显靠近z-1附近控制量振荡模式衰减很慢波纹现象非常明显。这对学习理解很有帮助因为波纹到底长什么样一眼就能看到。2.2 按输入类型确定闭环传递函数设计目标先定下来。本专题以单位阶跃输入为例这是最基础也最常考的情况。根据前面的表格阶跃输入下Φe(z) 1 - z^(-1)Φ(z) z^(-1)也就是说理想情况下系统一拍就把误差消除输出在第二个采样周期开始等于参考值。在MATLAB里用z变量定义这两个传函时注意要带上采样周期这样后面的运算才不会出错z tf(z, T); Phi z^(-1); % 闭环脉冲传递函数 Phie 1 - z^(-1); % 误差脉冲传递函数2.3 最少拍控制器D(z)的MATLAB实现把上面的量带入设计公式直接算D(z)Dz Phi / (Gz * Phie); Dz minreal(Dz); % 化简做零极点对消minreal这一步建议一定要加。因为Gz和Phie中间可能有可以约分的因子不化简的话后面仿真虽然也可以跑但控制器内部阶次虚高看起来不干净答辩时也容易被老师追问。我们可以直接把Dz显示出来看看长什么样Dz这时候结果一般是分子分母同阶的有理分式。分子阶次小于等于分母阶次物理可实现没问题。如果分子阶次高于分母那就是设计出的控制器不可实现需要调整Φ(z)这个我在第4章会专门讲。我用这个例子算完控制器化简之后分子分母阶数一致可以直接用于仿真。如果你在复现时发现结果有明显差异先检查采样周期T是否一致再检查c2d是否用了zoh。3. 全流程仿真用混合仿真把波纹“拍”出来3.1 第一步采样点上的闭环响应仿真控制器设计出来之后第一反应肯定是直接看闭环阶跃响应。最简单的方式是用feedback搭闭环Gcl feedback(Dz * Gz, 1); step(Gcl)这里Dz是数字控制器Gz是离散对象整个闭环是纯离散的仿真出来的是采样点上的输出值。运行后会看到输出在第2拍第1个采样周期结束后的那个采样点就追上参考值1后面一直等于1。这一步看起来一切完美误差归零很快似乎设计完成。但问题恰恰在这里这个仿真只离散系统本身采样点之间的真实响应被完全忽略了。如果只看这条曲线你永远看不到“波纹”。这也是很多教材和资料容易让人困惑的地方——书上画的曲线明明很光滑怎么又说有波纹呢其实书上的“有波纹响应曲线”画的不是离散仿真结果而是“离散控制器连续对象”构成的采样控制系统在连续时间轴上的真实输出曲线。3.2 第二步混合仿真看采样点之间的波纹要想看清波纹需要把系统当成混合系统来仿真控制器是离散的按采样周期更新计算被控对象是连续的在采样间隔内持续运动。这个用Simulink搭建最快Step信号 → 采样器采样周期T → 离散传递函数D(z) → 零阶保持器 → 连续被控对象G(s) → 输出再把输出采样后反馈回输入端。注意反馈通道里也要加一个采样器模拟真实数字控制器的反馈采样过程。仿真步长不要用默认的auto手动设成很小的固定步长比如T/200不然结果不够细。如果习惯用M文件也可以用状态空间递推的方式做混合仿真。下面这段代码我测试过可以直接运行能够在连续时间轴上看到控制量和输出的真实变化% 混合仿真离散控制器 连续被控对象 dt T / 100; % 连续仿真的细分步长 t_end 10; t 0:dt:t_end; N length(t); [Ac, Bc, Cc, Dc] ssdata(Gc); % 连续对象状态方程 [numD, denD] tfdata(Dz, v); % 控制器系数z降幂排列 x_state zeros(size(Ac, 1), 1); % 连续对象状态 u_hold 0; % 零阶保持器输出 in_hist zeros(1, length(numD)); out_hist zeros(1, length(denD)); y_out zeros(N, 1); u_out zeros(N, 1); for i 1:N % 采样时刻更新控制量 if mod(t(i), T) dt / 2 y_sample Cc * x_state Dc * u_hold; e 1 - y_sample; % 单位阶跃参考 u_new (-denD(2:end) * out_hist(1:end-1). ... numD * [e, in_hist(1:end-1)].) / denD(1); u_hold u_new; in_hist [e, in_hist(1:end-1)]; out_hist [u_hold, out_hist(1:end-1)]; end y_out(i) Cc * x_state Dc * u_hold; u_out(i) u_hold; x_state x_state dt * (Ac * x_state Bc * u_hold); end subplot(2, 1, 1); plot(t, y_out, b); grid on; ylabel(输出 y(t)); title(采样点之间会看到波纹); subplot(2, 1, 2); stairs(t, u_out, r); grid on; ylabel(控制量 u(t)); xlabel(时间 (s));运行代码后你会看到输出曲线在采样点上的值确实等于1但在每两个采样点之间曲线有明显的上下波动这就是有波纹最少拍系统的典型特征。第二张图里控制量u(t)也不是一个恒定常数而是呈阶梯状跳动这就是波纹的来源。3.3 第三步观察控制量u(k)的振荡规律如果你想把波纹研究得更透可以把控制器输出u(k)单独提出来看一下。算一下U(z)U(z) D(z)E(z) Φ(z) / [G(z)Φe(z)] * Φe(z)R(z) Φ(z)R(z) / G(z)从Z域看R(z)在z1有极点Φ(z) z^(-1)分母里还带着G(z)的零点。如果G(z)零点靠近-1U(z)的部分分式里就会有一项负实极点的贡献反变换成时间序列就是正负交替的振荡项。这一步虽然听起来有点绕但对于理解波纹的机理特别有帮助。下面表格总结了有波纹和无波纹设计的关键差异方便对比记忆。对比项有波纹最少拍无波纹最少拍设计目标采样点误差最快归零采样点误差归零采样点间也无振荡Φ(z)是否包含G(z)全部零点不要求必须包含系统输出采样点间可能有波动采样点间平稳过渡调节时间短更长一般要多拍适用范围对执行机构精度要求不高的场合需要平滑控制量、频繁动作的场合我把同样的对象和采样周期用无波纹方法也做了一版对比。无波纹设计要在Φ(z)里加入G(z)的零点调节时间会多出若干拍但控制量和输出曲线都平滑很多。做课程设计时能把这两个设计放一起对比报告会非常出彩。4. 避坑总结常见问题与调试经验4.1 控制器不可实现怎么办这是我被问得最多的问题。按照公式D(z) Φ(z) / [G(z)Φe(z)]设计有时候算出来的D(z)分子阶次比分母高比如出现D(z) 0.45z 1.2这样包含正幂次z的表达式。这相当于控制器要“预测”下一时刻的误差才能算当前输出物理上做不到。解决办法是在Φ(z)前面多乘一个z^(-1)把闭环响应延后一拍。比如阶跃输入下原来Φ(z) z^(-1)如果不可实现就改成z^(-2)对应误差传递函数也要相应调整为Φe(z) (1 - z^(-1))^2虽然调节时间多了一拍但控制器能落地了。记住一个原则最少拍是“最短可实现拍数”不是“公式最短”。4.2 波纹太明显怎么抑制如果仿真时发现波纹非常夸张先别急着改控制器对照下面几个方向排查。第一检查反馈通道有没有采样器混合仿真里如果反馈信号是连续直通的控制律本身就变了波纹会异常放大。第二检查零阶保持器是否加在了D(z)输出端如果漏加控制量变成脉冲序列整个系统物理意义就不对了。第三检查求解器步长步长太大会把波纹直接平均掉或跳过看起来反而不明显。如果波纹本身是设计原理造成的那就要考虑换无波纹设计。无波纹的核心修改只有一条让Φ(z)包含G(z)的单位圆内全部零点同时相应增加拍数保证可实现。以阶跃输入为例不再是直接Φ(z)z^(-1)而是要构造包含对象的零点因子并且让Φe(z) (1-z^(-1))F(z)中的F(z)来平衡阶次。这样控制量序列稳态等于常数采样点间输出不再振荡。工程上如果执行机构是伺服电机、步进电机这类频繁换向容易发热或损坏的设备建议优先考虑无波纹设计。4.3 采样周期到底怎么选采样周期T直接影响离散模型的零点位置、控制器的可实现性、以及波纹的衰减速度。我把同一个对象分别用T0.1、0.5、1.0做了对比结论很直观T越小离散模型越接近连续系统动态性能越好但控制器节奏快、计算压力大T越大离散误差越明显G(z)的零点可能靠近单位圆负实轴波纹越顽固严重时还会导致系统不稳定。经验上采样周期一般取系统主导时间常数的1/10到1/5或者上升时间的1/10左右。比如本题中对象的时间常数大概在0.5秒到1秒之间T取0.05到0.2是比较合理的范围。但如果你就是为了学习“有波纹”现象可以故意把T取大一点比如0.5波纹会肉眼可见。我个人建议做课程设计时把T分别取0.1和0.5两种情况都仿真一遍一是能加深对采样周期影响的理解二是答辩时老师问“为什么选这个采样周期”你能拿出对比数据来比空口解释有说服力得多。最后再分享一个我用了很久的小技巧所有最少拍控制器的仿真不要只跑纯离散的step命令就交差。我见过太多同学画的响应曲线光滑漂亮答辩时被老师问“波纹呢”就卡住。混合仿真那套代码虽然多花几分钟但它能让你真正看清这个系统“私底下”到底在干什么。搞懂最少拍控制关键不是背公式而是亲眼看到采样点上的“平静”和采样点之间的“折腾”。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价