RS-485总线通信系统的可靠性措施
1 问题的提出
在工业控制及测量领域较为常用的网络之一就是物理层采用RS-485通信接口所组成的工控设备网络。这种通信接口可以十分方便地将许多设备组成一个控制网络。从目前解决单片机之间中长距离通信的诸多方案分析来看,RS-485总线通信模式由于具有结构简单、价格低廉、通信距离和数据传输速率适当等特点而被广泛应用于仪器仪表、智能化传感器集散控制、楼宇控制、监控报警等领域。但RS485总线存在自适应、自保护功能脆弱等缺点,如不注意一些细节的处理,常出现通信失败甚至系统瘫痪等故障,因此提高RS-485总线的运行可靠性至关重要。
图1RS485通信接口原理图
2 硬件电路设计中需注意的问题2.1 电路基本原理
某节点的硬件电路设计如图1所示,在该电路中,使用了一种RS-485接口芯片SN75LBC184,它采用单一电源Vcc,电压在+3~+5.5 V范围内都能正常工作。与普通的RS-485芯片相比,它不但能抗雷电的冲击而且能承受高达8 kV的静电放电冲击,片内集成4个瞬时过压保护管,可承受高达400 V的瞬态脉冲电压。因此,它能显著提高防止雷电损坏器件的可靠性。对一些环境比较恶劣的现场,可直接与传输线相接而不需要任何外加保护元件。该芯片还有一个独特的设计,当输入端开路时,其输出为高电平,这样可保证接收器输入端电缆有开路故障时,不影响系统的正常工作。另外,它的输入阻抗为RS485标准输入阻抗的2倍(≥24 kΩ),故可以在总线上连接64个收发器。芯片内部设计了限斜率驱动,使输出信号边沿不会过陡,使传输线上不会产生过多的高频分量,从而有效扼制电磁干扰。在图1中,四位一体的光电耦合器TLP521让单片机与SN75LBC184之间完全没有了电的联系,提高了工作的可靠性。基本原理为:当单片机P1.6=0时,光电耦合器的发光二极管发光,光敏三极管导通,输出高电压(+5 V),选中RS485接口芯片的DE端,允许发送。当单片机P1.6=1时,光电耦合器的发光二极管不发光,光敏三极管不导通,输出低电压(0 V),选中RS485接口芯片的RE端,允许接收。SN75LBC184的R端(接收端)和D端(发送端)的原理与上述类似。
2.2 RS-485的DE控制端设计
在RS-485总线构筑的半双工通信系统中,在整个网络中任一时刻只能有一个节点处于发送状态并向总线发送数据,其他所有节点都必须处于接收状态。如果有2个节点或2个以上节点同时向总线发送数据,将会导致所有发送方的数据发送失败。因此,在系统各个节点的硬件设计中,应首先力求避免因异常情况而引起本节点向总线发送数据而导致总线数据冲突。以MCS51系列的单片机为例,因其在系统复位时,I/O口都输出高电平,如果把I/O口直接与RS-485接口芯片的驱动器使能端DE相连,会在CPU复位期间使DE为高,从而使本节点处于发送状态。如果此时总线上有其他节点正在发送数据,则此次数据传输将被打断而告失败,甚至引起整个总线因某一节点的故障而通信阻塞,继而影响整个系统的正常运行。考虑到通信的稳定性和可靠性,在每个节点的设计中应将控制RS485总线接口芯片的发送引脚设计成DE端的反逻辑,即控制引脚为逻辑“1”时,DE端为“0”;控制引脚为逻辑“0”时,DE端为“1”。在图1中,将CPU的引脚P1.6通过光电耦合器驱动DE端,这样就可以使控制引脚为高或者异常复位时使SN75LBC184始终处于接收状态,从而从硬件上有效避免节点因异常情况而对整个系统造成的影响。这就为整个系统的通信可靠奠定了基础。
此外,电路中还有1片看门狗MAX813L,能在节点发生死循环或其他故障时,自动复位程序,交出RS-485总线控制权。这样就能保证整个系统不会因某一节点发生故障而独占总线,导致整个系统瘫痪。
2.3 避免总线冲突的设计
当一个节点需要使用总线时,为了实现总线通信可靠,在有数据需要发送的情况下先侦听总线。在硬件接口上,首先将RS-485接口芯片的数据接收引脚反相后接至CPU的中断引脚INT0。在图1中,INT0是连至光电耦合器的输出端。当总线上有数据正在传输时,SN75LBC184的数据接收端(R端)表现为变化的高低电平,利用其产生的CPU下降沿中断(也可采用查询方式),能得知此时总线是否正“忙”,即总线上是否有节点正在通信。如果“空闲”,则可以得到对总线的使用权限,这样就较好地解决了总线冲突的问题。在此基础上,还可以定义各种消息的优先级,使高优先级的消息得以优先发送,从而进一步提高系统的实时性。采用这种工作方式后,系统中已经没有主、从节点之分,各个节点对总线的使用权限是平等的,从而有效避免了个别节点通信负担较重的情况。总线的利用率和系统的通信效率都得以大大提高,从而也使系统响应的实时性得到改善,而且即使系统中个别节点发生故障,也不会影响其他节点的正常通信和正常工作。这样使得系统的“危险”分散了,从某种程度上来说增强了系统的工作可靠性和稳定性。
2.4 RS-485输出电路部分的设计
在图1中,VD1~VD4为信号限幅二极管,其稳压值应保证符合RS-485标准,VD1和VD3取12 V,VD2 和VD4取7 V,以保证将信号幅度限定在-7~+12 V之间,进一步提高抗过压的能力。考虑到线路的特殊情况(如某一节点的RS-485芯片被击穿短路),为防止总线中其他分机的通信受到影响,在SN75LBC184的信号输出端串联了2个20 Ω的电阻R1和R2,这样本机的硬件故障就不会使整个总线的通信受到影响。在应用系统工程的现场施工中,由于通信载体是双绞线,它的特性阻抗为120 Ω左右,所以线路设计时,在RS485网络传输线的始端和末端应各接1个120 Ω的匹配电阻(如图1中的R3),以减少线路上传输信号的反射。
2.5系统的电源选择
对于由单片机结合RS-485组建的测控网络,应优先采用各节点独立供电的方案,同时电源线不能与RS-485信号线共用同一股多芯电缆。RS-485信号线宜选用截面积0.75 mm2以上的双绞线而不是平直线,并且选用线性电源TL750L05比选用开关电源更合适。TL750L05必须有输出电容,若没有输出电容,则其输出端的电压为锯齿波形状,锯齿波的上升沿随输入电压变化而变化,加输出电容后,可以抑制该现象。
3 软件的编程 SN75LBC184在接收方式时,A、B为输入,R为输出;在发送方式时,D为输入,A、B为输出。当传送方向改变一次后,如果输入未变化,则此时输出为随机状态,直至输入状态变化一次,输出状态才确定。显然,在由发送方式转入接收方式后,如果A、B状态变化前,R为低电平,在第一个数据起始位时,R仍为低电平,CPU认为此时无起始位,直到出现第一个下降沿,CPU才开始接收第一个数据,这将导致接收错误。由接收方式转入发送方式后,D变化前,若A与B之间为低电压,发送第一个数据起始位时,A与B之间仍为低电压,A、B引脚无起始位,同样会导致发送错误。克服这种后果的方案是:主机连续发送两个同步字,同步字要包含多次边沿变化(如55H ,0AAH),并发送两次(第一次可能接收错误而忽略) ,接收端收到同步字后,就可以传送数据了,从而保证正确通信。
为了更可靠地工作,在RS485总线状态切换时需要适当延时,再进行数据的收发。具体的做法是在数据发送状态下,先将控制端置“1”,延时0.5 ms左右的时间,再发送有效的数据,数据发送结束后,再延时0.5 ms,将控制端置“0”。这样的处理会使总线在状态切换时,有一个稳定的工作过程。数据通信程序基本流程图如图2所示。
图2数据通信程序基本流程图
单片机通信节点的程序基本上可以分为6个主要部分,分别为预定义部分、初始化部分、主程序部分、设备状态检测部分、帧接收部分和帧发送部分。预定义部分主要定义了通信中使用的握手信号,用于保存设备信息的缓冲区和保存本节点设备号的变量。设备状态检测部分应能在程序初始化后,当硬件发生故障时,作出相应的反应。主程序部分应能接收命令帧,并根据命令的内容作出相应的回应。为缩短篇幅,这里仅给出主程序部分的代码。如下所示:
/* 主程序流程 */
while(1) { //主循环
if(recv_cmd(&type)==0) //发生帧错误或帧地址与本机
//地址不符,丢弃当前帧后返回
continue;
switch(type) {
case __ACTIVE_: //主机询问从机是否存在
send_data(__OK_, 0,dbuf);//发送应答信息
break;
case __GETDATA_:
len = strlen(dbuf);
send_data(__STATUS_, len,dbuf);//发送状态信息
break;
default:
break; //命令类型错误,丢弃当前帧后返回
}
}
4 结论 RS-485由于使用了差分电平传输信号,传输距离比RS-232更长,最多可以达到3000 m,因此很适合工业环境下的应用。但与CAN总线等更为先进的现场工业总线相比,其处理错误的能力还稍显逊色,所以在软件部分还需要进行特别的设计,以避免数据错误等情况发生。另外,系统的数据冗余量较大,对于速度要求高的应用场所不适宜用RS-485总线。虽然RS-485总线存在一些缺点,但由于它的线路设计简单、价格低廉、控制方便,只要处理好细节,在某些工程应用中仍然能发挥良好的作用。总之,解决可靠性的关键在于工程开始施工前就要全盘考虑可采取的措施,这样才能从根本上解决问题,而不要等到工程后期再去
数字电路抗干扰 |
在电子系统设计中,为了少走弯路和节省时间,应充分考虑并满足抗干扰性 的要求,避免在设计完成后再去进行抗干扰的补救措施。形成干扰的基本要素有三个: (1)干扰源,指产生干扰的元件、设备或信号,用数学语言描述如下:du/dt, di/dt大的地方就是干扰源。如:雷电、继电器、可控硅、电机、高频时钟等都可 能成为干扰源。 (2)传播路径,指干扰从干扰源传播到敏感器件的通路或媒介。典型的干扰传 播路径是通过导线的传导和空间的辐射。 (3)敏感器件,指容易被干扰的对象。如:A/D、D/A变换器,单片机,数字IC, 弱信号放大器等。
抗干扰设计的基本原则是:抑制干扰源,切断干扰传播路径,提高敏感器件的 抗干扰性能。(类似于传染病的预防) 1 抑制干扰源 抑制干扰源就是尽可能的减小干扰源的du/dt,di/dt。这是抗干扰设计中最优 先考虑和最重要的原则,常常会起到事半功倍的效果。 减小干扰源的du/dt主要是通过在干扰源两端并联电容来实现。减小干扰源的 di/dt则是在干扰源回路串联电感或电阻以及增加续流二极管来实现。 抑制干扰源的常用措施如下: (1)继电器线圈增加续流二极管,消除断开线圈时产生的反电动势干扰。仅加 续流二极管会使继电器的断开时间滞后,增加稳压二极管后继电器在单位时间内可 动作更多的次数。 (2)在继电器接点两端并接火花抑制电路(一般是RC串联电路,电阻一般选几K 到几十K,电容选0.01uF),减小电火花影响。 (3)给电机加滤波电路,注意电容、电感引线要尽量短。 (4)电路板上每个IC要并接一个0.01μF~0.1μF高频电容,以减小IC对电源的 影响。注意高频电容的布线,连线应靠近电源端并尽量粗短,否则,等于增大了电 容的等效串联电阻,会影响滤波效果。 (5)布线时避免90度折线,减少高频噪声发射。 (6)可控硅两端并接RC抑制电路,减小可控硅产生的噪声(这个噪声严重时可能 会把可控硅击穿的)。
按干扰的传播路径可分为传导干扰和辐射干扰两类。 所谓传导干扰是指通过导线传播到敏感器件的干扰。高频干扰噪声和 有用信号的频带不同,可以通过在导线上增加滤波器的方法切断高频干扰 噪声的传播,有时也可加隔离光耦来解决。电源噪声的危害最大,要特别 注意处理。所谓辐射干扰是指通过空间辐射传播到敏感器件的干扰。一般 的解决方法是增加干扰源与敏感器件的距离,用地线把它们隔离和在敏感 器件上加 蔽罩。
切断干扰传播路径的常用措施如下: (1)充分考虑电源对单片机的影响。电源做得好,整个电路的抗干扰就 解决了一大半。许多单片机对电源噪声很敏感,要给单片机电源加滤波电路 或稳压器,以减小电源噪声对单片机的干扰。比如,可以利用磁珠和电容 组成π形滤波电路,当然条件要求不高时也可用100Ω电阻代替磁珠。 (2)如果单片机的I/O口用来控制电机等噪声器件,在I/O口与噪声源之 间应加隔离(增加π形滤波电路)。 控制电机等噪声器件,在I/O口与噪声源之 间应加隔离(增加π形滤波电路)。 (3)注意晶振布线。晶振与单片机引脚尽量靠近,用地线把时钟区隔离 起来,晶振外壳接地并固定。此措施可解决许多疑难问题。 (4)电路板合理分区,如强、弱信号,数字、模拟信号。尽可能把干扰源(如电机,继电器)与敏感元件(如单片机)远离。 (5)用地线把数字区与模拟区隔离,数字地与模拟地要分离,最后在一 点接于电源地。A/D、D/A芯片布线也以此为原则,厂家分配A/D、D/A芯片 引脚排列时已考虑此要求。 (6)单片机和大功率器件的地线要单独接地,以减小相互干扰。 大功率 器件尽可能放在电路板边缘。 (7)在单片机I/O口,电源线,电路板连接线等关键地方使用抗干扰元件 如磁珠、磁环、电源滤波器,屏蔽罩,可显著提高电路的抗干扰性能。
3 提高敏感器件的抗干扰性能 提高敏感器件的抗干扰性能是指从敏感器件这边考虑尽量减少对干扰噪声 的拾取,以及从不正常状态尽快恢复的方法。 提高敏感器件抗干扰性能的常用措施如下: (1)布线时尽量减少回路环的面积,以降低感应噪声。 (2)布线时,电源线和地线要尽量粗。除减小压降外,更重要的是降低耦 合噪声。 (3)对于单片机闲置的I/O口,不要悬空,要接地或接电源。其它IC的闲置 端在不改变系统逻辑的情况下接地或接电源。 (4)对单片机使用电源监控及看门狗电路,如:IMP809,IMP706,IMP813, X25043,X25045等,可大幅度提高整个电路的抗干扰性能。 (5)在速度能满足要求的前提下,尽量降低单片机的晶振和选用低速数字 电路。 (6)IC器件尽量直接焊在电路板上,少用IC座。
|
常用元件封装 |
|
|
|
电阻:RES1,RES2,RES3,RES4;封装属性为axial系列 无极性电容:cap;封装属性为RAD-0.1到rad-0.4 电解电容:electroi;封装属性为rb.2/.4到rb.5/1.0 电位器:pot1,pot2;封装属性为vr-1到vr-5 二极管:封装属性为diode-0.4(小功率)diode-0.7(大功率) 三极管:常见的封装属性为to-18(普通三极管)to-22(大功率三极管)to-3(大功率达林顿管) 电源稳压块有78和79系列;78系列如7805,7812,7820等 79系列有7905,7912,7920等常见的封装属性有to126h和to126v 整流桥:BRIDGE1,BRIDGE2: 封装属性为D系列(D-44,D-37,D-46) 电阻:AXIAL0.3-AXIAL0.7 其中0.4-0.7指电阻的长度,一般用AXIAL0.4 瓷片电容:RAD0.1-RAD0.3。 其中0.1-0.3指电容大小,一般用RAD0.1 电解电容:RB.1/.2-RB.4/.8 其中.1/.2-.4/.8指电容大小。一般<100uF用RB.1/.2,100uF-470uF用RB.2/.4,>470uF用RB.3/.6 二极管:DIODE0.4-DIODE0.7 其中0.4-0.7指二极管长短,一般用DIODE0.4 发光二极管:RB.1/.2 贴片电阻 0603表示的是封装尺寸 与具体阻值没有关系,但封装尺寸与功率有关通常来说如下: 0201 1/20W 0402 1/16W 0603 1/10W 0805 1/8W 1206 1/4W 电容电阻外形尺寸与封装的对应关系是: 0402=1.0mmx0.5mm 0603=1.6mmx0.8mm 0805=2.0mmx1.2mm 1206=3.2mmx1.6mm 1210=3.2mmx2.5mm 1812=4.5mmx3.2mm 2225=5.6mmx6.5mm 零件封装是指实际零件焊接到电路板时所指示的外观和焊点的位置。是纯粹的空间概念因此不同的元件可共用同一零件封装,同种元件也可有不同的零件封装。像电阻,有传统的针插式,这种元件体积较大,电路板必须钻孔才能安置元件,完成钻孔后,插入元件,再过锡炉或喷锡(也可手焊),成本较高,较新的设计都是采用体积小的表面贴片式元件(SMD)这种元件不必钻孔,用钢膜将半熔状锡膏倒入电路板,再把SMD元件放上,即可焊接在电路板上了。关于零件封装我们在前面说过,除了DEVICE。LIB库中的元件外,其它库的元件都已经有了固定的元件封装,这是因为这个库中的元件都有多种形式: 以晶体管为例说明一下:晶体管是我们常用的的元件之一,在DEVICE。LIB库中,简简单单的只有NPN与PNP之分,但实际上,如果它是NPN的2N3055那它有可能是铁壳子的TO—3,如果它是NPN的2N3054,则有可能是铁壳的TO-66或TO-5,而学用的CS9013,有TO-92A,TO-92B,还有TO-5,TO-46,TO-52等等,千变万化。 还有一个就是电阻,在DEVICE库中,它也是简单地把它们称为RES1和RES2,不管它是100Ω还是470KΩ都一样,对电路板而言,它与欧姆数根本不相关,完全是按该电阻的功率数来决定的我们选用的1/4W和甚至1/2W的电阻,都可以用AXIAL0.3元件封装,而功率数大一点的话,可用XIAL0.4,AXIAL0.5等等。 现将常用的元件封装整理如下:
电阻类及无极性双端元件AXIAL0.3-AXIAL1.0;/无极性电容 RAD0.1-RAD0.4/有极性电容RB.2/.4-RB.5/1.0/ 二极管 DIODE0.4及 DIODE0.7/石英晶体振荡器 XTAL1/晶体管、FET、UJT TO-xxx(TO-3,TO-5)/ 可变电阻(POT1、POT2) VR1-VR5. 当然,我们也可以打开C:\Client98\PCB98\library\advpcb.lib库来查找所用零件的对应封装.这些常用的元件封装,大家最好能把它背下来,这些元件封装,大家可以把它拆分成两部分来记如电阻AXIAL0.3可拆成AXIAL和0.3,AXIAL翻译成中文就是轴状的,0.3则是该电阻在印刷电路板上的焊盘间的距离也就是300mil(因为在电机领域里,是以英制单位为主的。 同样的,对于无极性的电容,RAD0.1-RAD0.4也是一样;对有极性的电容如电解电容,其封装为RB.2/.4,RB.3/.6等,其中“.2”为焊盘间距,“.4”为电容圆筒的外径。对于晶体管,那就直接看它的外形及功率,大功率的晶体管,就用TO—3,中功率的晶体管,如果是扁平的,就用TO-220,如果是金属壳的,就用TO-66,小功率的晶体管,就用TO-5,TO-46,TO-92A等都可以,反正它的管脚也长,弯一下也可以。对于常用的集成IC电路,有DIPxx,就是双列直插的元件封装,DIP8就是双排,每排有4个引脚,两排间距离是300mil,焊盘间的距离是100mil。SIPxx就是单排的封装。等等。 值得我们注意的是晶体管与可变电阻,它们的包装才是最令人头痛的,同样的包装,其管脚可不一定一样。例如,对于TO-92B之类的包装,通常是1脚为E(发射极),而2脚有可能是B极(基极),也可能是C(集电极);同样的,3脚有可能是C,也有可能是B,具体是那个,只有拿到了元件才能确定。因此,电路软件不敢硬性定义焊盘名称(管脚名称),同样的,场效应管,MOS管也可以用跟晶体管一样的封装,它可以通用于三个引脚的元件。Q1-B,在PCB里,加载这种网络表的时候,就会找不到节点(对不上)。在可变电阻上也同样会出现类似的问题;在原理图中,可变电阻的管脚分别为1、W、及2,所产生的网络表,就是1、2和W,在PCB电路板中,焊盘就是1,2,3。当电路中有这两种元件时,就要修改PCB与SCH之间的差异最快的方法是在产生网络表后,直接在网络表中,将晶体管管脚改为1,2,3;将可变电阻的改成与电路板元件外形一样的1,2,3即可。 封装的处理是个没有多大学问但是颇费功夫的“琐事”,举个简单的例子:DIP8很简单吧,但是有的库用DIP-8,有的就是DIP8. 即使对同一封装结构,在各公司的产品Datasheet上描述差异就很大(不同的文件名体系、不同的名字称谓等);还有同一型号器件,而管脚排序不一样的情况,等等。对老器件,例如你说的电感,是有不同规格(电感量、电流)和不同的设计要求(插装/SMD)。真个是谁也帮不了谁,想帮也帮不上,大多数情况下还是靠自己的积累。这对,特别是刚开始使用这类软件的人都是感到很困惑的问题,往往很难有把握地找到(或者说确认)资料中对应的footprint就一定正确-- 心中没数!其实很正常。我觉得现成“全能“的库不多;根据电路设计确定选型、找到产品资料,认真核对封装,必要时自己建库(元件)。这些都是使用这类软件完成设计的必要的信息积累。这个过程谁也多不开的。如果得以坚持,估计只需要一两个产品设计,就会熟练的。所谓“老手”也大多是这么“熬“过来的,甚至是作为“看家”东西的。这个“熬”不是很轻松的,但是必要。 电阻类及无极性双端元件 AXIAL0.3-AXIAL1.0 无极性电容 RAD0.1-RAD0.4 有极性电容 RB.2/.4-RB.5/1.0 二极管 DIODE0.4及 DIODE0.7 石英晶体振荡器 XTAL1 晶体管、FET、UJT TO-xxx(TO-3,TO-5) 可变电阻(POT1、POT2) VR1-VR5 |
文章评论(0条评论)
登录后参与讨论