首页 / 驱动算法 / 高级篇

I/F 功角自稳定驱动:无感启动的电流-频率拖动

无感 FOC 的三步启动里,六脉冲定位告诉你转子在哪,接下来要在"还没有可靠转速/位置反馈"的阶段把转速拉起来。I/F(电流-频率)控制不猜转子位置——它把电流矢量按设定频率旋转,靠"功角自稳定"这个天然负反馈把转子拖进同步。本文从功角方程讲起,推导自稳定机理与稳定域(为什么 δ 会自动停在平衡点、90° 处为什么是失步边界),讲清欠阻尼振荡与频率下垂阻尼的数学本质,用仿真器看渐变加载的自平衡、阶跃扰动的振荡与失步,最后给出可编译的 C 代码。

1. 无感启动三步曲:定位 → 拖动 → 切换

无感 FOC 在零速/低速时拿不到可用的反电动势(反电动势幅值 ∝ 转速),观测器基本"失明"。工程上标准的做法是三步走:

步骤做什么为什么不直接闭环对应文章
1 定位六脉冲注入,把转子 d 轴锁定到已知方向闭环需要初始位置,位置错 90° 会瞬间过流/堵转《无感六脉冲定位方法》
2 拖动I/F(电流-频率)开环拖动,转速拉到反电势可观位置反馈不可用,先"盲拖"到可观测转速本篇
3 切换切换到 FOC 速度闭环(观测器/反电势闭环)低速观测器不稳定,转速足够才可靠《速度观测器》《无感负载角分析》

拖动阶段有两个候选方案:V/F(电压-频率)I/F(电流-频率)。V/F 给电压幅值 ∝ 频率,电流不可控——启动瞬间和重载下容易过流,而且电压开环下功角由电压方程隐式决定(见《无感强拖过程负载角度分析》)。I/F 反过来:电流幅值恒定、频率给定,由电流环保证电流,过流风险小,功角由负载自行建立——这就是本篇的主角。

2. I/F 控制结构:一个电流矢量在"绕圈圈"

I/F 控制的指令极其简单:在静止坐标系里输出一个幅值恒定、角度匀速递增的电流矢量,频率按斜坡爬到目标:

I/F 电流指令(静止坐标系)

iα* = Iref·cosθ*,  iβ* = Iref·sinθ*

θ* = ∫ω*·dt,  ω* 按斜坡加频(如 300 rad/s²)爬到目标电频率

电流环(PI,见《三闭环带宽分配与PI整定》)保证实际电流紧跟指令——相当于一个受控电流源。关键点:

3. 功角 δ:电流矢量与转子 d 轴的"相位差"

电流矢量以 θ* 旋转,转子以 θr(电角度)旋转。定义功角(负载角)为两者之差:

功角定义与转矩方程(表贴式 PMSM)

δ = θ* − θr

Te = 1.5·p·ψf·I·sinδ  =  Tmax·sinδ

失步转矩 Tmax = 1.5·p·ψf·I —— 电流幅值 I 越大,能扛的负载越大

注意与"无感强拖"篇的区别:那篇从电压方程看负载角(V/F 下 ud/uq 与 δ 的关系);本篇从电流源 + 转矩方程看 δ 的动态——两条视角互补。转矩对 δ 求导得同步系数

同步系数(小扰动分析的核心量)

Ks = dTe/dδ = Tmax·cosδ

δ=0 时 Ks 最大(最"硬");δ→90° 时 Ks→0(失去同步能力)

4. 功角自稳定:为什么不用反馈也能稳住

这是 I/F 控制最漂亮的性质。看机械运动与功角动态的闭环:

I/F 下的闭环动态

J·dωm/dt = Te − TL − B·ωm  (机械)

dδ/dt = ω* − p·ωm  (功角)

负载 TL 增大时,看这条天然负反馈链

✅ 自稳定链条(这是全篇的"一句话")

负载↑ → 转子减速 → θr 落后 → δ 增大 → sinδ 增大 → Te 增大 → 把转速拉回来。转子每落后一点,电磁转矩就自动加大一点来补偿——不需要任何传感器和控制器参与。

平衡点由 Te=TL 决定:

平衡功角与稳定域

δ* = asin(TL/Tmax)

