本节摘要:控制工程是 Matlab 最早深耕的领域,控制系统工具箱与 Simulink 构成"建模—分析—设计—仿真—代码生成"的完整闭环。本节用一个直流电机调速小案例走完全流程,并说明模型基设计如何成为航空汽车业的通行做法。
控制工程师的日常工作恰好是 Matlab 的形状:被控对象写成传递函数或状态空间(矩阵),控制器设计是频域计算(又是矩阵),验证靠仿真(数值积分)。八十年代做这些要在 Fortran 里手写积分器,Matlab 把整条链搬进交互环境,控制群体几乎是整体迁移——工具箱销量反过来资助了平台的持续开发,这是用户与工具共生演化的典型样本。
被控对象:电机角度对电压的近似传递函数。
s = tf('s'); J = 0.01; b = 0.1; K = 0.01; R = 1; L = 0.5; P = K / (J*L*s^2 + (J*R + b*L)*s + (b*R + K^2)); step(P); title('开环阶跃响应'); % 先看裸对象的脾气
开环阶跃响应缓慢且稳态增益小。设计一个 PID 控制器并闭环:
C = pid(10, 5, 0.5); T = feedback(C*P, 1); % 闭环传递函数 step(T); title('闭环阶跃响应');
feedback 一行完成闭环连接,step 一眼看动态。参数不满意时用 pidtune(C, P) 自动整定,再用裕度分析检验稳健性(margin(T) 看幅值与相角裕度)——设计裕度而不是设计"刚好行",是工程与作业的分界线。
把上面的片段连成一次真实的设计过程。背景:云台电机调速,需求方给的是工程语言——超调不超过百分之五、两秒内进入终值正负百分之二带内、对负载扰动有抑制。操作分四步走,每步产出可检验的对象:
% 第 1 步:自动整定起点 C0 = pidtune('PID', P); % 从对象特性出发的初始参数 T0 = feedback(C0*P, 1); % 第 2 步:量化指标,不靠目测 S = stepinfo(T0) % 一行给出超调、调节时间等指标 % 关注字段:OverShoot(%)、SettlingTime(s) % 第 3 步:不达标就调——带宽提fast档再验 C1 = pidtune(P, 'PID', 8); % 目标带宽 8 rad/s,逐步压 S1 = stepinfo(feedback(C1*P, 1)) % 第 4 步:稳健性收尾 [Gm, Pm] = margin(feedback(C1*P, 1)) % 经验门槛:幅值裕度 > 6 dB、相角裕度 > 45 度
结果与解读:stepinfo 把"看起来还行"翻译成数字,超调百分之三、调节时间一点四秒、裕度达标,需求逐条勾掉;若相角裕度不足,说明带宽压过头,控制器在放大高频噪声,回到第 3 步降带宽重试。变式:把执行器饱和(电压上限)加进 Simulink 模型重跑,小信号线性设计在大阶跃下会暂时失准——线性设计定骨架、非线性仿真验收,两步缺一不可,这正是控制工程里 Matlab 与 Simulink 的标准分工。
三者是同一对象的三种记法,各有主场。传递函数面向频域分析与 PID 整定,一眼看增益与零极点,但只适合线性单输入单输出的场合;状态空间(ss 模型)用一阶矩阵方程描述,多变量、时变、最优控制(LQR、卡尔曼滤波)必须用它;Simulink 框图直观表达非线与结构细节,是团队沟通与代码生成的载体。三者可互相转换(tf/ss/linmod 各有通路),选哪种取决于下一步要做什么分析,而不是个人偏好。初学者常犯的错是在框图里硬调参数却不去算线性模型的裕度——仿真能过一遍工况,裕度却保证相邻一批工况也能过,两种验证互补而非互替。
工程现场还有一层纯软件的坑:控制代码的"可追溯性"要求。航空汽车行业的模型基设计流程里,模型的每次修改都要留下记录,仿真结果与模型版本一一对应,审查时能回答"这个结果由哪版模型产生"。这套纪律映射到 Matlab 侧就是第 2 章的快照习惯加版本管理工具的结合——工程领域把本册反复强调的可复现性直接写进了流程规范,这是领域文化反塑工具使用的又一个实例。做课程设计时不必全套照搬,但"模型、数据、结果三者对得上版本"的意识从第一个项目就该建立。
给想入门控制方向的读者一条能力路线:先用本节的电机案例把 tf/feedback/step/margin 四件套用熟;第二步补离散化与数字控制(c2d 把连续模型搬到采样世界,这是嵌入式实现的必经一步);第三步进 Simulink 建非线性模型做验证,把线性设计与非线性仿真两条线合拢。三步各需一两周练习,走完就具备了读控制工程文献、参与实际调参讨论的基础——再往深处的状态估计与最优控制,属于研究生课程的地界,但入口的工具全是本节这一套,工程领域的工具复用率极高是它对新手最友好的地方。
传递函数适合线性分析,真实对象带死区、饱和等非线性时,框图仿真更直观:Simulink 里拖模块、连线,即建即跑。演化的深层意义在于模型成为团队的共享资产:同一个电机模型,控制组用来调参,软件组用来生成嵌入式代码(经代码生成工具链),测试组用来跑故障注入——模型基设计的核心就是"单一真相源,多处复用"。

⚠️ 常见坑:仿真步长设得过大,闭环结果看似收敛实则数值失真。看到响应"意外光滑"先怀疑步长,固定步长仿真按系统最快动态的十分之一量级起步试。
tf 建模 → step/bode 分析 → pid/pidtune 设计 → feedback 闭环验证;