RS-485没人发数据,接收端却收到了乱码
RS-485没人发数据,接收端却收到了乱码
现场总线明明处于空闲状态,MCU的串口接收中断却偶尔进来,缓存里多出几字节不明数据。有时被当成通信干扰,有时被当成软件问题,实际要先确认RS-485接收器在空闲总线上的输出状态是否有保证。
01“没人发”不等于总线电平明确
RS-485是差分通信,大家平时盯着A、B两根线,看它们有没有正常翻转。可总线上所有发送器都关闭、都处于高阻态时,谁来保证A和B之间一定有一个明确的电压差?
如果板上接了终端电阻,而收发器又没有足够的失效保护能力,那么空闲差分电压可能接近零。这并不代表一条可靠的UART空闲高电平。现场有干扰,接收器输出就可能产生跳变,MCU误把它识别成起始位,接着就出现乱码、帧错误或者莫名其妙的串口中断。

图1:TI工程论坛中的RS-485总线外部失效保护偏置网络,偏置与终端共同决定空闲差分电压。
说起来挺像“设备自己在发消息”,其实多数时候只是接收端把不确定状态当成了数据。
02一张原理图里,常被忽略的是偏置电阻
传统做法是在总线适当位置加上拉、下拉偏置,让所有发送器关闭以后,总线仍有一个稳定的差分状态。问题不在于“有没有放两个电阻”这么简单,而在于它们与终端电阻、节点负载、电源电压一起作用时,能不能留下足够的噪声裕量。
比如总线两端都做了终端,偏置又特别弱,实际差分电压可能比想象中小;偏置做得过强,也会增加负载和功耗。因此看到别人图纸上用了某个阻值,不能照着抄就算完成。
另外还要看收发器数据手册。较新的芯片通常有开路、短路或空闲总线失效保护功能,但不同型号覆盖的工况与裕量并不完全一致。不能只看“Fail-safe”两个字就认为现场怎么接都不会误触发。
03现场干扰与接收器状态的对照
如果问题只出现在电机动作、继电器吸合或长线缆场景,先做一个简单对照:分别在静止环境与干扰动作时观察A、B差分电压以及收发器RO输出。

图2:ADI的RS-485收发器测试波形,对照接收器输出与总线差分状态。
重点是找出先后关系。是差分线上先出现扰动,还是接收器输出已经在空闲期间翻转?终端有没有按线缆和网络拓扑布置?屏蔽层、隔离与参考地处理是否符合系统设计?这些问题不用一篇文章算到最后一位小数,但每一个都能缩小排查范围。
还有软件层面的处理:帧头、长度、CRC、超时和错误标志都应该合理使用。软件丢弃非法帧很必要,但不能拿它替代硬件端稳定的空闲电平。两边各做各的事,系统才更稳。开发阶段如果只在桌面上接两台设备、短短一根线,偶发问题不容易出现;到了工厂现场,再加上变频器和长电缆,原来没有暴露的边界就可能出现。
04把“偶发乱码”变成可复现的条件
排查时记录一下:哪种收发器、几个终端、偏置放在哪里、线有多长、总线最安静时差分电压是多少。然后切换现场设备动作条件,再看变化。

图3:TI论坛提供的几种外部偏置方式示例。阻值应根据终端和收发器特性确定。
很多RS-485故障最后都不是某个芯片“质量不好”,而是网络空闲状态和现场噪声裕量没有被认真定义。把这个边界搞清,问题通常就不会一直停留在“偶尔乱码”四个字上。
声明:
本文由凡亿教育整理,转载请注明来源!
投稿/招聘/广告/课程合作/资源置换 请加微信:13237418207






哔哩哔哩
微信公众号
小红书
抖音
知乎
西瓜视频
头条
微信视频号
