PC817 光耦隔离串口传输频率
本文测试了使用PC817光耦传输串口信号时的最高波特率性能。通过调整输入端电阻R1和输出端上拉电阻R2,发现当R1=200-300Ω、R2=100Ω时,可实现最高160kbps的波特率,满足常用串口通信需求。文中详细记录了不同电阻配置下的性能测试数据,并分析了电路损耗与响应时间的关系。该方案的优点是成本极低(单通道约0.2元),适合隔离485收发器的DE信号等低频应用;缺点是稳定性易受器件参数影响
用最普通的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 也能实现隔离。
更多推荐



所有评论(0)