ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

离散控制系统:从采样定理到数字控制器设计的工程实践

离散控制系统:从采样定理到数字控制器设计的工程实践 1. 从连续到离散为什么我们需要离散系统如果你接触过自动控制原理最开始学的多半是连续系统。拉普拉斯变换、传递函数、根轨迹、奈奎斯特图……这些工具处理的是时间上连续变化的信号比如一个电机转速的平滑变化或者一个水箱液位的连续上升。这些模型很直观物理世界本身就是连续的。但当你打开电脑或者拿起手机你会发现我们赖以构建现代控制系统的核心——数字计算机它处理信息的方式是“离散”的。它每隔一个固定的时间间隔比如0.001秒才“看”一次传感器的读数也每隔一个固定的时间间隔才“下达”一次控制指令。这个时间间隔就是采样周期。这就是离散系统研究的起点当连续的被控对象遇上了离散的数字控制器整个系统该如何分析、设计和优化这不仅仅是把连续理论简单“离散化”一下它引入了一系列全新的概念、挑战和机遇。比如采样频率选多少合适太快了浪费计算资源太慢了系统可能会失稳甚至崩溃。再比如连续世界里稳定的系统离散化后还一定稳定吗答案是不一定这里面有大学问。我刚开始学这部分时总觉得它比连续系统抽象z变换不像s变换那样有直接的物理意义。但后来在实际项目中无论是用单片机做个温控器还是用PLC控制一条生产线甚至是高级的机器人轨迹规划离散系统理论都是绕不开的基石。它告诉你在数字世界里控制律应该如何“翻译”和“执行”。今天我就结合自己的理解和一些踩过的坑来拆解一下离散系统到底在讲什么以及怎么用它解决实际问题。2. 离散系统的数学基石采样、保持与z变换要分析离散系统首先得建立它的数学模型。这个过程可以看作是对连续世界进行“数字化采样”的过程。2.1 采样过程与采样定理想象一下你用一台数码相机拍摄一个快速旋转的风扇。如果快门速度太慢采样周期太长拍出来的照片里扇叶可能是模糊的甚至看起来是静止的或者倒转的——这就是“频率混叠”。在控制系统中如果采样频率不够高高频信号会被误认为是低频信号导致控制器基于错误的信息做出决策后果可能是灾难性的。这里就引出了奈奎斯特-香农采样定理为了从采样信号中无失真地恢复原始连续信号采样频率必须至少是原始信号最高频率的两倍。这个“两倍”的频率被称为奈奎斯特频率。注意在实际工程中“至少两倍”往往是不够的。考虑到信号噪声、抗混叠滤波器的不理想特性以及需要留出的稳定裕度通常选择采样频率为信号最高频率的5到10倍甚至更高。比如一个带宽为10Hz的控制系统采样频率至少应在100Hz以上。这是我早期做电机控制时踩过的坑理论计算用40Hz好像够了实际一跑响应毛刺很多后来提到200Hz才平滑。采样过程在数学上可以看作连续信号x(t)乘以一个周期为T的脉冲序列。采样后的信号x*(t)是一个脉冲序列其强度等于各采样时刻x(t)的值。2.2 零阶保持器连接离散与连续的桥梁计算机算出了控制量比如“阀门开度增加5%”但这个值是一个数字。如何让连续执行机构如模拟阀门去执行这个“数字”指令这就需要保持器。最常用的是零阶保持器。它的工作方式非常简单粗暴把第k个采样时刻得到的值原封不动地保持到第k1个采样时刻之前。这样输出的就是一个阶梯状的连续信号。虽然它引入了相位滞后相当于一个延时环节但因其实现简单、物理意义明确成为了绝大多数数字控制系统的标准配置。你可以把ZOH想象成一个“锁存器”在每个采样时刻更新一次输出并保持住。它的传递函数是(1 - e^{-Ts}) / s。当我们对包含ZOH的连续对象进行离散化时这个环节的影响必须被考虑进去。2.3 z变换离散世界的“拉普拉斯变换”这是离散系统理论的核心工具。如果说拉普拉斯变换s变换将微分方程变成了代数方程那么z变换就是将差分方程离散时间的微分方程变成代数方程。z变换的定义对于一个离散序列x(kT)通常简写为x(k)其z变换定义为X(z) Σ [x(k) * z^{-k}]求和从k0到无穷。这里的z是一个复变量你可以把它理解为离散时间的复频率算子z e^{sT}建立了s域和z域的桥梁。为什么需要z变换简化分析将复杂的卷积运算变为乘法运算。求解差分方程可以轻松求解系统的瞬态和稳态响应。定义系统模型由此引出离散系统的传递函数——脉冲传递函数。脉冲传递函数零初始条件下系统输出脉冲序列的z变换与输入脉冲序列的z变换之比记作G(z)。对于常见的由连续系统G(s)前接ZOH离散化而来的系统其脉冲传递函数可以通过公式G(z) Z{ (1-e^{-Ts})/s * G(s) }求得。很多教材包括吴怀宇老师《自动控制原理》的课后习题都有大量求G(z)的练习核心就是查z变换表和使用部分分式展开法。3. 离散系统的分析与设计方法有了G(z)这个模型我们就可以像分析连续系统一样对离散系统进行全方位的“体检”和“设计”。3.1 稳定性分析单位圆取代虚轴在s域系统稳定的充要条件是所有闭环极点都位于s左半平面。在z域这个判据变成了所有闭环极点都位于z平面的单位圆内。为什么是单位圆因为z e^{sT}。当s jω虚轴等幅振荡|z| |e^{jωT}| 1正好是单位圆。当s的实部小于零左半平面衰减|z| |e^{(σjω)T}| e^{σT} 1位于单位圆内。这个映射关系是离散系统稳定性分析的基石。稳定性判据的演变直接求根法解出闭环特征方程的根极点看其模是否小于1。最直接但高次方程求解困难。劳斯判据的变体通过w变换z (w1)/(w-1)将z平面的单位圆内部映射到w平面的左半平面然后就可以对w域的特征方程使用传统的劳斯判据了。这是笔试和习题中的常客。朱利判据专门为离散系统设计的稳定性判据直接对z域多项式系数列表进行判断避免了双线性变换。3.2 稳态性能分析终值定理与误差系数和连续系统类似我们关心系统在阶跃、斜坡等典型输入下最终是否能无静差地跟踪上。使用的工具同样是终值定理。离散系统终值定理lim_{k→∞} x(k) lim_{z→1} (1-z^{-1})X(z)前提是(1-z^{-1})X(z)的极点都在单位圆内。通过定义静态位置误差系数Kp、静态速度误差系数Kv、静态加速度误差系数Ka可以快速判断系统型别积分环节个数和稳态误差。公式形式和连续系统高度相似只是将s→0替换为z→1。例如对于单位反馈系统开环脉冲传递函数为G(z)则Kv lim_{z→1} (z-1)G(z) / T。注意这里多了一个采样周期T这是离散系统特有的容易被忽略。3.3 动态性能分析极点分布与响应形态s域中极点位置决定了响应的模态衰减、振荡频率。在z域极点位置与动态性能的对应关系需要通过z e^{sT}这个关系来理解。实轴上的极点正实轴0z1对应单调衰减的脉冲响应。负实轴-1z0对应正负交替的衰减振荡振荡周期为2T。共轭复极点z re^{±jθ}。模长r决定衰减速度r1稳定r越小衰减越快。相角θ决定振荡频率ω_d θ / T。在z平面上等阻尼比ζ线、等自然频率ω_n线都是一组曲线而不是s域中的射线和同心圆。通常我们更关注极点是否在一个以原点为中心、具有一定阻尼比的扇形区域内。一个实用的技巧在设计时我们常常希望闭环主导极点位于z平面单位圆内一个特定的“好区域”里比如一个对应于阻尼比ζ ≥ 0.5、调节时间t_s有限的扇形区。这比单纯要求“在单位圆内”要严格得多。3.4 离散系统的设计方法从模拟化设计到直接数字设计如何设计一个数字控制器D(z)主要有两大流派。1. 模拟化设计间接设计思路先忽略采样和保持器在s域按照连续系统方法如频率法、根轨迹法设计出连续的控制器D(s)然后通过某种离散化方法将D(s)近似转换为D(z)。常用离散化方法前向差分欧拉法s (z-1)/T。简单但不稳定很少用于控制器离散化。后向差分s (z-1)/(Tz)。将s左半平面映射到z平面一个小圆内能保持稳定性但频率特性畸变较大。双线性变换Tustin变换s (2/T)*(z-1)/(z1)。最常用它将s域的虚轴映射到z域的单位圆能保持稳定性且频率特性畸变较小。在高频段会有频率翘曲可通过预畸变校正。优缺点优点是工程师熟悉连续设计方法流程直观。缺点是离散化过程是近似的采样周期T必须足够小性能才有保障。当T较大时设计出的数字控制器性能可能严重偏离预期。2. 直接数字设计思路直接在z域进行设计。被控对象模型已经是G(z)包含了ZOH和连续对象设计目标也是在z域给出如期望的闭环极点位置。根轨迹法以D(z)G(z)为开环脉冲传递函数在z平面上画根轨迹通过调整D(z)的零极点将闭环主导极点配置到期望区域。概念和s域完全一样只是战场换到了z平面单位圆内。解析法如最小拍设计这是一种非常“激进”的设计。它要求系统在有限个采样周期拍内准确跟踪输入信号且无静差。例如针对阶跃输入的最小拍设计要求系统在一拍后输出就完全等于输入。设计原理根据输入信号类型阶跃、斜坡、抛物线和对象G(z)的特性在单位圆上和圆外的零点极点构造出闭环脉冲传递函数Φ(z)和误差脉冲传递函数Φ_e(z)然后反推出D(z) Φ(z) / [G(z)Φ_e(z)]。优点与致命伤优点显而易见——响应极快。但缺点同样突出对输入信号类型敏感针对阶跃设计的最小拍控制器跟踪斜坡输入时会有静差对模型误差极其敏感控制量可能非常大饱和。因此纯最小拍设计在实际中很少直接用但其思想是许多高级控制算法的基础。w’变换频率法先将G(z)通过双线性变换转到w’域z (1(T/2)w’)/(1-(T/2)w’)在w’域可以近似使用连续系统的伯德图设计方法如超前滞后校正设计出D(w’)再变换回D(z)。这种方法在需要满足特定频域指标如相位裕度、截止频率时很有效。4. 离散化实践中的关键陷阱与经验之谈理论是美好的但把理论变成代码跑在硬件上坑就来了。下面分享几个我印象深刻的教训。4.1 采样周期的选择一个永恒的权衡T的选择是离散系统设计的第一个也是最重要的决策。它没有唯一解只有权衡。理论下限必须满足采样定理通常取系统闭环带宽的5~10倍以上。资源上限受限于CPU计算能力、ADC转换时间、通信带宽等。T越小计算负荷越重。对性能的影响T过大离散化误差大相位滞后严重可能导致系统性能下降甚至不稳定。用后向差分或双线性变换离散一个连续控制器时如果T太大离散控制器的频率特性会严重偏离原设计。T过小对抑制高频噪声没有额外好处因为系统本身带宽有限却白白消耗计算资源在定点DSP上还可能因数值精度过高而引入舍入误差问题。经验法则对于常见的运动控制、过程控制采样频率可选为期望闭环带宽的10~30倍。对于电机电流环这种需要快速响应的内环采样频率可能高达10kHz以上而对于温度控制这种慢过程1Hz甚至更低的采样频率都可能足够。4.2 离散化方法的“潜规则”不同离散化方法适用于不同场景不能乱用。保持稳定性优先后向差分和双线性变换能保持稳定性前向差分不能。所以控制器离散化几乎只用后向差分或双线性变换。频率特性匹配双线性变换在低频段匹配更好高频段有畸变。如果控制器主要在中低频起作用大多数情况双线性变换是首选。后向差分会引入额外的相位滞后。一个具体操作细节用MATLAB的c2d函数进行离散化时方法选项‘zoh’(零阶保持)、‘foh’(一阶保持) 是针对被控对象模型的离散化方法。而‘tustin’(双线性)、‘matched’(零极点匹配) 等既可以用于对象离散化也常用于控制器离散化。一定要分清你在离散化什么。4.3 数字控制器的实现小心数值的“坑”D(z)设计好了它是一个关于z^{-1}的有理多项式。在计算机中它通常通过差分方程来实现。例如一个二阶控制器D(z) U(z)/E(z) (b0 b1*z^{-1} b2*z^{-2}) / (1 a1*z^{-1} a2*z^{-2})对应的差分方程为u(k) b0*e(k) b1*e(k-1) b2*e(k-2) - a1*u(k-1) - a2*u(k-2)这里就有几个坑量化误差与溢出如果系数(b0, b1, a1...)或信号e(k), u(k)用定点数如16位整数表示乘法累加可能导致溢出或精度损失。需要做缩放和饱和处理。即使是浮点数在嵌入式芯片上也要注意处理非规格化数。计算顺序与延迟上述差分方程的计算必须在一个采样周期内完成。代码的实现顺序会影响实际引入的计算延迟。理想情况下u(k)应只依赖于过去时刻的值(k-1, k-2...)。如果代码写得不好u(k)隐式依赖于当前时刻的中间变量可能引入额外延迟。初始条件差分方程需要初始状态e(-1), u(-1)等。通常设为零但如果系统不是从完全静止状态启动可能需要更合理的初始化。代数环如果D(z)包含纯比例项b0 ! 0且被控对象是瞬时响应的无延迟则在仿真建模时可能形成代数环需要引入单位延迟z^{-1}来打破。4.4 抗混叠滤波器的必要性这是硬件上的关键一环但常被软件出身的控制工程师忽视。在ADC采样之前必须有一个模拟低通滤波器抗混叠滤波器其截止频率应略高于你关心的信号最高频率但必须低于采样频率的一半奈奎斯特频率。它的作用是滤除信号中高于奈奎斯特频率的高频成分可能是噪声也可能是真实信号的高频部分防止其混叠到低频段污染你的采样数据。没有这个滤波器再好的控制算法也是建立在错误的数据之上。我见过一个案例电机编码器信号受到开关电源噪声干扰由于没有抗混叠滤波导致速度观测器里出现了无法解释的低频波动折腾了好久才发现是混叠。5. 状态空间视角下的离散系统传递函数模型处理单输入单输出系统很顺手但对于多变量系统状态空间方法更强大。离散时间状态空间方程如下x(k1) Φ x(k) Γ u(k)y(k) C x(k) D u(k)其中Φ e^{AT}状态转移矩阵Γ ∫_{0}^{T} e^{Aτ} dτ B。只要连续系统的(A, B)矩阵已知就能计算出离散后的(Φ, Γ)。MATLAB中的c2d函数可以轻松完成这个转换。在状态空间框架下能控性与能观性判据由连续时的[B, AB, ..., A^{n-1}B]秩为n变为离散时的[Γ, ΦΓ, ..., Φ^{n-1}Γ]秩为n。一个重要的结论是采样可能改变系统的能控/能观性。如果采样周期T选择不当原本能控的连续系统离散后可能变得不能控。例如当T是系统某个振荡模式周期的整数倍时就会出现这种情况。极点配置通过状态反馈u(k) -K x(k)可以将闭环系统极点配置到z平面任意位置前提是系统能控。计算反馈增益阵K的方法如阿克曼公式与连续系统类似。状态观测器当状态不可测时需要构建观测器。离散状态观测器的设计与连续平行同样要求系统能观。观测器的极点决定估计误差衰减速度通常配置得比控制器极点快3~5倍。最优控制离散线性二次型调节器是解决多变量、多约束控制问题的有力工具。从连续系统到离散系统不仅仅是工具的转换更是思维方式的升级。它要求我们在设计时就必须将“时间切片”的概念融入骨髓考虑采样、计算、保持带来的所有非理想效应。理解离散系统是打通控制理论算法与嵌入式工程实现的关键一步。刚开始会觉得z平面抽象但多练习一些从G(s)求G(z)再到分析稳定性、设计D(z)的完整例题比如吴怀宇老师《自动控制原理》课后题中的相关章节并尝试用MATLAB/Simulink搭建模型进行验证感受会深刻得多。记住采样周期T是你的朋友也是潜在的敌人善待它仔细选择它。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进