原创 RS-232 接口(4)

2008-11-19 22:43 3988 7 5 分类: 通信

3.   RS-232 的电缆长度限制


RS-232的最初标准建议将电缆长度限制在50 ft以内,对于≤20 000 b/s的数据传输速度,可以使用任何类型的电缆。


后来的标准是在接收器规定了一个最大的电容2500 pF。这个数值包括了接收器的电容、电缆中连接器之间的动态电容以及导线与电缆屏蔽之间,或者在非屏蔽电缆中,导线和地线之间的电容。电容限制了回转速度,或者在输出切换的时候的电压变化速度。一个较高的电容导致一个较低的回转速度和较慢的跃迁。一个较高的电容还意味着一个电压变化需要更大的电流来对电容充电,因此驱动器总的电能消耗要更大一些。在导线之间的电容还能导致干扰。如果想要使用一个超出了电容限制的连接,可能仍旧能够进行通信,但是以更低的波特率。利用短电缆及相应的更小的电容,如果发送和接收端硬件都支持更高的速度,则可以比20 000 b/s更快的速度进行通信。


5.1 非屏蔽电缆


对于非屏蔽电缆,计算非屏蔽电缆的电缆长度的公式如下:


电缆长度=(2500—接收器输入电容)/(电缆电容×1.5)


  电缆长度的单位是ft,输入电容的单位是pF,电缆电容的单位是pF/ft。


带状电缆的典型电容是15 pF/ft,假定接收器的输人电容是100 pF,电缆最长可以达到106 ft((2500—100)/(15×1.5) )。一个单根非屏蔽双绞线的典型电容是12 pF/ft。仍然假定输入电容为100 pF, 则最大电缆长度为133ft。


5.2 屏蔽电缆


为电缆增加屏蔽缩短了最大长度,但是屏蔽有时对于阻止噪声混入电缆或者从电缆中“溢出”是需要的。对于屏蔽的双绞线,建议将导线到导线电容乘以3以便把导线到屏蔽的电容考虑在内。


  因此计算屏蔽导线的电缆长度的公式如下:


  电缆长度=(2500—接受器输入电容)/(电缆电容×3)


  电缆长度的单位为ft,输入电容的单位是pF,电缆电容的单位是pF/ft。


这就将屏蔽双绞线电缆的最大长度削减到66 ft。


5.3 双绞线


为了减少干扰,可以对RS-232使用双绞线电缆和多个接地线。每一根信号线应和一个接地线绞在一起。


5.4 电缆测试结果


RS-232-C标准规定,在码元畸变小于4%的情况下,传输电缆长度应为50 英尺(约15米),其实这个4%的码元畸变是很保守的,在实际应用中往往按码元畸变10-20%的范围工作的,所以最大距离会远超过15米。


美国DEC公司曾在允许码元畸变为10%得出下面实验结果。其中1 号电缆为屏蔽电缆,型号为DECP. NO. 9107723,内有三对双绞线,每对由22# AWG 组成,其外覆以屏蔽网。2 号电缆为不带屏蔽的电缆。型号为DECP. NO. 9105856-04是22#AWG 的四芯电缆。DEC 公司的实验结果



波特率bps


1号电缆传输距离(米)


2号电缆传输距离(米)


110


  1500  


900


300


1500


900


1200


900


900


2400


 300 


150


4800


 300 


75


9600


75 


75


 


6. 串口通信功能的实现


单片机实现串口通讯一般使用UART接口或利用GPIO口模仿异步串行通讯数据格式,外加驱动芯片连接RS-232口。


在PC机上一般直接调用Window API中的一系列标准的串口通信函数,来实现异步串行通讯,控制RS-232口。一般常用VC++或VB来编程。常用的串口通信函数:


CreatFile()函数:实现串口初始化并打开串口;


ReadFile()函数:接收串口传递过来的二进制流并返回数据到接收缓冲区中


WriteFile()函数:把应用程序发出的指令送到发送缓冲区以供串口接收


1. 打开串口


以下程序用于以同步方式打开串口COM1;


HANDLE hCom;


