4. 位置传感器与估算:霍尔传感器、编码器、无传感器估算
说到低转速FOC,位置信息就是命根子。没有准确的角度,电流环就是瞎指挥。我这些年踩过的坑,有一半都跟位置信号有关。今天咱们就把霍尔、编码器、还有无传感器估算这几种方案,掰开了揉碎了聊一聊。
4.1 霍尔传感器:便宜但粗糙
霍尔传感器,说白了就是三个开关。电机转一圈,每个霍尔输出高低电平各一次。三个霍尔组合起来,一圈能给出6个离散的位置点。
优点很明显:便宜、皮实、不怕震动。我在做电动自行车项目时,就用的霍尔方案。成本压得死死的。
缺点也很致命:分辨率太低。一圈只有6个扇区,每个扇区60度。你想想看,60度范围内角度全靠插值估算,低速时抖动得厉害。
核心问题:霍尔信号在低速时,换相时刻不准确。因为反电动势弱,霍尔翻转点会漂移。
我的做法:用霍尔做初始定位和粗略角度,然后结合电流模型做补偿。具体来说,我会在霍尔跳变沿触发时,强制校准一次角度,中间用速度积分来推算。
// 霍尔中断服务函数
void HAL_IRQHandler(void) {
uint8_t hall_pattern = (GPIOA->IDR & 0x07);
// 查表得到当前扇区起始角度
theta_hall = hall_table[hall_pattern];
// 强制校准
theta_estimated = theta_hall;
// 重置积分器
speed_integrator = 0;
}
个人经验:霍尔安装位置一定要准。我曾经因为霍尔板焊接歪了1度,结果电机在零速附近来回震荡,查了三天才找到原因。
4.2 编码器:精度与成本的博弈
编码器分增量式和绝对式两种。增量式便宜,但上电需要找零位。绝对式一上电就知道位置,但贵。
增量式编码器:输出A、B两路正交信号,加上Z脉冲(零位信号)。分辨率取决于线数,比如2500线,经过4倍频后就是10000个脉冲/圈。
绝对式编码器:常用SSI或BiSS协议,直接输出二进制角度值。分辨率可以做到17位甚至更高。
| 类型 | 分辨率 | 成本 | 低速性能 | 适用场景 |
|---|---|---|---|---|
| 霍尔 | 6扇区 | 低 | 差 | 风机、水泵 |
| 增量式编码器 | 1000~10000 | 中 | 良 | 伺服、机器人 |
| 绝对式编码器 | 17~23位 | 高 | 优 | 高端伺服、数控机床 |
低速时的坑:增量式编码器在极低速时,脉冲间隔太长。比如1rpm时,2500线编码器每两个脉冲之间间隔6ms。这6ms内角度全靠猜,电流环会抖。
避坑指南:我曾经在伺服项目里,用了1000线的增量式编码器做低速对位。结果0.1rpm时,位置环根本稳不住。后来换成17位绝对式,问题才解决。所以,低速应用别省编码器的钱。
我的建议:如果预算允许,直接上绝对式编码器。如果只能用增量式,那就用M/T法测速,结合低通滤波。M法测高频,T法测低频,两者切换。
// M/T法测速示例
if (pulse_count > THRESHOLD_HIGH) {
// M法:计数脉冲数
speed = pulse_count / (time_base * encoder_lines * 4);
} else {
// T法:测量脉冲间隔
speed = 1.0 / (pulse_interval * encoder_lines * 4);
}
4.3 无传感器估算:滑模观测器与龙伯格观测器
有些场合装不了传感器,比如压缩机、洗衣机。这时候就得靠算法估算角度。主流方案有两种:滑模观测器和龙伯格观测器。
4.3.1 滑模观测器(SMO)
滑模观测器的思路很暴力:构造一个开关函数,强行把估计误差拉到零。说白了就是让估计值跟着实际值跑,跑偏了就狠狠拉回来。
优点:对参数不敏感,鲁棒性好。电机参数变了也不怕。
缺点:有抖振。因为开关函数在切换时会产生高频噪声,低速时尤其明显。
我记得第一次调滑模观测器时,电流波形上全是毛刺。后来加了低通滤波和相位补偿,才把角度搞平滑。
// 滑模观测器核心代码
// 电流误差
err_alpha = i_alpha_est - i_alpha;
err_beta = i_beta_est - i_beta;
// 滑模控制函数
z_alpha = -K * sign(err_alpha);
z_beta = -K * sign(err_beta);
// 反电动势估算
e_alpha_est += (z_alpha - e_alpha_est) * wc;
e_beta_est += (z_beta - e_beta_est) * wc;
// 角度计算
theta_est = atan2(-e_alpha_est, e_beta_est);
个人经验:滑模增益K不能太大,否则抖振严重;也不能太小,否则跟不上。我一般从0.5倍母线电压开始调,边调边看电流波形。
4.3.2 龙伯格观测器(Luenberger Observer)
龙伯格观测器是另一种思路。它基于电机模型,用反馈增益矩阵来修正估计值。说白了就是:我预测一个角度,然后用实际电流和预测电流的误差来修正预测。
优点:平滑、无抖振。低速性能比滑模好。
缺点:依赖电机参数。电阻、电感变了,估计就不准了。
你想想看,电机发热时电阻会变,磁钢退磁时磁链会变。这些都会影响龙伯格观测器的精度。
// 龙伯格观测器状态方程
// 状态向量 x = [i_alpha, i_beta, e_alpha, e_beta]
// 预测步
x_pred = A * x_est + B * u;
// 修正步
y_meas = [i_alpha_meas; i_beta_meas];
y_pred = C * x_pred;
x_est = x_pred + L * (y_meas - y_pred);
// 角度提取
theta_est = atan2(-e_alpha_est, e_beta_est);
核心对比:滑模观测器像是个粗犷的汉子,不怕参数变化但有点糙。龙伯格观测器像个精细的姑娘,平滑但娇气。实际项目中,我经常把两者结合:启动时用滑模,稳定后切到龙伯格。
4.4 低速无传感器启动的痛点
无传感器方案在零速和极低速时,反电动势几乎为零。这时候观测器根本没法用。怎么办?
常用的启动策略:
- 开环强拖:先给一个固定频率的电压矢量,把电机转起来。等转速够了再切到闭环。我做过一个风机项目,就是用这个方法,从5Hz开环拖到20Hz再切闭环。
- 高频注入:在电压上叠加一个高频信号,通过检测电流响应来估算转子位置。这个方法对凸极电机特别有效。但算法复杂,计算量大。
- 预定位:先给一个直流电压,把转子拉到已知位置。然后加速。这个方法简单,但负载重时可能拉不动。
避坑指南:我曾经在压缩机项目里用开环强拖,结果负载太大,电机没转起来,电流却飙到额定值的3倍。差点烧了IGBT。后来改成高频注入+预定位结合,才搞定。
4.5 我的选型建议
说了这么多,到底怎么选?我个人的经验是:
- 成本敏感、对低速性能要求不高:用霍尔+电流补偿。比如风机、水泵。
- 需要高精度低速控制:上绝对式编码器。比如伺服、机器人。
- 装不了传感器:用滑模观测器启动,龙伯格观测器稳态。比如压缩机、洗衣机。
- 极低速(<1rpm)且无传感器:必须用高频注入。别无他法。
嗯,位置传感器这块就聊到这儿。下一章咱们讲电流采样和PWM死区补偿,那也是低速FOC的另一个大坑。