用最普通的PC817 光耦传输串口信号,测试它能实现多高的波特率。测试电路如下:

在这里插入图片描述

上面的电路是同相接法,左边TXD 输入低电平时,右边RXD 也被拉低。这样的接法最大的优点是损耗较小,串口空闲时为高电平,而TXD 高电平时,光耦不导通,右边输出三极管也截止,所以没有损耗。TXD 和RXD 分别是一个USB 转串口模块的输出和输入,用电脑上的串口助手做回环测试,如果接收到的数据和发送的相同,说明可以正常传输。

输出端调整

下面分别测试输出端上拉电阻R2 不同的取值对应的最高波特率:

R2 最大波特率
100 x
200 57600
470 19200
570 19200
670 19200
1K 14400

阻值100Ω 时完全无法通讯。看起来有点反直觉,我事先估计是电阻较大时频率较高,因为负载小;然后在电阻过大时,由于高电平完全是靠电阻拉起来,电阻太大就会变慢,所以频率又会降低。但是看实测结果,反而是电阻较小时更快。这似乎印证了规格书里的说法:

在这里插入图片描述

按照这个曲线,就是负载电阻越小,响应时间越短。于是修改电路如下,用光耦驱动一个9018 三极管,再由9018 驱动RXD,构成了类似达林顿的感觉。这样成功的在R2 等于100 的情况下实现了通讯,可惜最高波特率还是57600,电路如下:

在这里插入图片描述

输入端调整

看样子在输出端没什么办法可想了。不过之后又在看文档的时候注意到一句话,说是要调节光耦输入端的驱动电流,使输出端电流为2mA。

在这里插入图片描述

这倒是提醒我了。PC817 这种所谓的模拟光耦就像三极管一样,有个电流传输比值,大概就是输入多少电流,就对应输出端会经过多少电流,显然这也会影响传输频率。之前输入端电阻R1 一直是100,那么也测试一下R1 不同取值的影响:

R1 最大波特率
100 57600
200 128000
300 128000
470 57600
570 57600
1K 38400

阻值增加到200,最大波特率就能增加到128000,阻值300 时频率最高。用自定义波特率试了一下,300Ω 对应最高波特率大概160k,200Ω则是大约150k。这样就可以了,足以覆盖常用的9600 到115200 波特率的范围。PC817 一个几分钱,S9018 更便宜,所以不到两毛钱就可以实现一个最高100kbps 的双通道串口隔离电路。

在这里插入图片描述

总结

可以用PC817 实现串口隔离。优点

  • 低成本,应该没有更便宜的方案了;
  • PC817 用的比较广泛,串口隔离也用它解决,可以简化BOM;

缺点

  • 长期稳定性没经过测试,有兴趣的可以自己试试;
  • 电路能实现的最高频率不稳定,可能和器件参数有关,还容易受到环境因素影响;
  • 相比专门的隔离芯片,这套电路功耗应该比较高;
  • 一整套下来占用PCB 面积也比较大;

实际上,我觉得这个方案最实用的地方是用来隔离485 收发器的DE 信号。485 收发器的TXD 和RXD 串口信号可以用专门的双通道隔离芯片,也很便宜,但是还有一路DE 信号需要隔离。用三通道或者四通道的隔离芯片的话,泛用性比较差。DE 信号的频率又比较低,就算串口频率达到100k 以上,DE 信号至少是在传输完一字节以后才切换一次,所以频率最多可能也就10k 左右。现在测试下来发现,只要搭配合适的外围电路参数,PC817 能覆盖到100k 频率,那么用它传输DE 信号就更放心了。

除了I2C、SPI 之类的通信协议,平时常用的IO 信号频率也比较低,就算是输出PWM,最高频率一般也不过10kHz ~ 20kHz 左右,拿PC817 也能实现隔离。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