DWORD dwErrorHcomm="CreateFile"(“COM1”,GENERIC_READ|GENERIC_WRITE


,0, NULL,OPEN_EXISTING, 0, NULL);


if (hComm==(HANDLE)0Xffff)


{


dwError=GetLastError();


MessageBox(dwError);


}


2. 配置串口


配置串口是通过改变设备控制块DCB(Device Control Block)的成员变量值来实现的,程序实现如下:


DCB dcb


dcb.BaudRate=9600;//波特率为9600bps


dcb.ByteSize=8;//数据位8位


dcb.Parity=EVENPARTTY;//有校验


dcb.StopBits=ONESTOPRTT; //一个停止位


SetCommState(hCom,&dcb);


3. 数据读写


对串口进行读写与对文件进行读写所用的函数相同,具体为可采用查询、同步、异步或事件驱动等方法对串口进行读写所用函数如下所示:


bReadStatus=ReadFile(hCom,buffer,length,&length &m_lpOverlapped);


if(!bReadStatus)


{


if(GetLastError()=ERROR_IO_PENDING)


{


WaitForSingleObject(m_lpOverlapped,hEvent,1000);


return((char)length);


}


return 0;


}


//写入函数程序为:


bWriteStatus=WriteFile(hCom,buffer,length,&length,&m_lpOverlapped)


if(!bWriteStatus)


{


if(GetLastError()=ERROR_IO_PENDING)


{


WaitForSingleObject(m_lpOverlapped, hEvent,1000);


return((char)length);


}


return 0;


}


4. 程序的编制


用VC++进行程序的编制首先要对串口进行初始化,设定端口,通信速率和校验方式,并在使用前打开串口,程序部分如下:


{


Cdialog::OnInitDialog();//TODO: Add extra initialization here


m_comm.SetCommPort(1);//选择串口1


if(! m_comm.GetPortOpen())


m_comm.SetPortOpen(TRUE);//打开串口1


m_comm.SetSettings(“9600,n,8,1”); //设置串口参数


m_comm.SetRThreshold(1);


m_comm.SetInputMode(1);//设置二进制模式


return TRUE;


}


除了串口的位置和基本串口参数(数据传输速率9600bps,1位开始位,8位数据位,1位停止位,一位奇偶校验)设置外,为了实现实时数据采集功能,接受数据的读写要尽可能的快速,则设置RTHreshold=1即接收缓冲区收到一个字节产生OnComm事件InputLen=1每次读取一个字节。如果PC上位机在一定时间内不能将数据处理完,接收缓冲区会滞留数据,数据会产生丢失现象,我们必须对接受缓冲区进行适当的设置。RS-232 的缺陷及改进


由于RS-232标准开发较早,使用的是当时流行的DTL技术,随着技术的进步,越老越显露出其局限。


7.1)RS-232 的缺陷


1) 接口的信号为DTL电平,电压值较高,易损坏接口电路的芯片,又因为与TTL 电平不兼容故需使用电平转换电路方能与TTL电路连接。    

2) 传输速率较低,在异步传输时,波特率为20Kbps(现在已发展到超过115.2 Kbps)。 
3) 接口使用一根信号线和一根信号返回线而构成共地的传输形式,这种共地传输容易产生共模干扰,所以抗噪声干扰性弱。
4)传输距离有限,最大传输距离标准值为50英尺(约15米),实际上也只能 用在50米左右。     
5)接口为一对一连接


7.2)RS-422/485接口


为弥补其技术缺陷,后来又在其基础上发展了其他一些串行接口标准,最常见的是422/485:


RS-422(EIA-422):


标准全称是“平衡电压数字接口电路的电气特性”,收发都使用差分信号,为四线接口,还有一根信号地线(一定要接地,要求通信双方的地电位差小于1V),共5根线(+发、-发、+收、-收、地),一般使用双绞线传输差分信号,因此有良好的抗共模干扰能力。采用单独的发送和接收通道,为全双工方式,支持点对多的双向通信,允许在相同传输线上连接多个接收节点,最多可接10个节点,即一个主设备(Master),其余为从设备(Salve),从设备之间不能通信。


