4. 转子位置与速度估算

好,咱们进入正题。无位置传感器控制,说白了就是要把电机里的位置传感器省掉。省掉之后,怎么知道转子转到哪儿了?速度多快?这就是本章要解决的核心问题。

我个人习惯把位置速度估算分成四个部分来讲:反电动势过零检测、锁相环跟踪、速度计算、以及初始位置检测。这四块是环环相扣的,缺一不可。

4.1 反电动势过零检测法

这个方法,我最早是在方波驱动时代接触的。那时候做冰箱压缩机,用的就是这招。原理其实很简单——电机转起来之后,定子线圈会切割磁力线,产生反电动势。反电动势的波形,和转子位置是直接对应的。

具体来说,对于三相PMSM,反电动势的过零点,正好对应着换相点。你想想看,A相反电动势从正变负的那个瞬间,转子磁极刚好转到某个特定位置。

核心公式:

反电动势 e_a = -ψ_f · ω_e · sin(θ_e)

其中 ψ_f 是永磁体磁链,ω_e 是电角速度,θ_e 是电角度

我在项目中遇到过一个问题:低速时反电动势信号太弱,根本检测不到过零点。那时候电机转速才几十转,反电动势只有几百毫伏,淹没在噪声里。后来怎么解决的?嗯,用了一个简单的带通滤波器,先把高频噪声滤掉,再用比较器做阈值检测。

避坑指南:

我曾经在过零检测上栽过跟头——滤波器的截止频率设得太低了,导致信号相位滞后,位置估算偏差了十几度电角度。电机嗡嗡响,电流还大。后来我把截止频率调到基频的5倍左右,问题就解决了。

4.2 锁相环(PLL)位置跟踪

过零检测法虽然直观,但有个硬伤——它只能给出离散的位置点。两个过零点之间的位置,全靠猜。这就引出了锁相环。

锁相环,说白了就是一个闭环跟踪系统。它把估算的反电动势和实际的反电动势做比较,用PI调节器去修正估算角度,直到两者误差为零。

我常用的PLL结构是这样的:

// 简化的PLL位置跟踪代码
float pll_update(float e_alpha, float e_beta, float theta_est, float Ts) {
    // 1. 计算误差信号
    float err = -e_alpha * sin(theta_est) + e_beta * cos(theta_est);
    
    // 2. PI调节器
    static float integral = 0;
    float kp = 100.0f, ki = 500.0f;
    integral += err * Ts;
    float omega_est = kp * err + ki * integral;
    
    // 3. 更新角度
    theta_est += omega_est * Ts;
    
    // 角度归一化到0~2pi
    if(theta_est > 2*PI) theta_est -= 2*PI;
    if(theta_est < 0) theta_est += 2*PI;
    
    return theta_est;
}

这里有个关键点:PLL的带宽怎么选?我建议带宽设为电机额定转速对应频率的1/10左右。太快了容易受噪声干扰,太慢了动态响应跟不上。

注意:

PLL的PI参数不能照搬。不同功率等级的电机,反电动势幅值差很多。我做过一个2kW的伺服电机,PLL的kp要调到500才跟得上;而一个50W的小电机,kp设到50就够了。最好根据反电动势的幅值做归一化处理。

4.3 速度估算方法

速度估算,最直接的方法就是对位置求导。但实际做起来,你会发现直接微分噪声太大了。

我常用的方法有两种:

  • 差分法: ω = (θ_k - θ_{k-1}) / Ts。简单,但噪声大,需要加低通滤波。
  • PLL法: 直接用PLL输出的角速度。平滑,但动态响应稍慢。

我个人习惯用PLL法。为什么?因为差分法在低速时,角度变化量很小,量化误差会放大。比如你用一个12位的编码器(虽然咱们没装编码器,但道理一样),低速时相邻两次采样的角度差可能只有1~2个LSB,算出来的速度跳得厉害。

这里给个实际项目中的经验值:

转速范围 推荐方法 滤波截止频率
< 100 rpm PLL法 5~10 Hz
100~1000 rpm 差分法 + 低通滤波 20~50 Hz
> 1000 rpm 差分法 50~100 Hz

4.4 初始位置检测

这个是最头疼的。电机静止时,反电动势为零,你没法通过反电动势知道转子在哪儿。但启动又必须知道初始位置,不然一通电就可能反转或者堵转。

我常用的方法有两种:

  1. 高频注入法: 向定子注入高频电压信号,通过检测高频电流响应来估算转子位置。这个方法对凸极电机(IPMSM)特别有效。
  2. 脉冲电压法: 给不同方向施加短时电压脉冲,比较电流响应的大小。电流最大的方向,就是转子磁极的方向。

我在做空调压缩机项目时,用的是脉冲电压法。因为压缩机是表贴式电机(SPMSM),凸极率不高,高频注入效果不好。脉冲电压法虽然简单,但要注意脉冲宽度不能太长,否则转子会转动。我一般设脉冲宽度为500μs,电流限幅在额定电流的30%。

初始位置检测流程:

  1. 施加6个方向的电压矢量(0°, 60°, 120°, 180°, 240°, 300°)
  2. 记录每个方向的峰值电流
  3. 找出电流最大的方向,作为初始位置
  4. 再施加一个反向脉冲,确认磁极极性(N/S极)

你可能会问:为什么要确认极性?因为脉冲电压法只能检测到磁轴方向,但分不清是N极还是S极。如果搞反了,启动时力矩方向就反了。我一般会在检测到的方向上再施加一个反向脉冲,如果电流更大,说明方向反了,需要加180°。

小技巧:

初始位置检测做完后,最好再做一个验证:给一个很小的电流矢量,看电机有没有轻微转动。如果没动,说明位置对了。如果动了,说明位置有偏差,需要微调。

转子位置与速度估算知识体系 位置速度估算 反电动势过零检测 锁相环(PLL)跟踪 速度估算方法 初始位置检测 过零点检测 带通滤波 PI调节 + 角度积分 差分法 / PLL法 高频注入 脉冲电压

好了,这一章的内容就这些。反电动势过零检测是基础,PLL是进阶,速度估算要结合实际工况选方法,初始位置检测则是启动的关键。把这四块吃透了,无位置传感器控制的基本框架就搭起来了。

专注资料整理