3. 硬件滤波电路设计:让信号干干净净进芯片

编码器信号在长线传输过程中,很容易被电机驱动器的PWM噪声、电源纹波、甚至旁边的继电器打火给污染。我见过不少项目,软件里调了半天滤波参数,结果问题出在硬件上——信号进来的时候就已经是花的了。

这一章,咱们就聊聊怎么在硬件层面把信号洗干净。说白了,就是让编码器输出的方波,到了MCU引脚时还能保持方波的样子。

3.1 RC低通滤波器:第一道防线

RC低通滤波器是最简单、最便宜的滤波手段。一个电阻加一个电容,就能把高频噪声衰减掉。但问题在于——截止频率怎么选?

公式很简单:

f_c = 1 / (2π × R × C)

其中f_c是截止频率(-3dB点),单位Hz;R是电阻,单位Ω;C是电容,单位F。

我个人习惯这样选:

  • 先看编码器最高输出频率。比如编码器每转10000线,电机最高转速3000rpm,那输出频率就是10000 × 3000 / 60 = 500kHz。
  • 截止频率取信号频率的3~5倍。这样既能保证信号基波不衰减太多,又能把高频噪声滤掉。
  • 电阻选1k~10kΩ,电容根据公式反算。

举个例子:信号频率500kHz,我取截止频率2MHz。选R=1kΩ,那C = 1 / (2π × 1000 × 2×10⁶) ≈ 80pF。实际取标称值82pF。

重要提醒:RC滤波会引入相位延迟。对于编码器A/B相正交信号,两路的RC参数必须严格一致,否则会产生额外的相位误差,直接影响换相精度。

我在项目中遇到过一个问题:A相和B相用了不同批次的电阻,精度差了1%,结果在高速时换相角度偏差了3°电角度。后来全部换成0.1%精度的电阻,问题解决。

实战技巧:如果空间允许,可以在RC后面加一个同相缓冲器(比如TLV9061),隔离后级电路对RC网络的负载效应。这样截止频率不会因为后级输入阻抗而偏移。

3.2 施密特触发器整形:把模糊变清晰

RC滤波后的信号,边沿会变缓。如果直接进MCU的GPIO,可能会在阈值电压附近来回抖动,造成多次触发。施密特触发器就是干这个的——它有滞回特性,输入电压上升和下降的阈值不一样。

常用的芯片有:

型号 通道数 滞回电压(典型) 供电电压
74HC14 6 0.7V @ 5V 2~6V
74HCT14 6 0.7V @ 5V 4.5~5.5V
SN74LVC1G17 1 0.4V @ 3.3V 1.65~5.5V

选型时注意几点:

  • 供电电压要和MCU匹配。3.3V系统用74LVC系列,5V系统用74HC或74HCT。
  • 滞回电压要大于噪声幅度。如果噪声有0.3V,那滞回至少0.5V才保险。
  • 传播延迟要短。对于高速编码器,74HC14的典型延迟是15ns左右,基本够用。

我曾经在一个伺服驱动器项目里,编码器信号经过1米长的屏蔽线进来,示波器上看边沿有20mV的毛刺。加了74HC14之后,信号干净得像教科书一样。

注意:施密特触发器的输入引脚不能悬空。不用的通道要把输入接地或接VCC,否则会振荡,产生额外的噪声。

3.3 差分信号接收器:抗共模干扰的利器

如果编码器距离控制器超过1米,或者现场有强电磁干扰,单端信号就不太靠谱了。这时候差分传输是更好的选择。

编码器常用的差分接口是RS-422,用一对双绞线传输A+、A-信号。接收端用差分接收器(比如AM26LS32)把差分信号转成单端信号。

AM26LS32的几个关键参数:

参数 典型值 说明
输入灵敏度 ±200mV 差分电压超过200mV就能识别
共模输入范围 ±7V 抗共模干扰能力
输入阻抗 ≥12kΩ 对编码器驱动能力要求低
传播延迟 约20ns 满足大部分编码器需求

接线时要注意:

  • 双绞线每英寸至少绞3圈,绞距越密,抗干扰越好。
  • 接收器输入端要加100~120Ω终端电阻,匹配电缆特性阻抗,防止信号反射。
  • 未使用的通道要把输入引脚短接,或者接一个固定的差分电压,避免输出乱跳。

我记得有一次调试,编码器信号在电机加速时偶尔丢脉冲。查了半天,发现是终端电阻焊错了,用了1kΩ。换成120Ω后,问题消失。

选型建议:如果编码器输出是差分信号,强烈建议用AM26LS32或同类芯片做接收。直接用MCU的差分输入(比如STM32的USB差分对)虽然也能用,但抗干扰能力和共模范围都不如专用芯片。

3.4 光耦隔离方案:彻底切断地环路

在工业现场,编码器和控制器之间可能存在很大的地电位差。如果不做隔离,轻则信号异常,重则烧毁接口。

光耦隔离是最常用的方案。它通过光信号传递信息,电气上完全隔离。

选光耦时关注这几个参数:

参数 推荐值 说明
隔离电压 ≥2500Vrms 满足工业现场要求
数据速率 ≥编码器频率×2 保证信号不丢
CTR(电流传输比) ≥50% 保证可靠导通

常用的高速光耦有6N137(10Mbps)、HCPL-0600(10Mbps)、TLP2361(10Mbps)等。

电路设计时注意:

  • 输入限流电阻要算好。光耦的LED正向压降约1.5V,根据输入电压算电阻值,保证LED电流在5~15mA。
  • 输出端上拉电阻。集电极开路输出需要上拉到VCC,电阻值根据负载电容和速率要求选,一般1k~10kΩ。
  • 输入输出电源要隔离。用隔离DC-DC模块(比如B0505S)给光耦输出侧供电。

我曾经在一个变频器项目里,编码器信号经过光耦隔离后,波形边沿变缓了。后来发现是上拉电阻太大(10kΩ),换成2.2kΩ后波形恢复正常。

避坑指南:光耦的传播延迟有分散性,不同批次、不同通道之间可能有几十纳秒的差异。如果A/B相各用一个光耦,要选同一批次、同一封装的器件,或者用双通道光耦(比如HCPL-0630)。

3.5 整体方案对比与选型

这四种方案各有适用场景。我整理了一个对比表:

方案 成本 抗干扰能力 适用距离 隔离能力 推荐场景
RC滤波 极低 一般 <0.5m 无 板内短距离
施密特整形 低 较好 <1m 无 信号边沿修复
差分接收 中等 优秀 1~10m 无 长线传输
光耦隔离 较高 优秀 <5m 有 地环路隔离

实际项目中,我经常把这几种方案组合使用。比如:差分接收 + 施密特整形,或者RC滤波 + 光耦隔离 + 施密特整形。具体怎么搭,要看现场噪声环境和成本要求。

下面这张图展示了典型的编码器信号处理链路:

编码器信号硬件滤波链路 编码器信号硬件滤波链路 编码器 差分接收 AM26LS32 RC低通滤波 f_c = 1/(2πRC) 光耦隔离 6N137 施密特整形 74HC14 MCU 说明: • 差分接收和RC滤波顺序可互换,但差分接收在前抗干扰效果更好 • 光耦隔离可根据需要放在链路任意位置,但建议在差分接收之后 • 施密特整形通常放在最后一级,确保进入MCU的信号边沿陡峭