共计 1248 个字符,预计需要花费 4 分钟才能阅读完成。
背景介绍
BLDC(无刷直流)电机在现代运动控制系统中扮演着重要角色,而编码器作为其核心反馈元件,直接影响着控制精度和系统性能。编码器能够实时监测电机转子的位置和速度,为闭环控制提供关键数据。无论是工业机器人、CNC 机床还是家用电器,都离不开编码器的精准反馈。

技术解析
编码器类型对比
- 增量式编码器
- 输出脉冲信号(A/ B 相)
- 需要上电后寻零操作
-
成本低,适用于大多数场景
-
绝对式编码器
- 每个位置有唯一编码
- 断电后保持位置记忆
- 适合安全关键应用
信号接口类型
- ABZ 信号 :最基础的双通道正交信号 + 零位脉冲
- UVW 信号 :常用于无刷电机换向(霍尔传感器替代方案)
- SSI 协议 :同步串行接口,支持绝对位置传输
分辨率与精度
- 分辨率 :每转的脉冲数(PPR),如 1024 线
- 精度 :实际位置与理论位置的偏差,受机械安装影响
实战部分
STM32 读取增量式编码器
// TIM3 编码器接口模式配置
void Encoder_Init(void)
{TIM_Encoder_InitTypeDef sConfig = {0};
TIM_MasterConfigTypeDef sMasterConfig = {0};
htim3.Instance = TIM3;
htim3.Init.Prescaler = 0;
htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
htim3.Init.Period = 0xFFFF;
htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
sConfig.EncoderMode = TIM_ENCODERMODE_TI12;
sConfig.IC1Polarity = TIM_ICPOLARITY_RISING;
sConfig.IC1Selection = TIM_ICSELECTION_DIRECTTI;
sConfig.IC1Prescaler = TIM_ICPSC_DIV1;
sConfig.IC1Filter = 6;
// 类似配置 IC2...
HAL_TIM_Encoder_Init(&htim3, &sConfig);
HAL_TIM_Encoder_Start(&htim3, TIM_CHANNEL_ALL);
}
四倍频计数原理
- 通过检测 A / B 相的上升沿和下降沿
- 每个周期可计数 4 次(分辨率提升 4 倍)
- 方向判断依据两相信号相位差
避坑指南
信号干扰处理
- 使用双绞屏蔽线(如 STP120Ω)
- 在 MCU 端添加 RC 滤波(典型值:100Ω+100pF)
- 避免与功率线平行走线
机械安装要点
- 联轴器需保证同心度(偏差 <0.1mm)
- 轴向间隙控制在 0.05-0.1mm
- 避免径向受力导致轴承磨损
零位校准方法
- 机械法:通过物理限位触发 Z 信号
- 电气法:UVW 信号对齐(需特定转子位置)
性能考量
转速与采样策略
| 转速范围 | 采样策略 |
|---|---|
| <1000RPM | 定时查询(10ms 周期) |
| >1000RPM | 中断捕获 +DMA 传输 |
实时性要求
- 速度环控制:更新周期≤1ms
- 位置环控制:更新周期≤5ms
思考题
如何实现多圈绝对位置记录?(提示:结合电池供电存储 / 齿轮机械计数器)
正文完