稳定域 δ ∈ (−90°, +90°):δ 小于平衡点时 Te<TL 减速、δ 增大;大于平衡点时 Te>TL 加速、δ 减小——平衡点两侧都是"拉回去"的力。δ=±90° 处 Ks=0,是失步边界;TL ≥ Tmax 时不存在平衡点,必然失步

这就是同步电机的功角稳定:I/F 拖动的电机本质上被当作同步电机运行,δ 就是同步电机的功角。差别在于——同步电机靠电网电压锁定频率,这里靠"电流环 + 频率给定"锁定电流矢量的转速。

小扰动线性化(在平衡点 δ* 附近,忽略摩擦):

功角振荡方程(二阶)

J·Δδ̈ + B·Δδ̇ + p·Ks·Δδ = 0

固有频率 ωn = √(p·Ks/J),阻尼比 ζ = B / (2·J·ωn)

摩擦/负载阻尼 B 通常很小 → ζ 只有 0.0x 量级 → I/F 天然欠阻尼,负载突变会引发明显的功角振荡

5. 动态问题:欠阻尼振荡与频率下垂阻尼

静态自稳定保证了"最终能平衡",但动态上:负载阶跃时 δ 以欠阻尼振荡逼近新平衡点,峰值可能越过 90°——一旦越过,Te 随 sinδ 回落,转子彻底追不上电流矢量,失步。所以工程上必须给 I/F 加阻尼,最常用的是频率下垂(frequency droop)

频率下垂阻尼

ω* = ω0 − K·Te

电流矢量"让着"负载:转矩大时同步频率自动降低一点。代入功角动态后,等效在 Δδ̇ 项注入 −K·p·Ks·Δδ,阻尼比变成 ζ = (J·K·Ks + B)/(2·J·ωn) —— K 直接加大阻尼,振荡被抑制

代价是稳态频率偏差:K·Te(重载时转速略低),且需要 Te 的估计(用 iq·ψf 或直流母线功率估算)。工程上的完整手段还包括:

6. I/F → FOC 闭环切换

拖到目标转速后,反电动势已足够可观,可以切闭环。切换的要点是无缝

  1. 切换条件:转速达到目标(频率斜坡走完并稳定)+ 反电动势幅值 > 阈值(如额定反电势的 30%)+ 电流未饱和
  2. 角度对齐:FOC 需要的转子角 θhat 先用电流矢量角减掉当前功角估计初始化:θhat = θ* − δ̂(δ̂ 用负载估计,如 asin(Te/Tmax))——对齐错位会造成切换瞬间电流冲击
  3. 平滑交接:速度环接管 iq 指令时,把 I/F 的电流幅值投影到新坐标系作为初值;必要时加一个短时低通过渡
  4. 功角余量:切换前保持轻载(减小 I 或缓降负载),让 δ 处于小角度,避免切换后观测器瞬态引发失步

7. 交互式仿真器

7.1 演示A:功角自稳定与失步边界

表贴式电机(p=4,ψf=0.1 Wb,J=5e-4 kg·m²)以 I=3 A 的 I/F 方式运行在 50 Hz 电频率(Tmax=1.8 N·m)。t=0.5s 起施加负载:渐变模式看功角如何自动爬上新平衡点(负载超过 Tmax 即失步);阶跃模式看欠阻尼振荡与频率下垂阻尼 K 的抑制效果:

I/F 功角自稳定 · 失步边界仿真器
红=转速,绿=功角 δ。渐变模式:看自平衡;阶跃模式:看振荡与阻尼。

观察要点:

7.2 演示B:斜坡加频牵入与切闭环

完整启动过程:转子静止(δ=0,ωm=0),I/F 电流矢量从 0 开始斜坡加频到 50 Hz(牵入同步),负载全程 0.2 N·m。调加频速率看 δ 跟随的冲击,调下垂阻尼看振荡,观察"牵入成功"与切闭环点:

I/F 斜坡牵入 · 切闭环仿真器
红=机械转速,灰虚线=同步频率指令,绿=功角 δ。牵入成功后出现"切换点"标记。

观察要点:

8. 代码实现(C语言)

8.1 I/F 起动核心:斜坡加频 + 下垂阻尼 + 角度积分