RS-422多节点构成网络。网络拓扑一般采用终端匹配的总线型结构,不支持环形或星形网络。发送驱动器A、B之间的正电平在+2~+6V,是一个逻辑状态,负电平在-2~-6V,是另一个逻辑状态。接收端A比B高200mV以上即认为是逻辑"1",A 比B 低200mV 以上即认为是逻辑"0"。


接收器输入阻抗为4k。RS-422需要一终接电阻,终接电阻接在传输电缆的最远端,要求其阻值约等于传输电缆的特性阻抗。在矩距离传输时(一般在300米以下)可不需终接电阻。


RS-422的最大传输距离为4000英尺(约1200米),最大传输速率为10Mb/s,其平衡双绞线的长度与传输速率成反比。在100kb/s速率以下,才可能达到最大传输距离;只有在很短的距离下才能获得最高速率传输,一般100米长的双绞线上所能获得的最大传输速率仅为1Mb/s。  


RS-485(EIA-485):


RS-485是从RS-422基础上发展而来的,许多电气规定与RS-422相仿,但一般采用二线方式,使用屏蔽双绞线,共有三条信号线(+A、-B、地),是半双工多点双向通信,总线上可接到32个设备。  


RS-485接收器最小输入阻抗为12k。需要2个终接电阻,在传输线的两端,其阻值要求等于传输电缆的特性阻抗。


为了安全起见,建议通信机器的外壳接大地。RS-422/485光隔转换器的所有外接电源的“地”必须全部连在一起但不要与计算机外壳地相连,因为电源“地”同时也是RS-485或 RS-422的信号“地”。当通信距离超过100米时建议最好使用光电隔离的通信接口转换器。RS-485 的国际标准并没有规定RS485 的接口连接器标准。


7.3)RS-422/485的电缆长度:


在使用RS422/485接口时,对于特定的传输线径,从发生器到负载其数据信号传输所允许的最大电缆长度是数据信号速率的函数,这个长度数据主要是受信号失真及噪声等影响所限制。


下图所示的最大电缆长度与信号速率的关系曲线是使用24AWG铜芯双绞电话电缆(线 径为0。51mm),线间旁路电容为52.5pF/m,终端负载电阻为100欧 时所得出。(曲线引自GB11014-89附录A)。



由图中可知,当数据信 号速率降低到90Kbit/S以下时,假定最大允许的信号损失为6dBV时, 则电缆长度被限制在1200M。实际上,图中的曲线是很保守的,在实 用时是完全可以取得比它大的电缆长度。 当使用不同线径的电缆。则取得的最大电缆长度是不相同的。例 如: 当数据信号速率为600Kbit/S时,采用24AWG电缆,由图可知最 大电缆长度是200m,若采用19AWG电缆(线径为0.91mm)则电缆长 度将可以大于200m; 若采用28AWG 电缆(线径为0.32mm)则电缆 长度只能小于200m。RS-485的远距离通信建议采用屏蔽电缆,并且将屏蔽层作为地线。
7.4)RS-422/485接口与RS-232对比的优势:


1) 逻辑“1”以两线A、B间的电压差为+2~+6 V表示,逻辑“0”以两线间的电压差为-2~-6V 表示,电平与TTL电平兼容,可方便与TTL 电路连接。
2)数据最高传输速率为10Mbps 
3) 接口是采用平衡驱动器和差分接收器的组合,抗共模干能力增强,即抗噪声干扰性好。     
4)接口的最大传输距离标准值为1200米(9600bps时),实际上可达 3000米


5)接口可为总线方式,允许连接多达128个收发器,具有多站能力,可方便地建立起设备网络。


虽然RS-422/485接口有如此对的优势,但RS-232仍是最普遍使用的串行通讯接口标准,这可能与PC机的普遍使用分不开,而RS-422/485往往只局限在一些特殊场合,主要是工业控制方面,比如需要总线式连接多个设备或需要长距离、高速度传输的地方,而且也往往使用RS-232转RS-422/485接口实现。

文章评论0条评论)

登录后参与讨论
我要评论
0
7
关闭 站长推荐上一条 /2 下一条