RS485通信

RS485通信基础知识:

电气特性:

1. RS-485的电气特性:逻辑“1”以两线间的电压差为+(2—6)V表示;逻辑“0”以两线间的电压差为-(2—6)V表示。 该电平与TTL电平兼容,可方便与TTL 电路连接。

2. RS-485的数据最高传输速率为10Mbps 。

3. RS-485接口是采用平衡驱动器和差分接收器的组合,抗共模干扰(电流干扰信号)能力增强,即抗噪声干扰性好。

4. RS-485接口的最大传输距离标准值为4000英尺(约1219米),实际上可达 3000米。

5.因为RS485接口组成的半双工网络,一般只需二根连线(一般叫AB线),所以RS485接口均采用屏蔽双绞线传输。

6.注意事项:在RS485通信网络中一般采用的是主从通信方式,即一个主机带多个从机。很多情况下,连接RS-485通信链路时只是简单地用一对双绞线将各个接口的“A”、“B”端连接起来,而忽略了信号地的连接,这种连接方法在许多场合是能正常工作的,但却埋下了很大的隐患,原因:

(1)共模干扰(消除干扰的方法:采用屏蔽双绞线并有效接地):RS-485接口采用差分方式传输信号方式,并不需要相对于某个参照点来检测信号,系统只需检测两线之间的电位差就可以了,但容易忽视了收发器有一定的共模电压范围,RS-485收发器共模电压范围为-7到+12V,只有满足上述条件,整个网络才能正常工作;当网络线路中共模电压超出此范围时就会影响通信的稳定可靠,甚至损坏接口;

(2)EMI(电磁兼容性)的问题:发送驱动器输出信号中的共模部分需要一个返回通路,如没有一个低阻的返回通道(信号地),就会以辐射的形式返回源端,整个总线就会像一个巨大的天线向外辐射电磁波。

7.在低速、短距离、无干扰的场合可以采用普通的双绞线,反之,在高速、长线传输时,则必须采用阻抗匹配(即终端匹配电阻,用来抑制回波干扰,一般为120Ω)的RS485专用电缆,而在干扰恶劣的环境下还应采用铠装型双绞屏蔽电缆。

网络布局:

1.RS-485采用半双工工作方式,支持多点数据通信。

2.RS-485总线网络拓扑一般采用终端匹配的总线型结构。即采用一条总线将各个节点串接起来,不支持环形或星型网络。如果需要使用星型结构,就必须使用485中继器(485中继器是光隔离的RS-485/422的数据中继通信产品,可以中继延长RS-485/422总线网络的通信距离,增强RS-485/422总线网络设备的数目。可以将485总线进行光电隔离,防止共模电压干扰)或者485集线器才可以。

3.RS-485总线一般最大支持32个节点,如果使用特制的485芯片,可以达到128个或者256个节点,最大的可以支持到400个节点。

连接器:RS-485 的国际标准并没有规定RS485 的接口连接器标准、所以采用接线端子或者DB-9、DB-25 等连接器都可以。

                                 

主控器和最后一个节点中都加了一个匹配电阻,为了消除噪声,别问为什么,反正就是要加阻抗,485的这是电路特性。

RS485应用(MAX485):

  

                               

                                   注:工作电压VCC为+5V。DE为高电平时DI有效,为低电平时DI高阻态。

RS-485方式构成的多机通信原理:.在由单片机构成的多机串行通信系统中,一般采用主从式结构:从机不主动发送命令或数据,一切都由主机控制。并且在一个多机通信系统中,只有一台单机作为主机,各台从机之间不能相互通讯,即使有信息交换也必须通过主机转发。(每个从机配置一个独有的地址,首先主机给某个从机发送请求命令,从机回复相关数据,以这样的方式轮询整个系统的从机。)

通信规则:由于RS-485通讯是一种半双工通讯,发送和接收共用同一物理信道。在任意时刻只允许一台单机处于发送状态。因此要求应答的单机必须在侦听到总线上呼叫信号已经发送完毕,并且没有其它单机发出应答信号的情况下,才能应答。半双工通讯对主机和从机的发送和接收时序有严格的要求。如果在时序上配合不好,就会发生总线冲突,使整个系统的通讯瘫痪,无法正常工作。要做到总线上的设备在时序上的严格配合,必须要遵从以下几项原则:

(1)复位时,主机都应该处于接收状态。

(2)控制端RE,DE的信号有效脉宽应该大于发送或接收一帧信号的宽度。(对单机来说,本机的接收模式和发送模式变换要有一定时间的延时,延时的时间长度取决于数据信号的长度,必须保证接收或发送完完整的数据帧后再变换成另一种模式)

(3)总线上所连接的各单机的发送控制信号在时序上完全隔开。

485发送数据代码:

void RS485_Send_Data(u8 *buf,u8 len)
{
    u8 t;
    RS485_TX_EN;
    for(t=0;t<len;t++)
    {
        USART_SendData(USART2,buf[t]);
        printf("%x",buf[t]);
        while(USART_GetFlagStatus(USART2,USART_FLAG_TC)!=SET);
        USART_ClearFlag(USART2,USART_FLAG_TC);        
    }
    RS485_TX_DIS;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值