13HFI 高频注入低速无感

凸极比解调 + 零速启动的压缩机标配方案

本模块主旨
零速也要锁角度——往 d 轴主动喊一声,听 IPM 凸极的回声里有没有 2θe;CORDIC + biquad 把这条信号链塞进 ISR。

学完应能回答

查看完整 Walkthrough(8 步 + 4 误区)

总览
HFI 是压缩机低速无感的标配。本质是用主动注入信号克服 BEMF 在低速消失的盲区,但只对 IPM 凸极有效。

零基础速入

类比
HFI 像往黑屋子里**发声呐**——低速时反电动势太小("光"看不见),就主动注入一个高频信号,听回声里的"凸极差异"判断转子位置。压缩机零启动靠它。
核心概念
在 d 轴注入高频电压,IPM 电机 Ld < Lq 让响应电流幅值与转子位置相关,解调后能反推角度。整个过程电机几乎不转,就能知道"它现在朝哪儿"。

为什么要学

第一手操作
右侧把"凸极比 Lq/Ld"从 2.18 拉到 1.05(接近表贴式),看角度估算崩溃;再拉回 2.5+,立刻锁相。

学习目标

核心概念

公式

凸极信号增益
gain ≈ (Lq − Ld) / (Lq·Ld) · V_h

差越大信号越强;表贴式电机 Lq ≈ Ld 时增益接近 0,HFI 失效。

解调输出
demod_lp ∝ sin(2·(θ_true − θ_est))

注意是 2 倍角差——HFI 只能提取到 180° 内的信息,需要额外极性判断逻辑。

BEMF vs HFI 切换
speed < 5%·rated → HFI; 5-10% → 平滑过渡; > 10% → BEMF / SMO

过渡段需要加权混合两套估算结果,避免切换瞬间角度跳变。

工程意义

STM32 移植指南

常见误区

  • 用在表贴式电机上(Lq ≈ Ld 完全没用)。
  • 注入电压过大造成可听噪声;过小信号被噪声淹没。
  • 没做极性判别,启动方向随机。

调试方法

建议实验

STM32 C 代码骨架

/* hfi.c — 压缩机低速无感 HFI 控制 */
typedef struct {
    float v_inject;       // 注入电压幅值 V
    float f_inject;       // 注入频率 Hz
    float omega_inject;   // = 2π × f_inject
    float carrier_phase;  // 载波相位累加
    float demod_lp;       // 解调低通输出
    float lpf_alpha;
    /* PLL */
    float pll_kp, pll_ki, pll_int, theta_est, omega_est;
} hfi_ctx_t;

void hfi_init(hfi_ctx_t *h, float v, float f_hz, float pwm_freq) {
    h->v_inject = v;
    h->f_inject = f_hz;
    h->omega_inject = 2.0f * M_PI * f_hz;
    h->lpf_alpha = (2.0f * M_PI * 200.0f / pwm_freq);  // 200Hz LPF
    /* ... */
}

/* 在 FOC 中断里:注入信号 + 解调 + PLL */
void hfi_step(hfi_ctx_t *h, float i_q_meas, float dt,
              float *out_v_d_inject, float *out_theta_est)
{
    /* 1. 累加载波相位 */
    h->carrier_phase += h->omega_inject * dt;
    if (h->carrier_phase > 2.0f * M_PI) h->carrier_phase -= 2.0f * M_PI;
    float carrier = sinf(h->carrier_phase);

    /* 2. 注入电压(叠加到电流环 V_d 输出之后) */
    *out_v_d_inject = h->v_inject * carrier;

    /* 3. 解调:用 i_q_meas 中的高频分量乘载波 → 包含 sin(2Δθ) */
    float product = i_q_meas * carrier;
    h->demod_lp += h->lpf_alpha * (product - h->demod_lp);

    /* 4. PLL 锁相到 sin(2Δθ) = 0 */
    float err = -h->demod_lp;
    h->pll_int += h->pll_ki * err * dt;
    h->omega_est = h->pll_kp * err + h->pll_int;
    h->theta_est += h->omega_est * dt;
    if (h->theta_est > M_PI) h->theta_est -= 2.0f * M_PI;
    if (h->theta_est < -M_PI) h->theta_est += 2.0f * M_PI;

    *out_theta_est = h->theta_est;
}

下一步

随堂题

HFI 能用于表贴式 PMSM (Lq ≈ Ld) 吗?
  1. 能
  2. 不能 —— 凸极信号增益接近 0 (正确)
  3. 只能在低速
  4. 硬件改造后能
提示:HFI 信号机制依赖 (Lq − Ld) / (Lq·Ld) 不为 0;表贴式电机这一项几乎为零,注入再大也无信号。
注入频率为什么常选 800-1500 Hz?
  1. 硬件限制
  2. > 1kHz 避开人耳最敏感的 200-1000Hz;PWM 6kHz 时 1.5kHz 还有 4 倍以上余量 (正确)
  3. 无所谓
  4. 电网频率相关
提示:可听噪声敏感区 200-1000 Hz;同时要远低于 PWM 频率(一般 < 1/4 PWM)才能保证采样不混叠。
HFI 解调输出 sin(2·Δθ) 意味着角度估算只有 180° 周期歧义,怎么解?
  1. 不用解
  2. 启动时用一个固定方向(强制对齐 d 轴)来消除 (正确)
  3. 改用 cos
  4. 换硬件
提示:上电对齐阶段先给 d 轴一个直流让转子停在零位,PLL 从已知方向开始就避免 180° 翻转。
HFI 切到 BEMF 的速度边界一般是?
  1. 同步速 1%
  2. 5-10% 同步速 (正确)
  3. 50% 同步速
  4. 100%
提示:5-10% 同步速时 BEMF 已经能被 SMO 稳定观测,再用 HFI 反而引入额外噪声和损耗,所以切到 BEMF。
同样压缩机,凸极比从 2.5 改到 1.5,HFI 锁相效果会怎么变?
  1. 没影响
  2. 锁相时间变长,误差变大 (正确)
  3. 反而更稳
  4. 不收敛
提示:凸极信号增益 ≈ (r-1)/(r+1)。r=2.5 时 0.43;r=1.5 时 0.20,下降一半多,信号变弱噪声相对放大。

相关公式索引

HFI 凸极信号增益
gain = (r − 1)/(r + 1), r = Lq/Ld; r=1.5 → 0.20, r=2.5 → 0.43
HFI 解调误差
i_response × cos(ωh·t) → LPF → ≈ 0.5·sin(2·Δθ)