/* I/F 起动:电流矢量按斜坡加频旋转,靠功角自稳定拖动转子 输出: 静止坐标系电流指令 ia/ib(由电流环执行,I 幅值恒定) 整定: i_ref 取额定电流附近; ramp 按"启动时间"选(0->目标频率/ramp=启动时间) k_drop 从 0 加大直到阶跃负载下功角振荡明显收敛 */ typedef struct { float theta; /* 电流矢量角度 rad */ float w_ref; /* 当前同步频率 rad/s(电) */ float w_target; /* 目标频率 rad/s(电) */ float ramp; /* 加频速率 rad/s^2 */ float i_ref; /* 电流幅值 A */ float k_drop; /* 频率下垂系数 rad/(s*N*m) */ float ts; /* 控制周期 s */ uint8_t hold; /* 1=已到目标频率并稳定 */ } if_start_t; void if_start_init(if_start_t *a, float w_target, float ramp, float i_ref, float k_drop, float ts) { a->theta = a->w_ref = 0.0f; a->w_target = w_target; a->ramp = ramp; a->i_ref = i_ref; a->k_drop = k_drop; a->ts = ts; a->hold = 0; } void if_start_update(if_start_t *a, float te_est, float *ia, float *ib) { /* 1) 斜坡加频 */ if (a->w_ref < a->w_target) { a->w_ref += a->ramp * a->ts; if (a->w_ref > a->w_target) a->w_ref = a->w_target; } else { a->hold = 1; /* 频率爬满 */ } /* 2) 频率下垂阻尼: 负载大->同步频率自动让一点, 抑制功角振荡 */ float w_cmd = a->w_ref - a->k_drop * te_est; /* 3) 角度积分: 电流矢量旋转 */ a->theta += w_cmd * a->ts; if (a->theta > 6.2831853f) a->theta -= 6.2831853f; /* 4) 静止坐标电流指令(电流环执行) */ *ia = a->i_ref * cosf(a->theta); *ib = a->i_ref * sinf(a->theta); } /* 切闭环判断(主循环调用): 频率爬满 + 反电势可观 -> 允许切换 */ static uint8_t if_start_ready(const if_start_t *a, float bemf_amp, float bemf_rated) { return a->hold && bemf_amp > 0.3f * bemf_rated; }

8.2 切换初始化:角度对齐(θ_hat = θ* − δ̂)

/* 切到 FOC 前, 用"电流矢量角 - 功角估计"初始化转子角估计, 避免切换瞬间的电流冲击. 功角估计: asin(Te/Tmax) */ void foc_switch_init(const if_start_t *a, float te_est, float t_max, float *theta_hat) { float te_c = te_est; if (te_c > t_max) te_c = t_max; /* 夹到有效域 */ if (te_c < -t_max) te_c = -t_max; float delta_hat = asinf(te_c / t_max); *theta_hat = a->theta - delta_hat; /* 电流矢量角 - 功角 = 转子角 */ }

9. 工程要点与常见误区

  1. 功角自稳定是"慢"稳定:静态上 δ 一定会找到平衡点,但动态上欠阻尼振荡可能越过 90° 失步——下垂阻尼与加频限速不是可选项,尤其负载会突变的场合
  2. Tmax 是电流换来的:提高 Iref 能提高失步转矩,但铜损、发热、噪声都上来;I/F 阶段 I 取额定附近即可,切换闭环后由速度环接管
  3. 堵转 ≠ 失步,但都要处理:堵转(δ 停在小角度、转子不动)时电流恒定为 I,不烧但干耗电;失步(δ 持续增大)时电流矢量与转子失配,可能冲击。两者都靠"转速/反电势长时间上不来"检测停机
  4. 切换是事故高发区:角度不对齐就切,电流冲击+失步;务必先对齐(8.2 节)再让速度环接管
  5. 与 V/F 的边界:V/F 实现简单(不用电流环)但电流不可控,适合小功率/已知负载;I/F 电流可控,是重载/未知负载无感启动的主流选择
  6. 凸极电机别直接套:内置式 PMSM 有磁阻转矩,I/F 的平衡角公式要加 Ld−Lq 项;表贴式直接用本篇公式即可
✅ 一句话记住

I/F = 电流矢量按斜坡加频旋转 + 功角自稳定把转子拖进同步 + 频率下垂压振荡 + 反电势可观后切闭环。功角 δ 是它的灵魂:Te=Tmax·sinδ,平衡点自动落在 asin(TL/Tmax),90° 是失步悬崖——记住这两个角,就记住了 I/F。