十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

labACT一、二阶系统频率特性测试与Bode/Nyquist分析

labACT一、二阶系统频率特性测试与Bode/Nyquist分析 简介这份《一、二阶系统频率特性测试与分析》文档面向自动化、电气工程及控制类课程学生也可作为实验指导教师与课程设计参考用于梳理典型一、二阶系统频率特性测试流程并借助Nyquist判据和Bode图完成稳定性判断。压缩包内仅1个docx文件大小约1.1MB内容以实验报告形式组织涵盖实验目的、设备与软件、频率特性测试原理、labACT实验台与虚拟示波器操作说明以及一阶水箱液位模型、二阶直流电机空载模型等对象分析。文档还包含多组测试数据表示范如何将实测幅频、相频数据与MATLAB、Multisim理论曲线对比并计算相位裕度、幅值裕度、谐振频率与谐振峰值便于读者理解参数变化对系统稳定性的影响。目前已有147人学习或浏览适合需要完成同类实验报告、复习频域分析或准备控制系统课程设计的学生参考。1. 从一张“跑不平”的 Bode 图说起带学生做 labACT 频率特性实验最常见的场面不是接线接错而是测完十分钟后把数据往 MATLAB 里一贴幅频曲线在中频段对不上、相频曲线整条往下偏了二三十度。查了半天发现是测试还没结束就点了停止或者惯性环节的转折频率被设备下限卡住压根没进入被测频带。一、二阶系统频率特性测试与分析这件事核心不在“会不会接电路”而在于你是否清楚幅频、相频、Nyquist 三张图分别测什么、参数 K 和 T 怎么定、实测与理论为什么会出现系统性偏差。它面向的是做自动控制实验、需要提交一份能自圆其说报告的人也适合已经工作但想把频域分析重新捡起来的工程师。下面按原理、硬件、仿真、实测、排错的顺序把它拆开讲。2. 频率特性的数学定义与测试原理2.1 从正弦稳态响应到 G(jω)对一个线性定常系统输入正弦信号 $x(t)X_m\sin(\omega t)$稳态输出是同频率但幅值和相位都变化的正弦$$y(t)Y_m\sin(\omega t\varphi)$$把输出与输入的幅值比和相位差随频率变化的规律抽出来就是频率特性import numpy as np def freq_response(K, T, w): 一阶惯性环节 G(s)K/(Ts1) 的频域响应 s 1j * w # 令 s jω G K / (T * s 1) # 复频域传递函数代入 mag abs(G) # 幅值 |G(jω)| mag_db 20 * np.log10(mag) # 转成 dB工程上更直观 phase np.angle(G, degTrue) # 相位角单位度 return mag_db, phase w np.logspace(-1, 2, 200) # 0.1 ~ 100 rad/s 对数扫频 mag_db, phase freq_response(K1, T1, ww)这里的K是开环增益T是时间常数w是以 rad/s 为单位的角频率。之所以用对数坐标是因为一阶环节的幅频在低频段近似平直、高频段以 -20dB/dec 下降转折点正好落在 $\omega1/T$相频从 0° 平滑过渡到 -90°转折频率处恰为 -45°。记住这两个数后面判断实测曲线是否合理全靠它。硬件测试就是用不同频率的正弦信号去“扫”这个 $G(j\omega)$。输入幅值已知输出幅值一比就是幅频两路信号的过零点时间差换算成角度就是相频或者干脆用李沙育图形把输入接 X 轴、输出接 Y 轴在示波器上看椭圆的长短轴比与倾斜一次读数同时拿到幅值和相位。2.2 Nyquist 判据怎么用在这两个系统上奈奎斯特判据把稳定性问题变成了复平面上的绕圈计数闭环系统稳定的充要条件是开环 Nyquist 曲线逆时针包围 $(-1, j0)$ 点的圈数 $N$ 等于开环右半平面极点数 $P$即 $ZP-N0$。本次实验的两个对象开环都没有右半平面极点$P0$所以只要曲线不包围 $(-1,j0)$ 点闭环就稳定。判稳的定量指标是相角裕度和幅值裕度。相角裕度 $\gamma$ 定义在幅值穿越频率 $\omega_c$幅频为 0dB 的那个频率处等于 $180°\angle G(j\omega_c)$幅值裕度 $K_g$ 定义在相位穿越频率 $\omega_g$相频为 -180° 处上等于该点幅频分贝数的负值参数计算位置表达式一般工程要求幅值穿越频率 $\omega_c$幅频过 0dB$|G(j\omega_c)|1$决定带宽、响应速度相角裕度 $\gamma$在 $\omega_c$ 处$180°\angle G(j\omega_c)$30°~60° 较合适相位穿越频率 $\omega_g$相频过 -180°$\angle G(j\omega_g)-180°$——幅值裕度 $K_g$在 $\omega_g$ 处$-20\lg|G(j\omega_g)|$大于 6dB 较稳对二阶系统 $G(s)\dfrac{K}{s(T_0 s1)}$当 $T_01$、$K25$ 时$\omega_n\sqrt{K/T_0}5\ \text{rad/s}$阻尼比 $\zeta0.316$代入 $\omega_c\omega_n\sqrt{\sqrt{14\zeta^4}-2\zeta^2}\approx4.19\ \text{rad/s}$相角裕度约 34.9°。这个数直接对应电机的超调量——裕度越小闭环阶跃响应振荡越凶。3. labACT 实验台接线与正弦信号生成3.1 模拟被控对象的电路实现一阶惯性环节在实验箱上用有源 RC 网络搭传递函数为$$G(s)\frac{R_f/R_i}{R_f C s1}$$其中 $R_f$ 和 $R_i$ 决定增益 $KR_f/R_i$$R_f C$ 决定时间常数 $T$。实验要求 $K$ 取 1即 $R_fR_i$同时转折频率 $f_c1/(2\pi T)$ 必须落在 0.5Hz 之后否则 0.5Hz 起扫时就看不到 -20dB/dec 段。比如取 $C1\ \mu F$、$R_f10\ k\Omega$则 $T0.01s$、$f_c\approx15.9\ \text{Hz}$直接超出测试上限反过来取 $R_f100\ k\Omega$$T0.1s$、$f_c\approx1.6\ \text{Hz}$正好在测试区间内。注意接线前先断电检查运放供电是否 ±12V 正常虚拟示波器探头的地与被测电路共地否则测出来的幅频会莫名其妙整体偏低。二阶对象是直流电机空载模型忽略粘性摩擦后开环传递函数为import numpy as np import matplotlib.pyplot as plt K 25 # 放大倍数 T0 1 # 机电时间常数 T1 0.1 # 电磁时间常数 num [K] # 分子 den np.polymul([T0, 1], [T1, 1, 0]) # s(T0 s1)(T1 s1) 展开 sys (num, den) # 展成多项式形式便于后续求频率响应 num, den sys w np.logspace(-1, 3, 500) s 1j * w G np.polyval(num, s) / np.polyval(den, s) plt.figure() plt.subplot(2, 1, 1) plt.semilogx(w, 20*np.log10(np.abs(G))) plt.ylabel(Magnitude (dB)) plt.subplot(2, 1, 2) plt.semilogx(w, np.angle(G, degTrue)) plt.ylabel(Phase (deg)) plt.xlabel(Frequency (rad/s)) plt.show()np.polymul把 $s$、$(T_0s1)$、$(T_1s1)$ 三个因式乘成一个多项式np.polyval在 $sj\omega$ 上求值这样不依赖控制系统工具箱也能画出 Bode 图。二阶开环在低频段是 -20dB/dec积分环节 $1/s$ 贡献过了 $1/T_01\ \text{rad/s}$ 后叠加惯性环节变成 -40dB/dec相位最终趋向 -180°所以 Nyquist 曲线从第三象限逼近原点。3.2 测试流程与开闭环切换labACT 软件里选“自动控制 - 线性控制系统的频率响应分析”选好一阶或二阶后点开始实验箱会自动产生幅值为 1、频率从 0.5Hz 到 64Hz一阶或 0.5Hz 到 16Hz二阶的一系列正弦信号。整个扫描约十分钟期间不要点停止虚拟示波器会同步把每个频率点的输出幅值和相位采样下来。一阶系统测试时窗口会逐点刷新L、φ、Im、Re四项数据二阶系统多一个细节——开环频率特性必须在闭环状态下测测完再反求开环。界面上方那个红色的“开环/闭环”字样双击就能切换显示。实际操作顺序是闭环状态下启动扫描记录闭环 Bode 数据填表 2双击切换成开环同一个频率点上重新读数填表 3每个频率点截图时同时勾选幅频、相频、幅相三个视图方便后面写报告。注意切换开闭环之后要等一两秒让采样稳定再读数否则会拿到切换瞬间的过渡值填进表里和理论差一大截。4. 实测数据与 MATLAB 理论曲线的对齐4.1 数据表的组织与误差来源一阶惯性环节测试表一般记录 $f$、测量幅频dB、理论幅频、测量相频、理论相频几列。以 $K1$、$T\approx0.05s$$f_c\approx3.2Hz$为例实测数据大致长这样f (Hz)测量 L (dB)理论 L (dB)测量 φ (°)理论 φ (°)0.50.00.2-9.0-8.91.94-1.91-1.55-31.4-31.37.5-5.41-7.1-51.9-67.333-13.3-14.3-81.0-84.3低频段两条曲线几乎重合高频段实测幅值偏大、相位偏小这是典型现象。原因主要有三一是运放本身有带宽限制和输出阻抗在高频段增益已经掉了二是示波器采样存在量化误差相位靠过零点判定时几十微秒的偏差就换出几度三是接线引入的分布电容让实际 $T$ 比标称值略大。误差在转折频率附近最大远离转折点反而变小这与一阶环节相位变化最剧烈的区间刚好吻合。把实测和理论画在同一张图上的最简做法import numpy as np import matplotlib.pyplot as plt # 实测点Hz 转 rad/s f_meas np.array([0.5, 1.94, 7.5, 33, 64]) mag_meas np.array([0.0, -1.91, -5.41, -13.3, -17.4]) ph_meas np.array([-9.0, -31.4, -51.9, -81.0, -87.0]) w_meas 2 * np.pi * f_meas # 理论曲线 K, T 1, 0.05 w np.logspace(-0.3, 2.1, 300) G K / (1j * w * T 1) fig, ax plt.subplots(2, 1, sharexTrue) ax[0].semilogx(w, 20*np.log10(np.abs(G)), b, labeltheoretical) ax[0].plot(w_meas, mag_meas, ro, labelmeasured) ax[1].semilogx(w, np.angle(G, degTrue), b) ax[1].plot(w_meas, ph_meas, ro) ax[0].legend(); ax[0].set_ylabel(dB) ax[1].set_ylabel(deg); ax[1].set_xlabel(rad/s) plt.show()2*np.pi*f_meas把示波器给的频率换算成角频率才能和理论公式里的 $sj\omega$ 对上semilogx保证横轴对数否则 Bode 图的斜率特征看不出来。如果不想手写bode()和nyquist()函数一行就能出图但对应数据表还是得自己采点。4.2 二阶闭环与开环的相互转换二阶闭环数据填表 2开环数据填表 3两者不是独立测的。闭环传递函数是$$W(s)\frac{\omega_n^2}{s^22\zeta\omega_n s\omega_n^2}$$而开环是$$G(s)\frac{\omega_n^2}{s(s2\zeta\omega_n)}$$对比可见闭环的分母去掉常数项就是开环分母差一个 $1/s$。所以实验平台把闭环状态下的输入输出关系存下来切换时在软件里做数学反求把等效开环画出来。自己验证时可以用from scipy import signal import numpy as np wn, zeta 15.81, 0.316 # 闭环wn^2 / (s^2 2*zeta*wn*s wn^2) sys_cl signal.TransferFunction([wn**2], [1, 2*zeta*wn, wn**2]) # 开环wn^2 / (s^2 2*zeta*wn*s) sys_ol signal.TransferFunction([wn**2], [1, 2*zeta*wn, 0]) w np.logspace(0, 2.5, 300) _, mag_cl, ph_cl signal.bode(sys_cl, w) _, mag_ol, ph_ol signal.bode(sys_ol, w)signal.bode返回的mag已经是分贝值ph是弧度制需要再转或者直接用返回的mag和ph对照实验台上的读数。开环在低频段幅值随频率下降 20dB/dec闭环在低频段幅值是平的等于 1这条差异是判断数据有没有填错表最直接的办法——如果表 3 的低频幅值也是平的那多半是把闭环数据抄进了开环栏。5. 三个高频故障的定位手法5.1 曲线整体平移先怀疑基准电压实测幅频整条曲线比理论高或低一个固定分贝数是最容易出现的故障。labACT 的正弦信号源基于 DAC0832参考电压 5V程序保证输出幅值为 1。如果实验箱基准电压漂了或者运放供电不足输出幅值就不再是 1而是 $1\Delta$于是所有频点的 $20\lg|G|$ 都多出 $20\lg(1\Delta)$。判别方法是把输入端直接接示波器另一个通道测输入幅值如果测到 1.1V 而不是 1V那曲线平移 0.83dB 就是这个原因改接一下信号源输出端的分压或换一台通道即可。5.2 相位跳变或读数不稳整形电路与采样输入信号送进处理器前要经 LM324 比较嵌位、CD14538 脉冲整形再送到 IRQ6 申请中断采样。如果整形后的脉冲宽度不够中断采样窗口太窄ADC0809 就会采到不稳定的值表现为某些频率点上相位读数来回跳。排查顺序是先确认输入端波形经过整形后是不是规整的方波峰峰值是否在 ADC 输入范围内0~5V再看中断频率和扫描频率是否冲突扫描太快时低频点还没采够周期数就切走了。5.3 Nyquist 图不闭合多半是频率点太少画 Nyquist 图时曲线到原点附近就断了或者起点没有从实轴上开始通常是扫描频率点不够密。一阶系统的 Nyquist 图是第四象限的一段圆弧从 $(K,j0)$ 出发随着 $\omega$ 增大半径缩小最终到原点如果高频点只测到 64Hz 就停圆弧右端会缺一截。手动画图时可以在扫描点之间插值补几个频率import numpy as np w_dense np.logspace(np.log10(0.5*2*np.pi), np.log10(64*2*np.pi), 200) G 1 / (1j*w_dense*0.05 1) # 实部做横轴虚部做纵轴 import matplotlib.pyplot as plt plt.plot(G.real, G.imag) plt.axis(equal) plt.xlabel(Re); plt.ylabel(Im) plt.show()G.real和G.imag分别对应实验界面上的Re和Im两列拿示波器读到的数直接标在同一张图上就能看出实测点落在理论圆弧的哪一侧。如果实测点整体偏向虚轴Im 绝对值偏大说明实际相移比理论大通常对应 $T$ 估小了。5.4 利用谐振峰反推阻尼比二阶闭环幅频在小阻尼时会出现谐振峰峰值频率和谐振峰值为$$\omega_r\omega_n\sqrt{1-2\zeta^2},\quad M_r\frac{1}{2\zeta\sqrt{1-\zeta^2}}$$反过来说从实验测到的谐振峰高度就能倒推阻尼比。比如测到 $M_r\approx4.44\ \text{dB}$对应 $M_r$ 的线性值约 1.67解 $1/(2\zeta\sqrt{1-\zeta^2})1.67$ 得 $\zeta\approx0.316$与理论值吻合说明数据可信若测得 6dB 以上则 $\zeta$ 偏小检查电机负载是否真的空载、有没有附加摩擦。这比单看曲线形状更能定量校核。5.5 实测与仿真对不上的三条核对清单最后给一份快速自查顺序省得在报告里反复改数据核对 $T$ 和 $f_c$转折频率是否落在扫描频带内不在的话实测看不到斜率变化理论图也要相应改参数。核对开闭环状态表 2 填闭环、表 3 填开环切换后等稳定再读数。核对单位示波器给 Hz公式里是 rad/s中间差 $2\pi$这个换算漏掉会让整个相频曲线错位是最高频的低级错误。把这三条走一遍八成以上的“数据对不上”都能定位到具体是哪一步出的问题剩下的才是电路和器件本身的误差。本文还有配套的精品资源点击获取
返回列表