简介:一份聚焦无人水下航行器用低速大扭矩永磁同步电机控制的PDF学术文献,面向电机控制、电力电子方向的工程师、研究生以及UUV动力系统设计人员,可用于理解电动力推进中低速大扭矩电机的控制难点。内容在磁场定向矢量控制基础上,重点讨论转速滤波控制、电流耦合控制与负id弱磁控制三类改进策略,并通过100 kW、200 r/min样机功率实验验证方案有效性,涉及转矩方程、d/q轴电流调节、低速扭矩稳定与高速温升抑制等关键问题。压缩包内共1个PDF文件,大小约845KB,篇幅紧凑,便于按章节提取控制框图、实验结论与参数思路。已有461人学习,适合作为UUV永磁同步电机矢量控制课题的入门参考和方案对照材料。
1. 200 r/min 上的三个坑:这份 6 页 PDF 值不值得翻
低速大扭矩永磁同步电机的矢量控制,很多人的第一反应是"调 PI",但真正让系统在 200 r/min 附近抖起来的,往往不是 PI 参数本身,而是速度反馈里那点被差分放大的量化噪声、d/q 轴没解干净的交叉耦合,以及母线电压一跌就顶死的逆变器输出。这份 6 页的 PDF 围绕一台 100 kW、200 r/min、额定转矩 4775 N·m、极对数 12 的样机,把磁场定向控制里最容易翻车的三处——转速滤波、电流交叉耦合、负 id 弱磁——拆开讲了一遍,并且给了改进前后的相电流波形对照。它适合已经能把 FOC 框图默画出来、但一挂上大惯量低速负载就遇到振荡、削顶、饱和的驱动工程师;也适合刚接手直驱平台、想先搞清楚"哪一环先动"的人。
2. 从转矩方程走到双闭环:先把你手上那台电机的四个数算出来
2.1 转矩方程里真正能动的只有一个量
同步旋转 d/q 坐标系下的电磁转矩写法是固定的:
Te = 1.5·p·[ψf·iq + (Ld − Lq)·id·iq]
p 是极对数,ψf 是转子磁链,id、iq 是直轴、交轴电流。表贴式转子 Ld 与 Lq 接近相等,磁阻转矩项基本消失,式子退化成 Te 与 iq 成正比。这一步退化很关键:它意味着给定转矩就是给定 iq,id 在额定点以下可以一直压到 0,控制器只需要盯住一个变量。
反过来说,凡是 Ld 与 Lq 差距明显的转子(内置式、多层磁钢),磁阻转矩那一项不能扔,id 就不再是"压零了事",给定 id 会直接参与转矩输出,负 id 弱磁那套逻辑也要重算。拿到一份控制方案,第一件事是对照自己的转子拓扑确认这一项能不能省,省错了后面所有参数都白搭。
提示:PDF 里的推导基于表贴式假设,如果你的样机凸极率超过 1.2,请把磁阻转矩项补回方程,再谈 id 给定策略。
原文接下来的一句话是整篇的落脚点:实时获取定子电流幅值大小和转子位置,是磁场定向控制的关键。电流靠霍尔或采样电阻拿,位置靠旋转变压器(RVDT)拿。这两个量的质量,直接决定了后面三节所有补丁要不要打。
2.2 内外环的节奏差:电流环 10 kHz,速度环 1~2 kHz
结构上是标准双闭环:外环 PI 管转速,输出 iq 给定;内环 PI 管 id、iq,输出 ud、uq;再经反 Park 变换和 SVPWM 送到逆变器。id 的给定在额定点以下固定为 0。
真正决定动态品质的不是"有没有双闭环",而是两个环的节奏差。常见做法是把电流环放在 PWM 中断里跑,开关频率 10 kHz 对应电流环 10 kHz 或半周期 5 kHz;速度环降一到两个数量级,1~2 kHz 或者干脆按 1 ms 定时任务跑。原文没有给具体频率,这是合理的,因为频率跟着硬件走。但你必须自己把这两个数确定下来,因为后面滤波系数、前馈更新时机全依赖它。
我的习惯是先定电流环,再倒推速度环:电流环带宽目标取开关频率的 1/10 到 1/20,速度环带宽取电流环的 1/5 到 1/10。低速大扭矩场合还要再保守一点,因为机械时间常数大、转动惯量大,速度环抢太快只会把电流环的噪声放大成转矩脉动。
还有一个容易漏的点:位置信号 θ 的更新频率。RVDT 的激励和解算通常有自己的刷新率,如果它低于电流环频率,你在两次角度更新之间做 Park 变换,用的就是"旧角度"。低速时这个问题不明显,200 r/min、12 对极对应的电频率只有 40 Hz,一个电流环周期转过的电角度很小;但一旦转速上去或者极对数更大,滞后就会变成实打实的转矩偏差。
2.3 用脚本把磁链上限和最小 iq 先算出来
拿到铭牌别急着上电,先把几个数算出来,能提前判断"额定点是不是已经在弱磁边缘"。下面这段是常用的核算脚本,把机械量、电频率、电压圆反推的磁链上限、以及额定转矩对应的最小 iq 一次算清:
import math # ---- 样机参数(来自参数表)---- P_rated = 100e3 # 额定功率 W n_rated = 200.0 # 额定转速 r/min T_rated = 4775.0 # 额定转矩 N·m p = 12 # 极对数 U_dc = 537.0 # 直流母线电压 V;若铭牌给 380 V 线电压有效值,按 380*sqrt(2) 估 # ---- 1. 机械量与电频率 ---- w_m = 2 * math.pi * n_rated / 60 # 机械角速度 rad/s T_calc = P_rated / w_m # 反算转矩,核对参数表自洽性 f_e = n_rated * p / 60 # 电频率 Hz w_e = 2 * math.pi * f_e # 电角速度 rad/s # ---- 2. 电压圆反推磁链上限(id=0 且不进弱磁的临界条件)---- u_max = U_dc / math.sqrt(3) # SVPWM 线性区相电压峰值上限 psi_max = u_max / w_e # 磁链超过此值,额定转速就必须弱磁 # ---- 3. 由转矩方程反推最小 q 轴电流(表贴式,忽略磁阻转矩)---- iq_min = T_rated / (1.5 * p * psi_max) print(f"机械角速度 {w_m:.2f} rad/s | 反算转矩 {T_calc:.0f} N·m") print(f"电频率 {f_e:.1f} Hz | 电角速度 {w_e:.1f} rad/s") print(f"相电压峰值上限 {u_max:.1f} V | 磁链上限 {psi_max:.3f} Wb") print(f"额定点最小 q 轴电流 {iq_min:.0f} A")跑到这台样机上,输出是机械角速度 20.94 rad/s、反算转矩 4775 N·m、电频率 40 Hz、电角速度 251.3 rad/s、相电压峰值上限 310 V、磁链上限 1.234 Wb、最小 iq 约 215 A。几个参数的用法要分清:U_dc必须填母线实测值,填铭牌交流电压会低估电压圆;psi_max是"还能不能守住 id=0"的分界线,实测磁链比它大就说明额定点已经在弱磁区里;iq_min是理论下限,实际因为铜耗、温升和电流环裕量,取值通常还要再上浮 10%~20%。
反算转矩和铭牌对不上,说明参数表里有数抄错了,先查表再往下走。这一步花五分钟,能省掉后面一堆"为什么波形不对"的排查。
3. 转速滤波与电流交叉耦合:两个补丁分别堵住哪个洞
3.1 位置差分测速:分辨率每差一位,低速段就多一份噪声
转速是从 RVDT 的角度间接算出来的。连续域是 ω = dθ/dt,离散化后变成 ω(k) = K1·[θ(k) − θ(k−1)],K1 = 1/(fb·T),fb 为基频,T 为采样周期。式子在高速段没问题,低速段就露馅:角度分辨率有限,相邻两个采样点之间的角度差可能只跳了一两个 LSB,这点量化误差除以一个很小的 T,立刻变成速度反馈上的尖刺。
算一笔账:假设角度量化是 12 位、一圈 4096 个码值,一个 LSB 对应 0.088°。如果速度环 2 kHz 采样,200 r/min 时一个周期转过 0.6°,也就是 6.8 个 LSB——量化噪声相对量约 15%。降到 20 r/min,一个周期只转 0.06°,不到一个 LSB,差分出来的速度就在 0 和一个 LSB 对应的跳变值之间来回横跳。
原文对此的判断很直接:速度 PI 控制器如果直接把这个不真实的值当反馈,系统会失控。这不是危言耸听,我见过速度环输出在零附近高频抖动的现场,最后查出来就是这一条。
工程上有三条路。第一条是提高角度分辨率,换更高位数的解算或改用正余弦编码器细分,硬件成本上去了。第二条是改测速方法,低速段切到 M 法或 M/T 法,用固定时间内的脉冲计数代替位置差分,代价是低速时刷新变慢。第三条就是原文选的:差分照用,后面串一阶低通。第三条最省事,代价是相位滞后,下一节专门算这笔账。
3.2 一阶低通的 K2/K3 怎么定,滞后拿什么换
一阶低通的传递函数是 ω*(t)/ω(t) = 1/(1 + τs),τ 是时间常数。写成微分形式 dω*/dt = [ω(t) − ω*(t)]/τ,离散化整理后得到一个特别好落地的递推式:
ω*(k) = K2·ω*(k−1) + K3·ω(k),其中 K2 = τ/(T + τ),K3 = 1 − K2
两个系数加起来恒等于 1,实现上就是一次乘加,放在速度环定时任务里毫无压力。关键是 τ 怎么挑。τ 太小滤不干净,τ 太大速度环响应变肉、相位滞后累积到失稳。下面这段把不同 τ 下的系数、截止频率和关注频点的相位滞后一起打出来:
import math def speed_lpf(fs, tau): T = 1.0 / fs K2 = tau / (T + tau) K3 = 1.0 - K2 fc = 1.0 / (2 * math.pi * tau) # 一阶低通 -3dB 截止频率 return K2, K3, fc fs = 2000.0 # 速度环执行频率 Hz f_mech = 200 / 60.0 # 机械 1 倍频 3.33 Hz:偏心、每转一次的扰动 f_slot = f_mech * 12 # 极对数 12 对应的齿槽/谐波频点 40 Hz for tau_ms in (2, 5, 10, 20, 40): tau = tau_ms / 1000.0 K2, K3, fc = speed_lpf(fs, tau) lag1 = math.degrees(math.atan(f_mech / fc)) lag2 = math.degrees(math.atan(f_slot / fc)) print(f"tau={tau_ms:>2}ms K2={K2:.4f} K3={K3:.4f} fc={fc:5.2f}Hz " f"3.3Hz滞后{lag1:5.1f}° 40Hz滞后{lag2:5.1f}°")跑出来会看到一个很现实的取舍:τ 取 5 ms 时 K2≈0.909、K3≈0.091,截止频率 31.8 Hz,对 3.3 Hz 的机械一倍频只滞后 6°,对 40 Hz 的齿槽频点滞后 51.5°,滤得动;τ 取 10 ms,截止频率掉到 15.9 Hz,3.3 Hz 滞后 11.8°,40 Hz 滞后 68°,滤得更狠但速度环带宽也被压下去了。
参数怎么定,我的做法是:先测,不猜。把未滤波的转速反馈用 DA 或者上位机录一段,看噪声主频落在哪。如果尖刺集中在几十赫兹以上,τ 取 3~8 ms 就够;如果噪声一直延伸到几赫兹,说明问题不在量化,而在机械或者电流环,加滤波只是掩盖症状。另外 K2、K3 要用同一组定点或浮点格式实现,别一个用 Q15 一个用 float,系数不一致会引入稳态误差。
3.3 交叉耦合前馈:把 ud、uq 里的对方轴分量先扣掉
第二个补丁是电流交叉耦合控制(CCC)。d/q 轴电压方程里,ud 受 iq 影响、uq 受 id 和磁链影响,这就是耦合项。传统做法是两个独立 PI 各管一轴,完全无视耦合,稳态下靠积分项硬扛过去——扛得住,但动态很差。原文的描述是:系统异常时,双闭环里最先被调节的是 iq 给定,最终导致 uq 饱和,电流跟踪失控。
补偿思路是把稳态耦合项当前馈加回去:
ud = ud0 + Ed,Ed = −ωe·Lq·iq uq = uq0 + Eq,Eq = ωe·(Ld·id + ψf)
ud0、uq0 是原 PI 的输出,Ed、Eq 是前馈项。加进去之后,PI 只需要负责误差修正,不再负责抵消一个已知的、可计算的大信号,积分饱和的概率大幅下降。
实现上有个细节决定成败:前馈里的 id、iq 用实测值还是给定值。用给定值响应更"干净",但给定跳变时前馈会跟着跳,容易在电流环里激起一个尖峰;用实测值滞后一拍,但平滑。我一般用实测值,配合下节的时序安排。
3.4 一拍之内的计算顺序,决定了前馈是帮忙还是添乱
电流环中断里的顺序建议固定成这样:
# 电流环中断内,固定执行顺序 ia, ib = read_phase_current() # 1. 采两相电流 ic = -ia - ib # 2. 补第三相,便于故障检测 i_alpha, i_beta = clarke(ia, ib, ic) # 3. Clarke 变换 id_fb, iq_fb = park(i_alpha, i_beta, theta) # 4. Park 变换,theta 取本周期的角度 ud0 = pi_d.step(id_ref - id_fb) # 5. d 轴 PI uq0 = pi_q.step(iq_ref - iq_fb) # 6. q 轴 PI Ed = -w_e * Lq * iq_fb # 7. d 轴交叉耦合前馈 Eq = w_e * (Ld * id_fb + psi_f) # 8. q 轴前馈 + 反电动势 ud = sat(ud0 + Ed, u_max) # 9. 叠加后统一限幅 uq = sat(uq0 + Eq, u_max) u_alpha, u_beta = inv_park(ud, uq, theta) # 10. 反 Park svpwm(u_alpha, u_beta) # 11. 输出占空比顺序里有两个坑。第一,前馈叠加之后必须做统一限幅,而且限幅结果要回灌给 PI 做抗积分饱和(anti-windup),否则前馈一大,PI 积分仍然在往上爬,退饱和时要等好几个周期。第二,w_e的符号必须和电机正反转约定一致,Ld、Lq 的单位必须换算成 H 而不是 mH——这两个错我见过不止一次,表现都是"轻载正常、一加载就发散"。
4. 负 id 弱磁:电流圆和电压椭圆之间那条切换线怎么画
4.1 电流限制圆与电压限制椭圆
电机运行时 id、iq 同时受两个约束。电流侧是逆变器输出能力和绕组温升,构成一个圆:
id² + iq² ≤ imax²
电压侧是母线电压和调制方式,构成一个椭圆:
(Ld·id + ψf)² + (Lq·iq)² ≤ (umax/ωe)²
两个式子画在同一张 id–iq 平面上,就是一个圆套一个椭圆,椭圆随转速升高向内收缩。低速时椭圆很大,工作点落在圆内某处,id 可以取 0;转速升到椭圆开始压住圆边界,再往上加负载,工作点只能沿椭圆向左移动,id 被迫变负——这就是弱磁。继续加载直到椭圆与圆的交点,输出能力就到头了。
原文有一句话值得抄下来:直轴电流出现振荡,采用弱磁策略之后可对电流进行更好的跟踪。它说明白了一件事——弱磁不是为了"跑更快",很多时候是为了在母线电压不足时把控制权从饱和的 PI 手里抢回来。
4.2 拐点转速与 id 给定的三种做法
弱磁的切换点是拐点转速:id 恰好压到 0 时,椭圆与电流圆相切,此时
ω_base = umax / sqrt(ψf² + (Lq·imax)²)
把参数代进去就能算出"从哪个转速开始必须弱磁"。下面这段是估算脚本,示例参数仅用于演示算法,实际必须用实测的 ψf、Ld、Lq:
import math psi_f = 0.85 # 转子磁链 Wb,实测或空载反电动势反推 Ld = 0.60e-3 # d 轴电感 H,注意单位 Lq = 0.90e-3 # q 轴电感 H imax = 400.0 # 电流圆半径 A,取逆变器限流与绕组温升的较小值 p = 12 for U_dc in (537, 480, 450, 400): umax = U_dc / math.sqrt(3) # 相电压峰值上限 w_base = umax / math.hypot(psi_f, Lq * imax) # 拐点电角速度 n_base = w_base * 60 / (2 * math.pi * p) # 换成机械转速 r/min print(f"Udc={U_dc}V -> umax={umax:6.1f}V 拐点转速 {n_base:6.1f} r/min")按这组示例值,母线 537 V 时拐点在 267 r/min,额定 200 r/min 还有裕量;母线掉到 450 V,拐点压到 224 r/min,已经贴着额定点;掉到 400 V,拐点 199 r/min,正好卡在额定转速上,只要再加载就必须弱磁。这个结果正好解释了原文为什么强调"电池供电后期母线电压逐渐降低"——不是电池不够用,是电压圆的半径在缩,把原本不需要弱磁的工作点推进了弱磁区。
id 给定一般有三种做法:查表法,按转速和 iq 给定反查预先标定的 id 表,简单可靠但标定工作量大;公式法,实时按电压圆方程解出 id,适应性强但依赖参数准确性;闭环法,检测 ud、uq 合成幅值是否接近 umax,超了就往下压 id,本质是一个电压外环。我一般先用查表跑通,再用电压闭环做在线修正,两条腿走路。
4.3 母线电压跌落时,弱磁角度要跟着动
弱磁深度靠 id 的大小控制,本质上是在控制电流矢量与 q 轴的夹角。母线电压往下掉时,如果 id 还是按额定电压标定的那一套给,工作点会贴在椭圆外侧,表现为 ud、uq 顶到限幅、相电流波形削顶、转矩掉得比预期快。
工程上的处理是让弱磁量跟着母线电压走:把 umax 做成实时采样值参与计算,母线跌 10%,拐点转速跟着往下移,id 给定的负向深度同步加大。原文的做法是"采用负 id 控制进入弱磁区并增大弱磁角度",思路一致。
这里有个硬约束不能突破:id 变负会占用电流圆里本来给 iq 的份额。id 每多花 1 A,能用于出转矩的 iq 上限就少 1 A(圆上按平方关系分配,实际比这更紧)。所以弱磁必须设 id 负向限幅,一般取 imax 的 30%~50%,超过这个区间铜耗上升很快,温升会先于转矩到达极限。
5. 避坑排查:五条现场记录,每条都对应一个波形
5.1 低速段与电流环的三条
第一条。现象:电机在 30 r/min 以下空载能转,一加负载速度环输出开始持续抖动,示波器上 iq 给定是锯齿,相电流包络明显不平滑。原因:位置差分测速的量化噪声被放大,速度 PI 把噪声当成真实速度误差去纠,纠出来的就是锯齿形的 iq 给定。解决:按 3.2 节加一阶低通,τ 先取 5 ms 起步,看噪声主频再微调;同时把速度环带宽降下来,别指望靠 PI 硬压噪声。如果加滤波后抖动频率变低但幅度没减,说明噪声源不在测速,去查电流采样和 PWM 死区。
第二条。现象:带载后电流波形顶部被削平,ud 或 uq 一直贴着限幅值,PI 积分项持续累积,卸载瞬间电流冲一下再回落。原因:逆变器输出饱和而控制器不知道,两个独立的电流 PI 没有前馈,全靠积分硬扛耦合项和反电动势,电压圆一满就顶死。解决:补上 3.3 节的交叉耦合前馈和反电动势前馈,前馈叠加后做统一限幅,并把限幅结果回灌做抗积分饱和。顺序别搞反,先限幅后回灌,回灌量要按限幅前后的差值算。
第三条。现象:轻载一切正常,加载到 60% 额定后系统开始低频振荡,频率几赫兹,越加越明显。原因:Ld、Lq、ψf 用的是铭牌或设计值,与实测偏差大,前馈项不但没补偿反而在错误的相位上推了一把。解决:停下来标参数。Ld、Lq 用 LCR 表在不同电流点扫一遍,注意饱和;ψf 用空载反电动势反推,拖到额定转速测线电压峰值再除以电角速度。标完之后前馈系数按实测值算,别用设计手册上的典型值。
5.2 弱磁与母线侧的两条
第四条。现象:母线电压从额定掉 15% 后,转速上不去、电流却比原来大,电机温升明显加快。原因:没有弱磁或者弱磁量给得不够,工作点被电压椭圆卡住,iq 无法继续增加,多余的给定都堆在 PI 积分里,实际输出的电流矢量方向偏了,铜耗全变成了热。解决:按 4.2 节算实时拐点转速,母线电压参与运算,低于拐点就按表或按电压闭环压 id;同时把 id 负向限幅设死,防止弱磁过深把 iq 挤没。
第五条。现象:改了弱磁逻辑后,空载高速正常,带载切入弱磁的瞬间 id 冲到负限幅,iq 掉一截,转矩有明显台阶。原因:弱磁切入没有做速率限制,id 给定阶跃,电流矢量瞬间偏转,转矩跟着跳。解决:给 id 给定加斜坡或者一阶惯性,时间常数取速度环周期的 5~10 倍;切换判据加一点回差,避免在拐点附近反复进出弱磁。这一条属于纯工程手感,但现场十次有八次是这个原因。
6. 上电验证的顺序:我拿到这类方案后固定走的四步
方案再漂亮,也得按顺序验证。我的固定流程是四步,每一步都有明确的通过判据,不通过绝不进下一步。
第一步,逆变器空载。断开电机,只跑 SVPWM,看三相输出电压波形是否对称、死区是否正常、占空比线性度如何。判据是三相幅值偏差在 2% 以内,否则先查驱动和采样链路。
第二步,电流环闭环、电机堵转或带极小惯量。给定 id=0、iq 一个小台阶,看实际电流的上升时间和超调。判据是阶跃响应无持续振荡,稳态误差在 1% 以内。这一步同时把电流采样零点、相序、Park 变换角度零点全部对完——角度零点偏 90°,表现就是"给 iq 不出转矩"。
第三步,速度环闭环、空载。从小到大给转速阶跃,观察转速反馈的噪声和超调。这一步是转速滤波系数的最终确认点,滤波加过头会看到明显爬升变慢,加不够会看到稳态转速上下抖。
第四步,加载。从小到大加,重点关注三个量:相电流波形是否仍然正弦、ud/uq 合成幅值距离 umax 还有多少裕量、母线电压跌到多少时开始弱磁。判据是额定点电流波形无削顶、电压裕量不低于 15%。
| 步骤 | 电机状态 | 关键观测 | 通过判据 |
|---|---|---|---|
| 一 | 断开 | 三相电压对称性、死区 | 幅值偏差 < 2% |
| 二 | 堵转/微惯量 | iq 阶跃响应 | 无持续振荡,稳态误差 < 1% |
| 三 | 空载 | 转速阶跃、反馈噪声 | 无稳态抖动,超调可接受 |
| 四 | 加载 | 相电流、电压裕量、弱磁点 | 无削顶,电压裕量 > 15% |
血泪经验是第二步。我早期图省事,跳过电流环单独验证直接上速度环,结果角度零点偏了 30° 都没发现,速度环硬调参数调了两天,最后回到第二步十分钟就找到了。从那以后我每次上电调试都强制走一遍这四步,一步不落,哪怕是小改一个滤波系数也要重跑第二步确认电流环没被带偏。希望帮到你。
本文还有配套的精品资源,点击获取