伺服电机仿真(35):Simulink仿真实践——模型线性化与频域分析工具使用
35.1 引言:为什么需要线性化与频域分析
伺服系统本质上是一个非线性、时变的复杂系统,但控制器的设计通常依赖于线性控制理论。模型线性化是将非线性模型在某一工作点附近近似为线性模型的过程,而频域分析则是评估线性系统稳定性、带宽、相位裕度等关键指标的经典方法。二者的结合为控制器设计和系统优化提供了坚实的理论基础。
线性化的核心价值:
将复杂的非线性模型简化为易于处理的线性传递函数或状态空间模型
支持经典的频域设计方法(Bode图、Nyquist判据等)
为控制器参数整定提供定量依据(如带宽、相位裕度)
频域分析的核心价值:
直观展示系统的频率响应特性(增益、相位随频率变化)
量化稳定裕度(相位裕度PM、增益裕度GM)
指导控制器设计(确定穿越频率、补偿相位滞后)
35.2 模型线性化的基本原理与方法
35.2.1 线性化的数学本质
非线性系统在平衡点 (x0,u0)附近的泰勒展开:
x˙=f(x,u)≈f(x0,u0)+∂x∂f(x0,u0)(x−x0)+∂u∂f(x0,u0)(u−u0)
线性化后的状态空间模型:
Δx˙Δy=AΔx+BΔu=CΔx+DΔu
其中 A,B,C,D是雅可比矩阵在工作点的取值。
35.2.2 Simulink中的线性化工具
Simulink提供了多种线性化途径:
线性化工具选择 ┌─────────────────────────────────────────────────────────┐ │ 工具/方法 │ 适用场景 │ 特点 │ ├─────────────────────────────────────────────────────────┤ │ Model Linearizer │ 交互式图形化线性化 │ 直观易用│ │ (Apps > Model │ │ 支持多输入│ │ Linearizer) │ │ 多输出 │ ├─────────────────────────────────────────────────────────┤ │ linmod / linmod2 │ 命令行线性化 │ 适合脚本│ │ (已弃用) │ │ 自动化 │ ├─────────────────────────────────────────────────────────┤ │ linearize 函数 │ 现代命令行线性化 │ 灵活强大│ │ (slLinearizer) │ │ 支持批次│ ├─────────────────────────────────────────────────────────┤ │ Frequency Response │ 频域响应估计 │ 无需解析│ │ Estimator │ 通过注入信号估计 │ 模型 │ └─────────────────────────────────────────────────────────┘35.3 使用Model Linearizer进行线性化
35.3.1 启动与界面布局
Model Linearizer界面结构 ┌─────────────────────────────────────────────────────────┤ │ 菜单栏:File, Edit, View, Tools, Help │ ├─────────────────────────────────────────────────────────┤ │ 左侧:模型浏览器 │ │ ├─ 选择线性化输入/输出点 │ │ └─ 设置工作点 │ ├─────────────────────────────────────────────────────────┤ │ 中央:线性化结果展示 │ │ ├─ Bode图 │ │ ├─ Nyquist图 │ │ ├─ Nichols图 │ │ └─ 极点-零点图 │ ├─────────────────────────────────────────────────────────┤ │ 右侧:数据浏览器 │ │ ├─ 线性化模型列表 │ │ ├─ 工作点列表 │ │ └─ 分析结果 │ └─────────────────────────────────────────────────────────┘35.3.2 线性化步骤
完整线性化流程 ┌─────────────────────────────────────────────────────────┐ │ 步骤1:打开Model Linearizer │ │ 在Simulink工具栏 Apps > Model Linearizer │ ├─────────────────────────────────────────────────────────┤ │ 步骤2:指定线性化输入/输出点 │ │ 点击 "Add Perturbation" 选择输入信号线 │ │ 点击 "Add Measurement" 选择输出信号线 │ │ 支持批量选择和命名 │ ├─────────────────────────────────────────────────────────┤ │ 步骤3:设置工作点 │ │ 选项A:使用仿真快照 │ │ - 运行仿真至稳态,自动捕捉工作点 │ │ 选项B:手动指定工作点值 │ │ - 直接输入状态变量和输入的值 │ │ 选项C:使用操作点搜索 │ │ - 指定约束条件,自动寻找平衡点 │ ├─────────────────────────────────────────────────────────┤ │ 步骤4:执行线性化 │ │ 点击 "Linearize" 按钮 │ │ 等待计算完成 │ ├─────────────────────────────────────────────────────────┤ │ 步骤5:查看与分析结果 │ │ 自动生成Bode图、极点-零点图等 │ │ 可切换显示不同输入输出通道 │ ├─────────────────────────────────────────────────────────┤ │ 步骤6:导出线性化模型 │ │ 右键结果 → Export → To Workspace │ │ 保存为LTI对象或状态空间模型 │ └─────────────────────────────────────────────────────────┘35.3.3 工作点设置的三种方式
工作点设置方法对比 ┌─────────────────────────────────────────────────────────┤ │ 方法 │ 操作步骤 │ 适用场景│ ├─────────────────────────────────────────────────────────┤ │ 仿真快照 │ 1. 运行仿真至期望时刻 │ 已知稳 │ │ (Snapshot) │ 2. 点击 "Take Snapshot"│ 态工作点│ │ │ 3. 选择该快照作为工作点│ │ ├─────────────────────────────────────────────────────────┤ │ 手动指定 │ 1. 选择 "Specify" │ 已知状 │ │ (Specify) │ 2. 输入状态变量值 │ 态值 │ │ │ 3. 输入输入信号值 │ │ ├─────────────────────────────────────────────────────────┤ │ 操作点搜索 │ 1. 选择 "Trim" │ 复杂非 │ │ (Trim/Find Op Point)│ 2. 设置状态约束 │ 线性系统│ │ │ 3. 设置输入约束 │ │ │ │ 4. 运行搜索 │ │ └─────────────────────────────────────────────────────────┘伺服系统工作点选择建议:
速度环线性化:选择额定转速作为工作点
位置环线性化:选择中间位置(如0°)作为工作点
电流环线性化:选择额定电流作为工作点
考虑不同负载条件下的工作点(空载、满载)
35.4 频域分析工具的使用
35.4.1 线性分析工具(Linear Analysis Tool)
该工具集成在Model Linearizer中,也可单独启动。
频域分析功能面板 ┌─────────────────────────────────────────────────────────┤ │ 分析类型选择: │ │ ├─ Bode Diagram:幅频和相频曲线 │ │ ├─ Nyquist Diagram:奈奎斯特图 │ │ ├─ Nichols Diagram:尼科尔斯图 │ │ ├─ Singular Values:奇异值(MIMO系统) │ │ └─ Pole-Zero Map:极点-零点分布图 │ ├─────────────────────────────────────────────────────────┤ │ 显示选项: │ │ ├─ 频率范围:手动指定或自动 │ │ ├─ 幅值单位:dB或线性 │ │ ├─ 相位单位:度或弧度 │ │ └─ 网格:开启/关闭 │ ├─────────────────────────────────────────────────────────┤ │ 分析结果: │ │ ├─ 相位裕度(PM) │ │ ├─ 增益裕度(GM) │ │ ├─ 穿越频率(ω_c) │ │ ├─ 带宽(BW) │ │ └─ 谐振峰值(M_p) │ └─────────────────────────────────────────────────────────┘35.4.2 从Bode图读取关键指标
Bode图解读指南 ┌─────────────────────────────────────────────────────────┤ │ 幅频曲线(Magnitude Plot) │ │ ├─ 低频增益:反映稳态精度 │ │ ├─ 穿越频率(0dB交点):反映响应速度 │ │ ├─ 谐振峰值:反映阻尼特性 │ │ └─ 高频滚降:反映噪声抑制能力 │ ├─────────────────────────────────────────────────────────┤ │ 相频曲线(Phase Plot) │ │ ├─ 穿越频率处的相位:减去-180°得相位裕度 │ │ ├─ 低频相位:反映积分作用 │ │ └─ 高频相位延迟:反映系统延迟 │ ├─────────────────────────────────────────────────────────┤ │ 稳定性判据: │ │ ├─ 相位裕度 > 45°:良好 │ │ ├─ 相位裕度 > 30°:可接受 │ │ ├─ 相位裕度 < 20°:欠阻尼,可能振荡 │ │ └─ 增益裕度 > 6dB:良好 │ └─────────────────────────────────────────────────────────┘35.4.3 频域响应估计(Frequency Response Estimation)
对于无法解析线性化的模型(如包含查表、不连续函数),可通过注入信号估计频率响应。
频域响应估计流程 ┌─────────────────────────────────────────────────────────┤ │ 步骤1:打开Frequency Response Estimator │ │ 在Simulink Apps中选择 │ ├─────────────────────────────────────────────────────────┤ │ 步骤2:配置注入信号 │ │ 信号类型:正弦扫描、伪随机二进制序列(PRBS) │ │ 频率范围:指定起始和终止频率 │ │ 幅值:小信号(避免激发非线性) │ ├─────────────────────────────────────────────────────────┤ │ 步骤3:指定输入输出点 │ │ 与线性化类似,选择注入点和测量点 │ ├─────────────────────────────────────────────────────────┤ │ 步骤4:运行估计 │ │ 自动运行仿真,采集数据 │ │ 实时显示估计进度 │ ├─────────────────────────────────────────────────────────┤ │ 步骤5:查看结果 │ │ 生成Bode图,可与线性化结果对比 │ │ 导出估计结果 │ └─────────────────────────────────────────────────────────┘伺服系统频域估计注意事项:
注入信号幅值应为额定值的1%~5%,避免饱和
频率范围应覆盖感兴趣的带宽(如1Hz~1000Hz)
对于机械谐振,需在谐振频率附近加密频率点
35.5 伺服系统的典型频域分析案例
35.5.1 速度环线性化与频域分析
速度环频域分析示例 ┌─────────────────────────────────────────────────────────┤ │ 模型:速度闭环控制系统 │ │ 输入:速度参考值(rpm) │ │ 输出:实际速度(rpm) │ │ 工作点:额定转速1500 rpm │ ├─────────────────────────────────────────────────────────┤ │ 线性化结果(Bode图): │ │ ├─ 低频增益:40 dB(高增益,稳态精度好) │ │ ├─ 穿越频率:50 Hz │ │ ├─ 相位裕度:55°(良好) │ │ ├─ 增益裕度:12 dB(充足) │ │ └─ 带宽:80 Hz │ ├─────────────────────────────────────────────────────────┤ │ 分析结论: │ │ ├─ 系统稳定,有足够的稳定裕度 │ │ ├─ 带宽80Hz,满足一般伺服应用要求 │ │ └─ 可尝试提高穿越频率至80Hz以获得更快响应 │ └─────────────────────────────────────────────────────────┘35.5.2 电流环线性化与解耦效果验证
通过线性化验证d轴和q轴电流环的解耦效果:
电流环解耦分析 ┌─────────────────────────────────────────────────────────┤ │ 输入:u_d, u_q (电压指令) │ │ 输出:i_d, i_q (实际电流) │ │ 工作点:i_d=0, i_q=5A, ω_e=314rad/s │ ├─────────────────────────────────────────────────────────┤ │ 分析1:不加解耦时的传递函数矩阵 │ │ [i_d] [G_dd(s) G_dq(s)] [u_d] │ │ [i_q] = [G_qd(s) G_qq(s)] [u_q] │ │ ├─ G_dq(s) ≠ 0:d轴受q轴影响 │ │ └─ G_qd(s) ≠ 0:q轴受d轴影响 │ ├─────────────────────────────────────────────────────────┤ │ 分析2:加入解耦后的传递函数矩阵 │ │ ├─ G_dq(s) ≈ 0:解耦有效 │ │ └─ G_qd(s) ≈ 0:解耦有效 │ ├─────────────────────────────────────────────────────────┤ │ 结论:通过对比耦合项的幅值,量化解耦效果 │ │ 理想情况:耦合项幅值应低于-20dB │ └─────────────────────────────────────────────────────────┘35.5.3 机械谐振的频域识别
通过频域分析识别机械谐振频率:
谐振频率识别 ┌─────────────────────────────────────────────────────────┤ │ 测试对象:电机-负载双惯量系统 │ │ 输入:转矩指令 │ │ 输出:电机速度 │ ├─────────────────────────────────────────────────────────┤ │ 幅频曲线特征: │ │ ├─ 反谐振谷:f_anti = 1/2π √(K/J_L) │ │ ├─ 谐振峰:f_res = 1/2π √(K(1/J_m+1/J_L)) │ │ └─ 谐振峰高度:反映阻尼大小 │ ├─────────────────────────────────────────────────────────┤ │ 分析结果: │ │ ├─ 反谐振频率:120 Hz │ │ ├─ 谐振频率:280 Hz │ │ ├─ 谐振峰高度:15 dB(需抑制) │ │ └─ 建议:在280Hz处加入陷波滤波器 │ └─────────────────────────────────────────────────────────┘35.6 线性化结果的导出与应用
35.6.1 导出为LTI对象
% 从Model Linearizer导出后,在工作区得到lti对象 sys_linear = linearized_model; % 假设导出的变量名 % 转换为传递函数 tf_sys = tf(sys_linear); % 转换为状态空间 ss_sys = ss(sys_linear); % 提取零极点 [z, p, k] = zpkdata(sys_linear);35.6.2 用于控制器设计
线性化模型可直接用于MATLAB的控制器设计工具:
控制器设计流程 ┌─────────────────────────────────────────────────────────┤ │ 1. 从Simulink导出线性化模型 sys_linear │ │ 2. 使用sisotool进行交互式控制器设计 │ │ sisotool(sys_linear) │ │ 3. 调整控制器参数,实时观察Bode图和根轨迹 │ │ 4. 导出设计好的控制器对象 │ │ C = pidtune(sys_linear, 'pid') │ │ 5. 将控制器参数应用到Simulink模型 │ │ Kp = C.Kp; Ki = C.Ki; Kd = C.Kd; │ └─────────────────────────────────────────────────────────┘36.6.3 验证线性化精度
通过对比线性化模型和非线性模型的时域响应,验证线性化的有效性:
% 非线性模型仿真 simOut_nonlinear = sim('servo_model', 'StopTime', '0.1'); % 线性化模型仿真 [y_linear, t_linear] = lsim(sys_linear, input_signal, time_vector); % 对比 plot(t_nonlinear, y_nonlinear, t_linear, y_linear); legend('非线性模型', '线性化模型'); title('线性化精度验证');验收标准:在小信号激励下,线性化模型与非线性模型的响应误差应小于5%。
35.7 多变量系统的频域分析
35.7.1 MIMO系统的奇异值分析
对于多输入多输出系统(如dq轴电流环),使用奇异值分析评估系统性能。
奇异值分析 ┌─────────────────────────────────────────────────────────┤ │ 系统:2输入2输出电流环 │ │ 输入:u_d, u_q │ │ 输出:i_d, i_q │ ├─────────────────────────────────────────────────────────┤ │ 分析内容: │ │ ├─ 最大奇异值σ_max:反映最坏情况增益 │ │ ├─ 最小奇异值σ_min:反映最好情况增益 │ │ ├─ 条件数σ_max/σ_min:反映耦合程度 │ │ └─ 带宽定义:σ_max下降到-3dB的频率 │ ├─────────────────────────────────────────────────────────┤ │ 使用sigma函数: │ │ sigma(sys_linear) │ │ 或使用Model Linearizer的Singular Values选项 │ └─────────────────────────────────────────────────────────┘35.7.2 相对增益阵列(RGA)
RGA用于分析MIMO系统的输入输出配对:
% 计算RGA sys_ss = ss(sys_linear); RGA = real(sys_ss.D) .* inv(real(sys_ss.D)).'; % 静态RGA % 或使用频率相关的RGA w = logspace(-1, 3, 100); RGA_w = zeros(size(w)); for i = 1:length(w) G = freqresp(sys_linear, w(i)); RGA_w(i) = G .* inv(G).'; endRGA解读:
RGA元素接近1:该配对合适
RGA元素远大于1:耦合严重,需解耦
RGA元素为负:可能引起不稳定
35.8 工程实践要点
35.8.1 线性化精度影响因素
影响线性化精度的因素 ┌─────────────────────────────────────────────────────────┤ │ 因素 │ 影响 │ 对策 │ ├─────────────────────────────────────────────────────────┤ │ 工作点选择不当 │ 线性化模型偏离实际 │ 选择典 │ │ │ │ 型工作点│ ├─────────────────────────────────────────────────────────┤ │ 非线性强度大 │ 线性近似误差大 │ 分段线性│ │ │ │ 化 │ ├─────────────────────────────────────────────────────────┤ │ 信号幅值过大 │ 超出线性范围 │ 小信号 │ │ │ │ 激励 │ ├─────────────────────────────────────────────────────────┤ │ 模型包含不连续 │ 雅可比矩阵不存在 │ 使用频 │ │ │ │ 域估计 │ └─────────────────────────────────────────────────────────┘35.8.2 频域分析的局限性
仅适用于线性系统:非线性系统的小信号分析仅在局部有效
无法处理时变系统:频域分析假设系统时不变
忽略初始条件:频域响应假设零初始条件
单频率输入:实际系统可能同时受到多个频率的激励
35.8.3 最佳实践建议
多工作点线性化:在多个典型工作点进行线性化,评估参数变化的影响
验证线性化精度:始终用时域仿真验证线性化模型的有效性
结合时域分析:频域分析提供稳定性信息,时域分析提供瞬态性能
使用频率响应估计:对于难以解析线性化的模型,使用估计方法
文档记录:记录线性化的工作点、频率范围和结果
35.9 总结
35.9.1 工具选择总结
工具选择决策树 ┌─────────────────────────────────────────────────────────┤ │ 需要线性化模型? │ │ ├─ 是:模型是否可解析? │ │ │ ├─ 是:使用Model Linearizer │ │ │ └─ 否:使用Frequency Response Estimator │ │ └─ 否:直接使用时域仿真 │ ├─────────────────────────────────────────────────────────┤ │ 需要频域分析? │ │ ├─ 是:使用Model Linearizer的频域分析功能 │ │ └─ 否:使用MATLAB命令行工具(bode, nyquist等) │ └─────────────────────────────────────────────────────────┘35.9.2 核心能力要求
理解线性化原理:知道何时线性化有效,何时无效
熟练使用工具:掌握Model Linearizer的操作流程
解读频域曲线:能从Bode图中读出稳定裕度、带宽等关键指标
应用于控制器设计:能将频域分析结果转化为控制器参数的调整方向
验证与迭代:能通过时域仿真验证频域分析的结果
核心结论:模型线性化与频域分析是伺服系统控制器设计的核心工具。通过Simulink的Model Linearizer和频域分析功能,工程师可以快速获得系统的频率响应特性,量化稳定裕度,指导控制器参数整定。掌握这些工具的使用,能够显著提高控制系统的设计效率和可靠性。但也要认识到线性化方法的局限性,始终结合时域仿真进行验证。
