首页 / 资讯中心 / 文章详情

永磁同步电机低速无感FOC:d轴方波高频注入原理与工程实践

永磁同步电机低速无感FOC:d轴方波高频注入原理与工程实践 ★ FEATURED ARTICLE
1. 为什么低速下必须换一套玩法从反电动势到凸极效应搞过永磁同步电机无感FOC的人都有一个共识中高速区间用龙贝格观测器或者滑模观测器基本能跑得挺稳但一旦转速掉到额定转速的5%以下甚至直接接近零速那些依赖反电动势的观测器就集体“失明”了。原因很朴素——反电动势的幅值和转速成正比转速趋近于零反电动势也趋近于零信噪比低到没法看观测器估出来的角度全是噪声电机要么抖要么直接失步。这时候就得换思路。既然转子自己不“说话”那就主动去“问”它。高频注入HFIHigh Frequency Injection的核心逻辑就是往电机定子绕组里注入一个高频电压信号利用永磁同步电机转子本身的凸极效应d轴和q轴电感不相等从高频电流响应里把转子位置信息“解调”出来。这个方法和转速无关所以低速甚至零速都能用。标题里说的“d轴方波高频注入”是目前工程上用得比较多的一种具体实现形式。它和传统的旋转高频注入、脉振高频注入有区别方波注入在实现上更简洁对逆变器非线性因素的敏感度也相对低一些而且不需要额外的滤波器就能比较干净地提取位置误差信号。这篇文章我就把d轴方波高频注入的原理从头推一遍把每一步的数学逻辑和工程上的取舍讲清楚最后再聊聊实际调试中踩过的坑。适合谁看如果你已经做过无感FOC的中高速部分想补齐低速这一段或者你正在调HFI但角度总是抖、收敛慢那这篇应该能帮到你。如果你连FOC的基本框架都还没搭起来建议先把电流环、SVPWM、Clarke/Park变换这些基础打牢再来看不然推导部分会比较吃力。2. 凸极效应到底给了我们什么d轴和q轴电感的差异2.1 永磁同步电机的凸极特性先说清楚一个前提d轴方波高频注入能成立根本原因是永磁同步电机存在凸极效应。对于内置式永磁电机IPMSM永磁体埋在转子铁芯内部d轴磁路经过永磁体磁阻大电感小q轴磁路主要经过硅钢片磁阻小电感大。所以典型情况下 ( L_q L_d )凸极率 ( \xi L_q / L_d ) 一般在1.5到3之间有些设计能做到更大。对于表贴式永磁电机SPMSM理论上 ( L_d \approx L_q )凸极效应很弱高频注入的效果会差很多。不过实际电机因为磁路饱和、制造公差等因素多少还是有一点凸极只是信噪比低需要更大的注入幅值或者更精细的信号处理。这一点在选方案的时候要先确认如果你的电机是表贴式的HFI可能不是最优选择。凸极效应带来的直接结果是当高频电压信号注入到定子绕组时产生的的高频电流响应幅值会随着注入方向和转子d轴的夹角变化。换句话说转子位置信息被“调制”到了高频电流的幅值里。我们要做的就是把这个调制信号解调出来。2.2 高频下的电机模型简化在注入频率足够高通常500Hz到2kHz的情况下电机模型可以做大幅简化。高频时定子电阻上的压降远小于电感上的压降可以忽略反电动势项也因为转速低而忽略交叉耦合项在多数情况下也可以先不考虑。这样高频电压方程就退化成纯电感模型$$ \begin{bmatrix} v_d^h \ v_q^h \end{bmatrix} \begin{bmatrix} L_d 0 \ 0 L_q \end{bmatrix} \frac{d}{dt} \begin{bmatrix} i_d^h \ i_q^h \end{bmatrix} $$这里的上标h表示高频分量。这个简化是整个推导的基石后面所有的电流响应表达式都是从这来的。注意这个模型是在转子坐标系d-q轴下写的但实际注入是在静止坐标系或者估计转子坐标系下做的中间差了一个角度变换这个变换正是位置误差信息的来源。2.3 为什么选d轴注入而不是q轴理论上d轴和q轴都可以注入但工程上选d轴注入有几个实际考虑。第一d轴注入时高频电流主要落在d轴附近不会产生额外的转矩脉动电机不会因为注入而抖动或者发出明显噪声。第二d轴注入的位置误差信号在角度误差为零附近有比较好的线性度便于锁相环收敛。第三q轴注入虽然也能提取位置信息但信号形式更复杂而且容易和转矩控制耦合。所以绝大多数工程实现都选d轴注入这篇也以d轴为例。3. 方波注入的数学推导从电压到位置误差信号3.1 注入信号的数学形式方波注入和正弦注入最大的区别在于注入信号的波形。正弦注入是一个连续的正弦量方波注入则是一个周期性的正负交替的方波。在估计的d轴也就是我们当前认为的转子d轴方向上注入一个高频方波电压$$ v_{\hat{d}}^h \begin{cases} V_{inj}, \text{前半周期} \ -V_{inj}, \text{后半周期} \end{cases} $$其中 ( V_{inj} ) 是注入幅值通常取母线电压的10%到20%。方波的频率就是注入频率 ( f_{inj} )周期 ( T_{inj} 1/f_{inj} )。为什么用方波而不是正弦方波的实现非常简单不需要查表或者DDS直接在PWM中断里根据当前周期翻转符号就行计算量几乎为零。而且方波的频谱集中在注入频率及其奇次谐波上用简单的同步采样就能提取响应不需要复杂的带通滤波器。这是方波注入在工程上受欢迎的核心原因。3.2 从估计坐标系到真实坐标系的变换关键的一步来了。我们注入是在估计的d轴 ( \hat{d} ) 上但电机的真实d轴是 ( d )两者之间有一个角度误差 ( \Delta\theta \theta - \hat{\theta} )。注入电压在真实d-q坐标系下的分量需要通过旋转变换得到$$ \begin{bmatrix} v_d^h \ v_q^h \end{bmatrix} \begin{bmatrix} \cos\Delta\theta \sin\Delta\theta \ -\sin\Delta\theta \cos\Delta\theta \end{bmatrix} \begin{bmatrix} v_{\hat{d}}^h \ 0 \end{bmatrix} $$展开后$$ v_d^h V_{inj} \cos\Delta\theta, \quad v_q^h -V_{inj} \sin\Delta\theta $$这里假设注入只在估计d轴估计q轴注入为零。这个变换是理解整个算法的核心角度误差 ( \Delta\theta ) 就这样进入了电压方程。3.3 高频电流响应的推导把上面的电压代入高频电感模型在半个注入周期内方波保持不变电压是常数电流线性变化。对d轴$$ L_d \frac{di_d^h}{dt} V_{inj} \cos\Delta\theta $$积分得到$$ i_d^h \frac{V_{inj} \cos\Delta\theta}{L_d} t $$同理q轴$$ i_q^h \frac{-V_{inj} \sin\Delta\theta}{L_q} t $$注意这里 ( t ) 是从半周期开始算的时间。在半个周期结束时电流达到峰值。然后方波翻转电流开始反向变化。这种线性变化的电流就是方波注入的响应特征。3.4 位置误差信号的提取现在要把角度误差 ( \Delta\theta ) 从电流里提取出来。我们采样的是估计坐标系下的电流 ( i_{\hat{d}}^h ) 和 ( i_{\hat{q}}^h )需要从真实坐标系变换回去$$ \begin{bmatrix} i_{\hat{d}}^h \ i_{\hat{q}}^h \end{bmatrix} \begin{bmatrix} \cos\Delta\theta -\sin\Delta\theta \ \sin\Delta\theta \cos\Delta\theta \end{bmatrix} \begin{bmatrix} i_d^h \ i_q^h \end{bmatrix} $$代入上面的电流表达式重点看估计q轴电流$$ i_{\hat{q}}^h \sin\Delta\theta \cdot i_d^h \cos\Delta\theta \cdot i_q^h $$把 ( i_d^h ) 和 ( i_q^h ) 的表达式代入经过化简这一步代数稍微繁琐但逻辑就是三角恒等式展开可以得到$$ i_{\hat{q}}^h V_{inj} t \sin\Delta\theta \cos\Delta\theta \left( \frac{1}{L_d} - \frac{1}{L_q} \right) $$利用二倍角公式 ( \sin\Delta\theta \cos\Delta\theta \frac{1}{2}\sin 2\Delta\theta )$$ i_{\hat{q}}^h \frac{V_{inj} t}{2} \left( \frac{1}{L_d} - \frac{1}{L_q} \right) \sin 2\Delta\theta $$这就是位置误差信号的原始形式。当 ( \Delta\theta ) 很小时( \sin 2\Delta\theta \approx 2\Delta\theta )所以估计q轴的高频电流幅值和角度误差近似成正比。这就是我们要的误差信号。3.5 为什么是sin(2Δθ)而不是sin(Δθ)细心的读者可能注意到误差信号里出现的是 ( \sin 2\Delta\theta ) 而不是 ( \sin\Delta\theta )。这个2倍角关系是凸极效应的固有特性因为电感差异导致的电流响应在d-q平面上是一个椭圆椭圆的长短轴和转子位置差180度对称。这意味着仅凭这个信号我们只能分辨出转子的轴线方向但无法区分N极和S极也就是存在180度的位置模糊。这个问题在工程上必须解决通常的做法是额外做一次磁极辨识利用d轴方向的磁路饱和特性在正反两个方向注入电压比较电流响应的幅值差异来判断N极。这个后续可以单独展开这里先记住方波注入本身只能给出轴线方向极性判断需要额外步骤。4. 从误差信号到转子角度锁相环与信号处理链路4.1 误差信号的采样时机方波注入的电流响应是三角波形状在每个半周期的末尾达到峰值。所以采样时机非常关键必须在半周期结束前的固定时刻采样这时候电流幅值最大信噪比最好。通常的做法是在PWM中断里和方波翻转同步在半周期的最后一个PWM周期触发ADC采样。采样得到的估计q轴电流 ( i_{\hat{q}}^h ) 包含了我们需要的误差信号但也混有基波电流和其他干扰。因为方波注入的频率远高于基波频率所以可以用简单的同步解调来提取把采样值和方波的符号相乘再累加或者低通滤波。由于方波是已知的这个解调过程就是简单的符号翻转计算量极小。4.2 锁相环的设计提取出来的误差信号 ( \varepsilon K \sin 2\Delta\theta ) 送入锁相环PLL来估计转速和角度。PLL的基本结构是一个PI调节器加一个积分器PI调节器的输入是误差信号 ( \varepsilon )输出是估计转速 ( \hat{\omega} )积分器对 ( \hat{\omega} ) 积分得到估计角度 ( \hat{\theta} )PI参数的设计要考虑收敛速度和稳态抖动的折中。比例增益大收敛快但抖动大积分增益大稳态精度好但可能振荡。工程上通常先根据注入频率和电机电感参数估算一个理论值再在实验中微调。注意PLL的带宽要明显低于注入频率一般取注入频率的1/10到1/5否则会把注入频率的纹波放大到角度估计里导致角度抖动。4.3 信号处理链路的完整流程把整个链路串起来在估计d轴注入高频方波电压在半周期末尾采样估计q轴高频电流用方波符号解调提取误差信号 ( \varepsilon \propto \sin 2\Delta\theta )误差信号送入PLL的PI调节器PI输出估计转速积分得到估计角度估计角度反馈到坐标变换形成闭环这个闭环的收敛过程是初始角度误差大误差信号大PLL快速调整随着角度误差减小误差信号减小PLL逐渐稳定。最终角度误差收敛到零附近估计角度跟踪真实角度。4.4 方波注入和正弦注入的对比对比项方波注入正弦注入实现复杂度低只需符号翻转高需要正弦表或DDS信号提取同步采样简单需要带通滤波和同步解调计算量极小较大对逆变器非线性敏感度较低较高注入损耗相近相近适用场景低速、零速低速、零速从工程角度看方波注入的优势主要在实现简单和计算量小特别适合在低成本MCU上跑。正弦注入的优势在于频谱更干净对某些特殊电机可能效果更好。选哪个主要看你的硬件资源和电机特性。5. 实操调试中的关键参数与避坑经验5.1 注入幅值和频率的选择注入幅值 ( V_{inj} ) 的选择是一个折中幅值太小电流响应弱信噪比低角度估计抖幅值太大注入损耗增加电机发热和噪声变大。工程上一般从母线电压的10%开始试逐步增加到角度估计稳定为止。对于凸极率低的电机可能需要更大的幅值。注入频率 ( f_{inj} ) 的选择也有讲究。频率太低会和基波电流耦合信号提取困难频率太高逆变器开关频率可能不够而且电流响应幅值会减小。一般取开关频率的1/10到1/5常见范围是500Hz到2kHz。比如开关频率10kHz注入频率可以取1kHz到2kHz。实操心得注入频率最好取开关频率的整数分之一这样方波翻转和PWM周期同步采样时机容易对齐不会出现采样点漂移导致的误差信号波动。5.2 采样时机的对齐方波注入最容易踩的坑就是采样时机没对齐。因为电流响应是三角波采样点稍微偏一点采到的幅值就不一样误差信号就会波动。解决方法是把方波翻转和PWM载波同步在固定的计数值触发ADC采样。具体实现时可以在PWM中断里根据当前半周期的状态决定采样时刻确保每次都在半周期末尾采样。如果发现角度估计有明显的周期性抖动而且抖动频率和注入频率一致大概率就是采样时机没对齐。这时候可以用示波器看电流波形和采样触发信号确认采样点是否在三角波峰值处。5.3 死区和逆变器非线性的影响逆变器的死区效应会导致实际输出电压和指令电压有偏差这个偏差在低频时尤其明显。对于方波注入死区会导致正负半周期的电流响应不对称误差信号里混入直流偏置影响角度估计精度。工程上的处理方法有两种一是做死区补偿根据电流方向修正输出电压二是在信号处理里加高通滤波把直流偏置滤掉。我个人的经验是如果注入频率足够高比如1kHz以上死区的影响相对较小可以先不做补偿看角度估计效果。如果发现角度有固定偏差或者收敛慢再考虑加死区补偿。5.4 磁极辨识的必要性前面提到方波注入只能给出轴线方向存在180度模糊。实际启动时如果初始角度错了180度电机会反转或者启动失败。所以磁极辨识是必须的。常用的方法是在估计的d轴正反两个方向各注入一个短时脉冲比较电流响应的幅值由于d轴磁路饱和正向注入时电感更小电流幅值更大据此判断N极。磁极辨识的脉冲幅值要比正常注入大一些持续时间要短避免电机发热或者转动。一般取正常注入幅值的1.5到2倍持续几个毫秒就够了。5.5 常见问题速查表现象可能原因排查方向角度估计抖动大采样时机不对齐检查PWM同步和ADC触发角度收敛慢PLL参数太保守增大PI比例增益角度有固定偏差死区效应或磁极辨识错误加死区补偿重做磁极辨识电机启动反转磁极辨识错误检查磁极辨识脉冲逻辑低速时角度丢失注入幅值太小增大注入幅值电机发热明显注入幅值太大减小注入幅值或降低注入频率高频噪声大注入频率在听觉敏感区调整注入频率到15kHz以上或避开敏感频段5.6 从零速到中高速的切换HFI只在低速有效中高速还是要切回反电动势观测器。切换点一般在额定转速的5%到10%。切换时要注意两个观测器的角度要平滑过渡不能突变。常用的做法是在切换区间内对两个观测器的角度做加权平均权重随转速线性变化。切换过程中如果角度跳变电机会抖一下严重时可能失步。实操心得切换点不要设得太低因为HFI在稍高转速下注入损耗会变大也不要设得太高因为反电动势观测器在低速下不可靠。我一般从8%额定转速开始切换用200ms左右的过渡时间效果比较稳。6. 代码实现框架与关键片段6.1 注入信号的生成在PWM中断里生成方波注入信号核心就是根据当前半周期状态翻转符号// 方波注入信号生成 // inj_period_count: 注入周期对应的PWM周期数 // pwm_count: 当前PWM周期计数 float v_inj 0.0f; if ((pwm_count / (inj_period_count / 2)) % 2 0) { v_inj V_INJ; // 正半周期 } else { v_inj -V_INJ; // 负半周期 } // 注入到估计d轴估计q轴注入为零 v_d_hat v_inj; v_q_hat 0.0f;这段代码在每个PWM周期执行方波的频率由inj_period_count决定。注意inj_period_count要取偶数保证正负半周期对称。6.2 误差信号提取在半周期末尾采样估计q轴电流然后解调// 在半周期末尾触发采样这里假设已经采到 i_q_hat // 解调根据当前半周期符号决定加减 static float error_accum 0.0f; if (positive_half) { error_accum i_q_hat; } else { error_accum - i_q_hat; } // 每个完整注入周期输出一次误差信号 if (cycle_complete) { float error error_accum; error_accum 0.0f; // 送入PLL pll_update(error); }这个解调逻辑利用了方波的正负对称性把误差信号从电流里提取出来同时抑制了共模干扰。6.3 锁相环实现// 锁相环PI 积分器 typedef struct { float kp; float ki; float omega_hat; // 估计转速 float theta_hat; // 估计角度 float integral; } PLL_t; void pll_update(PLL_t *pll, float error) { // PI调节器 float proportional pll-kp * error; pll-integral pll-ki * error; // 限幅 if (pll-integral INTEGRAL_MAX) pll-integral INTEGRAL_MAX; if (pll-integral -INTEGRAL_MAX) pll-integral -INTEGRAL_MAX; // 估计转速 pll-omega_hat proportional pll-integral; // 积分得到角度 pll-theta_hat pll-omega_hat * TS; // 角度归一化到0~2pi if (pll-theta_hat 2.0f * PI) pll-theta_hat - 2.0f * PI; if (pll-theta_hat 0.0f) pll-theta_hat 2.0f * PI; }PI参数kp和ki需要根据电机参数和注入频率整定。一个经验公式是kp取2 * zeta * omega_pllki取omega_pll^2其中omega_pll是PLL带宽zeta取0.707。PLL带宽取注入频率的1/10左右。6.4 磁极辨识的实现// 磁极辨识正反方向注入脉冲比较电流幅值 float i_positive 0.0f; float i_negative 0.0f; // 正向脉冲 v_d_hat V_POLARITY; delay_ms(2); i_positive i_d_hat; // 采样d轴电流 // 反向脉冲 v_d_hat -V_POLARITY; delay_ms(2); i_negative i_d_hat; // 判断N极 if (fabs(i_positive) fabs(i_negative)) { // 当前估计方向就是N极不需要修正 } else { // 当前估计方向是S极角度加pi theta_hat PI; }这段代码在启动前执行一次确定初始角度。注意脉冲持续时间要短避免电机发热或者转动。7. 几个容易被忽略的细节7.1 电流采样链路的带宽方波注入的电流响应是高频三角波如果电流采样链路的带宽不够采到的波形会失真误差信号就不准了。一般要求电流采样带宽至少是注入频率的5倍以上。如果用的是低带宽的霍尔传感器可能就不太适合方波注入需要考虑用分流电阻采样。7.2 注入信号和基波控制的解耦HFI注入的高频信号和基波电流控制是叠加在一起的两者要解耦。基波电流环的带宽要明显低于注入频率否则电流环会把注入信号当成扰动去抑制导致注入失效。一般电流环带宽取注入频率的1/10以下。7.3 温度对电感的影响电机电感会随温度变化尤其是永磁体温度升高时d轴电感会变化导致凸极率变化误差信号的增益也跟着变。如果温度变化范围大可能需要对注入幅值或者PLL增益做温度补偿。不过在多数应用场景下这个影响不是主要的可以先不管。7.4 方波注入的噪声问题方波注入会在电机上产生高频噪声如果注入频率在听觉敏感区2kHz到8kHz会听到明显的啸叫。解决办法是把注入频率提到15kHz以上超出人耳听觉范围或者降到500Hz以下但低频注入信号提取更困难。工程上通常选15kHz以上前提是开关频率足够高。8. 写在最后d轴方波高频注入这套方法原理推导看起来有点绕但核心逻辑其实就三步注入方波、提取误差信号、锁相环收敛。真正难的不是推导而是工程实现中的细节——采样时机、死区补偿、磁极辨识、切换过渡每一个都可能让你调好几天。我自己最开始调HFI的时候角度一直抖查了半天发现是采样时机和方波翻转差了半个PWM周期对齐之后立刻就稳了。还有一次是磁极辨识逻辑写反了电机启动就反转差点把联轴器打坏。这些坑说起来都是小事但没踩过就是想不到。如果你正在调HFI我的建议是先把注入和采样这一环用示波器看波形确认对齐再调PLL参数最后做磁极辨识和切换。每一步都确认稳了再往下走不要跳步。另外注入幅值和频率不要照搬别人的参数不同电机差异很大一定要自己试。这个内容后续还可以往几个方向扩展比如把方波注入和旋转注入做对比实验或者把HFI和隆贝格观测器的切换做成自适应带宽再或者研究一下凸极率极低的表贴电机怎么用HFI。这些等后面有机会再单独写。
阅读完成 · 觉得有帮助?
咨询建站