1.问题:项目上使用声纹传感器RS485通信不良(无法接收数据)
更改方案: 更换声纹传感器可以解决问题,这就很奇怪。发现更换下来的传感器485接线很短的距离都无法通信。猜测传感器与我的主机发送命令存在临界值。而且使用485调试工具并联在传感器的485线上,传感器与我的主机就可以通信正常(这个调试工具并联在上面也就供电关系,上下拉供电。)将调试工具去掉就无法通信。
了解RS485:
1.参考:RS-485接口(上下拉电阻选择等)分析_天录的专栏-CSDN博客
RS-485的电气参数为:
- 共模电压范围为-7~ 12V
- 可支持32个多点拓扑连接,见下面的网络拓扑图
- 使用40英尺线缆时,传输速率可达10Mbps,1英尺相当于30.48cm,这里Mbps是兆bit/s的意思
- 使用4000英尺线缆时,传输速率可达到100kbps
- 半双工通信
- 最小差分电压容限:200mV,也就是说接收端在差分电压低于200mV时就无法正确识别0/1了。这句话应该怎么理解呢?
上面这个图怎么理解呢?RS-485收发器的发送电路至少提供1.5V差分电压输出能力,经由总线线路阻抗衰减,32个接收电路输入阻抗,以及120Ω端接电阻,差分信号的幅度必然逐渐衰减,那么至最末端还需要至少提供200mV的差分电压给末端接收电路。
差分电压:对接收电路是判决A线共模电压与B线共模电压只差
如果A-B>200mV,则接收电路R识别为逻辑1
如果A-B<-200mV,则接收电路R识别为逻辑0
简单说就是,A线的绝对电压值比B线的至少大于200mV则识别为逻辑1,或者A线的绝对电压值比B线的至少小200mV,才识别为逻辑0
A接上拉电阻,B接下拉电阻,AB间接传输线特性阻抗对应的电阻为120R*2(算终端电阻),这四个电阻接了以后要保证AB间电压大于200mV.(电阻分压)。一般485芯片文档不提上下拉电阻,但会要求通讯默认AB>200mV。如果出现和有的通信正常,有的不正常,那一般是自己的板子终端电阻和分压电阻没有设置好,使用万用表测量AB两端间电压,保证AB间电压大于200mV.。
偏置电阻(上下拉分压电阻)
第一种理解::
1. 上面提到上下拉电阻起到保证AB间电压大于200mV
2.起到开路故障安全( open failsafe)作用
总线空闲期间,没有器件总线空闲期间,没有器件驱动总线,接收器输出处于未定义状态。这会导致UART上接收到随机数据,进而影响无效起始位或帧错误。为了解决该问题,可以在总线上放置上拉下拉电阻进行偏置。下图可以计算出偏置电阻R的值:
但是有的芯片内部自带failsafe功能(TI芯片大多数都有这个功能,但不是表示有上下拉电阻,有没有上下拉电阻看规格书)如下图所示:TI的SN65HVD12的文档
我自己板子上使用SN65LBC184没有上下拉电阻
3. 真故障安全接收器(Ture Fail-Safe Receivers)(可以省上下拉电阻)
新一代RS-485接收器经过改进,使差分输入阈值电压从±200mV调整至-200mV和-30mV,这样就可以省去使用上下拉电阻。(TI芯片SN65HVD12可以省上下拉,因为Vit+:-0.01V)在总线空闲期间,VIA-VIB=0(大于-30mV)导致接收器输出处于高电平(RO=1),处于确定状态。
第二种理解:Failsafe biasing
1. 在正常运行下,485总线有一个有效的信号由一个有源驱动器应用,给出一个幅度超过485阈值200mv的差分电压。当一个节点从总线断开时,接收端输入检测到开路,总线状态不确定。这种情况(开路电路)可以导致一些485接收器输出一个随机状态。SN65LBC182和SN65LBC184等收发器具有开总线故障保护特性,它在总线引脚上施加一个小的偏移(12µa),导致在开总线电路co下一个已知的接收输出状态(逻辑高),下图SN65HBC184的接收表:
2. 另一种问题叫做闲置总线状态。当节点连接到带有终端电阻的总线,但没有主动驱动器时,就会发生这种情况。总线没有主动驱动到有效的485状态,终端电阻趋向于降低差动电压到接近零伏。
一些收发器,如SN65HVD12,接收阈值Vit+ max:-0.01V,因此检测零差分总线电压作为已知总线状态,并输出逻辑高。见上图12,。
对于没有阈值偏置的收发器(就是接收差分电压不在0V以下),为了符合DL/T 645的要求,可以添加总线偏置电阻,这些电阻提供一个偏置,在空闲总线条件下产生一个有效的总线逻辑状态。
3. 看下图:下面是SN62LBC184芯片的电路,这个芯片没有idle-bus failsafe,(比如SN65HVD12就有idle-bus failsafe)因此SN62LBC184需要加上下拉电阻。
4 . 关于idle-bus failsafe的 SN65LVD12和SN65LBC184对比发现为什么可以省去上下拉电阻:
项目问题解决分析
刚开始提出的问题,485有的通信正常,有的通信不正常。如下图是我的电路图:
分析一:通讯不正常
下图1用万用表测AB间电压。
下图2可以看出AB之间差分电压高电平只有50mV,就又可能这个值无法被接收器识别。下面接着分析并联调试工具可以通讯。
分析二:
并联上485调试工具之后,通讯正常。测得AB的差分高电平达到了75mV。通过万用表测AB间电压:0.07V 。也就是说75mV的高电平可以被485接收器识别。不认为在闲置状态。
分析三:
将自己电路的6.8K上下拉电阻改为1.2K(通过上面分析了SN65LBC184没有idle-bus failsafe)这也是按照485标准设计AB间电压:
尝试测量过485调试工具的AB间电压都是大于0.2V以上。
下图是我更改1.2K上下拉电阻的测试结果,485通讯也可以正常接收数据。