共计 1784 个字符,预计需要花费 5 分钟才能阅读完成。
背景痛点
在工业自动化领域,AB 相编码器是伺服电机控制的核心传感器。但在实际应用中,我们经常遇到以下问题:

- 信号抖动 :由于机械振动或电磁干扰,导致 AB 相信号边沿出现毛刺
- 线缆干扰 :长距离传输时,电缆分布电容导致信号上升沿变缓(典型值 >1μs 时可能漏脉冲)
- 高速漏脉冲 :当转速超过 2000RPM 时,传统软件轮询方式会丢失脉冲
这些问题的直接后果是速度反馈出现±5% 的波动,在闭环控制中会导致:
- 电机转矩波动(可达额定转矩的 10%)
- 位置控制产生累积误差
- 系统振动加剧,机械部件寿命缩短
技术方案
硬件捕获 vs 软件轮询
- 硬件捕获 :利用 STM32 定时器的编码器接口模式,自动识别 AB 相边沿
- 优势:零 CPU 开销,支持最高 10MHz 的脉冲频率
-
缺点:需要占用定时器资源
-
软件轮询 :通过 GPIO 状态检测实现
- 优势:无需专用硬件
- 缺点:CPU 占用率高,高速时漏检严重
STM32 正交解码配置
关键配置步骤如下:
- 在 CubeMX 中启用 TIMx 的 Encoder Mode
- 设置计数模式为 TI1 和 TI2 均触发(对应 4 倍频)
- 配置滤波器参数(通常 ICx_Filter=6,对应 8 个时钟周期)
寄存器级配置示例:
TIM_EncoderInterfaceConfig(TIM3, TIM_EncoderMode_TI12,
TIM_ICPolarity_Rising,
TIM_ICPolarity_Rising);
TIM_SetAutoreload(TIM3, 0xFFFF); // 16 位计数器最大值
滑动窗口滤波算法
采用环形缓冲区实现:
- 窗口大小 N = 8 时,速度更新延迟约 1ms(1kHz 采样率)
- 实时性公式:延迟 (ms) = N / 采样频率 (kHz)
代码实现
速度计算核心代码
// 使用 Q15 格式定点数运算
int16_t CalcSpeed(uint16_t curr_cnt, uint16_t prev_cnt) {int32_t delta = (int32_t)(curr_cnt - prev_cnt);
// 处理计数器溢出
if(delta > 0x7FFF) delta -= 0xFFFF;
else if(delta < -0x7FFF) delta += 0xFFFF;
// 转换为 Q15 格式(1.15),4096 对应 1 转 / 秒
return (int16_t)(delta * 4096 / MEASURE_PERIOD_MS);
}
均值滤波实现
#define FILTER_WINDOW 8
int16_t SpeedFilter(int16_t new_val) {static int16_t buf[FILTER_WINDOW] = {0};
static uint8_t idx = 0;
int32_t sum = 0;
buf[idx++] = new_val;
if(idx >= FILTER_WINDOW) idx = 0;
for(uint8_t i=0; i<FILTER_WINDOW; i++) {sum += buf[i];
}
return (int16_t)(sum / FILTER_WINDOW);
}
生产验证
信号质量标准
- 上升时间:<500ns(24V 编码器电源时)
- 振铃幅度:<30% 信号幅值
- 共模噪声:<200mVpp
EMI 抑制措施
- 使用双绞线(绞距 <50mm)
- 磁环安装在距离编码器 30cm 内
- 信号线远离电机动力线(最小间距 5cm)
极限测试方法
- 突加 50% 额定负载,观察速度恢复时间(应 <100ms)
- 以额定转速的 120% 运行 1 小时,检查脉冲丢失率(应 <0.001%)
避坑指南
中断优先级设置
- 编码器中断优先级应高于 PWM 周期中断
- 但低于紧急故障保护中断
供电电压影响
| 电压 (V) | 信号幅值 (Vpp) |
|---|---|
| 5 | 3.8-4.2 |
| 12 | 9-11 |
| 24 | 18-22 |
故障诊断树
脉冲丢失
├─ 线缆阻抗异常(测量 A - B 线间电阻,应 <10Ω)├─ 光耦老化(检测输出波形上升沿 >1μs)└─ 电源跌落(监测供电电压波动 >±10%)
动手实验
使用示波器的 FFT 功能分析编码器信号:
- 连接示波器探头到 A 相信号
- 设置 FFT 参数:中心频率 =1MHz,Span=2MHz
- 观察频谱中是否出现:
- 50/60Hz 工频干扰
- PWM 载频谐波(通常 8 -16kHz)
- 高频噪声(>1MHz)
通过本方案的实施,我们在注塑机伺服系统上实现了:
– 速度测量误差从±2% 降低到±0.1%
– 转矩波动减少 60%
– 编码器线缆寿命延长 3 倍
这套方法经过 3 年现场验证,在 200+ 台设备上稳定运行。建议初次实施时重点检查信号完整性和滤波器参数,这是保证精度的关键。
正文完
