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滤波 + 光耦隔离 + 施密特整形。具体怎么搭,要看现场噪声环境和成本要求。
下面这张图展示了典型的编码器信号处理链路: