伺服响应带宽:从-3dB/90°扫频到双闭环整定
简介这是一份聚焦控制系统响应带宽计算的专题文档面向电机控制、伺服调试工程师及自动化专业学习者帮助梳理机电系统带宽的定义、计算思路与工程测试方法。压缩包内为1个docx文件约189KB内容以公式推导和工程案例组织便于查阅与笔记整理。文档从典型二阶反馈系统闭环传递函数出发说明-3dB带宽频率与自然频率、阻尼比的关系并延伸至PMSM双闭环控制系统讨论电流环、速度环传递函数建模及带宽计算同时给出伺服系统正弦扫频测试流程和主流驱动产品速度环带宽数据对比。已有4694人学习适合需要理解带宽指标、核对计算过程或建立伺服参数直觉的读者参考。1. 从一条跟不上的正弦指令说起响应带宽到底卡在哪伺服调试现场最常听到的一句话是「响应带宽不够」但真追问下去十个人里有八个说不清这个数字是怎么来的。电机控制里的响应带宽说的是这套机电系统还能以多大比例、多小滞后跟住一条正弦指令指令频率再往上走幅值被压低、相位被拖后系统就开始「听不见」了。它不是一个能拍脑袋报出去的指标——给定电机电感、载波周期和 PI 参数带宽的上限基本已经被写死。这份资料做的事情是把行业标准里的扫频测试方法、二阶系统的闭式解、以及永磁同步电机双闭环下的折算过程串成一条完整的线。适合两类人正在整定电流环和速度环、想搞清楚手里的 Kp 到底换来了多少带宽的以及需要出一份带宽测试报告、必须把数字的来源讲清楚的。2. 把定义钉死-3dB、90°相移与 0.01 倍额定的扫频法2.1 低通滤波器视角高频指令究竟去哪了机电系统在带宽讨论的尺度上都可以线性化线性系统当滤波器看而且绝大多数是低通。这个视角一旦建立很多争论就自动消解了输入一条幅值恒定、频率缓慢上扫的正弦指令输出不会是同样幅值的正弦幅值会掉、相位会滞后掉到某个门限以下这条指令在反馈里就等于没发生过。行业标准JB/T 1643 那一类伺服系统通用技术条件给的定义是两条判据二选一相位滞后增大到 90° 时的频率叫 90° 相移带宽幅值衰减到低频段幅值的 1/√2 时的频率叫 -3dB 带宽。注意这里的 1/√2 是相对低频增益而言的不是相对 1。如果系统低频闭环增益本身就是 0.98-3dB 点在 0.98×0.707 那个位置不是 0.707。这里有个高频混淆点必须分开开环截止频率和闭环带宽不是一回事。开环截止频率是回路增益为 1 的那个频率闭环带宽是闭环幅频掉 3dB 的频率两者数值接近但物理含义不同报报告时混着写评审一追问就露馅。单位反馈、相位裕度接近 90° 时二者数值近似相等裕度越小差距越大。2.2 两个判据不等价-3dB 带宽和 90° 相移带宽差多少对典型的二阶闭环 Φ(s)ωn²/(s²2ξωn·sωn²)相位是 -arctan[2ξω/ωn / (1-ω²/ωn²)]。令相位等于 -90°分母实部必须为零也就是 1-ω²/ωn²0解出来 ωωn。这个结论很干净二阶系统的 90° 相移频率恒等于自然频率 ωn和阻尼比无关。-3dB 带宽就没这么客气了它随 ξ 变化。把不同 ξ 代进后面第 3 章的公式能算出下面这张表阻尼比 ξωb/ωn90° 相移频率/ωn说明0.301.4531.000有明显谐振峰-3dB 点被峰抬高0.501.2721.000工程上常见的欠阻尼区间0.7071.0001.000最大平坦两个判据重合1.000.6441.000过阻尼幅值早就掉下去了1.500.3741.000带宽被阻尼吃掉大半读这张表能得到一个很实用的判断如果某台驱动器给出的带宽数字远大于同行的先别急着信去看看它的阶跃响应是不是有明显超调——超调大通常意味着 ξ 小而 ξ 小会把 -3dB 点往上抬数字自然好看。反过来说用 90° 相移判据测出来的结果对不同阻尼水平的系统可比性更好这也是标准里两条判据并存的原因之一。2.3 按标准复现一次扫频幅值、频点、数据记录测试条件在标准里写得很死驱动器工作在速度模式输入正弦转速指令幅值取额定转速指令值的 0.01 倍频率从 1Hz 起逐步升高同步记录电机转速反馈曲线。0.01 倍这个数字经常被省略但它是整场测试有效性的前提第 5 章会专门说为什么。实操顺序我一般这么走空载或带等效惯量负载确认机械连接无松动编码器分辨率足够分辨 0.01 倍额定转速对应的波形。速度环、电流环参数固定并记录整场测试中途不改参数。频率从 1Hz 起按 1、2、5、10、20、50、100…这样的等比序列取点在预估 -3dB 点附近加密。每个频点等幅值稳定后再截取数据窗窗长取整数个指令周期。对每个窗做正交解调提取基波幅值比和相位差画 Bode 图读取 -3dB 点和 -90° 点。第 5 步可以抄这段import numpy as np def amp_phase(cmd, fb, fs, f0): 从稳态片段提取基波幅值比与相位差 cmd/fb : 指令与反馈数组同一时间窗、已去掉起始瞬态 fs : 采样率 Hz f0 : 注入频率 Hz 返回 (幅值比, 相位差 度) n len(cmd) t np.arange(n) / fs ref np.exp(-1j * 2 * np.pi * f0 * t) # 正交参考信号 C 2 / n * np.sum(cmd * ref) # 指令基波复幅值 F 2 / n * np.sum(fb * ref) # 反馈基波复幅值 return np.abs(F) / np.abs(C), np.angle(F / C, degTrue) # 逐频点调用累积成两条曲线 # ratio, ph amp_phase(cmd_win, fb_win, fs10000, f050.0)逻辑说明正交解调等价于对单一频率做 DFT比整段 FFT 更抗泄漏因为它只关心注入的那根谱线。参数说明fs必须和实际采样率一致指令与反馈两路要用同一时钟窗长n必须覆盖整数个指令周期否则解调出来的幅值和相位都会带上泄漏误差通常表现为相邻频点数据「跳」。如果编码器反馈有量化台阶可以先做一次滑动平均但平均窗不要超过最短周期的十分之一否则会额外引入相位滞后把带宽测小。提示指令和反馈如果走不同的采样通道或不同的滤波环节两者之间存在固定的通道延时。这个延时会在高频段被误读成系统相位滞后读 90° 相移点之前先用低频段数据把这个固定偏移标定掉。3. 二阶闭环的解析解给定 ωn 和 ξωb 不用试凑3.1 从闭环传递函数到带宽方程带宽的定义式本身就是一个方程|Φ(jωb)|0.707|Φ(j0)|。对二阶系统|Φ(j0)|1于是要解的是1/√[(1-ω²/ωn²)² 4ξ²ω²/ωn²] 1/√2两边平方再取倒数得 (1-x)²4ξ²x 2其中 xω²/ωn²。展开整理成一元二次x² (4ξ²-2)x - 1 0取正根 x (1-2ξ²) √[(1-2ξ²)²1]于是ωb ωn·√x ωn·[(1-2ξ²)√((1-2ξ²)²1)]^0.5这个式子值得记在脑子里因为它是后面所有折算工作的终点。它同时告诉你两件事带宽和 ωn 成正比所以任何把 ωn 抬上去的手段加大比例增益、减小电感、缩短载波周期都直接换算成带宽带宽和 ξ 是强非线性关系ξ 从 0.7 掉到 0.3ωb/ωn 从 1.0 涨到 1.45看起来带宽涨了 45%实际上系统已经在振荡边缘这个「涨」是拿稳定性换的。3.2 用代码把 ωb 算出来再和 bode 图对一遍手算容易错在括号层级上直接让机器算。下面这段同时跑解析式和数值 Bode两者对不上就说明公式抄错了import numpy as np from scipy import signal def wb_second_order(wn, xi): 二阶系统 -3dB 带宽 rad/s a 1 - 2 * xi**2 return wn * np.sqrt(a np.sqrt(a**2 1)) wn, xi 100.0, 0.5 # 自然频率 rad/s阻尼比 num [wn**2] den [1, 2 * xi * wn, wn**2] # s^2 2ξωn s ωn^2 w np.logspace(0, 4, 400000) _, mag, _ signal.bode(signal.TransferFunction(num, den), w) idx np.argmax(mag -3.0) # 首个跌破 -3dB 的频点 print(f解析解 {wb_second_order(wn, xi):.2f} rad/s) print(f数值解 {w[idx]:.2f} rad/s)逻辑说明signal.bode返回的 mag 已经是 dB直接和 -3.0 比较即可np.argmax在布尔数组上返回第一个 True 的下标比np.where(...)[0][0]更省事。参数说明频率向量要够密logspace取 40 万点能保证交点误差在 0.01% 量级wn只影响缩放不影响形状所以形状验证用任意wn都行。跑出来两个数应该都是 127.2 rad/s 附近也就是 20.2Hz。MATLAB 侧更省事Control System Toolbox 里bandwidth(sys)直接返回 -3dB 带宽单位 rad/s。要读 90° 相移频率用bode出相频曲线后找 -90° 的穿越点或者对二阶系统直接用wn前面已经证明过二者相等。3.3 ξ 三段的物理含义单调区、峰值区与临界ξ ≥ 1 时闭环幅频单调下降没有谐振峰-3dB 带宽小于 ωn。这时候系统很老实但响应慢阶跃上升时间被拉长。ξ 落在 0.707 附近是最大平坦幅频在 ωn 之前基本是平的之后 -40dB/dec 滚降这是很多教材推荐的「最优阻尼」。ξ 0.707 开始出现谐振峰峰值频率 ωr ωn√(1-2ξ²)峰值 Mr 1/(2ξ√(1-ξ²))。谐振峰对带宽读数的影响是实打实的干扰。以 ξ0.3 为例Mr≈1.75也就是幅频先冲到 4.9dB 再往下掉-3dB 点相对 0dB被推到 1.45ωn而这条曲线上 -3dB 出现在峰值之后的下降段位置对参数极其敏感ξ 再小一点数字就跳。这种系统在扫频测试里还有个特征时域波形肉眼可见地「一大一小」幅值不稳定。看到这种波形先别记数据回去把增益降下来。反过来如果只盯着 -3dB 带宽这一个数ξ 从 0.707 加到 1.0带宽掉 36%但阶跃响应几乎不超调、调节时间反而可能更短。这就解释了为什么有些控制器带宽数字一般但手感很稳它把阻尼留足了。4. 双闭环折算电流环怎么整定速度环怎么降阶4.1 电流环被控对象从 dq 电压方程砍到 1/(Lq·sR)dq 坐标系下 q 轴电压方程是 uq R·iq Lq·diq/dt ωr(Ld·idψf)。最后那一项是反电势和磁阻耦合项对电流环来说它是一个缓变的外部扰动带宽设计时先丢掉剩下的就是标准的 RL 一阶环节Gm(s) iq(s)/uq(s) 1/(Lq·s R)这一步「忽略动态项」不是耍流氓前提是电流环带宽远高于转速变化引起的反电势变化频率。实际工程里反电势通过前馈补偿掉剩下的残差由 PI 的积分项吃掉所以这个近似在电流环带宽设计阶段是成立的。PI 控制器写成 Kcp Kci/s逆变器用一个增益 Kpwm 表示再加上从占空比更新到实际发波之间的滞后。滞后的处理方式有两种精确的 e^(-Tpwm·s)或者一阶泰勒近似 1/(Tpwm·s1)。前者保相位后者保计算简便两者在 ωTpwm 1 时几乎一致。Kpwm 这个系数看着玄学其实只取决于 PI 输出变量的物理意义——它就是把调节器输出映射到逆变器输出电压的那个比例标幺制下取 1 是很常见的做法取值不同只影响 Kcp 的绝对数值不影响带宽结论。4.2 零极点对消与那个躲不掉的 Tpwm把三部分串起来开环是GAcr Kcp(sKci/Kcp)/s · Kpwm/(Tpwm·s1) · 1/(Lq·sR)令 Kci/Kcp R/LqPI 的零点正好抵消电机的电气极点式子塌缩成GAcr (Kcp·Kpwm)/(Lq·s·(Tpwm·s1))闭环传递函数是 KcpKpwm/(LqTpwm·s² Lq·s KcpKpwm)化成标准形式对出ωn √[Kcp·Kpwm/(Lq·Tpwm)]ξ ½·√[Lq/(Kcp·Kpwm·Tpwm)]这两个式子相乘会得到一个很有意思的恒等式ξ·ωn 1/(2Tpwm)。也就是说阻尼和自然频率的乘积只由载波周期决定你加大 Kcp 抬 ωn 的时候ξ 是被动下降的二者不能同时调。想让 ξ 停在 0.707ωn 就被钉死在 0.707/Tpwm 附近带宽也就有了天花板。把这个天花板算成数字更直观。取 ξ0.707则 ωbωn0.707/Tpwm载波频率Tpwm可达 ωbξ0.707换算 Hz8 kHz125 μs5657 rad/s900 Hz16 kHz62.5 μs11314 rad/s1800 Hz20 kHz50 μs14142 rad/s2250 Hz40 kHz25 μs28284 rad/s4500 Hz主流伺服电流环带宽落在 2kHz5kHz 这个区间对回去就是 20kHz40kHz 的载波和实际产品对得上。反过来说如果你的控制器跑 8kHz 载波却宣称 3kHz 电流环带宽那多半是把 -3dB 和别的判据混着用了或者 ξ 已经低到不敢看阶跃响应。注意这里只算了 PWM 更新滞后这一项。实际还有采样延时通常按半个到一个采样周期计和反馈滤波延时串起来会进一步吃掉相位。按经验把它们全算进去之后同样的 ξ 目标下可达带宽要再打个七折。4.3 从 ξ、ωn 反推 Kcp一条能抄的整定链由 ξ ½√[Lq/(Kcp·Kpwm·Tpwm)] 反解Kcp Lq/(4ξ²·Kpwm·Tpwm)Kci Kcp·R/Lq整定顺序是先定目标 ξ0.6~0.8 之间挑再把已知的 Lq、Kpwm、Tpwm 代进去算 Kcp最后用 R/Lq 把积分项配出来。下面这段可以当模板% 电流环整定与带宽核算示例参数仅演示量纲关系 Lq 2e-3; % q 轴电感 H R 0.15; % 定子相电阻 Ω Tpwm 1/16000; % 载波周期 s16kHz Kpwm 1; % 逆变器等效增益标幺制下取 1 xi 0.707; % 目标阻尼比 Kcp Lq/(4*xi^2*Kpwm*Tpwm); % 由阻尼比反解比例增益 Kci Kcp*R/Lq; % 零极点对消消掉电气极点 wn 1/(2*xi*Tpwm); % 自然频率与 Kcp 无关 s tf(s); Gm 1/(Lq*sR); % 电机电气环节 Gd 1/(Tpwm*s1); % PWM 更新滞后的一阶近似 Gpi Kcp Kci/s; % PI 调节器 L Gpi*Kpwm*Gd*Gm; % 开环传函 T feedback(L,1); % 闭环传函 wb bandwidth(T); % -3dB 带宽 rad/s fprintf(wn%.0f rad/s, wb%.0f rad/s %.0f Hz\n, wn, wb, wb/2/pi);逻辑说明feedback(L,1)构造单位反馈闭环bandwidth直接给 -3dB 点不用手动画图找。参数说明Kpwm取值决定了 Kcp 的数量级但wn、wb和它无关——这正是前面说的「Kpwm 只影响绝对值」Tpwm是唯一真正卡带宽的量改载波频率比改任何增益都有效。如果算出来的wb和wn差很多检查一下 ξ 是不是已经偏离 0.707按第 3 章的公式ξ0.5 时 ωb≈1.27ωn偏差属于正常。4.4 速度环把电流环压成一阶惯性再拼开环传函速度环设计时不会把电流环的二阶闭环原样搬进去那样阶次太高没法手算。常见做法是把它压成一阶惯性Gc(s) ≈ 1/(Tc·s1)Tc Lq/(Kcp·Kpwm)这个近似成立的前提是速度环穿越频率远低于电流环带宽具体低多少1/5 是底线1/10 更稳。要注意 Tc 对应的转折频率 Kcp·Kpwm/Lq 比真实的电流环 -3dB 点低在 ξ0.707 时大约是 0.707 倍也就是一阶近似会把电流环带宽低估约 1.4 倍。设计速度环时这个保守偏差是好事它给降阶误差留了余量。再往后接转矩和机械环节。id0 控制下 Te 1.5·pn·ψf·iq运动方程 Te-TL J·dωm/dt转速换算 n 30ωm/π合起来从 iq 到转速的传函是 45·pn·ψf/(π·J·s)那个 45/π 就是常见的 14.32。拼上 PI 和前面的一阶惯性GAsr Ksp(sKsi/Ksp)/s · 1/(Tc·s1) · 45·pn·ψf/(π·J·s)这是典型的 II 型系统低频 -40dB/dec相位在低频段就接近 -180°所以积分时间常数不能乱取。若令 Ksp/Ksi 恰好等于 Tc两个转折频率重合回路退化成纯双积分相位裕度归零直接振荡。正确的做法是让速度环积分时间取电流环时间常数的若干倍把两个转折频率拉开穿越点落在几何中点附近相位裕度能回到 45° 上下。整定流程我一般这么走先按「速度环穿越频率 电流环带宽的 1/10」定目标只开比例项把穿越频率顶到目标值再加上积分项从 Ksp/Ksi 4·Tc 起调看低频增益有没有抬起来最后回 Bode 图确认相位裕度落在 40°50°超调可接受就收工。% 速度环折算示例 J 1e-4; % 转动惯量 kg·m^2 pn 4; % 极对数 psi 0.05; % 永磁磁链 Wb Kt 45*pn*psi/pi; % iq 到转速的增益 (rpm/s)/A Tc Lq/(Kcp*Kpwm); % 电流环等效时间常数 s tf(s); Gc 1/(Tc*s1); % 降阶后的电流环 Gm Kt/(J*s); % 转矩与机械环节 Tsp 4*Tc; % 积分时间先取 4 倍 wcs 2*pi*180; % 目标穿越 180Hz Ksp Tsp*J*wcs^2/Kt; % 由穿越频率反解比例增益 Ksi Ksp/Tsp; % 积分增益 Lasr (Ksp Ksi/s)*Gc*Gm; figure; margin(Lasr); grid; % 看相位裕度不够就回头调 Tsp Tsr feedback(Lasr,1); fprintf(速度环 -3dB %.0f Hz\n, bandwidth(Tsr p a hrefhttps://download.csdn.net/download/linan1055/14504941 stylecolor:#ec7500;font-size:14px; 本文还有配套的精品资源点击获取 /a img altmenu-r.4af5f7ec.gif srchttps://csdnimg.cn/release/wenkucmsfe/public/img/menu-r.4af5f7ec.gif stylewidth:16px;margin-left:4px;vertical-align:text-bottom;cursor:text; /p