ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

无感FOC高频注入HFI代码级拆解:从信号链路到IIR滤波器与极性判断

无感FOC高频注入HFI代码级拆解:从信号链路到IIR滤波器与极性判断 无感 FOC 的启动阶段最让人头疼的从来不是稳态运行而是转子静止或极低速时那一段睁眼瞎的状态。反电动势观测器在零速附近增益趋近于零滑模观测器同样依赖足够高的转速才能收敛于是高频注入HFI就成了绕不开的一条路。但很多工程师第一次接触 HFI 时代码看得云里雾里一会儿是带通滤波一会儿是同步解调一会儿又冒出个 IIR 滤波器最后还要判断磁极极性。这篇内容就把这套链路从代码层面彻底拆开讲清楚每一步在干什么、为什么这么干、参数怎么定以及我在实际调试中踩过的那些坑。1. 为什么零低速必须靠高频注入而不是观测器1.1 反电动势观测器的物理天花板永磁同步电机的反电动势和转速成正比公式是 e ωe · λpm其中 λpm 是永磁磁链。当转速趋近于零时反电动势也趋近于零。观测器本质上是从电压方程里抠出反电动势再反推转子位置。电压方程里还有电阻压降 iR 和电感压降 L·di/dt当反电动势小到和噪声、参数误差同一个量级时观测器就彻底失效了。这不是算法不够好而是物理层面的信噪比问题。你可以在仿真里把观测器增益调到很大让它在零速也假装收敛但一上真实电机参数误差、采样噪声、死区效应立刻把它打回原形。所以业界共识是零速和极低速用 HFI中高速切回观测器中间做一个平滑过渡。1.2 高频注入的核心思路给电机问一个问题HFI 的思路其实很朴素。既然转子静止时反电动势给不了信息那就主动往定子绕组里注入一个高频电压信号让电机在高频下回答一个问题你的凸极在哪个方向永磁同步电机分两类表贴式SPM交直轴电感基本相等凸极效应很弱内置式IPM交直轴电感差异明显Ld Lq。HFI 主要针对有凸极效应的电机利用 Ld 和 Lq 的差异来提取位置信息。注入高频电压后高频电流的幅值会随转子位置变化因为高频阻抗 Z jωh·L电感大的方向电流小电感小的方向电流大。这个电流幅值随位置变化的规律就是位置信息的来源。你要做的就是设计一套信号处理链路把这个微弱的幅值调制信息解调出来。1.3 注入方式的选择旋转电压 vs 脉振电压常见的注入方式有两种。旋转电压注入是在 αβ 轴上注入一个旋转的高频电压矢量频率通常在 500Hz 到 2kHz 之间。脉振电压注入是在估计的 d 轴方向注入高频信号通常配合位置跟踪环路使用。旋转注入实现简单不需要预先知道转子大概位置适合完全未知的初始位置检测。脉振注入的信噪比更好但需要一个初始位置估计通常用在已经粗略知道位置后的持续跟踪阶段。实际项目里我一般先用旋转注入做初始位置检测锁定大概方向后再切脉振注入做低速跟踪。选择哪种方式取决于你的应用场景。如果是风机、水泵这类对启动平稳性要求不高的场合旋转注入足够。如果是伺服、机械臂这类要求零速大转矩、启动无抖动的场合脉振注入配合极性判断是标配。2. HFI 信号链路的代码级拆解2.1 从注入到电流采样信号到底长什么样假设我们在 αβ 轴注入旋转高频电压// 注入高频电压Vh 为注入幅值wh 为注入角频率 float theta_h wh * t; // 注入相位 float Valpha_h Vh * cosf(theta_h); float Vbeta_h Vh * sinf(theta_h);这个电压叠加在基波电压上一起送给 SVPWM。电机响应后采到的 αβ 电流里就包含了基波电流和高频响应电流。高频响应电流的表达式在转子 dq 坐标系下推导后转到 αβ大致是// 高频电流响应包含位置信息 // Ialpha_h Ih * cos(2*theta_r - theta_h) 形式 // Ibeta_h Ih * sin(2*theta_r - theta_h) 形式注意这里出现了 2·theta_r也就是转子位置的两倍频。这是凸极效应的典型特征——电感随位置变化的周期是电角度周期的一半。这个 2 倍频关系是后面所有处理的基础也是很多人第一次看代码时最困惑的地方为什么解调出来的角度要除以 22.2 带通滤波把高频响应从基波里捞出来采到的电流是基波和高频的混合。基波频率低和转速相关高频注入频率高两者在频域上分得比较开所以用带通滤波器就能把高频分量提取出来。带通滤波器的中心频率就是注入频率 wh带宽要覆盖注入频率附近的边带。带宽太窄动态响应差带宽太宽基波泄漏进来会污染位置估计。我一般把带宽设在注入频率的 ±20% 左右。实现上可以用一个高通加一个低通级联也可以直接设计一个二阶带通。在嵌入式里为了计算效率通常用双二阶biquad结构。下面是一个典型的带通 biquad 实现typedef struct { float b0, b1, b2, a1, a2; float x1, x2, y1, y2; } Biquad; float biquad_process(Biquad *f, float x) { float y f-b0 * x f-b1 * f-x1 f-b2 * f-x2 - f-a1 * f-y1 - f-a2 * f-y2; f-x2 f-x1; f-x1 x; f-y2 f-y1; f-y1 y; return y; }这段代码本身很简单关键在于系数怎么算。系数由采样频率、中心频率、带宽或者说 Q 值决定。采样频率通常是 PWM 频率比如 10kHz 或 20kHz。注入频率如果选 1kHz那采样率至少要是注入频率的 10 倍以上否则离散化误差会很大。注意带通滤波器的系数必须在初始化时算好不要在中断里实时计算三角函数那会吃掉大量 CPU 时间。如果注入频率需要动态调整也要在低频任务里算好再更新。2.3 同步解调把位置信息从载波上卸下来带通滤波之后你拿到的是中心频率为 wh 的高频信号位置信息以相位调制的形式藏在里面。要把它提取出来需要做同步解调也就是乘以一个和注入信号同频的参考信号。// 同步解调乘以注入相位的 cos 和 sin float Ialpha_h biquad_process(bp_alpha, Ialpha); float Ibeta_h biquad_process(bp_beta, Ibeta); float demod_d Ialpha_h * cosf(theta_h) Ibeta_h * sinf(theta_h); float demod_q -Ialpha_h * sinf(theta_h) Ibeta_h * cosf(theta_h);解调之后高频载波被搬移到直流和两倍频附近。直流分量里就包含了位置误差信息两倍频分量是解调产生的杂散需要滤掉。这一步的物理意义是把旋转坐标系下的高频响应投影到注入方向上得到同相和正交两个分量。同相分量和位置误差的余弦相关正交分量和位置误差的正弦相关。当位置估计准确时正交分量应该为零。2.4 低通滤波与位置误差提取解调后的信号还要过一次低通把两倍频分量滤掉留下直流分量。这个低通滤波器的截止频率要远低于注入频率通常在几十赫兹到一两百赫兹之间。// 低通滤波提取直流分量 float err_d lpf_process(lpf_d, demod_d); float err_q lpf_process(lpf_q, demod_q); // 位置误差信号通常用 err_q 或 err_d 的某种组合 float pos_error err_q; // 具体用哪个取决于解调坐标系定义这里有个容易搞混的地方到底用 err_d 还是 err_q 作为位置误差这取决于你的解调坐标系定义和注入方式。旋转注入下通常解调后得到的正交分量正比于 sin(2·Δθ)其中 Δθ 是位置估计误差。当 Δθ 很小时sin(2·Δθ) ≈ 2·Δθ所以这个信号可以直接作为位置误差输入给锁相环。2.5 锁相环把误差信号积分成位置和速度拿到位置误差后用一个锁相环PLL或者龙伯格观测器把它积分成位置和速度。PLL 的结构很经典// 锁相环 float kp_pll ...; // 比例增益 float ki_pll ...; // 积分增益 float pll_integral ki_pll * pos_error * Ts; float speed_est kp_pll * pos_error pll_integral; float theta_est speed_est * Ts;PLL 的带宽决定了位置跟踪的动态性能。带宽高跟踪快但对噪声敏感带宽低平滑但响应慢。我一般把 PLL 带宽设在几十赫兹具体要看注入频率和电机的时间常数。提示PLL 的输出角度要记得做归一化防止长时间运行后数值溢出。另外PLL 的积分器要有抗饱和处理否则在位置误差大的时候会积累错误的积分量。3. IIR 滤波器在 HFI 里的角色与参数设计3.1 为什么是 IIR 而不是 FIR在 HFI 的信号链里滤波器的计算效率至关重要因为整个链路跑在电流环中断里通常每个 PWM 周期都要执行一次。FIR 滤波器要达到同样的频率选择性需要几十甚至上百阶而 IIR 滤波器用二阶或四阶就能实现很陡的滚降。IIR 的代价是相位非线性但对于 HFI 来说我们关心的是特定频率分量的幅值和相位关系只要滤波器在注入频率附近的相位特性稳定就不会影响位置估计。而且 IIR 有反馈定点实现时要注意数值稳定性浮点实现基本不用担心。3.2 双二阶结构的参数计算一个二阶 IIR 带通滤波器的传递函数可以写成H(z) (b0 b1·z⁻¹ b2·z⁻²) / (1 a1·z⁻¹ a2·z⁻²)系数由中心频率 f0、采样频率 fs、品质因数 Q 决定。常用的设计公式双线性变换法是// 带通 biquad 系数计算 float w0 2.0f * PI * f0 / fs; float alpha sinf(w0) / (2.0f * Q); float b0 alpha; float b1 0; float b2 -alpha; float a0 1 alpha; float a1 -2 * cosf(w0); float a2 1 - alpha; // 归一化 b0 / a0; b1 / a0; b2 / a0; a1 / a0; a2 / a0;Q 值决定了带宽Q 越高带宽越窄。对于 HFI我一般取 Q 在 1 到 5 之间。Q 太高滤波器对注入频率的微小漂移很敏感Q 太低基波泄漏严重。3.3 低通滤波器的截止频率怎么定解调后的低通滤波器截止频率直接决定了位置估计的带宽。截止频率高位置响应快但高频噪声和两倍频残余会进来截止频率低平滑但相位滞后大。我的经验是低通截止频率取 PLL 带宽的 2 到 5 倍。比如 PLL 带宽 50Hz低通截止取 100 到 250Hz。这样既保证了 PLL 有足够的信号带宽又能有效抑制解调杂散。3.4 定点实现时的注意事项如果 MCU 没有 FPU或者为了省时间用定点运算IIR 的系数和状态变量都要做 Q 格式定标。这里最大的坑是系数的动态范围b0 可能很小a1 可能接近 2如果定标不当中间结果会溢出。我的做法是先把滤波器在浮点下仿真验证记录中间变量的最大值再根据这个最大值确定定标位数。另外IIR 的反馈结构对舍入误差敏感建议用直接II型Direct Form II而不是直接I型因为直接II型的中间状态更少舍入噪声更低。// 直接II型 biquad定点实现更友好 float w x - f-a1 * f-w1 - f-a2 * f-w2; float y f-b0 * w f-b1 * f-w1 f-b2 * f-w2; f-w2 f-w1; f-w1 w; return y;4. 位置估计与磁极极性判断的完整实现4.1 从 2 倍频到真实角度除以 2 的陷阱前面提到凸极效应的位置信息是 2 倍频的。解调出来的角度 θ_est_2x 对应的是 2·θ_r所以真实角度是 θ_r θ_est_2x / 2。但这里有个致命问题除以 2 之后角度范围变成了 0 到 π而不是 0 到 2π。也就是说你无法区分 N 极和 S 极因为两者对应的凸极方向是一样的。这就是为什么 HFI 单独用凸极效应只能得到转子轴向但分不清磁极极性。要确定极性必须额外做磁极极性判断。4.2 磁极极性判断的两种主流方法第一种是脉冲注入法。在估计的 d 轴方向注入一个短时正脉冲再注入一个负脉冲比较两次电流响应的幅值。由于永磁体的饱和效应当注入方向与磁极方向一致时铁芯饱和程度更高电感更小电流上升更快。通过比较正负脉冲的电流响应就能判断极性。// 脉冲注入极性判断简化示意 // 在估计 d 轴注入正脉冲 apply_voltage_d(Vpulse); delay_ms(1); float I_pos read_current_d(); // 注入负脉冲 apply_voltage_d(-Vpulse); delay_ms(1); float I_neg read_current_d(); // 比较电流幅值 if (fabsf(I_pos) fabsf(I_neg)) { // 估计方向与磁极一致 polarity 1; } else { // 估计方向与磁极相反需要加 pi polarity -1; }第二种是高频注入法。在估计的 d 轴方向注入高频脉振信号观察电流响应的二次谐波。由于饱和效应的非线性磁极方向不同时二次谐波的相位不同。这种方法不需要额外的脉冲可以和位置跟踪同时进行但信号处理更复杂。实际项目里我一般用脉冲注入法因为它简单可靠判断一次就够了。但要注意脉冲的幅值和持续时间幅值太小饱和效应不明显幅值太大可能引起机械抖动或过流。我通常取额定电流的 50% 到 100% 作为脉冲幅值持续时间在几百微秒到几毫秒之间。4.3 极性判断的时机与流程极性判断不能随便做要在位置估计已经稳定之后再做。如果位置估计还在收敛过程中极性判断的结果不可靠。典型的启动流程是旋转高频注入运行 PLL等位置估计收敛通常几十毫秒在估计的 d 轴方向做脉冲注入判断极性根据极性修正角度如果极性相反就加 π切换到脉振注入或直接切换到观测器注意极性判断的脉冲注入会引起电流冲击如果电机连接了机械负载可能会听到咔的一声。这是正常的但如果声音很大或者电流超限要减小脉冲幅值。4.4 位置估计的收敛判据怎么知道位置估计已经收敛了我一般看两个指标一是 PLL 的位置误差信号如果持续小于某个阈值比如 0.05 rad就认为收敛二是估计速度的波动如果速度估计的波动小于某个范围也说明收敛。// 收敛判据 if (fabsf(pos_error) 0.05f fabsf(speed_est) 10.0f) { converge_count; if (converge_count 100) { hfi_converged 1; } } else { converge_count 0; }这个判据要根据实际电机的噪声水平调整。噪声大的系统阈值要放宽否则永远等不到收敛。5. 调试中那些文档不会告诉你的坑5.1 注入频率和 PWM 频率的打架注入频率不能随便选它和 PWM 频率、电流采样频率有直接关系。如果注入频率接近 PWM 频率的整数分之一采样时会产生混叠位置估计会周期性抖动。我的经验是注入频率取 PWM 频率的 1/10 到 1/20。比如 PWM 10kHz注入频率取 500Hz 到 1kHz。同时要避开电流采样时刻和注入信号的特定相位关系否则采样到的高频电流可能正好在过零点信噪比极差。5.2 死区效应对高频信号的污染逆变器的死区效应会在输出电压里引入误差这个误差在基波频率下影响不大但在高频注入下会直接污染高频响应。死区补偿如果做得不好HFI 的位置估计会出现 6 倍频的脉动。解决办法有两个一是做好死区补偿二是选择注入频率时避开死区效应最严重的频段。实测下来死区补偿对 HFI 的改善非常明显尤其是低速小电流的时候。5.3 电感饱和导致的凸极效应变化HFI 依赖凸极效应但电感会随电流饱和而变化。如果注入幅值太大或者基波电流本身很大电感饱和会让 Ld 和 Lq 的差异变小甚至反转位置估计直接失效。所以注入幅值要适中既要保证信噪比又不能引起饱和。我一般从额定电压的 10% 到 20% 开始试观察位置估计的稳定性再逐步调整。5.4 负载对极性判断的影响脉冲注入法判断极性时如果电机带着负载负载的机械惯性会影响电流响应。重载下正负脉冲的电流差异可能被负载转矩掩盖导致极性判断错误。这种情况下可以增大脉冲幅值或者改用高频注入法判断极性。另外极性判断最好在电机完全静止时做如果电机还在惯性转动判断结果也不可靠。5.5 从 HFI 切换到观测器的过渡HFI 只在零低速有效转速升高后要切换到反电动势观测器。切换点通常在额定转速的 5% 到 10%。切换时如果两个估计器的角度不一致会产生转矩冲击。我的做法是在切换区间内用一个加权系数把两个估计器的角度和速度平滑混合而不是硬切换。加权系数随转速线性变化低速时 HFI 权重大高速时观测器权重大。// 平滑切换 float blend (speed - speed_low) / (speed_high - speed_low); blend clamp(blend, 0.0f, 1.0f); float theta_final (1 - blend) * theta_hfi blend * theta_obs; float speed_final (1 - blend) * speed_hfi blend * speed_obs;注意角度混合时要处理 0 和 2π 的跳变否则会在边界处产生错误。我一般先把角度转到连续空间再混合或者用 sin/cos 表示角度再混合。5.6 参数整定的顺序HFI 的参数不少注入幅值、注入频率、带通 Q 值、低通截止、PLL 带宽、极性判断脉冲幅值。这些参数不能一起调要有顺序。我的顺序是先定注入频率和幅值保证带通滤波后能看到干净的高频信号再调带通和低通让解调后的位置误差信号干净然后调 PLL 带宽让位置跟踪既快又稳最后做极性判断调脉冲参数。每一步都要用示波器或者 DAC 输出观察波形不要盲调。6. 一套可复现的 HFI 代码框架6.1 整体架构与执行时序HFI 的代码通常分布在两个地方电流环中断里做信号处理和 PLL 更新低频任务里做参数计算和状态机切换。电流环中断的执行顺序是采样三相电流Clarke 变换到 αβ带通滤波提取高频分量同步解调低通滤波提取位置误差PLL 更新位置和速度注入电压叠加到基波电压上SVPWM 输出这个顺序不能乱因为每一步都依赖上一步的结果。而且整个链路要在每个 PWM 周期内完成计算量不小需要优化。6.2 关键数据结构的定义typedef struct { // 注入参数 float Vh; // 注入幅值 float wh; // 注入角频率 float theta_h; // 注入相位 // 滤波器 Biquad bp_alpha; // α轴带通 Biquad bp_beta; // β轴带通 Biquad lpf_d; // d轴低通 Biquad lpf_q; // q轴低通 // PLL float kp_pll; float ki_pll; float pll_integral; float theta_est; float speed_est; // 状态 uint8_t state; // 状态机 uint8_t converged; // 收敛标志 int8_t polarity; // 极性 } HFI_Handle;这个结构体把 HFI 的所有状态都封装在一起方便管理。实际项目里我还会加一些调试变量比如把中间信号输出到 DAC方便用示波器观察。6.3 中断服务函数的实现要点void current_loop_isr(void) { // 1. 采样电流 float Ialpha, Ibeta; sample_and_clarke(Ialpha, Ibeta); // 2. 带通滤波 float Ialpha_h biquad_process(hfi.bp_alpha, Ialpha); float Ibeta_h biquad_process(hfi.bp_beta, Ibeta); // 3. 同步解调 float cos_h cosf(hfi.theta_h); float sin_h sinf(hfi.theta_h); float demod_d Ialpha_h * cos_h Ibeta_h * sin_h; float demod_q -Ialpha_h * sin_h Ibeta_h * cos_h; // 4. 低通滤波 float err_d biquad_process(hfi.lpf_d, demod_d); float err_q biquad_process(hfi.lpf_q, demod_q); // 5. PLL 更新 float pos_error err_q; hfi.pll_integral hfi.ki_pll * pos_error * Ts; hfi.speed_est hfi.kp_pll * pos_error hfi.pll_integral; hfi.theta_est hfi.speed_est * Ts; // 6. 注入电压叠加 float Valpha_h hfi.Vh * cos_h; float Vbeta_h hfi.Vh * sin_h; // ... 叠加到基波电压SVPWM 输出 // 7. 更新注入相位 hfi.theta_h hfi.wh * Ts; if (hfi.theta_h 2 * PI) hfi.theta_h - 2 * PI; }这段代码是 HFI 的核心每个 PWM 周期执行一次。注意 cosf 和 sinf 比较耗时如果 MCU 性能有限可以用查表法或者 CORDIC 算法替代。6.4 状态机设计HFI 的启动过程是一个状态机待机、注入收敛、极性判断、低速跟踪、切换观测器。每个状态的切换条件要明确避免状态混乱。switch (hfi.state) { case STATE_IDLE: // 等待启动命令 break; case STATE_HFI_CONVERGE: // 旋转注入等 PLL 收敛 if (hfi.converged) hfi.state STATE_POLARITY; break; case STATE_POLARITY: // 脉冲注入判断极性 // ... hfi.state STATE_LOW_SPEED; break; case STATE_LOW_SPEED: // 脉振注入低速跟踪 if (speed speed_switch) hfi.state STATE_BLEND; break; case STATE_BLEND: // 平滑切换到观测器 break; }状态机的设计要考虑到异常情况比如收敛超时、极性判断失败、过流保护等。每个状态都要有超时退出机制否则一旦卡住电机就起不来了。7. 实测波形与现象解读7.1 带通滤波前后的电流波形用 DAC 把带通滤波前后的电流输出到示波器可以看到滤波前是基波和高频的混合波形比较胖滤波后只剩下高频分量是一个干净的正弦波幅值随转子位置缓慢变化。这个幅值变化就是位置信息的载体。如果滤波后的波形不干净说明带通参数不对或者注入幅值太小。如果波形幅值不随位置变化说明凸极效应太弱或者注入频率选得不对。7.2 位置误差信号的观察解调后的位置误差信号在位置估计收敛后应该是一个接近零的、小幅波动的信号。如果误差信号有明显的周期性脉动通常是死区效应或者滤波器相位不对称导致的。我一般会把位置误差信号和估计角度一起输出到示波器观察两者的关系。如果误差信号在特定角度位置出现尖峰说明那个位置有磁路不对称或者采样干扰。7.3 极性判断的电流响应脉冲注入时用示波器看 d 轴电流的响应。正脉冲和负脉冲的电流上升斜率不同这就是极性信息的来源。如果两个脉冲的电流响应几乎一样说明饱和效应不明显需要增大脉冲幅值或者换用其他极性判断方法。7.4 切换过程的转矩波形从 HFI 切换到观测器时如果切换不平滑转矩会有冲击。用转矩传感器或者观察 q 轴电流可以看到切换瞬间的波动。平滑切换的目标就是让这个波动尽可能小。8. 几个容易被忽略的工程细节8.1 电流采样时刻与注入相位的对齐电流采样通常在 PWM 周期的特定时刻进行比如下桥臂导通时采样。如果采样时刻和注入信号的相位关系不合适采到的高频电流可能正好在过零点附近信噪比很差。解决办法是调整注入相位让采样时刻对应高频电流的峰值附近。这需要根据具体的 PWM 调制方式和采样方案来定没有通用公式要实测调整。8.2 温度对电感的影响电感随温度变化尤其是铁芯材料的磁导率随温度漂移。高温下凸极效应可能变弱HFI 的性能下降。如果应用场景温度变化大要考虑温度补偿或者设计对凸极效应依赖更小的方案。8.3 多电机并联时的相互干扰如果多个电机共用一个直流母线一个电机的高频注入信号可能通过母线耦合到其他电机干扰其他电机的控制。这种情况下要么错开各电机的注入频率要么增加母线滤波。8.4 代码执行时间的优化HFI 的信号链计算量不小尤其是三角函数和多次滤波。如果电流环中断时间紧张可以考虑用查表代替三角函数、用定点代替浮点、把部分滤波放到低频任务里如果带宽允许、用 DMA 搬运数据减少 CPU 开销。我在一个 10kHz 电流环的项目里HFI 全链路浮点实现大约占用 8 微秒定点优化后降到 3 微秒左右。这个开销在大多数 MCU 上是可以接受的但如果你的电流环频率更高就要仔细优化了。8.5 初始位置检测的精度要求HFI 初始位置检测的精度通常在 10 到 30 电角度之间具体取决于凸极比和信噪比。对于要求高启动转矩的应用这个精度可能不够需要配合其他方法比如高频脉振注入配合极性判断可以把精度提高到 5 度以内。如果应用对初始位置精度要求极高还可以考虑在电机上安装霍尔传感器或者编码器但那就不是无感方案了。无感 HFI 的精度和成本之间需要权衡。8.6 噪声与电磁兼容高频注入会在电机绕组和电缆上产生高频电压可能引起电磁干扰。如果产品有电磁兼容要求注入频率和幅值的选择要考虑到这一点。通常注入频率越高辐射越容易控制但开关损耗和铁损也越大。我在实际项目里遇到过 HFI 注入频率干扰到附近传感器的情况最后通过调整注入频率和增加屏蔽解决的。所以电磁兼容测试要早做不要等到最后才发现问题。9. 从 HFI 到全速域无感控制的演进思路HFI 解决了零低速的问题但要实现全速域无感控制还需要和观测器配合。我通常的做法是零速到 5% 额定转速用 HFI5% 到 15% 用混合过渡15% 以上用反电动势观测器。每个区间的切换点根据电机的凸极比和观测器性能来定。凸极比大的电机HFI 的有效范围可以更宽凸极比小的电机HFI 可能只在极低速有效要尽早切换到观测器。观测器的选择也有讲究滑模观测器鲁棒性好但抖振大龙伯格观测器平滑但依赖参数准确扩展卡尔曼滤波性能好但计算量大。实际选型要看应用需求和 MCU 性能。这套东西说起来复杂但拆开来看每一步都有明确的物理意义和工程考量。HFI 的核心就是注入-解调-滤波-跟踪这条链路IIR 滤波器是链路里的关键环节位置估计和极性判断是最终目的。把这条链路吃透无感 FOC 的零低速启动就不再是黑盒了。
返回列表