简介:《控制系统中的响应带宽计算概述》是一份面向电机控制、伺服驱动方向学习者与工程师的专题文档,聚焦机电系统跟踪输入参考信号的能力及响应带宽的量化方法。内容从典型二阶反馈系统入手,由闭环传递函数和幅频特性推导带宽频率公式,并延伸至PMSM双闭环控制,梳理电流环PI、SVPWM延迟环节与电机传递函数的建模思路,以及速度环简化处理,从而把闭环带宽与控制器参数、电机电感电阻联系起来。文中还结合《交流伺服系统通用技术条件》说明正弦扫频测试与-3dB、90°相移带宽定义,并列出多款伺服产品速度环带宽数据,便于对照理解。资源包为1个docx文件,约189KB,结构紧凑,适合作为公式推导、测试口径和工程参数查阅的参考资料,方便按公式与工程数据交叉查阅。已有4694人学习下载。
1. 从一台伺服平台的跟随误差说起:响应带宽到底在算什么
某实验室的伺服测试平台在点位运动的高速段出现跟随误差突然拉大,硬件没换、参数没动,只是把行程从 200 mm 加到了 600 mm。现场第一反应是"速度环响应带宽不够",但紧接着就得回答三个具体问题:带宽按哪个口径算、算出来是多少、这个数和示波器上量到的对不对得上。电机控制里"响应带宽"人人会说,真要从传递函数一路推到实测的正弦曲线,中间隔着 PI 整定、PWM 延迟、采样周期和折算惯量一堆东西。下面按"口径统一 → 解析计算 → 脚本落地 → 扫频实测 → 验收答辩"这条线走一遍,做伺服方向毕设、课程设计的,或者手上正在调一台驱动器的,都能照着往下推。
2. 指标拆解与口径统一:把"带宽"翻译成能测的数字
带宽这件事,最容易翻车的不是算不出来,而是两拨人拿的不是同一个定义。有人拿闭环 -3dB 说事,有人拿相位滞后 90° 说事,还有人报的是开环穿越频率,三个数能差出百分之几十。所以动手算之前,先把"带宽"这两个字锁死成一个可测量、可复算的量。
2.1 低通滤波器的视角:带宽决定指令里有多少频率成分能被复现
运动控制和伺服系统里说的带宽,本质是机电系统跟踪输入参考信号的能力。机电系统在工程精度内都能处理成线性系统,线性系统又可以看成滤波器,而且通常是低通滤波器。低通意味着不是所有频率都能在输出里呈现:给一个频率范围很宽的输入,输出只保留其中低频的一部分,高频被衰减甚至彻底丢失。
这个视角比背定义有用得多。把位置指令拆成频谱就能看明白:一段梯形速度规划的点位运动,加减速段对应的是指令里的中高频成分,匀速段对应低频。带宽不够,丢的首先就是加减速段的细节,表现出来是跟随误差在起停瞬间冲高、到位后收敛慢;匀速段反而看着还行。回到开头那台平台,行程加长后同样的加速度下速度峰值更高、加减速时间更短,指令频谱整体往高频挪,原来勉强够用的带宽就不够用了——这是典型的"改工况不改参数"翻车。
反过来说,带宽也不是越高越好。从抑制噪声的角度,带宽拉大等于把编码器量化噪声、电流采样噪声、PWM 开关纹波一起放进环路,电机听着会有明显的高频啸叫,电流波形毛刺变粗。所以带宽是一个要"算准、配对"的指标,不是单向上限。
2.2 两种判据:-3dB 幅值衰减与 90° 相位滞后
行业标准《交流伺服系统通用技术条件》里给了"频带宽度"的定义和测法,这套口径在国产和进口驱动器的规格书里通用。定义是:伺服系统输入量为正弦波,随频率升高,输出量的相位滞后逐渐增大、幅值逐渐减小;相位滞后增大到 90° 时的频率,或者幅值降到低频段幅值的 1/√2(即 -3dB)时的频率,就是频带宽度。
测试方法的细节值得逐条拆开,因为每一条都对应一个坑:
| 测试条件 | 取值 | 为什么这么定 |
|---|---|---|
| 驱动器工作模式 | 速度模式 | 直接考察速度环,位置环的微分和滤波器会额外引入相位 |
| 指令形式 | 正弦波转速指令 | 单频激励,便于分离幅值和相位 |
| 指令幅值 | 额定转速指令值的 0.01 倍 | 小信号,避免进入电流限幅和饱和区,保证线性 |
| 起始频率 | 1 Hz | 覆盖低频段,先拿到低频幅值基准 |
| 判据一 | 相位滞后 90° | 对应一阶系统的转折频率,反映相位失真 |
| 判据二 | 幅值降至 1/√2 | 即 -3dB,反映功率半功率点 |
关键在"0.01 倍额定"这一条。用小信号的理由很实在:大信号扫频时电流环会撞限幅,系统进入非线性,测出来的带宽不是线性系统的带宽,而且每次测都不一样。这就是为什么有些现场扫频做出来的曲线"忽高忽低、重复性差",八成是幅值给大了。
对一阶系统,-3dB 点和 90° 相位点是同一个频率,两个判据等价。但真实伺服是电流环、速度环、滤波器、机械环节叠出来的高阶系统,两个判据会分离,通常 90° 相位点比 -3dB 点低。所以报数据时必须说明用的是哪个口径,规格书上写"速度环带宽 500 Hz",不写判据,横向比较是没有意义的。
2.3 产品带宽数据的横向对照:为什么不能直接比大小
市面上的伺服产品,电流环带宽普遍在 2000~5000 Hz 区间,速度环带宽落在 250~800 Hz,新一代产品宣称速度环响应带宽做到 3 kHz 的也有。按代际和定位整理一下大致是这样:
| 产品定位 | 电流环带宽(量级) | 速度环带宽(量级) | 备注 |
|---|---|---|---|
| 入门通用型 | 1.5~2 kHz | 250~350 Hz | 面向一般点位控制,惯量比要求宽松 |
| 主流通用型 | 2~3 kHz | 350~600 Hz | 带自整定和振动抑制功能 |
| 高性能型 | 3~5 kHz | 600~900 Hz | 高响应、低惯量场合 |
| 新一代高速型 | 5 kHz 以上 | 1 kHz 以上(宣称可达 3 kHz) | 依赖高分辨率编码器和高开关频率 |
这张表只能当量级参考,不能当性能排名用。理由有三个。第一,电流环带宽主要由被控电机和驱动器硬件决定(电感、母线电压、开关频率、采样延迟),速度环和位置环带宽主要由控制的机械对象决定(惯量比、传动刚度、谐振点)。同一台驱动器换到不同机械上,速度环带宽能差一倍以上。第二,各家测试条件不统一:扫频幅值是 0.01 倍还是 0.05 倍、有无加减速前馈、陷波器和低通滤波器开没开、速度反馈是编码器差分还是估算,都会让数字变动。第三,报的是指令响应还是扰动抑制,两者不是一回事。
我在评审方案时习惯加一句"以上数据口径待确认",就是为了防止拿别家的速度环带宽直接对标自家指标。真要做对比,正确做法是在同一台负载平台上、同一套滤波器配置下、同一判据下重新扫一遍,再谈高下。
3. 计算路径设计:从二阶系统公式到 PMSM 双闭环模型
口径统一之后,接下来是算。整个计算链路可以拆成两条并行的路径:一条是把闭环系统抽象成标准二阶系统,用解析式直接算带宽,用于快速估算和参数敏感性分析;另一条是对永磁同步电机(PMSM)的双闭环结构逐环建模,从电流环推到速度环,用于实际整定和仿真校核。两条路径最后都要落到频域曲线上读数,互相验证。
3.1 二阶系统的带宽解析式与阻尼比的敏感度
反馈控制系统的闭环传递函数统一写作 Φ(s) = G(s) / (1 + G(s)),其中 G(s) 是开环传递函数。设 Φ(jω) 为闭环频率特性,当闭环幅频特性下降到零频分贝值以下 3 dB,即降到 0.707|Φ(j0)| 时,对应频率就是带宽频率 ωb,满足 20lg|Φ(jωb)| = 20lg|Φ(j0)| - 3,频率区间 (0, ωb) 即系统带宽。
对标准二阶系统,闭环传递函数为 Φ(s) = ωn² / (s² + 2ξωn s + ωn²),其中 ωn 是自然频率,ξ 是阻尼比。它的幅频特性是 |Φ(jω)| = 1 / √[(1 - ω²/ωn²)² + 4ξ²ω²/ωn²]。令 |Φ(j0)| = 1,代入 -3dB 条件解出:
ωb = ωn · [ (1 - 2ξ²) + √( (1 - 2ξ²)² + 1 ) ]^(1/2)这个式子直接说明了阻尼比对带宽的影响。把不同 ξ 代进去算一遍比值 ωb/ωn:
| 阻尼比 ξ | ωb/ωn | 说明 |
|---|---|---|
| 0.3 | 1.454 | 有明显谐振峰,带宽"虚高",实际跟踪并不好 |
| 0.5 | 1.272 | 有轻微超调,工程上常见折中 |
| 0.707 | 1.000 | 无谐振峰,幅频曲线最平坦,带宽等于自然频率 |
| 1.0 | 0.644 | 过阻尼,响应变慢,带宽明显下降 |
| 1.5 | 0.374 | 严重过阻尼,带宽大幅缩水 |
这张表最实用的结论是:ξ ≈ 0.707 时 ωb 就等于 ωn,工程估算可以直接拿 ωn 当带宽用;ξ 小于 0.5 之后,虽然公式算出来的 ωb 变大,但那是谐振峰把 -3dB 点推高了,属于"账面带宽",实际阶跃响应超调很大,扫频曲线上会看到一个鼓包。我一般在设计时把 ξ 卡在 0.6~0.8,既不牺牲太多带宽,也不让谐振峰冒出来。
3.2 电流环建模:PI、SVPWM 延迟与电机电气方程的三段拼接
电流环控制的对象是 dq 坐标系下的 q 轴电流 iq。永磁同步电机的交轴电压方程为:
uq = R·iq + Lq·(d iq / dt) + ωr·(Ld·id + ψf)第三项是旋转反电势和耦合项。在设计电流环带宽时,通常忽略其中的动态项(反电势在电流环带宽内变化缓慢,可视为扰动),得到 uq = R·iq + Lq·(d iq/dt),于是电流环下的电机传递函数为 Gm(s) = iq(s)/uq(s) = 1/(Lq s + R)。这就是一个一阶惯性环节,转折频率 R/Lq,通常远高于目标带宽,所以电机本身不是限制电流环带宽的主要因素。
电流环的完整传递函数由三段串起来:
第一段是 PI 控制器,(Kcp s + Kci)/s,Kcp 是比例增益,Kci 是积分增益。
第二段是 SVPWM 的延迟环节。单片机的定时器模块控制发波,软件算出占空比后把模值更新到定时器比较寄存器,到下一个载波周期才真正生效,这一过程造成滞后,滞后时间取一个载波周期 Tpwm,写成 e^(-Tpwm·s)。用泰勒展开做一阶近似,得到 1/(Tpwm·s + 1)。这里有个容易绕晕的系数 Kpwm:它和 Park 变换矩阵、系统标幺值选取都有关系,看似复杂,其实只需要搞清楚 PI 调节器输出变量的物理意义——即逆变器输出电压(单位 V)与 PI 输出变量之间的比例关系。这个值没有唯一答案,不同人的计算习惯不同,标幺化之后取 1 也很常见。
第三段就是电机电气传递函数 1/(Lq s + R)。
三段相乘得到电流环开环传递函数:
GAcr(s) = (Kcp s + Kci)/s · Kpwm/(Tpwm·s + 1) · 1/(Lq s + R)做零点对消,令 Kci/Kcp = R/Lq,消掉电机的电气极点,开环化简为:
GAcr(s) = Kcp·Kpwm / [ Lq·s·(Tpwm·s + 1) ]闭环传递函数为:
ΦAcr(s) = Kcp·Kpwm / ( Lq·Tpwm·s² + Lq·s + Kcp·Kpwm )两边同除 Lq·Tpwm 化成标准二阶形式,对比 ωn²/(s² + 2ξωn s + ωn²),读出:
ωn = √( Kcp·Kpwm / (Lq·Tpwm) ) ξ = (1/2)·√( Lq / (Kcp·Kpwm·Tpwm) )再把 ωn、ξ 代进 3.1 的带宽公式,电流环带宽就出来了。整条链路里真正可调的只有 Kcp 一个量(Kci 被零点对消条件锁死了),所以电流环设计本质上就是"用 Kcp 同时定 ωn 和 ξ,二者不能独立调"——这是后面整定时会出现矛盾的根本原因。
3.3 速度环建模:把电流环压缩成一阶惯性环节
设计速度环时,不需要再把电流环内部的 PI 和延迟展开,直接把它等效成一阶惯性环节就够了,因为速度环的带宽通常只有电流环的 1/5 到 1/10,高频段的细节影响很小。等效形式是 Gc(s) = 1/(τi·s + 1),其中时间常数 τi = Lq/(Kcp·Kpwm),也就是电流环闭环的一阶近似。
电机侧的转矩方程,在 id = 0 的控制方式下简化成 Te = 1.5·pn·ψf·iq,pn 是极对数,ψf 是定子相绕组中永磁磁链的峰值。结合运动方程 Te - TL = J·(dω/dt),忽略负载转矩和摩擦阻尼,再套上转速换算 n = 30ω/π,就得到速度环的控制框图:PI 控制器 (Ksp s + Ksi)/s,串电流环等效一阶环节,串一个 1/s 的机械积分环节,增益系数里含 30/π、pn、ψf、J。
速度环开环传递函数写成:
GAsr(s) = (Ksp s + Ksi)/s · 1/(τi·s + 1) · [ (30/π)·pn·ψf / (J·s) ]整理成标准形式:
GAsr(s) = [(30/π)·pn·ψf·Ksi / (2π·J·... )] · ... (按上式展开即可)这一步不必强求手算出闭式解。工程上更常见的做法是:把开环写成"带一个零点的双积分 + 一个小惯性"结构,按典型二型系统整定,取中频宽 h = 5 左右,让 PI 零点对消掉机械积分之外的主导极点,然后用 MATLAB 的 feedback 和 bode 直接读闭环带宽。手算负责给初值,仿真负责校核,两者偏差控制在 20% 以内就算模型建得合理。
提示:30/π 这个把 rad/s 换成 rpm 的系数,在整理公式时最容易被抄成 60/π 或者漏掉,最后所有增益都偏一个常数倍。推导时先把单位写在纸上再动笔,能省下大半天。
3.4 开环到闭环的换算:用 MATLAB 读带宽的标准流程
拿到开环传递函数之后,闭环频率特性的获取不需要手算。已知开环 G(s),闭环就是 feedback(G, 1),再调 bode 画图,幅频曲线上 -3dB 对应的频率就是带宽频率。举个可以复现的例子,开环传递函数取:
G(s) = 5850 / [ s·(s + 20)·(s + 25) ]在 MATLAB 命令行里执行下面几行:
% 开环传递函数:无零点,三个极点 0、-20、-25,增益 5850 G = zpk([], [0 -25 -20], 5850); % 单位负反馈闭环 sys = feedback(G, 1); % 画闭环 Bode 图,打开网格便于读数 figure(1); bode(sys); grid on; % 也可以用 bandwidth 命令直接取闭环 -3dB 带宽(rad/s) wb = bandwidth(sys); fprintf('闭环带宽 = %.2f rad/s = %.2f Hz\n', wb, wb/(2*pi));这段代码有三处值得说明。zpk 的第一个参数是零点列表,这个系统没有开环零点所以留空;第二个参数是极点列表,0 是积分环节带来的原点极点,-20 和 -25 是两个惯性环节的极点;第三个参数是开环增益。feedback(G, 1) 求的是单位负反馈闭环,如果反馈系数不是 1,把第二个参数改成对应系数。bandwidth 命令返回的是 rad/s,换算成 Hz 必须除以 2π。
这个例子跑出来的闭环带宽大约 17.2 rad/s,折合约 2.7 Hz。这个数偏小,但它是个教学用的解析示例,重点在于流程:开环 → 闭环 → 幅频曲线 → -3dB 读数。真实伺服系统的开环增益要高得多,读出来的带宽自然落在几百赫兹。
注意:rad/s 转 Hz 是除以 2π,不是乘 2π。我看到过不少课程报告和调试笔记在这里写成"17.2 × 6.28 ≈ 108 Hz",量级直接差了将近 40 倍,后面所有结论都跟着偏。
4. 关键模块实现:参数整定、脚本计算与实测扫频
模型建完只是有了骨架,能不能用取决于三件事:PI 参数怎么定、公式怎么固化成可复算的脚本、实测数据怎么取。这三件事任何一环做得糙,最后都会变成"算出来一个数、测出来另一个数、谁也说服不了谁"。
4.1 电流环 PI 整定:零点对消与带宽、阻尼的联立求解
电流环只有 Kcp 一个自由变量,Kci 由零点对消条件 Kci/Kcp = R/Lq 定死。所以整定的实质是:先定目标阻尼比 ξ,反解 Kcp,再看带宽落在哪。
由 ξ = (1/2)·√(Lq/(Kcp·Kpwm·Tpwm)),取 ξ = 0.707,解出:
Kcp = Lq / (2·Kpwm·Tpwm)代一组实际参数进去。设电机 q 轴电感 Lq = 8 mH,定子电阻 R = 0.5 Ω,开关频率 8 kHz 对应载波周期 Tpwm = 125 μs,标幺化后取 Kpwm = 1:
Kcp = 0.008 / (2 × 1 × 125e-6) = 32 Kci = Kcp × R / Lq = 32 × 0.5 / 0.008 = 2000再回代算带宽:
ωn = √(32 × 1 / (0.008 × 125e-6)) = √(3.2e7) ≈ 5657 rad/s ξ = 0.707 → ωb = ωn = 5657 rad/s ≈ 900 Hz900 Hz 的电流环带宽,对照 2.3 节那张表,落在主流通用型的量级上,说明参数没有离谱。这里有个取舍要点:把 ξ 调到 0.5 能让 Kcp 增大一倍、带宽涨到 1.27 倍,但阶跃响应会有约 16% 超调,电流波形上能看到明显的过冲尖峰,长期运行对器件不友好。所以"带宽最大化"不是整定目标,在 ξ 合理的前提下拿到尽量高的带宽才是。
4.2 速度环整定:以电流环带宽为基准的分频设计
速度环的整定有一套现成的经验比例:速度环带宽取电流环等效带宽的 1/5 到 1/10。这个比例不是玄学,原因是两个环带宽太接近时,电流环的相位滞后会在速度环穿越频率处贡献额外的相位损失,相位裕度不够,阶跃响应会振荡。
先算电流环等效一阶环节的时间常数:τi = Lq/(Kcp·Kpwm) = 0.008/32 = 250 μs,对应转折频率约 637 Hz。按 1/5 分频,速度环目标带宽定在 120~130 Hz,即 ωc ≈ 800 rad/s 左右。
速度环对象增益按前面给的参数算:30/π ≈ 9.549,pn = 4,ψf = 0.05 Wb,折算惯量 J = 1e-4 kg·m²(含负载折算)。对象增益 Kt = 9.549 × 4 × 0.05 / 1e-4 ≈ 19099(单位 rpm/s per A)。
取 PI 零点对消电流环惯性,即 Ti = Ksp/Ksi = τi = 250 μs。按典型二型系统中频宽 h = 5 整定,得到开环增益 K ≈ 9.6e5,反解:
Ksp = K · Ti / Kt ≈ 0.026 Ksi = Ksp / Ti ≈ 104这组参数下闭环 -3dB 带宽落在 130 Hz 附近,与目标一致。如果觉得响应还可以再快一点,把 Ksp 提到 0.035 左右,带宽能到 160~170 Hz,但相位裕度会掉到 30° 以下,阶跃响应出现明显超调,这时候就要在"快"和"稳"之间做选择。整定表要写成可追溯的形式,方便答辩时解释每一个数的来源:
| 参数 | 取值 | 依据 |
|---|---|---|
| Lq | 8 mH | 电机参数手册 |
| R | 0.5 Ω | 万用表/参数辨识 |
| Tpwm | 125 μs | 开关频率 8 kHz |
| Kcp | 32 | ξ = 0.707 反解 |
| Kci | 2000 | 零点对消 R/Lq |
| τi | 250 μs | Lq/(Kcp·Kpwm) |
| Ksp | 0.026 | 典型二型,h = 5 |
| Ksi | 104 | Ksp/τi |
4.3 计算脚本:把解析式封装成可复算的函数
手算一遍能验证思路,但改一个电感值就要重算一遍,效率太低,也容易抄错。把 3.1 和 3.2 的公式封装成一个函数,输入电机和驱动参数,直接输出自然频率、阻尼比和带宽:
import numpy as np def second_order_bandwidth(wn, zeta): """二阶系统 -3dB 带宽(rad/s) wn : 自然频率 rad/s zeta : 阻尼比 """ a = 1.0 - 2.0 * zeta ** 2 return wn * np.sqrt(a + np.sqrt(a ** 2 + 1.0)) def current_loop(Kcp, Kpwm, Lq, R, Tpwm): """按零点对消后的二阶等效计算电流环指标""" wn = np.sqrt(Kcp * Kpwm / (Lq * Tpwm)) # 自然频率 zeta = 0.5 * np.sqrt(Lq / (Kcp * Kpwm * Tpwm)) # 阻尼比 wb = second_order_bandwidth(wn, zeta) tau = Lq / (Kcp * Kpwm) # 电流环等效时间常数 return { "wn_rad": wn, "wn_hz": wn / (2 * np.pi), "zeta": zeta, "wb_rad": wb, "wb_hz": wb / (2 * np.pi), "tau_i_us": tau * 1e6, } if __name__ == "__main__": r = current_loop(Kcp=32, Kpwm=1.0, Lq=8e-3, R=0.5, Tpwm=125e-6) for k, v in r.items(): print(f"{k:>10s} = {v:8.3f}")输出里 wn_hz 约 900,zeta 约 0.707,wb_hz 同样约 900,tau_i_us 是 250。函数里每个参数都对应一个物理量,Kpwm 在标幺化后取 1,如果项目里用了实际电压标幺,把它换成实际比例即可;Tpwm 直接取开关周期的倒数关系,双更新模式下要按实际延迟重新核。这类脚本的好处是可以批量扫参数:把 Kcp 从 10 扫到 100,一次画出带宽和阻尼的曲线,直接看出可行区间。
同样的思路可以扩到速度环,只是速度环的闭环带宽没有现成的解析式,得靠数值方法求 |Φ(jω)| = 0.707 的根,用 scipy 的 bode 或自己写二分法都行。我一般的做法是:解析式只算电流环,速度环全部交给数值求解,避免公式推错一个系数导致全盘偏移。
4.4 实测扫频:正弦指令幅值、采样与幅相提取
实测这步,方法严格照 2.2 节的测试条件来:驱动器切速度模式,输入正弦转速指令,幅值取额定转速指令的 0.01 倍,频率从 1 Hz 起逐点升高,每点等到波形稳定后记录电机转速响应。
具体实施时有几个参数必须提前定好:
采样率至少取最高测试频率的 20 倍。测到 500 Hz 的话,采样率不低于 10 kHz,否则一个周期只有几个点,幅值相位都不可信。记录长度至少包含 10 个稳态周期,前 2~3 个周期是过渡段,截掉不用。频率点的分布建议按对数均匀,1、2、3、5、8、12、20、30…一直到幅值掉到 -10dB 以下,这样 Bode 图在对数坐标上才平滑。
数据拿到后用相关法提取基波幅相,比直接找峰峰值稳得多,因为它对噪声和直流偏置不敏感:
import numpy as np def fit_sine(t, y, f): """已知频率 f,用最小二乘投影提取幅值和相位 t: 时间序列 s;y: 响应序列;f: 激励频率 Hz 返回幅值和相位(度),相位为 y 相对 cos 的滞后角 """ w = 2 * np.pi * f A = np.column_stack([np.cos(w * t), np.sin(w * t), np.ones_like(t)]) coef, *_ = np.linalg.lstsq(A, y, rcond=None) amp = np.hypot(coef[0], coef[1]) pha = np.degrees(np.arctan2(coef[1], coef[0])) # 正值表示超前 return amp, -pha # 取负号得到滞后角 # 逐频点循环,记录 (f, amp, lag),再除以低频幅值做归一化第三列那个常数项不能省,它吸收掉转速的直流分量(比如指令里的偏置或者静差),否则幅值会被直流抬高。归一化用 1 Hz 点的幅值做基准,这样幅频曲线在低频段是 1(0dB),找 -3dB 点就是找幅值降到 0.707 的那个频率。相位曲线从接近 0° 开始,找滞后到 90° 的点。两个点都记下来,报数据时一起给,比只报一个数专业得多。
5. 避坑与常见问题:算出来和测出来对不上的五个源头
理论和实测对不上,太正常了。区别在于有人能说清差在哪,有人只能说"大概模型不准"。下面五条是这类项目里出现频率最高的,基本覆盖了八成以上的偏差来源。
5.1 单位换算翻车:rad/s 与 Hz 之间的那道 2π
现象:理论算出来的带宽是 900,实测扫频测出来是 143,两者差了 6.28 倍,学生以为是模型错了,反复推翻重建。
原因:角频率 rad/s 和频率 Hz 之间差一个 2π,方向搞反了就是乘除颠倒。更隐蔽的一种是把开环穿越频率当成闭环带宽报,或者把 bandwidth 命令返回的 rad/s 直接写进报告当 Hz。
解决:所有中间变量带单位后缀,脚本里变量名直接写 wn_rad、wb_hz,函数返回字典里两个都返回,谁也不会拿错。报告里第一次出现频率值时统一注明单位,后面的数字才有意义。做完这一步再检查一遍数量级:伺服速度环带宽在几百赫兹,如果算出来是几赫兹或者几万赫兹,先怀疑单位,别急着改模型。
5.2 扫频幅值给大:非线性把带宽"测低"了
现象:扫频曲线在低频段还正常,频率升到一半幅值突然掉得很快,而且每次重测结果都不一样,重复性很差。
原因:指令幅值取到了额定值的百分之几甚至更高,电流环在加减速的半周期里撞上电流限幅,系统进入饱和,等效增益下降,带宽自然被压低。这种情况下测到的不是线性系统的频率特性,而是一个幅值相关的非线性响应。
解决:严格按标准的 0.01 倍额定执行,测之前先看电流波形,确认整个扫频过程中电流峰值不超过限幅值的 30%。如果确实需要测大信号特性,那就单独做一组,明确标注是"大信号带宽",不要和线性带宽混在一张表里比较。抓到电流波形平顶的那一刻,就知道这次数据不能用了。
5.3 延迟环节被简化掉:模型带宽虚高
现象:解析式算出来的电流环带宽 1.2 kHz,仿真里只有 700 Hz,实测 650 Hz。
原因:建模时把 SVPWM 的延迟当成零,或者把延迟时间取成了半个载波周期。实际从电流采样、软件计算到占空比更新生效,滞后接近一个完整载波周期,高开关频率下这个延迟贡献的相位滞后非常可观,直接压掉一大截带宽。
解决:延迟时间按实际实现取。单更新模式下取一个载波周期,双更新模式取半个,采样时刻和发波时刻不对齐的还要再加一点。建完模后用仿真的 Bode 图和实测曲线对一下,如果高频段相位差得特别多,先查延迟,再查滤波器。这一类误差不会影响低频段,所以只看幅频曲线的低频部分永远发现不了。
5.4 口径不一致:拿 -3dB 去对别人的 90°
现象:方案里写"速度环带宽 600 Hz",和竞品规格书的 500 Hz 一比觉得赢了,实际装到设备上响应还不如对方。
原因:自家报的是闭环幅值 -3dB 点,对方报的是相位滞后 90° 点,两个判据在高阶系统上能差 20%~40%。更复杂的情况是一方含前馈、一方不含,一方开了陷波器、一方没开。
解决:对外报数据必须写清三要素:判据(-3dB 还是 90°)、测点(指令响应还是扰动响应)、配置(滤波器、前馈、惯量比)。内部做对比时,把所有数据换算到同一判据下再比。最稳的办法是在自己的平台上把两种判据都测出来,做一张对照表,以后谁来问都能立刻给出对应口径的数。
5.5 机械环节拖后腿:电机端带宽很高,负载端根本跟不上
现象:编码器装在电机端,扫频测出来的速度环带宽 700 Hz,很漂亮;但设备实际运行时负载端的跟随误差依然很大,尤其是做大加减速的时候。
原因:传动链条的刚度、齿隙、联轴器柔性构成了一串谐振环节,通常落在 100~300 Hz。电机端的闭环带宽再高,超出机械谐振频率的部分也会被机械环节滤掉,甚至在谐振点上被放大,激起振动。这时候电机端测的"高带宽"没有实际意义。
解决:把谐振频率测出来(扫频时幅频曲线上的尖峰就是),要么用陷波器把它压下去,要么把速度环带宽限制在谐振频率的 1/3 以内。惯量比大的场合,这个限制比电流环带宽重要得多。做方案时把"电机端带宽"和"负载端带宽"分开列,别只报好看的那个数。
6. 验收与答辩:三条曲线对齐才算算得对
带宽这类指标,单看一个数没有说服力,能站住脚的是"三条曲线互相对得上":解析式算出来的一组、MATLAB 仿真的闭环 Bode 图、实测扫频的散点,画在同一张图上,趋势和拐点吻合、-3dB 点偏差在 10%~15% 以内,这套计算就算通过了。偏差超过这个范围不是数据不合格,而是模型里漏了东西,回到延迟、滤波器、机械谐振这三处找,几乎每次都能找到。
验收表我一般按下面这个结构写,答辩时投影出来,评委一眼就能看出工作量在哪:
| 验收项 | 判据 | 记录方式 |
|---|---|---|
| 解析计算 | 给出 ωn、ξ、ωb 推导链路,参数来源可追溯 | 参数表 + 公式推导 |
| 仿真校核 | MATLAB 闭环 Bode 与解析值偏差 ≤ 15% | Bode 图 + 读数标注 |
| 实测扫频 | 与仿真 -3dB 点偏差 ≤ 15%,曲线形状一致 | 幅频/相频散点图 + 原始数据 |
| 口径说明 | 明确 -3dB / 90°、指令 / 扰动、滤波器配置 | 报告首页数据说明 |
| 稳定性 | 相位裕度 ≥ 45°,阶跃响应超调 ≤ 20% | 阶跃波形 + 裕度读数 |
答辩常问的几个问题,提前准备答案。为什么阻尼比取 0.707?因为它对应幅频曲线最平坦、无谐振峰,带宽等于自然频率,估算最直接。为什么扫频幅值取 0.01 倍额定?为了保证线性、不进限幅。为什么电流环带宽远高于速度环?因为内环要足够快,外环才能把它当无延迟环节处理,分频比通常在 5 到 10 之间。带宽是不是越高越好?不是,带宽拉高会放大噪声、激发机械谐振,还要付出开关损耗和采样率的代价。这几个问题答得上来,说明不是照着公式抄了一遍。
还有一个加分项:把"算错了会怎样"讲清楚。比如 rad/s 到 Hz 忘了除 2π,会导致整定出来的 Kcp 大一个数量级,上电就是刺耳的啸叫;比如扫频幅值给大了,测出来的带宽偏低,于是把增益往上顶,结果一加载就过流。讲一个自己踩过的具体坑,比讲十个正确结论都有说服力。
从那以后我每次做带宽相关的方案,都会在报告第一页钉一张"口径、单位、测点"三行小表,改一个参数就重新跑一遍脚本、重新画一次三条曲线的对比图,绝不靠记忆里那个数往下推。这套流程多花不了半天,但能省掉后面无数轮"为什么对不上"的来回。希望帮到你。
本文还有配套的精品资源,点击获取