ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

MATLAB/Simulink自动控制实验:传递函数、频域分析与校正设计

MATLAB/Simulink自动控制实验:传递函数、频域分析与校正设计 简介面向测控技术与仪器本科生及自动化初学者的自动控制原理仿真实验与系统校正任务书以MATLAB和Simulink为核心工具围绕控制系统性能分析和自动控制系统校正两大实验展开覆盖时域与频域分析、超前/滞后/PID校正等典型策略。文档源自课程教学配套供课堂辅助、个人研究或综合实验参考。资源共1个PDF文件压缩包约418KB内容为完整实验指导与报告要求包含实验目的、任务、步骤、报告规范并附具体传递函数示例与参数设计实例。已有166人学习下载。读者可通过该资料快速掌握系统建模、Bode图与Nyquist图分析、阶跃响应与斜坡响应评估等方法并在飞行控制、过程控制等场景中完成校正装置设计与仿真验证提升将理论应用于工程实践的能力。1. 从传递函数到仿真为什么MATLAB/Simulink成了自动控制原理的默认实验台自动控制原理这门课学生最容易卡住的不是拉普拉斯变换而是拿到一个实物对象之后不知道如何把课本上的二阶系统、相角裕量、校正网络这些概念落到可测量的响应曲线上。MATLAB的Control System Toolbox和Simulink恰好把这个过程压缩成了“写传递函数—画响应—读指标—调参数”的闭环。我帮学生调试过不少这类实验报告发现多数问题不在理论而在对MATLAB函数边界条件不熟比如step返回的数据点默认不包含终值误差margin对非最小相位系统的输出解读也容易出错。这篇内容以自动控制原理的经典实验任务为主线覆盖时域性能分析、频域稳定性判断、超前/滞后/PID校正设计以及Simulink建模验证适合测控、自动化、电气专业本科生做课程实验时直接对照复现也对需要快速搭建控制方案验证的工程师有参考价值。2. 时域性能分析用Control Toolbox与Simulink复现二阶系统阶跃响应2.1 建立系统模型的三条路径tf/zpk/ss与Simulink拖拽实验一中要求“掌握在MATLAB命令窗口建立系统模型的方法”。常见做法是使用tf函数直接根据传递函数分子分母构建模型。以标准二阶系统为例其闭环传递函数为wn 1; % 自然频率 omega_n 1 rad/s zeta [0.1:0.1:1]; % 阻尼比从0.1到1步长0.1 sys_cell cell(1, length(zeta)); for i 1:length(zeta) num wn^2; % 分子部分 den [1, 2*zeta(i)*wn, wn^2]; % 分母多项式系数 sys_cell{i} tf(num, den); endden中三个系数分别对应s²、s一次项和常数项顺序是从最高次到最低次。如果系统是以零极点形式给出的可以用zpk([], [-p1 -p2], k)状态空间模型则用ss(A,B,C,D)。三者之间用ss(sys)或tf(sys)可以互相转换这在实际工程中很关键因为频域响应计算要求模型是传递函数形式而仿真求解器内部更偏好状态空间形式。Simulink里建模更直观从Continuous库拖一个Transfer Fcn模块把分子分母填进去即可。我一般会设置一个To Workspace模块获取仿真数据并用sim()函数从脚本启动仿真这样便于批量修改参数。参数说明zeta是阻尼比向量如果系统要求从0.1到1逐个变化步长通常取0.1wn是自然频率题目中给定1 rad/s。若将zeta改为对数分布可以更细腻地观察欠阻尼到过阻尼的过渡但同图绘制时需要特别注意图例顺序。2.2 阻尼比从0.1到1批量仿真与响应曲线标注实验任务要求把不同阻尼比的阶跃响应画在同一张图上并加标注。直接用step循环绘制即可但要注意两点一是为每条曲线设置DisplayName二是用hold on保持图形叠加。figure; hold on; for i 1:length(zeta) step(sys_cell{i}, 30, DisplayName, [\zeta , num2str(zeta(i))]); end legend(Location, east); xlabel(Time (s)); ylabel(Amplitude); title(二阶系统单位阶跃响应 (\omega_n 1)); grid on;step(sys, t)的第二个参数t是仿真时间向量这里用30秒保证zeta很小0.1时稳态也能达到。观察结果zeta0.1时超调量接近73%峰值时间约3.1秒振荡衰减非常慢zeta增大到0.7左右时基本无超调zeta1时刚好进入临界阻尼。如果仿真结果发散优先检查step默认时间是否太短或者传递函数分母是否写成了s^22*zeta*swn^2这一项必须完整漏掉s系数会直接变成一阶系统。对于Simulink批处理可以在脚本里用循环改变Transfer Fcn模块的参数for i 1:length(zeta) set_param(model/Transfer Fcn, Numerator, [1], Denominator, [[1 , num2str(2*zeta(i)*wn), , num2str(wn^2), ]]); sim(model); plot(tout, yout, DisplayName, [zeta, num2str(zeta(i))]); endset_param中的系数必须用空格分隔的字符串且不能有分号。这种批处理方式比step循环慢但胜在可以验证Simulink模型本身是否正确。2.3 动态性能指标提取t_r、t_p、M_p、t_s的计算脚本实验一第二个任务是评估单位反馈系统G(s)(0.4s1)/(s^2s1)的动态性能指标。教材上手工计算超调量和峰值时间很简单但调节时间需要解对数方程容易算错。用MATLAB的stepinfo一条命令搞定G tf([0.4, 1], [1, 1, 1]); sys_cl feedback(G, 1); % 单位负反馈闭环 info stepinfo(sys_cl); fprintf(上升时间 tr%.4f s\n, info.RiseTime); fprintf(峰值时间 tp%.4f s\n, info.PeakTime); fprintf(超调量 Mp%.2f %%\n, info.Overshoot); fprintf(调节时间 ts%.4f s\n, info.SettlingTime);feedback(G,1)默认做负反馈传回的是闭环传递函数。stepinfo默认按终值的2%误差带计算调节时间可以通过SettlingTimeThreshold, 0.05改成5%误差带。注意RiseTime对欠阻尼系统定义为从10%到90%的时间与教材常用定义略有差异报告里需要说明这一点。如果题目给的闭环传递函数已经包含零点比如本系统零点在s-2.5零点的存在会加快上升时间但增大超调量单靠stepinfo只能看到数值要结合零极点图解释原因——零点相当于给系统输入一个脉冲分量相当于提前“推动”响应这是分析报告中值得写的点。2.4 频域指标与Bode图从快速估读到真值实验一的第三、四题要求绘制Bode图读增益裕量和相位裕量。MATLAB的margin函数能直接返回裕量数值G1 tf(1, [1, 2, 3, 2]); % K1时的开环传递函数 [Gm, Pm, Wcg, Wcp] margin(G1); disp([Gm, Pm, Wcg, Wcp]);Gm是增益裕量绝对值不是dB值Pm是相位裕量度Wcg是相角穿越频率Wcp是截止频率。如果margin不加输出参数会直接画出Bode图并在图上标注裕量位置。对K1,3,5分别计算会发现K越大幅频曲线整体上移相位裕量变小系统越接近临界稳定。中频段斜率越陡比如-60dB/dec穿过0dB相位裕量越小对应的时域超调量越大这就是中频段特性与动态性能的关系。注意margin函数对非最小相位系统的相位裕量计算有时会给出负值或错误提示。此时应改用bode自己画图、用find手动定位相角穿越点而不是盲信margin。3. 频域分析实战Bode图、奈氏图与稳定裕度计算3.1 用bode/margin绘制并解读稳定裕量频域分析的核心是理解“裕量”的含义。增益裕量是相位穿越-180°时系统还能忍受的增益倍数相位裕量是增益穿越0dB时系统距离-180°的余量。MATLAB中bode是基本绘图函数但工程中我更推荐bodeplot因为它的句柄可以精细调整曲线样式G tf(1, [1, 2, 3, 2]); bodeplot(G, {0.01, 100}); grid on;频率范围用{0.01, 100}指定单位是rad/s。读裕量时用margin(G)最省事但建议同时画出网格线以便肉眼验证margin是否选对了频率点——我遇到过Wcg因为数值近似误差出现跳动的情况尤其是存在多个相角穿越点时。对比不同K值的Bode图时可以这样组织代码K [1, 3, 5]; figure; hold on; for i 1:3 G tf(K(i), [1, 2, 3, 2]); bodeplot(G, {0.01, 100}); end但bodeplot默认每个对象会清空前一个图需要先hold on且设置颜色。更稳妥的做法是用bode循环绘制并以--等线型区分。3.2 中频段特性与时域动态性能的对应关系实验要求分析“中频段特性与时域动态性能的关系”。中频段一般指截止频率附近±1个十倍频程的区域。若中频段斜率是-20dB/dec系统相位裕量通常较大约45°以上时域超调量小若斜率是-40dB/dec相位裕量约在030°之间超调量显著增大若是-60dB/dec系统往往不稳定。我常用bode图叠加margin数据来验证这一点。以K1为例开环传递函数G(s)1/(s^32s^23s2)的相角裕量约46°对应阶跃响应超调量约20%左右。K增大到5时相位裕量降到约20°超调量超过50%。这个对应关系可以用一个经验换算公式粗略估计(\zeta \approx Pm/100)当Pm为45°时zeta≈0.45超调量约为20%和仿真结果接近。公式只对二阶主导极点系统适用高阶系统会有偏差但作为快速判断方向足够。3.3 用奈氏图验证稳定性判断奈氏图Nyquist是通过开环频率特性判断闭环稳定性的图形工具。MATLAB的nyquist函数自动绘制完整曲线但对初学者来说最容易犯的错是忘记看包围(-1,j0)点的圈数。对于单位反馈系统可以用nyquist绘制的数据自行判断G tf(1, [1, 2, 3, 2]); [re, im] nyquist(G, {0.01, 100}); N -1; % 包围-1点的次数通过人工数曲线穿越-180°的次数严格的做法是调用nyquist后检查实部小于-1的区间内虚部变号次数。MATLAB没有直接内置N的计算函数但可以从re和im中提取。实验报告中不必写复杂脚本只需在奈氏图右上角标注“绕(-1,0)逆时针一圈”或“不包围”即可。奈氏图和Bode图的结论应该一致。如果Bode图显示增益裕量1且相位裕量0奈氏图必然不包围(-1,j0)。我建议在报告中并列三张图Bode、Nyquist、阶跃响应形成“频域指标→时域表现”的证据链。4. 控制系统校正超前、滞后、滞后-超前与PID设计4.1 校正设计的基本思路与MATLAB工具选择实验二的核心是设计串联校正装置常用的类型包括超前校正、滞后校正、滞后-超前校正和PID校正。设计前提是先确定期望指标静态误差系数、相位裕量、截止频率。MATLAB里没有一键设计校正器的官方函数Control System Toolbox的rltool是自动调参工具但作业需要手算步骤因此多数做法是用bode辅助人工试算。设计超前校正的标准步骤根据静态误差系数要求确定系统开环增益K。用margin求出未校正系统在K下的相位裕量Pm0。计算需要补偿的最大相角 (\phi_m \gamma_{req} - Pm0 \epsilon)其中ε为留量一般加5°12°。由 (\alpha (1-\sin\phi_m)/(1\sin\phi_m)) 求分度系数α。选择校正器零点时间常数T使校正后截止频率处超前网络提供最大相角。以题目给的 (G(s)H(s)1/[s(0.1s1)(0.02s1)(0.01s1)(0.005s1)]) 为例要求 (K_v200)即开环增益K200。先验证未校正时的相位裕量Kv 200; G0 tf(1, conv([1,0], conv([0.1,1], conv([0.02,1], conv([0.01,1], [0.005,1]))))); G tf(Kv*1, G0.den{1}); % 直接构造含增益的传递函数 margin(G);注意conv是级联函数用于多项式乘法。这里G0.den{1}提取分母系数再用tf乘以Kv。运行后会发现未校正的相位裕量大约在17°左右截止频率较高直接加超前校正是合适的。4.2 超前校正设计实例从指标到参数落地设计代码如下先算出需要补偿的角度req_gamma 45; % 设计相位裕量 [Gm0, Pm0] margin(G); epsilon 8; % 留量 phi_m req_gamma - Pm0 epsilon; alpha (1 - sin(phi_m*pi/180)) / (1 sin(phi_m*pi/180)); % 然后在未校正系统的截止频率位置附近调整下一步是选择新的截止频率使校正后的幅频曲线在该频率处以-20dB/dec穿越0dB。常见做法是找未校正系统幅值等于-10*lg(1/alpha)的频率点用bode数据插值得到[mag, phase, w] bode(G, {0.1, 1000}); mag_db 20*log10(squeeze(mag)); target_db 10*log10(alpha); [~, idx] min(abs(mag_db - target_db)); wc_new w(idx); T 1/(wc_new*sqrt(alpha)); Gc tf([alpha*T, 1], [T, 1]); % 超前校正器参数说明alpha是分度系数小于1T是校正器的分子时间常数。校正后系统为G*Gc用margin(G*Gc)验证是否满足相位裕量≥45°。如果不足增大ε或重新选择α迭代。这种设计方法本质上是“看图调参”熟练后很快能收敛。4.3 滞后-超前校正与PID参数整定当系统同时需要提高稳态精度和相角裕量时滞后-超前校正更合适。滞后部分降低低频增益不影响中频段相角超前部分提升中频段相位裕量。设计时可拆分为两步先用滞后网络把中频段幅值压低再用超前网络补相位。PID校正的参数整定在MATLAB里常用pidtune或sisotool。以纯滞后过程控制为例题目图中有延时τ当τ10时手动整定PID比较费时可以先用临界比例度法Ziegler-Nichols得到初值% 假定被控对象为带延时的惯性系统这里用一阶惯性纯滞后近似 P tf(1, [T1, 1], InputDelay, tau); % T1为对象时间常数 [Kp,Ki,Kd] pidZeiglerNichols(P); % 自编函数但ZN法对纯滞后大的系统容易产生超调我一般改用稳定边界法先用pidtune自动寻优P tf(1, [10, 1], InputDelay, 10); % 示例对象 C pidtune(P, PID, 0.2); % 0.2为期望带宽pidtune返回校正器C再通过feedback(P*C,1)做时域仿真检验。该函数对带延时的系统同样适用但需要确保InputDelay设置正确否则模型会强行忽略延时导致整定结果不可用。4.4 Simulink中搭建校正前后对比模型Simulink里做校正对比实验比纯脚本更直观。搭建方式拖入两个Transfer Fcn模块一个填未校正开环传递函数另一个填校正器与对象级联后的传递函数加法器连接到负数反馈Scope显示阶跃响应。若校正器是PID直接用PID Controller模块双击填入Kp、Ki、Kd。要注意PID模块的初始条件和输出限幅会影响仿真结果尤其对带有积分环节的对象积分饱和会导致响应振荡。此时应在PID模块后加Saturation模块并选择“反算限幅”抗饱和方式。参数如何填入Transfer Fcn模块的Numerator和Denominator用向量表示。级联对象如(G200/[s(0.1s1)(0.02s1)(0.01s1)(0.005s1)])展开多项式的系数向量较长可以直接在MATLAB里用get命令提取G_combined G*Gc; [num, den] tfdata(G_combined, v);然后写入Simulink模块。v参数使tfdata返回数值向量而不是元胞数组直接用于set_param。在报告中我会把校正前后的Bode图、阶跃响应曲线上下排布标注校正前相位裕量17°、校正后45°。这种对比图是实验报告得高分的关键。5. 结合工程应用的进阶技巧与验证方法5.1 用stepinfo批量评估阶跃响应性能前面已经用过stepinfo单次调用如果想对多种校正方案超前、滞后-超前、PID做批量对比可以用表格函数汇总configs {未校正, 超前, 滞后-超前, PID}; ts_all zeros(4,1); Mp_all zeros(4,1); for i 1:4 sys_i feedback(G_cl{i}, 1); info stepinfo(sys_i); ts_all(i) info.SettlingTime; Mp_all(i) info.Overshoot; end T table(configs, ts_all, Mp_all, VariableNames, {方案, 调节时间, 超调量});注意feedback(G_cl{i},1)要求G_cl是开环传递函数若模型已是闭环直接用stepinfo即可。表格输出到命令窗口时用disp(T)写报告时可以直接截图。5.2 纯滞后系统的PID参数整定技巧对含有纯滞后环节的PID整定我惯用的方法是SMITH预估器的简化替代先不管滞后用pidtune调好PID然后引入滞后并缩小比例增益10%20%因为纯滞后会降低相位裕量。例如前面示例中对象为(G(s)e^{-10s}/(10s1))不带延时时PID参数可能是Kp0.8, Ki0.04, Kd2加入10秒延时后手动把Kp降到0.65同时增大Ki以补偿稳态误差再通过Simulink仿真微调。验证时除了看阶跃响应还可以观察输入扰动下的恢复时间。对延时大的系统过大的Kd会放大高频噪声导致控制量抖振此时应限制微分增益或改用低通滤波器。MATLAB中PID Controller模块的滤波系数N滤波器时间常数倒数默认100实际工程建议降到2050曲线会更平滑。5.3 从Bode图到模拟电路元件参数的换算实验二第二题要求设计模拟电路校正器并确定元器件参数。一种常见的超前校正电路是运放加RC网络其传递函数为[ G_c(s) \frac{R_2}{R_1} \cdot \frac{1 R_1 C s}{1 R_2 C s} ]如果上面设计出的超前校正器为(G_c(s) \alpha(1Ts)/(1\alpha Ts))可以令(R_1 C T)(R_2 C \alpha T)再取合理电容值如10μF反算电阻T_val 0.25; % 示例数值 alpha_val 0.1; C_val 10e-6; R1 T_val / C_val; R2 alpha_val * T_val / C_val;这样算出的电阻可能不是标准系列值工程中应选择一个接近于R1的标准值比如E24系列然后重新验算Bode图是否满足裕量要求。电阻值偏高时还要注意运放输入偏置电流的影响但这在理论实验报告中通常不必仿真。最后一个实用验证技巧用bode同时画出校正器单独、校正前和校正后的三条曲线使用不同颜色和线宽并调用legend标注。如果校正后幅值曲线在截止频率附近斜率比校正前平缓由-40变为-20dB/dec说明相角裕量确实提升了这与margin的计算结果一致。整个实验报告按这个顺序组织既覆盖了理论推导又保留了可复现的代码遇到导师追问参数依据时也能直接拿出对应脚本说明。本文还有配套的精品资源点击获取
返回列表