×
嵌入式 > 技术百科 > 详情

单片机上的RS485接口

发布时间:2020-06-06 发布时间:
|
RS-232虽然应用很广泛,但因为它推出较早,在现代网络通信中已经暴露出明显的缺点。比如以下几点:

1)  数据传输速率慢。RS-232所规定的20KB/s的传输速率虽然能满足异步通信要求,通常异步通信速率限制在19.2KB/s以下对某些同步系统来说,不能满足传送速率要求。

2) 传送距离短。RS-232接口一般装置之间电缆长度为15m,即使有较好的线路器件优良的信号质量,电缆长度也不会超过60m。

3) 没有规定标准的连接器,因而出现了互不兼容的25芯连接器。

4) 接口处各信号间容易产生串扰。

RS-485接口的出现就弥补了RS-232的不足,而出现了一种新的接口标准,并且由于良好的性能,RS-485获得了广泛的应用,其具有以下特点:

1)  RS-485的电气特性:逻辑“1”以两线间的电压差为+(2~6)V表示;逻辑“0”以两线间的电压差为-(2~6)V表示。接口信号电平比RS-232降低了,就不易损坏接口电路的芯片,且该电平与TTL电平兼容,可方便与TTL电路连接。

2)  RS-485的数据最高传输速率为10MB/s。

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

4)  RS-485接口的最大传输距离标准值为4000英尺,实际上可达1000米,另外RS-232接口在总线上只允许连接1个收发器,即单站能力。而RS-485接口在总线上是允许连接多达128个收发器。即具有多站能力,这样用户可以利用单一的RS-485接口方便地建立起设备网络。

   

RS-485收发器SN65HVD3082的使用方法

1)  SN65HVD3082简介

此芯片是半双工RS-485收发器。5V供电,全完符合TIA/EIA-485A标准。它可以应用于传输速率低于200kbps的场合,并且工作电流低于0.6mA。

芯片的宽适用范围与高ESD保护使它可以满足诸如能量测量网络、电力转换、远程通信中的状态与命令传输和工业自动化网络等场合的要求。另外,片内集成上电复位电路,使供电后输出为高阻态。高温停机机制保护设备不会因系统不良条件而损坏。

2)  芯片封装图:

                          

3)  功能框图:

                             

 

    4)芯片功能表:

                输出

           输入

输入

D

使能

DE

输出

输出

差模输入

VID=VA-VB

使能

#RE

输出

R

A

B

H

H

H

L

VID<=-0.2V

L

L

L

H

L

H

-0.2V

L

?

X

L

Z

Z

-0.01V<=VID

L

H

OPEN

H

H

L

X

H

Z

X

OPEN

Z

Z

开路

L

H

 

短路

L

H

X

开路

Z

    注:表中H代表高电平,L代表低电平,Z代表高阻态,?代表不确定状态。

4)  典型应用电路示意图:

   

5)  芯片详细说明:

功耗在很多应用中都是一个关心的问题。电源供给电流不仅到供给总线负载,同时也要供给收发器电路。对典型的RS-485总线配置,一个驱动器的负载包括所有的接收结点,及其总线尽头上的终止电阻(RT)。

接收结点的负载决定于接收器的输入阻抗。TIA/EIA-485-A标准定义负载单位为1mA。总线上允许有32个负载,所有的电流供给可以达到32mA。HVD3082E是1/8单位负载的器件,从而可以在一条总线上存在256个结点。

终止电阻上的电流决定于不同的总线电压。标准要求有效的驱动器到其它器件的差模信号至少要有1.5V。对于总线终止电阻为标准的120欧的情况,不论总线是否有效,总共的差分输出电流为25mA。60欧的负载下,HVD3082E可以驱动大于25mA,从而使得差模输出电压高于标准的最低要求。总之,总共的负载电流可以是60mA。

HVD3082E在驱动器与接收器都被使能的情况下,只需要大约0.4mA的电流。而驱动器或接收器被使能的情况下,只需要0.3mA。在低功耗关机模式下,不论驱动器还接收器有效,供给电流非常低。

当驱动器与接收器都被禁止的情况下(DE为低,RE为高),芯片将进入关机模式。如果使能输入在此模式下少于60ns,则芯片不会进入关机模式。这种机制可以在驱动器/接收器有效的情况下避免其意外进行关机模式。只有当使能输入持续多于300ns时,芯片才会进入此模式。在这个低功耗的关机模式下,大部分内部电路都被掉电,电源电流只有1nA。当驱动器或接收器被重新使能后,内部电路会被激活。如果只有驱动器被重新使能(DE变为高)后,驱动器的输出与输入端D相对应。如果输入端D为开路,驱动器的输入为默认的A高B低。如果只有接收器被重新使能(RE变为低),接收器的输出与总线上的输入状态相对应。如果接收器与驱动器同时被重新使能,则接收器的输出与总线上的输入相对应,驱动器的输出与输入端D相对应。要注意的是,有效的驱动器会影响接收器的输入。因此,接收器的输出在驱动器输出有效时才有效。

[page]

6)  芯片使用例程:

#define RS485_Receive 1

#define RS485_Send 0

//--定义串口缓存:缓存为循环链表

unsigned char rs_buffer[RS_BUFFER_SIZE];            //串口接收缓存

int rs_buffer_pointer;                         //串口缓存首指针(指向最后一个接受到的字节)

int rs_buffer_amount;                       //串口缓字节数

//--定义结束

 

//--定义串口与MCU的硬件连接

sbit RS_Mode=P0^0;

//--定义结束

 

void RS_Init()       

{

       TH1=FF;             

       TL1=FF;

       TMOD=0x21;

       PS=1;           

       EA=1;

       ET1=0;

       SM0=0;

       SM1=1;        

       SM2=0;        

       TR1=1;

       REN=1;

       RI=0;

       TI=0;

       ES=1;

       RS_Mode=RS485_Receive;

       rs_buffer_poiter=-1;

       rs_buffer_amount=0;

}

 

void RS_Receive() interrupt 4 using 2  //中断方式接收串口数据

{

       ES=0;

       if(RI)       

       {

              //此处处理串口缓存

              rs_buffer_pointer++;

              rs_buffer_pointer=rs_buffer_pointer%RS_BUFFER_SIZE;

              rs_buffer[rs_buffer_pointer]=SBUF;

              rs_buffer_amount++;

              RI=0;

       }

       ES=1;

}

 

 

void RS_Send(unsigned char data)     //用户函数,发送一个字节的数据

{

       ES=0;

       RS_Mode=RS485_Send;

       SBUF=data;

       RS_Mode=RS485_Receive;

       ES=1;

       while(TI==0);

       TI=0;

}

 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
家庭网络:从带宽共享走向内容共享