4.1 从空画布到闭环:搭建与整定


4.1 从空画布到闭环:搭建与整定

本节摘要:本节按时间顺序复盘一台 24 伏直流电机转速闭环模型的完整搭建过程:参数脚本先行、按第 2 章规范分层、连续对象与离散控制器拼接、PI 初值按工程法整定、第一次运行与调整。每个操作都附带"为什么",你可以拿一个空白模型逐步复现。读完本节,你得到的不是一个成品模型,而是一套可迁移的搭建顺序。

动手之前的十分钟

打开画布之前先写参数脚本——这个顺序不是仪式,是纪律的起点。参数先行意味着后面每一步建模都在有物理量的语境里进行:增益模块里敲的是变量名 Kt 而不是神秘数字 0.05,整定时改的是脚本里的一行而不是画布上的十处对话框。任务书给的额定数据加上铭牌参数,五分钟整理完毕:

% motor_24v_params.m —— 24V 直流电机参数(铭牌 + 估算) Un = 24; % 额定电压 V Ra = 1.2; % 电枢电阻 ohm(万用表实测) La = 4e-3; % 电枢电感 H(数据手册) Ke = 0.065; % 反电动势系数 V·s/rad(额定电压除以额定空载角速度估算) Kt = 0.065; % 转矩系数 N·m/A(对有刷电机近似等于 Ke) J = 2.4e-4; % 折算到电机轴的转动惯量 kg·m^2(转子加负载折算) Bf = 1.2e-5; % 粘性摩擦 N·m·s/rad Tn = 0.15; % 额定转矩 N·m n_rated = 3000*2*pi/60; % 额定角速度 rad/s,约 314 Ts_ctrl = 1e-3; % 控制周期 1 kHz(与目标控制器定时器一致) % 注意:J 与 Bf 是估算值,整定阶段若响应与预期偏差大,优先复核它们

注意脚本里的自我提醒:J 与 Bf 是估算值。复盘的价值在于真实——后面整定时遇到的偏差,根子就埋在这两个估算参数上。

搭结构:三十分钟的原型

按 2.4 节的规范分层,但第一版克制地只拆三层:顶层闭环、被控对象子系统、控制器子系统。被控对象内部是 2.1 节手工搭的电机框图(两个积分器、两条反馈线);控制器子系统里放离散 PI(2.2 节路线二,位置式差分);交界处按 2.3 节的规矩手放零阶保持。测量环节第一版从简——转速反馈直接从对象输出引出,加一个额定转速标定增益换成标幺值。

第一版刻意不做的事:不加开关驱动(电压源直供)、不加保护逻辑、不做参数辨识。原型的目标是让闭环转起来,保真度升级放在闭环跑通之后——一次只引入一类复杂性,出了问题才知道是谁的。

图:第一版原型结构

图:第一版原型结构

整定:从首次运行到达标

PI 初值按工程法给出:比例项按"额定误差产生额定电压"估算(增益约 5),积分项按闭环带宽与控制周期的关系估算(时间常数取机械时间常数的五分之一,约 40 毫秒)。首跑参数:比例 5、积分 80。第一次运行的结果:转速爬升明显偏慢,负载阶跃时跌落超过百分之十二,指标不达标。

调整按单变量原则推进。第一轮把比例提到 8:响应加快,跌落缩到百分之八,但指令到 0.8 标幺时电流出现轻微振荡。第二轮积分从 80 降到 50:振荡消失,跌落百分之七。第三轮针对性处理跌落——检查后发现跌落比理论值大,复核 J 的估算值,把负载折算惯量从 2.4e-4 修正到 3.6e-4(原来漏算了减速机构的折算),重跑后跌落缩到百分之四,指标达标。整定全程六次运行,每次只动一个量。

% 整定辅助:负载阶跃测试的脚本化 load_system('motor_speed_loop'); set_param('motor_speed_loop', 'Solver', 'ode45', 'RelTol', '1e-4'); out = sim('motor_speed_loop', 'StopTime', '1.0'); w = out.w_log.Data; t = out.tout; idx_load = find(t >= 0.6, 1); % 0.6 秒处施加额定负载 dip = (max(w(1:idx_load)) - min(w(idx_load:end))) / max(w(1:idx_load)); fprintf('转速跌落 %.1f%%\n', dip*100); % 目标:不超过 5%

结果验证与变式

达标不等于可信。按 3.4 节的契约,把相对容差收紧到十万分之一复跑,转速跌落读数从百分之四点二变为百分之四点三——差值远小于指标余量,结果站得住。两个变式供延伸练习:其一,把控制器换成 2.2 节的路线一(连续设计再离散化),对比跌落读数差多少,体会两条路线的偏差来源;其二,把零阶保持替换为直接馈通的写法,故意制造 2.3 节警告过的混域含糊,观察采样时间图例的变化——亲手犯一次错,比读十遍规范记得牢。

💡 关键直觉:整定的主要时间不该花在凑参数上,而花在"偏差与预期不符时停下来找原因"。本节跌落偏大的真凶是惯量估算,凑比例增益永远救不回错误的物理参数。

常见问题

问:整定时先动比例还是先动积分?有讲究吗?

有。先比例后积分:比例项决定响应的"骨架刚度",比例没到位之前调积分,等于在松软的地基上精装修——积分会把比例不足造成的稳态误差强行拉平,掩盖结构问题并拖长振荡。比例调到"响应快但允许有静差"的程度,再上积分消静差,最后用微分(本例转速环没用微分,噪声大)收尾。这个次序背后是各参数作用的可分性:比例主导中频刚度、积分主导低频刚度,先中后低,归因才清晰。

问:参数脚本报错说变量未定义,但脚本明明跑过了?

九成是作用域错位:脚本跑在了错误的 MATLAB 会话或工作区里(比如并行进程、或从别的目录启动的会话)。确认脚本与模型同会话、且模型挂接的数据来源与脚本写入的目标一致——写进基础工作区的脚本配上挂了字典的模型,两边互相看不见对方的量,报错自然出现。这正是第 6 章字典制度要终结的一类混乱,原型期先用"脚本加基础工作区",切换字典时按 6.1 节的迁移四步走即可。

问:六次运行就达标,会不会太顺了?真实项目也是这个节奏吗?

不会这么顺,本节已经过滤掉了两次弯路(惯量估算的坑是后来才找出来的,复盘把它归位到了正确的位置)。真实项目里整定轮次翻倍很常见,多出来的轮次大多花在两类事上:参数辨识的复核(就像本节的惯量修正)与指标之间的互相牵制(跌落与超调此消彼长)。判断整定是否该继续的标准不是轮次,而是每一轮是否有明确的单一归因——归因断了,就该回到物理参数与结构去查,而不是继续凑数。

本节要点回顾

  • 参数先行:脚本里的每个估算值都带着"待复核"标记,整定偏差先查物理参数再动控制器;
  • 第一版克制:电压源直供、无保护、无辨识,一次只引入一类复杂性;
  • 结构即复盘资产:三层分层与显式域桥让后续 4.2 节的故障能被快速定位;
  • 单变量整定:每轮只动一个参数,偏差归因才可能成立;
  • 跌落的真凶:惯量折算遗漏,物理参数错误无法靠控制增益弥补;
  • 可信收尾:容差收紧复跑,读数稳定才算达标。

闭环跑通只是上半场。下半场我们主动制造三场故障——因为在真实项目里,它们从不预约。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U