4. 基于传递函数的控制器设计

上一节我们已经通过 Simscape 的 linmod 或 linearize 命令,把非线性物理模型在工作点附近线性化,得到了一个线性时不变(LTI)模型。本节要做的,是把这份线性化结果真正"用起来":以它作为被控对象,设计一个 PID 控制器,再把这个控制器接回原始物理模型,做一次联合仿真,验证控制器在真实非线性环境下的表现。这条链路的关键在于——设计用线性模型,验证用物理模型,两者不能混为一谈。

一、从线性化结果到可用的传递函数

线性化得到的通常是状态空间形式 ss(A,B,C,D),而 PID 设计更习惯用传递函数。以单输入单输出为例,若线性化对象为 sys_lin,可用 tf(sys_lin) 转成传递函数。假设某直流电机位置伺服系统在工作点附近线性化后得到:

% 线性化得到状态空间模型
sys_lin = linearize('motor_model', op_point);
% 转为传递函数(输入:电压 V,输出:转角 theta)
G = tf(sys_lin);

% 示例结果(教学假设值):
%         12.5
% G(s) = ----------------------
%        s^3 + 6.2 s^2 + 15.8 s

注意分母有一个 s 因子,说明对象本身含一个积分环节(位置是速度的积分),这类对象用纯 P 控制会留下稳态误差,用 PI 或 PID 才能消除。设计前先做两件事:一是用 pole(G) 看极点位置,判断开环稳定性;二是用 dcgain(G) 或 bandwidth(G) 估计增益与带宽,为 PID 参数提供量级参考。若对象本身不稳定(有右半平面极点),PID 设计要更谨慎,通常需要先做内环镇定。

二、PID 参数整定的三种实用路径

工程上常用的整定方式有三类,各有适用场景:

  • 解析/公式法:如 Ziegler-Nichols 临界比例度法、Cohen-Coon 法。适合对象模型已知、对超调要求不苛刻的场合。以 Z-N 为例,先只加 P 控制,增大 Kp 直到系统等幅振荡,记录临界增益 Ku 和振荡周期 Tu,再按表取值。
  • 基于频域指标的设计:给定相位裕度(如 60°)和截止频率,用 pidtune 自动求解。这是 MATLAB 中最省事的方式,一行命令即可:C = pidtune(G,'PIDF', 2.0),其中 2.0 是期望带宽(rad/s)。
  • 手动试凑:先 P、再 I、后 D,边调边看阶跃响应。适合教学演示和快速验证,但需要经验。

下面给出一个基于 pidtune 的完整设计片段,并附上手动微调的思路:

% 期望带宽 2 rad/s,自动整定 PIDF(带一阶滤波的 PID)
C = pidtune(G, 'PIDF', 2.0);

% 查看整定结果
C
% 示例输出(教学假设值):
% Kp = 1.86, Ki = 3.42, Kd = 0.21, Tf = 0.05

% 闭环阶跃响应检查
T = feedback(C*G, 1);
step(T);
stepinfo(T)   % 查看超调、上升时间、稳态误差

若 stepinfo 显示超调过大(如 >20%),可适当减小 Kp 或增大 Tf;若上升太慢,可提高期望带宽重新整定。这一步的目标不是"最优",而是"满足指标"——例如超调 <10%、上升时间 <1.5 s、稳态误差为 0。

三、把控制器接回物理模型做联合仿真

线性模型上验证通过后,必须回到 Simulink 物理模型验证。做法是:保留原有的 Simscape 物理网络(电机、负载、传感器),把原来的开环输入替换为 PID 控制器输出,反馈信号取自物理模型的测量端口。结构上形成"控制器(Simulink 信号域)→ 执行器(Simscape 物理域)→ 被控对象 → 传感器 → 反馈"的闭环。

需要注意三个工程细节:一是单位与量纲,物理模型输出的转角可能是 rad,而控制器设计时用的是 deg,必须统一;二是采样时间,若控制器是离散实现,采样周期要与物理求解器的步长匹配,避免代数环;三是限幅,PID 输出要加饱和模块,模拟真实执行器的电压/电流上限,否则仿真结果会过于理想。

基于传递函数的 PID 控制器设计与联合仿真验证链路 设计阶段(线性域) 线性化模型 G(s) pidtune / Z-N 整定 PID 参数 Kp, Ki, Kd, Tf 验证阶段(物理域) PID 控制器 Simscape 物理模型 传感器反馈(转角/速度) 闭环反馈 结果判读与迭代 超调 < 10% 否则减小 Kp / 增大 Tf 上升时间 < 1.5 s 否则提高期望带宽 稳态误差 ≈ 0 否则增大 Ki 不满足则迭代

四、联合仿真中常见问题与排查

把线性域整定好的 PID 直接搬到物理模型,往往会遇到"线性模型上很好、物理模型上振荡"的情况。原因通常有三:一是工作点偏移,线性化只在某个平衡点附近有效,大范围运动时对象特性变化;二是物理模型中的非线性因素(摩擦、死区、饱和)在线性化时被忽略;三是求解器步长与控制器采样不匹配,导致数值振荡。

排查顺序建议:先看物理模型开环响应是否与线性模型一致(在小信号下应接近),再逐步加大指令幅值观察非线性影响,最后检查求解器设置(如 ode23t 或 ode15s 对 Simscape 更友好)。若物理模型响应明显慢于线性模型,多半是执行器饱和或摩擦所致,此时需要降低期望带宽,或引入前馈补偿。

实用建议:整定完成后,把 PID 参数、期望带宽、实际超调/上升时间记录成一张对照表,便于后续章节做参数敏感性分析时复用。例如:带宽 2 rad/s → Kp=1.86, Ki=3.42, Kd=0.21;带宽 4 rad/s → Kp 约翻倍,但超调可能从 8% 升到 18%,需要重新权衡。