简介:围绕电机控制中的响应带宽计算,这份文档面向从事运动控制、伺服系统调试与电机控制算法的工程师及学习者,帮助理解带宽如何决定系统跟踪输入参考信号的能力,并厘清典型二阶系统与PMSM双闭环系统的带宽推导思路。内容从闭环频率特性、-3dB带宽定义展开,涉及二阶系统自然频率与阻尼比关系、电流环PI与SVPWM延迟建模、速度环简化,以及伺服带宽测试方法和主流产品数据对比。压缩包仅含1个docx文件,大小约189KB,篇幅集中、便于按主题查阅。已有4694人学习,可作为伺服带宽估算、参数整定和产品指标对照的参考笔记。
1. 带宽不是“响应快”:一次扫频让我推翻了自己的判断
调伺服的人常有个直觉:阶跃响应上升快、超调小,就觉得这套电机控制调得不错。但换成一串正弦指令扫过去,同样的参数会在某个频点上开始掉幅值、拖相位,再往上就彻底跟不上。这个“跟不动的边界”就是响应带宽——它不描述系统有多快,而描述系统能忠实复现多高频率的输入。把机电系统当成低通滤波器看,带宽就是那条截止线;搞懂它怎么算、怎么测、被什么卡住,才看得懂电流环为什么敢跑几千赫兹、速度环却常年停在几百赫兹,也才知道手册上那句“速度环带宽”到底承诺了什么。
2. 把机电系统当滤波器:-3dB 和 90° 相移在测什么
2.1 为什么机电系统天然是低通
伺服系统里到处是储能元件:电机的相电感 L 阻碍电流突变,转子惯量 J 阻碍转速突变,功率器件从采样到出波还有一个固定延迟。这三样东西在频域里的共同表现,就是频率越高、系统越“懒得跟”。严格讲,任何用真有理分式描述的物理系统,当 ω→∞ 时分子阶次低于分母,幅值必然趋于零,所以低通不是设计选择,而是物理约束的结果。
这一点很关键,因为它决定了带宽的定性含义:带宽之内,系统对输入的增益大致是平的,输入什么样、输出大致什么样;带宽之外,增益按固定斜率往下掉,输入的高频成分被削掉。一个 200Hz 带宽的速度环,给 500Hz 的正弦速度指令,输出不是“慢一点”,而是幅值衰减、相位滞后,波形已经变形。所以讨论伺服性能,本质是讨论这条曲线在哪里弯下去,而不是讨论某个单一时刻的响应速度。
2.2 两个判据的物理来源
一份伺服系统通用技术条件的行业标准里,“频带宽度”给了两个并列判据,测试方法写得很具体:驱动器工作在速度模式,输入幅值为额定转速指令 0.01 倍的正弦转速指令,频率从 1Hz 起步慢慢往上加,同步记录电机实际转速曲线。随着频率升高,实测转速对指令的相位滞后逐渐增大、幅值逐渐减小。相位滞后到 90° 的那个频率,叫 90° 相移带宽;幅值降到低频段幅值的 1/√2(也就是 -3dB)的那个频率,叫 -3dB 带宽。
为什么要定两个判据?因为它们衡量的不是同一件事。幅值判据看的是“还剩多少能量传过去”,相位判据看的是“落后了多少节拍”。在一个阻尼比较低的系统里,幅频曲线在截止点附近会因为谐振而上翘,单看 -3dB 穿越点容易读偏;而相频曲线是单调下降的,90° 那一点相对好定位。反过来,在过阻尼系统里,相位滞后到 90° 时幅值可能早就掉到 0.7 以下了,这时候 -3dB 判据更保守。标准把两个都列出来,是让测试者根据系统阻尼特性选择一个能稳定复现的口径,而不是让你随便挑个好看的数。
注意:这两个判据在阻尼比正好 0.707 时重合,其余情况不重合。厂商手册里的带宽如果不注明用的是哪个判据,跨机型比较基本没有意义。
2.3 二阶系统的带宽公式是怎么解出来的
单位负反馈系统的闭环传递函数是 Φ(s) = G(s)/(1+G(s)),其中 G(s) 是开环传递函数。带宽的定义落在闭环幅频特性上:找到那个让 |Φ(jω)| 降到 |Φ(j0)| 的 0.707 倍的频率,记作 ωb,区间 (0, ωb) 就是这个系统的带宽。写成对数形式就是 ω > ωb 时,20lg|Φ(jω)| < 20lg|Φ(j0)| - 3。
标准二阶系统的闭环传递函数是
Φ(s) = ωn² / (s² + 2ξωn·s + ωn²)
把 s 换成 jω,幅频特性是
|Φ(jω)| = 1 / √[(1 - ω²/ωn²)² + 4ξ²ω²/ωn²]
因为 |Φ(j0)| = 1,令上式等于 1/√2,两边平方整理,得到一个关于 (ω/ωn)² 的二次方程。解出来取正根:
ωb = ωn · [(1 - 2ξ²) + √((1 - 2ξ²)² + 1)]^(1/2)
这个式子值得盯着看几秒。带宽不是自然频率 ωn,而是 ωn 乘上一个只跟阻尼比 ξ 有关的系数。换句话说,闭环系统的“固有速度”由 ωn 决定,但真正能用的频宽还要被阻尼打折或者加成。
2.4 阻尼比把两个判据撕开
把不同 ξ 代进去算那个系数,结果很能说明问题:
| 阻尼比 ξ | 带宽系数 ωb/ωn | 特性 |
|---|---|---|
| 0.3 | 约 1.45 | 带宽看着大,但谐振峰高,实际波形很差 |
| 0.5 | 约 1.27 | 有可见超调,工程上偶尔用 |
| 0.707 | 1.00 | 两个判据重合,无谐振峰 |
| 1.0 | 约 0.64 | 过阻尼,带宽明显缩水 |
ξ < 0.707 时带宽系数大于 1,看起来“带宽更宽”,代价是闭环幅频在 ωn 附近拱起一个峰,时域上就是超调和振铃。很多初次调参的人被这个假象骗过:把增益往上推,测出来 -3dB 点确实右移了,但实际跟指令的波形反而更抖。原因就是带宽被谐振峰“撑”大了,而有效通带并没有变宽。
顺便解释一个常见困惑:对标准二阶系统,相位滞后 90° 恰好发生在 ω = ωn 处,因为此时分母实部 ωn² - ω² 为零。而 -3dB 点只在 ξ = 0.707 时才等于 ωn。所以两个判据的差值,本质就是阻尼比偏离 0.707 的程度。这也解释了为什么 ξ 小的系统,实测 90° 相移带宽会明显小于 -3dB 带宽——一个卡在 ωn,另一个被推到了 1.27ωn。
3. 电流环:PI 怎么把一阶对象校正成标准二阶
3.1 从 q 轴电压方程到一阶 RL 模型
永磁同步电机在 dq 坐标系下,交轴电压方程是
uq = R·iq + Lq·diq/dt + ωr(Ld·id + ψf)
最后一项是旋转反电动势和交叉耦合项,它随转速变化,但对电流环的动态来说属于慢变量。分析电流环带宽时把它忽略,剩下的就是一个电阻串电感的方程:
uq = R·iq + Lq·diq/dt
拉普拉斯变换后得到电机在电流环视角下的传递函数
Gm(s) = iq(s)/uq(s) = 1/(Lq·s + R)
一个标准的一阶惯性环节,极点落在 -R/Lq。到这里都还是教科书内容,真正让电流环变复杂的是它前面挂的两个环节。
3.2 一个载波周期的滞后从哪来
电流环的前向通道有三段:PI 调节器、SVPWM 调制、电机。PI 那段是 (Kcp·s + Kci)/s,电机那段刚推完,中间那段常被忽略,但它恰恰是限制电流环带宽的元凶。
流程是这样的:单片机定时器产生 PWM,软件在当前周期采到电流、算完占空比,把比较值写进定时器寄存器,这个值要到下一个载波周期才真正生效。中间隔着一个载波周期 Tpwm,这段时间里输出电压维持旧值。这个效应在控制框图上表现为一个纯延迟环节 e^(-Tpwm·s)。
纯延迟在频域里很讨厌,相位随频率线性下降,没有上限。工程上通常用泰勒一阶展开把它近似成一阶惯性:
e^(-Tpwm·s) ≈ 1/(Tpwm·s + 1)
这个近似在频率远低于 1/Tpwm 时足够准,一旦设计目标逼近这个量级就会明显低估相位滞后——这正是后面要讲的坑之一。式子里还有个 Kpwm 系数,它是 PI 输出变量到逆变器实际输出电压的比例。这个值的具体数值取决于 Park 变换矩阵的定义、标幺值基准的选取、调制方式,换个项目就完全不一样,但它本身不需要“标准答案”,只要能说清 PI 输出这个数对应多少伏就行。
3.3 零极点对消:PI 参数是可以算的
把三段串起来,电流环开环传递函数是
G_Acr(s) = (Kcp·s + Kci)/s · Kpwm/(Tpwm·s + 1) · 1/(Lq·s + R)
这里有个漂亮的设计动作:令 Kci/Kcp = R/Lq,也就是让 PI 的零点正好抵消电机的极点。代进去之后,分子 (Kcp·s + Kci) 可以提出 Kcp/Lq,乘以 (Lq·s + R),与分母的电机极点约掉,剩下
G_Acr(s) = Kcp·Kpwm / [Lq·s·(Tpwm·s + 1)]
一个积分加一个延迟极点。闭环之后得到
Φ_Acr(s) = (Kcp·Kpwm/(Lq·Tpwm)) / [s² + s/Tpwm + Kcp·Kpwm/(Lq·Tpwm)]
对照标准二阶形式,立刻能读出两个参数:
ωn = √(Kcp·Kpwm / (Lq·Tpwm)) ξ = 1/(2·Tpwm·ωn) = (1/2)·√(Lq / (Kcp·Kpwm·Tpwm))
反解一下,如果想让阻尼比落在 0.707:
Kcp = Lq / (4ξ²·Kpwm·Tpwm) Kci = Kcp·R/Lq = R / (4ξ²·Kpwm·Tpwm)
用 Python 把这套关系跑一遍,顺便看看量级:
import math # 电机与调制参数(典型小功率伺服量级) Lq = 2e-3 # q 轴电感,H R = 0.5 # 定子电阻,欧姆 Kpwm = 10.0 # PI 输出到逆变器电压的比例系数,与标幺基准有关 Tpwm = 100e-6 # 载波周期,对应 10kHz 开关频率 xi = 0.707 # 目标阻尼比 # 按目标阻尼比反解 PI 参数 Kcp = Lq / (4 * xi**2 * Kpwm * Tpwm) Kci = R / (4 * xi**2 * Kpwm * Tpwm) wn = math.sqrt(Kcp * Kpwm / (Lq * Tpwm)) xi_check = 1 / (2 * Tpwm * wn) # xi=0.707 时 -3dB 带宽恰好等于自然频率 wb = wn print(f"Kcp = {Kcp:.4f}, Kci = {Kci:.2f}") print(f"wn = {wn:.1f} rad/s, xi = {xi_check:.3f}") print(f"带宽约 {wb/(2*math.pi):.0f} Hz")跑出来的结果是 Kcp ≈ 1.0、Kci ≈ 250,自然频率约 7071 rad/s,对应带宽约 1125Hz。这里 Kcp 的数值恰好是 1 不用在意,它依赖 Kpwm 的定义口径;换成别的标幺方式,Kcp 会变,但带宽结论不变。
3.4 电流环带宽几乎只由载波周期决定
上面那段代码藏着一个反直觉的结论:当零极点对消成立、阻尼比定在 0.707 时,ωn = 1/(2ξ·Tpwm) ≈ 0.707/Tpwm,带宽只跟载波周期有关,跟 Lq、R、Kpwm 都无关。Lq 和 Kpwm 只是决定了要配多大的 Kcp 才能达到这个带宽,它们本身不设上限。
这就解释了为什么主流伺服产品的电流环带宽普遍落在 2000Hz 到 5000Hz 这个区间,而开关频率通常在 8kHz 到 16kHz。取 16kHz 载波、Tpwm = 62.5μs,理论 ωn 约 11314 rad/s,约 1800Hz;再考虑采样延迟(实际滞后常按 1.5 个载波周期估)、电流采样滤波、死区补偿误差,实测落到 1kHz 出头很正常。宣称 5kHz 电流环带宽的产品,背后一定是更高的开关频率、更短的采样链路延迟,或者干脆用了某种预测/前馈补偿。带宽这个数字从来不是调出来的,是硬件链路延迟决定的。
4. 速度环:把电流环压成一阶之后
4.1 电流环降阶的成立条件
设计速度环时不会把电流环的二阶闭环整个搬进来,那样方程会复杂到没法手算。常用做法是把电流环近似成一阶惯性环节。依据是:电流环闭环传递函数分母的 s² 项系数是 Tpwm,比起 s 项小得多,在速度环关心的低频段(几十到几百赫兹)可以忽略。
忽略 s² 项之后,电流环闭环近似为
Gc(s) = 1 / [(Lq/(Kcp·Kpwm))·s + 1]
直流增益为 1,时间常数 τi = Lq/(Kcp·Kpwm)。用上一节的参数算,τi = 2e-3/(1×10) = 200μs,对应一个约 800Hz 的极点,正好和电流环带宽同量级。这个近似的成立条件是速度环带宽明显低于电流环带宽,工程上一般要求差 5 到 10 倍。如果硬把速度环带宽推到接近电流环,这个一阶近似就失效了,闭环会出现两个靠得很近的极点,相位掉得比预期快得多,调参怎么调都别扭。
4.2 转矩方程串运动方程,得到 II 型系统
id = 0 控制下,电磁转矩简化为 Te = 1.5·pn·ψf·iq,其中 pn 是极对数,ψf 是永磁磁链。转子运动方程忽略负载和摩擦是 Te = J·dω/dt,ω 是机械角速度。转速以 rpm 表示时 n = 30ω/π。
把这三段拼起来:速度误差进 PI 得到电流指令,电流指令乘上电流环的一阶近似得到实际 iq,再乘 1.5·pn·ψf 变成转矩,除以 J·s 变成角速度,最后乘 30/π 变成 rpm。整条链路的开环传递函数是
G_Asr(s) = (Ksp·s + Ksi)/s · 1/(τi·s + 1) · (90·pn·ψf)/(2π·J·s)
整理成标准形式:
G_Asr(s) = (90·pn·ψf·Ksi)/(2π·J) · ((Ksp/Ksi)·s + 1) / [s²·(τi·s + 1)]
注意分母有两个积分环节,这是个 II 型系统。II 型系统对阶跃输入和斜坡输入都是无静差的,这对速度环来说是刚需——机床进给轴匀速走的时候,速度不能有稳态误差。代价是相位天生比 I 型系统少 180°,稳定性完全靠 PI 零点 (Ksp/Ksi) 在穿越频率附近把相位抬回来。
工程上的经验取值是:把零点放在穿越频率的 1/5 到 1/3 处,让它在穿越点贡献足够的相位超前;穿越频率本身受限于电流环带宽和机械谐振频率,通常取电流环带宽的 1/5 到 1/10。这正好解释了产品数据里的量级差:电流环 2000 到 5000Hz,速度环 250 到 800Hz,中间差不多就是 5 到 10 倍的关系。近几年有产品宣称速度环带宽做到 3kHz,那基本意味着电流环已经跑到十几千赫兹,且机械结构刚性极高、谐振点被推到很远。
4.3 用 MATLAB 把带宽读出来
开环传递函数已知之后,求带宽最省事的办法是让工具直接画闭环频响。以 G = 5850/(s(s+20)(s+25)) 为例,这个开环有三个极点(0、-20、-25),没有零点,闭环之后是一个三阶系统,手算带宽很麻烦。
% 定义开环传递函数:无零点,极点 0 / -25 / -20,增益 5850 G = zpk([], [0 -25 -20], 5850); % 单位负反馈闭环 sys = feedback(G, 1); % 画闭环 Bode 图,幅频曲线上 -3dB 处对应的频率就是带宽 figure(1); bode(sys); grid on; % 直接取带宽数值(注意:bandwidth 返回的是 rad/s) wb = bandwidth(sys); fprintf('带宽 = %.2f rad/s = %.2f Hz\n', wb, wb/(2*pi));feedback(G,1) 把开环变成闭环,bode 画出闭环的幅频和相频曲线,幅频曲线从低频平坦段往下掉 3dB 那个点的横坐标就是带宽。bandwidth 函数直接返回数值,省去在图上目测。这里有个必须强调的细节:bandwidth 返回的单位是 rad/s,转成赫兹要除以 2π。
这条开环算出来的带宽约为 17.2 rad/s,换算成赫兹是 17.2/(2π) ≈ 2.74Hz,不是 108Hz。乘 2π 和除 2π 搞反,数字会差 39 倍,这个错误在工程笔记里出现的频率高得惊人。
4.4 手工估算和仿真读数差在哪
用一阶近似手算时,很多人会把电流环直接当成 1 处理,得到速度环穿越频率约等于 Ksp·Kt/J。这个估算在穿越频率远低于电流环带宽时够用,误差在 10% 以内;一旦两者接近,手算结果会偏乐观 20% 到 30%,因为忽略了电流环那个极点带来的额外相位滞后。更靠谱的手算方式是先按二阶系统算一遍,把电流环极点当成一个固定的相位罚项减掉,看剩下的相位裕度够不够。
另一个偏差来源是机械谐振。真实传动链有弹性,柔性模态会在频响曲线上拱出一个谐振峰,如果这个峰落在穿越频率附近,闭环带宽会被它拉偏,甚至直接不稳定。仿真里如果只建了刚体模型,读出来的带宽会明显高于实测值。
5. 避坑与排查:算出来的带宽和测出来的对不上
5.1 测试侧的三个典型翻车
现象一:扫频幅值给大之后,测出的带宽比小信号时低一截。原因:标准里规定正弦指令幅值是额定转速的 0.01 倍,就是为了把系统限制在线性区。幅值一大,摩擦、齿槽、电流限幅这些非线性因素全被激发,输出波形削顶,等效增益下降,带宽自然缩水。 解决:严格按小信号扫频,多个幅值点各扫一遍做对比,只有在小幅值下趋于一致的读数才能作为带宽指标。如果小幅值下信噪比不够,靠多次平均提升信噪,而不是加大幅值。
现象二:把 rad/s 当成 Hz,带宽报大了六倍多。原因:角频率和频率差一个 2π 因子。仿真工具默认输出 rad/s,示波器扫频出来的横轴却是 Hz,两边一对就发现对不上。 解决:全流程统一单位。仿真侧用 bandwidth 拿到 rad/s 后立刻除以 2π 存成 Hz;测试侧确认频谱仪的横轴标签。写报告时两个单位都标注,别只写数字。
现象三:频响曲线上有谐振峰,-3dB 穿越点读到两个,不知道取哪个。原因:柔性模态在幅频曲线上拱起一个超过 0dB 的峰,之后又掉下去,-3dB 线被穿越多次。 解决:优先看相频曲线,90° 相移点通常是单调的;或者规定取第一次穿越点作为带宽,并在报告里注明判据。更彻底的做法是先做陷波把谐振峰压下去再测,这样得到的才是“可用带宽”。
现象四:电流环理论算出 1kHz 以上,实测只有几百赫兹。原因:建模时只算了一个载波周期的延迟,实际链路里还有电流采样 RC 滤波、ADC 转换时间、编码器接口的更新延迟、死区补偿误差,加起来可能等效 1.5 到 2 个载波周期。另外 Kpwm 的标幺基准如果和理论推导时不一致,实际 Kcp 等效值就偏小。 解决:按 1.5 个载波周期重新估延迟,把 1/(1.5·Tpwm·s + 1) 代进去重算带宽;同时用阶跃响应反推实际闭环时间常数,和理论值互相校验。
5.2 计算侧的自查
现象五:换了电机,同样的 PI 参数,带宽掉了一半。原因:零极点对消条件是 Kci/Kcp = R/Lq。换电机之后 R 和 Lq 都变了,原来的对消关系失效,闭环多出一个没被抵消的极点,阶次从二阶变成三阶,相位裕度下降,带宽跟着掉。 解决:PI 参数必须跟着电机参数走。把 R、Lq 的辨识值写进配置流程,上电时自动算 Kcp、Kci,别把参数固化在代码里当常量。
现象六:泰勒一阶近似在高带宽设计时失真。原因:e^(-Ts) 近似成 1/(Ts+1) 只在 ωT ≪ 1 时准。当设计带宽对应的 ω 接近 1/Tpwm 时,这个近似会低估延迟带来的相位滞后,算出来的带宽偏乐观。 解决:设计值逼近载波频率的 1/10 以上时,改用精确延迟环节或二阶 Padé 近似重新校核,仿真时直接放 e^(-Ts) 而不是惯性环节。
6. 带宽的取舍:往上推的代价和验证方法
带宽不是越大越好,这句话在纸面上人人都懂,实际调的时候很少有人真的算过代价。从抑制扰动的角度看,带宽高意味着系统对负载突变、电网波动响应更快,跟随误差更小;从抑制噪声的角度看,带宽高意味着编码器量化噪声、电流采样噪声、PWM 开关纹波这些高频成分会被原样放大,直接表现为电机啸叫、温升增加、甚至功率器件额外损耗。
有一组硬约束是绕不过去的:采样频率和载波周期。电流环带宽的天花板大致在载波频率的 1/10 到 1/20 这个量级,想把带宽翻倍,要么把开关频率翻倍,要么把控制链路的延迟砍一半,两者都直接对应成本。机械侧还有一条软约束:传动链的柔性模态。带宽一旦逼近第一阶谐振频率,闭环就会在谐振点上放大,噪声和振动同时出现,这时候唯一的办法是加陷波器或者降低带宽,没有第三条路。
验证带宽是否真的达到了设计值,我一般会走三步。第一步是仿真频响,把闭环系统的 Bode 图跑出来,读 -3dB 和 90° 两个点,和设计目标对一遍。第二步是小信号扫频实测,按标准的 0.01 倍额定幅值从低频扫到高频,记录每个频点的幅值比和相位差,画成散点图叠在仿真曲线上,看两条线在哪个频段开始分叉——分叉的位置通常就是模型失配最严重的地方,往往是延迟或者谐振。第三步是阶跃响应反推,用一阶或二阶拟合实测的超调和上升时间,反算等效带宽,和频域结果交叉验证。三步对不上,问题一定在模型里,不在测试里。
血泪教训是:我曾经盯着一个算出来 900Hz、实测只有 400Hz 的电流环折腾了一整天,把 PI 参数从头推了三遍,最后发现是电流采样滤波的截止频率设在了 800Hz,硬生生把闭环带宽压掉了一半。从那以后我每次做带宽估算,都强制把采样链路里每一个滤波器的截止频率列成一张表走一遍,任何一项低于目标带宽的三倍,就先改滤波器再谈调参。
这套从定义到推导、从电流环到速度环、从仿真到实测的方法,在这份资料里串成了一条完整的线,公式、MATLAB 脚本、测试方法和产品数据都在,适合对着自己手上的项目验算一遍。希望帮到你。
本文还有配套的精品资源,点击获取