4、单端信号隔离方案:基于6N137的高速光耦隔离电路,上拉电阻计算与延时分析
编码器信号隔离,说白了就是给高速脉冲信号加一道“防火墙”。
我早年做第一版运动控制卡时,没重视隔离,结果电机一启动,编码器读数就开始跳变。查了三天,发现是驱动器的高频噪声串进了信号线。从那以后,编码器接口我必加隔离,而且必须是高速隔离。
这一章,咱们就聊6N137这个经典的高速光耦。它便宜、好买、资料多,是单端信号隔离的“万金油”。但用好它,上拉电阻和延时这两个坑,你必须填平。
4.1 为什么选6N137?
普通光耦,比如PC817,带宽只有几十kHz。编码器输出脉冲,动辄几百kHz甚至几MHz。用PC817去隔离,波形直接变成三角波,边沿软得像面条。
6N137不一样。它的典型带宽是10MHz,实测在5MHz以内波形都很硬朗。内部集成了一个施密特触发器,输出是整形的数字电平,不需要额外加比较器。
| 参数 | PC817 | 6N137 |
|---|---|---|
| 带宽(典型) | 80 kHz | 10 MHz |
| 输出类型 | 光敏三极管 | 施密特触发整形 |
| 传播延时 | ~4 µs | ~50 ns |
| 适用场景 | 低频开关量 | 编码器脉冲、PWM |
你看这个延时差距。4微秒和50纳秒,差了80倍。对于100kHz的编码器信号,一个周期才10微秒,PC817的延时直接吃掉将近半个周期,相位都乱了。6N137的50ns延时,基本可以忽略。
4.2 典型电路结构
6N137的电路不复杂,但有几个关键点。我直接画个典型接法给你看。
这个图里,输入侧很简单:编码器信号串一个限流电阻,驱动6N137内部的LED。输出侧是开集电极(OC)输出,必须加上拉电阻才能得到高电平。
核心要点:6N137的输出是OC门,不加上拉电阻,输出端永远拉不到高电平。上拉电阻的阻值,决定了信号上升沿的陡峭程度。
4.3 上拉电阻计算——这是个权衡
上拉电阻选多大?我见过有人随手焊个10kΩ,结果编码器信号一上100kHz,波形就糊了。也有人用100Ω,结果光耦发烫,功耗超标。
上拉电阻的取值,本质是在上升时间和功耗之间做权衡。
4.3.1 上升时间约束
6N137的输出端有寄生电容,大约10pF。加上PCB走线电容和下一级输入电容,总负载电容C_load通常在15~30pF之间。
上升沿时间t_r,由RC充电时间常数决定:
t_r ≈ 2.2 × R_pullup × C_load
举个例子。假设C_load = 20pF,你希望上升时间不超过50ns:
R_pullup ≤ t_r / (2.2 × C_load)
R_pullup ≤ 50ns / (2.2 × 20pF)
R_pullup ≤ 1136 Ω
所以,上拉电阻不能超过1.1kΩ左右。如果你用10kΩ,上升时间会变成440ns,对于1MHz的编码器信号,一个周期才1µs,上升沿占了将近一半,信号质量可想而知。
4.3.2 功耗约束
上拉电阻太小,功耗就大。6N137输出低电平时,电流从电源经上拉电阻流入输出管。假设电源电压V_cc = 3.3V,输出低电平V_ol ≈ 0.2V:
I_ol = (V_cc - V_ol) / R_pullup
P = I_ol × V_ol
如果R_pullup = 330Ω:
I_ol = (3.3 - 0.2) / 330 ≈ 9.4 mA
P = 9.4mA × 0.2V ≈ 1.88 mW
这个功耗不大。但如果R_pullup = 100Ω:
I_ol = (3.3 - 0.2) / 100 ≈ 31 mA
P = 31mA × 0.2V ≈ 6.2 mW
6N137的OC门最大灌电流是50mA,31mA还在范围内,但已经偏高了。而且多个通道同时工作,总功耗会累积。
4.3.3 我的推荐值
我个人习惯,在3.3V系统里,上拉电阻取330Ω ~ 510Ω。在5V系统里,取470Ω ~ 680Ω。这个范围既能保证上升时间在50ns以内,功耗也在安全区。
| 电源电压 | 推荐上拉电阻 | 上升时间(C_load=20pF) | 低电平灌电流 |
|---|---|---|---|
| 3.3V | 330 Ω | ~14.5 ns | 9.4 mA |
| 3.3V | 510 Ω | ~22.4 ns | 6.1 mA |
| 5.0V | 470 Ω | ~20.7 ns | 10.2 mA |
| 5.0V | 680 Ω | ~29.9 ns | 7.1 mA |
小技巧:如果你不确定负载电容,可以在PCB上预留两个焊盘,一个焊330Ω,一个焊510Ω。调试时用示波器看上升沿,选波形最硬朗的那个。我经常这么干。
4.4 延时分析——别被数据手册骗了
6N137的数据手册上,传播延时典型值是50ns。但那是理想条件。实际项目中,延时受好几个因素影响。
4.4.1 输入电流的影响
6N137输入侧是LED,需要足够的电流才能快速导通。数据手册推荐输入电流I_f = 6.3 ~ 15 mA。电流越小,LED导通越慢,传播延时越大。
限流电阻R_in的计算:
R_in = (V_in - V_f) / I_f
V_f是LED正向压降,典型1.4V。如果输入信号是5V,目标I_f = 10mA:
R_in = (5 - 1.4) / 0.01 = 360 Ω
我建议I_f取10mA左右。太小了延时变大,太大了LED寿命受影响。
4.4.2 上拉电阻对延时的影响
上拉电阻不仅影响上升时间,还影响传播延时。注意,传播延时包括上升沿延时和下降沿延时。
- 上升沿延时:由RC充电决定。上拉电阻越大,上升沿越慢,从低到高的传播延时越大。
- 下降沿延时:由OC门的下拉能力决定,基本固定,约20~30ns。
所以,上拉电阻主要影响的是低到高的传播延时。如果你用大电阻,高低电平的延时就不对称了,脉冲宽度会失真。
4.4.3 实测数据
我曾经用示波器实测过一组数据,供你参考:
| 上拉电阻 | 上升沿延时 (t_PLH) | 下降沿延时 (t_PHL) | 延时不对称量 |
|---|---|---|---|
| 330 Ω | 38 ns | 25 ns | 13 ns |
| 1 kΩ | 62 ns | 26 ns | 36 ns |
| 4.7 kΩ | 185 ns | 27 ns | 158 ns |
| 10 kΩ | 410 ns | 28 ns | 382 ns |
看到没?上拉电阻从330Ω换成10kΩ,上升沿延时从38ns飙到410ns,而下降沿延时几乎不变。这种不对称,会导致编码器脉冲的占空比发生偏移。对于需要精确测量脉宽的应用,这是致命的。
避坑指南:我曾经在一个项目中,用10kΩ上拉电阻隔离编码器Z信号(零位脉冲)。结果Z脉冲的宽度被拉宽了将近400ns,导致每次过零点的位置都偏移。查了两天才找到原因。从那以后,编码器隔离的上拉电阻我绝不超过1kΩ。
4.5 完整电路参数速查
为了方便你直接抄作业,我把常用参数整理成一张表:
| 参数 | 3.3V 系统 | 5V 系统 | 说明 |
|---|---|---|---|
| 输入限流电阻 R_in | 200 Ω | 360 Ω | 保证I_f ≈ 10mA |
| 上拉电阻 R_pullup | 330 ~ 510 Ω | 470 ~ 680 Ω | 平衡速度与功耗 |
| 输出负载电容 C_load | < 30 pF | < 30 pF | 含PCB走线和下一级输入 |
| 最大编码器频率 | 5 MHz | 5 MHz | 留有余量,实际可用更高 |
| 传播延时(典型) | ~50 ns | ~50 ns | 与上拉电阻相关 |
4.6 布局布线注意事项
电路参数算对了,PCB布局布线搞砸了,一样白搭。我提几个关键点:
- 上拉电阻靠近6N137的输出引脚。越近越好,走线不要超过5mm。长走线会增加寄生电容,拖慢上升沿。
- 电源去耦电容不能省。6N137输出切换时,电流变化很快。在V_cc和GND之间放一个0.1µF的陶瓷电容,紧挨着芯片引脚。
- 输入和输出走线要分开。6N137内部虽然有隔离,但PCB上输入侧和输出侧的走线如果平行走太长,会通过寄生电容耦合噪声。我一般让它们分两侧走,中间留出隔离槽。
- 地平面要分割。输入侧的地和输出侧的地,在光耦下方断开,不要连通。隔离电源的地也一样处理。
总结一下:6N137的单端隔离方案,核心就两件事——上拉电阻算对,PCB布局做好。上拉电阻取330~680Ω,上升时间控制在30ns以内,编码器信号到5MHz都没问题。延时不对称的问题,只要不用大电阻,基本可以忽略。