ABZ编码器与RC滤波电路:从基础原理到嵌入式实践

1次阅读
没有评论

共计 1579 个字符,预计需要花费 4 分钟才能阅读完成。

image.webp

ABZ 编码器信号处理实战笔记

最近在电机控制项目中遇到了 ABZ 编码器信号抖动的问题,记录一下 RC 滤波电路的实践过程。工业现场电磁环境复杂,编码器信号常受到干扰,导致位置检测不准,这时候滤波电路就显得尤为重要。

ABZ 编码器与 RC 滤波电路:从基础原理到嵌入式实践

一、为什么需要滤波?

ABZ 编码器(又称正交编码器)通过 A、B 两相 90 度相位差的方波信号提供位置和方向信息。但在实际应用中:

  • 电机运行时产生的电磁干扰
  • 长距离传输导致的信号衰减
  • 连接器接触不良

这些都会引起信号边沿抖动,可能导致计数器误触发。我曾遇到过 1 米无屏蔽线缆情况下,转速测量误差高达 15% 的情况。

二、滤波方案对比

测试了三种处理方案:

  1. 无滤波
  2. 优点:零延迟
  3. 缺点:误触发频繁(SNR 仅 8dB)

  4. 一阶 RC 滤波

  5. 成本:电阻电容约 0.1 元
  6. 性能:SNR 提升至 24dB,相位延迟约 1.2μs

  7. 二阶 RC 滤波

  8. 成本:增加一倍元件
  9. 性能:SNR 达 32dB,但延迟增至 3.5μs

对于 1000RPM 以下的电机控制,一阶滤波通常就能满足需求。

三、核心实现步骤

3.1 RC 参数计算

截止频率公式:

f_c = 1/(2πRC)

建议取值原则:
– 下限:10 倍信号最高频率
– 上限:1/ 4 输入捕获定时器分辨率

例如:
– 编码器 1000 线,3000RPM 时:

1000 线 × (3000/60) = 50kHz 信号频率
→ 取 f_c=100kHz
→ 选 R =1kΩ,则 C =1.6nF

3.2 STM32 硬件配置

关键寄存器设置(以 TIM3 为例):

// 启用编码器模式
TIM3->SMCR |= TIM_SMCR_SMS_0 | TIM_SMCR_SMS_1; 

// 配置 GPIO 复用
GPIOB->AFR[0] |= (1<<4*4) | (1<<5*4); // PB4/PB5 复用为 TIM3

// 设置输入捕获滤波器(4 个时钟周期)TIM3->CCMR1 |= (0x4<<12) | (0x4<<4); 

3.3 软件滤波补充

移动平均滤波示例:

#define FILTER_WINDOW 5
uint16_t filter_buffer[FILTER_WINDOW];

uint16_t moving_average(uint16_t new_val) {
    static uint8_t idx = 0;
    uint32_t sum = 0;

    filter_buffer[idx++] = new_val;
    if(idx >= FILTER_WINDOW) idx = 0;

    for(uint8_t i=0; i<FILTER_WINDOW; i++) {sum += filter_buffer[i];
    }
    return sum / FILTER_WINDOW;
}

四、实测效果

测试条件:
– 电机转速 500RPM
– 1024 线编码器
– 1 米非屏蔽电缆

方案 原始计数 滤波后计数 误差率
无滤波 8523 16.7%
一阶 RC 8531 8530 0.12%
二阶 RC 8528 8529 0.08%

示波器观察发现:
– 原始信号边沿有约 200ns 抖动
– 一阶滤波后抖动减小到 50ns 以内

五、常见问题解决

  1. 信号畸变 :当截止频率设置过低时,方波可能变成三角波。解决方法:
  2. 用示波器确认信号形状
  3. 按 3.1 节重新计算参数

  4. 共模干扰 :电源噪声导致 AB 信号同时波动。建议:

  5. 在编码器供电端加 10μF+0.1μF 去耦电容
  6. 使用双绞线传输信号

  7. 实时性问题 :中断服务程序过长会导致丢失脉冲。优化技巧:

  8. 仅置标志位,主循环处理计数
  9. 使用 DMA 传输计数器值

六、进阶思考

对于高动态场景(如伺服系统),可以尝试:
– 卡尔曼滤波:结合运动模型预测
– 自适应滤波:根据转速动态调整参数

推荐论文:
“Rotary Encoder Signal Processing for High Performance Servo Drives” – IEEE Trans. Ind. Electron.

实践感悟

这次调试让我深刻体会到:硬件滤波是基础,软件算法是补充。在 EMC 恶劣的环境下,与其追求复杂的算法,不如先把 RC 参数调好。下一步计划尝试将滤波电路做成模块化设计,方便在不同项目中复用。

正文完
 0
评论(没有评论)