关于光耦隔离与SP3485E芯片一起使用无法拉高485使能引脚问题
问题描述
最近在做的一个项目,定制了一块STM32F407ZG的工控板,工控板载4个485接口全部都是只能接收数据,不能对外发送数据。
可能的问题原因
1.接线不正确:接线不正确导致485收发出现问题。
2.程序端口初始化问题:控制光耦隔离的输入脚IO的初始化和置位状态有问题。
3.GPIO复用问题:控制对应串口的GPIO不是正点原子默认的GPIO,而是经过复用的其他IO,复用问题。
4.程序设置与485E芯片收发模式不对应:对于使能引脚的电平要根据光耦的输出情况确定输入IO与RE的关系,可能模式没有对应。
5.光耦隔离或者SP485E这两块IC内部本身存在问题。
问题探究
如图,SP485E芯片的2号引脚RE和3号引脚DE分别控制485的收发状态,同时两引脚连接在一起,RE低电平有效,DE高电平有效,保证了485E的半双工工作状态。无法对外发送数据即485_RE使能网络无法提供高电平。
寻找到提供485_RE网络的端口,发现其在光耦隔离继电器的输出端,由GPIO_PF4控制,电路逻辑为:PF4低电平,二极管导通发光,光耦隔离内部右边光敏元件受光导通,485_RE输出电压接近5V为高电平,反之为低电平。
真实输出结果理应与仿真结果一致。
经过端对端的电平测量,发现485_RE无法输出高电平,最高输出电压仅不到1V,远小于驱动电压,其他3个引脚均正常。进一步用示波器测量,而485_RE竟然输出占空比52%,波峰波谷绝对值相近,周期20ms,而正电压有效值为5.8V(8.3/21/2),负电压有效值为6.3V(9.0/21/2),很奇怪为什么会出现正弦波。
为排除程序影响,直接将光耦隔离的PF4引脚跳起,焊接到杜邦线上,杜邦线直接接GND,观察输出485_RE,发现依旧没有高电平输出,对几个光耦都如此实验,结果相同。
为进一步确定问题,进行对比实验,将其中一个光耦隔离卸下,短接PF4与485_RE引脚(上图中红色导线),测试485功能,发现收发正常。
初步确定为光耦隔离的问题,但同一块板子上四个光耦隔离都有问题,实在是难以令人信服。将从板子上取下来的 问题 光耦隔离芯片,按照原理图重新搭建外围电路,观察输出,发现输出正常,排除光耦本身的问题,问题依旧锁定在板子本身。
我是做软件的,不太清楚电路上的问题,为我们做工控板的工程师明确说电路没有问题,但目前我也找不到可能的原因了,为大家提供一些debug思路,这个板子现在拆除光耦隔离直接短接GPIO与485的使能脚进行使用。如果有人知道原因还忘不吝赐教,感谢!
2024.03.28 问题解决 答案补充
困扰了我这么久的问题,终于找到了原因,在这里感谢瀚海蓝帆工程师的帮助!
问题出自光耦隔离的限流电阻R24,如下图,但看原理图没有一点问题,但犯罪就在这个R24,实际焊在电路板上的不是330R,而是10K!
这样的话,流经发光二极管的电流只有不到0.3mA,如此微弱的电流自然是无法驱动发光二极管的,所以光耦输出无法导通,就一直是低电平,接到SP3485E的使能引脚,就只能低电平有效的接收了,无法发送。
更换了270R的限流电阻,再次测试光耦隔离的输出,得到4.5V的高电平。顺利解决!
板子是买的工控板,搞这种情况确实非常坑人。