首页 / 资讯中心 / 文章详情

自动控制原理实验:MATLAB与MWORKS建模及系统性能分析

自动控制原理实验:MATLAB与MWORKS建模及系统性能分析 ★ FEATURED ARTICLE
简介这份文档面向具备基础控制理论与编程能力的高年级本科生、研究生及工程技术人员围绕自动控制原理实验教学系统讲解控制系统的建模、分析与校正方法。内容涵盖控制系统数学模型建立、时域与频域分析、典型环节动态性能分析、频率特性测量、系统串联校正以及EF-Servo集成与滤波六大实验模块每个实验均配有明确目的、内容、步骤与思考题帮助读者熟悉MATLAB与MWORKS工具在控制系统设计中的实际应用。资源包为1个docx文档压缩后约1.43MB结构完整、条理清晰便于按实验顺序逐步学习。目前已有676人学习下载。读者可借助该文档动手完成传递函数与状态空间模型转换、Simulink仿真、二阶系统时域频域特性分析、频率法串联校正等任务并通过思考题加深对控制系统工作原理的理解切实提升系统分析与工程实践能力。1. 从一次“仿真跑通但板子不听话”说起带过控制理论实验的人都遇到过这种场面Simulink 里阶跃响应曲线漂亮得能直接贴进报告可一接到实际电路上输出要么纹波大得离谱要么干脆发散。问题往往不在理论而在建模时把“理想环节”当成了“实际环节”——微分环节的纯微分在物理上根本不存在PID 的积分电容有漏电流这些在仿真里全被抹平了。这份《自动控制原理实验MATLAB 与 MWORKS 建模及系统性能分析》资源就是冲着这个落差来的。它把六个实验串成一条线从传递函数建模、时域频域分析到典型环节电路模拟、频率特性测量再到串联校正和 EF-Servo 集成滤波。适合正在上控制理论实验课的高年级本科生、研究生也适合需要快速把 MATLAB 和 MWORKS 两套工具跑通的工程技术人员。下面我按“能跑起来、能改参数、能对上电路”的顺序拆一遍。2. 环境与工具链MATLAB 和 MWORKS 怎么分工2.1 两套工具在实验里的角色划分这份资源最实在的地方是没有硬把 MATLAB 和 MWORKS 对立起来而是按实验类型分工。MATLAB 侧主要承担 Simulink 建模、时域响应求解step、lsim、initial和频域绘图nyquist、bode、marginMWORKS 侧则用 Julia 语法的TyControlSystems包完成 LTI 模型的建立与转换包括tf、zpk、ss以及串联、并联、反馈连接。实验一和实验五明确要求两边都做实验三、四以 MWORKS 为主实验六回到 MATLAB 做 EF-Servo 集成和滤波。这种安排的好处是你可以在 MWORKS 里快速验证模型结构再在 Simulink 里搭出带非线性环节的完整系统。常见做法是先用 MWORKS 把传递函数、零极点、状态空间三种模型互转一遍确认系数没抄错再进 Simulink 拖模块。我一般会建议学生把 MWORKS 当“计算器”用把 Simulink 当“实验台”用分工清楚后返工率会低很多。2.2 MWORKS 侧 LTI 建模的代码骨架实验一的核心是三种模型互转。下面这段代码把传递函数转成零极点增益模型和状态空间模型再转回传递函数用来检查数值精度# ex1_3.jl 模型转换与精度检查 using TyControlSystems using TyBase clear; clc() num 5 den [1 4 5 2] Gtf tf(num, den) # 建立传递函数模型 Gzpk zpk(Gtf) # 转为零极点增益模型 print(Gzpk) Gss ss(Gtf) # 转为状态空间模型 print(Gss) Gtf1 tf(Gss) # 再转回传递函数 print(Gtf1)逻辑说明tf(num, den)里num是分子系数行向量den是分母系数行向量按 s 的降幂排列。zpk(Gtf)自动提取零点和极点无零点时零点向量为空。ss(Gtf)得到的状态空间模型不唯一不同实现会给出不同的 A、B、C、D 矩阵但输入输出关系一致。最后tf(Gss)转回来时你会看到分子分母出现8.88e-16这种量级的系数这是浮点误差不是模型错了。参数说明num5表示增益为 5den[1 4 5 2]对应 s³4s²5s2。如果换成实验一里的4/(s(s1)²(s3))分母要展开成[1 5 7 3 0]注意常数项为 0 不能漏。2.3 Simulink 建模的模块选择与连线实验一第三题要求建立开环传递函数G(s)2/(s(s4))的单位负反馈 Simulink 模型。模块清单如下模块来源库参数设置StepSourcesStep time0, Final value1Transfer FcnContinuousNumerator[2], Denominator[1 4 0]SumMath OperationsSigns-ScopeSink默认连线顺序Step → Sum 正端Sum 输出 → Transfer Fcn 输入Transfer Fcn 输出 → Sum 负端构成单位负反馈同时 Transfer Fcn 输出 → Scope。这里容易翻车的是分母[1 4 0]写成[1 4]少了一个零系统变成一阶响应曲线完全不对。仿真时间建议设 10s步长用默认变步长即可。3. 时域与频域分析从阶跃响应到奈奎斯特判据3.1 二阶系统时域指标的代码化提取实验二要求改变阻尼比 ζ 和无阻尼振荡频率 ωn记录上升时间、峰值时间、超调量和调节时间。手工在图上点太慢用代码批量算更靠谱% 二阶系统时域指标批量计算 zita_list [0, 0.5, 0.707, 1, 1.5]; w 5; for i 1:length(zita_list) zita zita_list(i); num w^2; den [1, 2*zita*w, w^2]; G tf(num, den); [y, t] step(G); % 超调量 Mp (max(y) - 1) * 100; % 峰值时间 [~, idx] max(y); tp t(idx); % 调节时间2% 误差带 ts t(find(abs(y - 1) 0.02, 1, last)); fprintf(zita%.3f Mp%.2f%% tp%.3fs ts%.3fs\n, ... zita, Mp, tp, ts); end逻辑说明step(G)返回输出向量y和时间向量t。超调量取最大值减 1 再乘 100。峰值时间取最大值对应的时间点。调节时间用最后一个超出 2% 误差带的时间点近似严格定义是从该时刻起不再超出这里取的是保守值。参数说明zita_list是阻尼比序列w5是无阻尼振荡频率。运行后你会看到 ζ0 时超调量 100%ζ1 时超调量接近 0ζ1.5 时无超调但响应变慢。3.2 频域稳定性判断的两种路径实验二第三题要求用奈奎斯特图和闭环极点两种方法判断稳定性。开环传递函数G(s)2/(s³9s²14s)代码如下% 奈奎斯特判据与极点判据对比 num 2; den [1 9 14 0]; G tf(num, den); figure; nyquist(G); % 绘制奈奎斯特图 grid on; % 闭环极点判断 Gcl feedback(G, 1); p pole(Gcl); disp(闭环极点); disp(p); if all(real(p) 0) disp(系统稳定); else disp(系统不稳定); end逻辑说明nyquist(G)绘制开环奈奎斯特曲线判据是看曲线是否包围 (-1, j0) 点。feedback(G,1)得到闭环传递函数pole返回闭环极点。两种方法结论应一致。参数说明den[1 9 14 0]对应 s³9s²14s常数项为 0 表示有一个积分环节。如果奈奎斯特曲线正好穿过 (-1, j0)系统临界稳定实际中要避免。3.3 状态空间模型的响应求解实验二还要求用step和lsim求解状态响应和输出响应。以A[0 1; -2 -3]、B[0;1]、C[1 1]、D0为例% 状态空间模型响应求解 A [0 1; -2 -3]; B [0; 1]; C [1 1]; D 0; G ss(A, B, C, D); t 0:0.5:10; % 零输入响应 x0 [1; -1]; [yo, t, xo] initial(G, x0, t); figure; plot(t, xo, :, t, yo, -); legend(状态响应, 输出响应); % 零状态响应单位阶跃 u ones(size(t)); [yu, t, xu] lsim(G, u, t); figure; plot(t, xu, :, t, yu, -); % 总响应 y yo yu; x xo xu; figure; plot(t, x, :, t, y, -);逻辑说明initial(G, x0, t)求零输入响应x0是初始状态向量。lsim(G, u, t)求任意输入下的响应u必须与t同长度。总响应等于零输入响应加零状态响应这是线性系统的叠加原理。参数说明t0:0.5:10表示从 0 到 10 秒、步长 0.5 秒。如果步长太大曲线会失真太小则计算慢一般取 0.01 到 0.1 之间。4. 典型环节电路模拟与频率特性测量仿真和实物怎么对上4.1 六个典型环节的传递函数与电路参数实验三和实验四的核心是“电路模拟 软件仿真”对照。资源里给了六个环节的电路和传递函数我整理成表环节传递函数关键参数注意事项比例 PKKR1/R0纯比例无动态积分 I1/(Ts)TR0C阶跃响应线性上升比例积分 PIK(11/(Ts))KR1/R0, TR0C有零点比例微分 PDK(1Ts)近似实现纯微分不可物理实现惯性K/(Ts1)KR1/R0, TR1C一阶滞后PIDK(11/(Ts)Td s)近似实现积分电容漏电影响大这里最容易被忽略的是 PD 和 PID 的“近似实现”。理想 PD 的传递函数是 K(1Ts)但电路里用 R1、R2、R3、C 搭出来的是带惯性的近似微分高频段增益不会无限增大。仿真时如果用理想 PD阶跃响应在 t0 处会有一个冲激实际电路根本测不到。我一般会提醒学生仿真模型里给 PD 串一个小惯性环节时间常数取 R3C 的量级这样曲线才和示波器对得上。4.2 频率特性测量的代码实现实验四要求测一阶惯性环节和二阶开环系统的频率特性。用 MWORKS 或 MATLAB 画伯德图% 一阶惯性环节频率特性 K 1; T 0.2; num K; den [T 1]; G tf(num, den); figure; bode(G); grid on; margin(G); % 显示幅值裕度和相位裕度 % 二阶开环系统频率特性 num2 2; den2 [1 9 14 0]; G2 tf(num2, den2); figure; bode(G2); grid on; margin(G2);逻辑说明bode(G)绘制幅频和相频曲线margin(G)在图上标出幅值裕度、相位裕度和对应的频率。一阶惯性环节的幅频曲线在转折频率 1/T 处下降 3dB相频从 0° 渐近到 -90°。二阶开环系统因为有一个积分环节低频段斜率为 -20dB/dec转折频率处斜率变化。参数说明T0.2对应转折频率 5 rad/s。如果实验测得的曲线和仿真对不上先检查信号发生器输出幅值是否在电路线性范围内再看示波器探头衰减比是否设对。4.3 从频率特性曲线反求传递函数实验四还要求根据测得的频率特性求传递函数。一阶惯性环节的奈奎斯特图是一个半圆从半圆直径 r(0) 得到 K从某点频率 ωk 和相角 φ(ωk) 得到 T tan(φ(ωk))/ωk。实际操作时取半圆上几个点求平均比单点更稳。二阶系统则看低频渐近线斜率确定积分环节个数看谐振峰值和谐振频率估算阻尼比。这部分没有唯一答案报告里写清楚取点依据就行。5. 避坑与排查仿真跑不通时先看这几条5.1 传递函数系数顺序写反现象阶跃响应完全不对比如应该单调上升却出现振荡。原因MATLAB 的tf(num, den)要求系数按 s 的降幂排列有人习惯按升幂写。解决检查den第一个元素是不是最高次项系数常数项在最后。比如 s²3s2 应写[1 3 2]不是[2 3 1]。5.2 Simulink 反馈极性接错现象输出发散到无穷大。原因Sum 模块的符号设成了变成了正反馈。解决双击 Sum 模块把 Signs 改成-负端接反馈信号。如果系统本身是正反馈才用但控制实验里绝大多数是负反馈。5.3 MWORKS 包未加载或函数名冲突现象运行tf报错“未定义的函数”。原因没有using TyControlSystems或者 Julia 环境里装了同名包。解决在脚本开头加using TyControlSystems和using TyBase。如果还报错检查 MWORKS 版本是否包含该包必要时在包管理器里重新安装。5.4 仿真步长过大导致曲线失真现象响应曲线看起来像折线峰值被削平。原因变步长求解器在快速变化段步长太大或者固定步长设成了 1s。解决在 Simulink 的 Model Configuration Parameters 里把 Max step size 改成 0.01 或更小求解器选 ode45 或 ode23。MATLAB 脚本里t0:0.5:10的步长 0.5 对快速系统也偏大改成 0.01。5.5 实际电路与仿真对不上现象仿真超调量 20%实际电路超调量 50% 且带振铃。原因运算放大器的带宽限制、压摆率、电容漏电流以及面包板寄生电容。解决先确认运放供电电压充足再在反馈电阻上并联小电容几 pF 到几十 pF补偿相位最后检查接线是否过长。仿真里可以给理想模型串一个小惯性环节模拟运放带宽时间常数取 1/(2π×GBW) 量级。6. 二次开发把实验代码改成自己的分析工具这份资源的实验代码是很好的起点但直接拿来交报告有点浪费。我一般会做三件事参数化、批量化、可视化。参数化是把硬编码的num、den改成函数入参。比如把二阶系统分析写成一个函数function [Mp, tp, ts] analyze_second_order(zita, w) num w^2; den [1, 2*zita*w, w^2]; G tf(num, den); [y, t] step(G); Mp (max(y) - 1) * 100; [~, idx] max(y); tp t(idx); ts t(find(abs(y - 1) 0.02, 1, last)); end批量化是用循环扫参数空间把结果存成表格。比如 ζ 从 0 到 2、ωn 从 1 到 10各取 20 个点算 400 组指标用heatmap画出超调量随两个参数的变化。这样一眼就能看出哪些区域超调小、响应快比逐条曲线对比高效得多。可视化方面我习惯把奈奎斯特图和伯德图叠在一起看。nyquist判断绝对稳定性bode看裕度两者结合能判断系统“离不稳定还有多远”。如果幅值裕度小于 6dB 或相位裕度小于 30°实际电路大概率会振铃这时候就要在仿真里加校正环节。还有一个技巧把实验五的串联校正和实验六的 EF-Servo 滤波连起来做。先用频率法设计超前校正网络把相位裕度提到 45° 以上再在 EF-Servo 模型里加低通滤波抑制高频噪声。校正前后的阶跃响应和伯德图放一起对比报告的说服力会强很多。从那以后我每次带实验都强制学生先跑一遍参数扫描确认仿真模型在参数边界上不发散再进实验室接电路。这样至少能排除一半的“玄学”问题。希望帮到你。本文还有配套的精品资源点击获取
阅读完成 · 觉得有帮助?
咨询建站