基于SJA1000的CAN总线智能节点实现
2008-05-14
作者:张绍忠,王 辉
摘 要: 一种采用独立总线控制器SJA1000和8位单片机89C51" title="89C51">89C51组成的CAN总线智能节点" title="智能节点">智能节点的实现方法,详细介绍了智能节点的硬件电路" title="硬件电路">硬件电路组成及抗干扰设计,给出的初始化程序以及接收和发送程序流程适用于89C51和其他8位或16位计算机。
关键词: SJA1000 CAN总线 智能节点 89C51 单片机
控制器局域网络CAN(Controller Area Network)是一种具有国际标准" title="国际标准">国际标准、性价比较高的现场总线。CAN是1986年由Bosch公司领先推出的一种最初应用于现代汽车微控制器通信的多主机局部网,实现车载各类电子控制装置之间的信息交换。由于其独特灵活的设计、高的位速率、高抗电磁干扰性、极高的可靠性和低廉的价格等卓越的性能,现已在工业控制、智能大厦、小区安防、交通工具、医疗仪器、环境监控等众多领域推广应用。国际标准组织ISO为其制订了规范CAN总线的国际标准,CAN已被公认为几种最有前途的现场总线之一。它在当今自动控制领域的发展中将发挥出越来越重要的作用。
CAN协议建立在国际标准组织ISO的开放系统互连参考模型OSI基础上,主要工作在物理层、数据链路层和应用层。用户可在其基础上开发适合实际系统需要的应用层通信协议。信号的传输一般采用双绞线、同轴电缆或光纤。CAN总线系统通信距离远,通信速率高,最高通信速率可达1Mbps;当信号传输距离达到10km时,仍可提供高达5kbps的数据传输速率。CAN总线的这一特点,使其更利于构成大系统。
CAN系统由CAN网络节点、转发器节点和上位机构成。节点是网络上信息的接收和发送站,CAN总线上的网络节点可多达110个。所谓智能节点是由微控制器与可编程的CAN控制器组成,目前市面上有两类CAN总线器件可供选择:一类是兼有微控制器和CAN功能的器件,如P8XC591/2、87C196CA/CB、MC68376、PowerPC555等,使用这种集成器件电路更紧凑,方便用户制作印制板;另一类是独立的CAN控制器,如Philips公司的SJA1000、Intel公司82526以及MCP2510等。使用独立的CAN控制器便于系统开发人员根据需要选择合适的单片机,构成更灵活、更理想的系统设计方案。本文介绍采用CAN通信控制芯片SJA1000与单片机接口构成的CAN总线系统智能节点。
1 CAN总线系统智能节点硬件组成
CAN总线上的节点一方面担负着与总线上其他智能设备的通信联络,同时还要完成连接到本节点上仪器设备的数据采集与控制,所以该节点应是带有微处理器的智能节点。CAN总线智能节点的硬件组成如图1所示。图中,虚线框内的部分是智能节点硬件结构,点划线以左部分是节点为担负监控任务而设的接口。本文只讨论图1虚线框内点划线以右部分,即由微处理器、CAN通信控制器" title="通信控制器">通信控制器、光电隔离器以及总线收发器等组成的智能节点的通信部分。
1.1 SJA1000功能简介
SJA1000是Philips公司推出的独立CAN通信控制器,主要由CAN核心模块、接口管理逻辑、发送缓冲区、接收FIFO、验收滤波器等几部分组成。其硬件结构框图如图2所示。
SJA1000的CAN核心模块负责CAN信息帧的收发和CAN协议的实现;接口管理逻辑负责与微处理器的接口,该单元中的每个寄存器都可由微处理器通过SJA1000 的地址/数据总线访问;发送缓冲区可存储一个长度为13B的信息帧。微处理器可将待发送的标识符和数据直接送入发送缓冲区,然后通过对命令寄存器CMR中的发送请求位TR置位,启动CAN核心模块自行将发送缓冲区中的数据读出,并按CAN协议装配成完整的CAN信息帧,通过收发器发往总线。由总线接收的信息经验收滤波器过滤,无差错的信息帧被送入接收FIFO缓冲区。同时将状态标志SR.0置位,表明接收缓冲区中已有成功接收的信息帧。微处理器可依据SR.0的状态,判断是否将FIFO中的数据读入微处理器进行相应处理。
1.2 CAN总线智能节点硬件电路及工作原理
本文介绍的智能节点由微处理器89C51、CAN通信控制器SJA1000、高速光电耦合器TLP113、CAN总线收发器82C251以及监控接口电路等部分组成。硬件电路如图3所示(不含与监控有关的接口电路)。
由于SJA1000只需8位数据/地址线,所以若节点的监控部分无特殊要求,则系统可采用8位微处理器。本设计采用89C51作为智能节点的微处理器,负责CAN通信控制器SJA1000的初始化、通信数据处理以及其他监控任务的执行。89C51采用外部时钟方式,将SJA1000的CLKOUT端与89C51的XTAL1端相连,利用SJA1000的时钟输出作为89C51的时钟信号,使二者在同一时钟控制下工作。
系统共用一个复位电路,由于89C51是高电平复位,而SJA1000是低电平复位,单片机的复位信号经反相后才可满足SJA1000复位信号的要求。SJA1000的选通采用线选方式,当89C51的P2.7为“0”时选通该控制器,配合ALE和读写信号便可实现MPU对SJA1000的访问。为对其他节点传来的数据及时作出响应,智能节点工作在中断方式下,当通信控制器接收到其他节点传来的数据时,SJA1000的中断输出就会被激活,在引脚上出现一个由高到低的电平跃变,从而引发微处理器89C51产生中断,通过中断服务程序接收一帧信息并进行分析处理,以及进行CAN总线错误中断类型判断和误码纠正。
本电路采用高性能的PCA82C251 CAN总线收发器作为SJA1000和物理传输线路之间的接口,PCA82C251可以工作在额定电压是24V的CAN总线系统中,对总线提供差动发送能力,对CAN控制器提供差动接收能力。该器件符合ISO11898标准,可以用高达1Mbps的位速率在一对总线电缆上以差动方式传输数据。82C251第8脚与地之间应接一个斜率电阻RS,其大小由总线通信速率决定。当RS=0,即把该引脚直接与地相连,系统将处于高速工作方式。在这种方式下,为避免射频干扰,建议使用屏蔽电缆作总线。与高速方式相对应的另一种工作方式是斜率控制方式。斜率控制方式适用于波特率较低、总线较短的情况,传送信号上升和下降的斜率取决于RS的阻值。通常RS的取值范围在16k~200kΩ,电阻大小可根据需要调整。在斜率控制方式下,总线可以使用平行线或双绞线。
1.3 智能节点的抗干扰措施
为增强CAN总线节点的抗干扰能力,SJA1000的TX0和RX0并不直接与82C251的TXD和RXD相连,而是通过高速光耦TLP113与82C251相连,这样就很好地实现了收发器与控制器之间的电气隔离,保护智能节点核心电路安全工作,并实现了总线上各CAN节点间的电气隔离。需要强调的是,为实现这种电气隔离,光耦器件两侧的直流电源VCC和VDD必须是两个无直接电气联系、相互隔离的直流电源,否则就失去了采用光耦的意义。这可采用多5V隔离输出的DC-DC变换隔离电源实现。同理,为保证这一目的的实现,在智能节点的监控部分也要采取同样的隔离措施。
为进一步加强智能节点的安全性和抗干扰能力,可在总线收发器82C51与CAN总线的联接之间串入阻值为5~10Ω的2个小电阻R8、R9,以起到一定的限流作用,避免82C250受过流冲击。此外,也可在总线入口处并接双向稳压管,限制线路上可能出现的短时尖峰过电压。同时,在CANH和CANL与地之间并联了2个30pF的小电容C4和C5,可以起到滤除总线上的高频干扰,并具备一定的防电磁辐射能力。此外,通信信号在线路上传输时,信号传输到导线的端点时会发生反射,反射信号会干扰正常信号的传输。为消除这种影响,可在CAN总线两端并接2个120Ω的电阻R10、R11,起到匹配总线阻抗和消除反射的双重作用。若忽略这些措施,会使数据通信的抗干扰性和可靠性大大降低,甚至无法通信。此外,为防止干扰出现死机现象,还可采用看门狗电路等监控措施,增加系统的可靠性。
2 CAN总线智能节点软件设计
CAN总线智能节点的软件设计主要包括:节点初始化、报文发送和报文接收三部分。
2.1 CAN总线节点初始化程序
节点的初始化主要是指系统上电后对微处理器89C51和CAN控制器SJA1000进行的初始化,以确定工作主频、波特率和输出特性等。对89C51的初始化可结合其监控任务进行,主要是对中断允许与屏蔽、中断优先级、定时器的使用与设置等,这与单片机的一般应用相同,这里不作介绍。此处主要介绍SJA1000的初始化。由于SJA1000内部无微处理器,故其初始化仍要通过89C51对其进行编程实现。初始化程序流程如图4所示。SJA1000的初始化应在复位模式下进行,所以在SJA1000初始化程序中首先要将工作方式置为复位模式,之后要设置验收滤波方式、验收屏蔽寄存器(AMR)和验收代码寄存器(ACR)、波特率参数和中断允许寄存器(IER)等。CAN协议物理层中的同步跳转宽度和通信波特率的大小由定时寄存器BTR0、BTR1的内容决定。需要指出的是:对于一个系统中的所有节点,这两个寄存器的内容必须相同,否则将无法进行通信。初始化设置完成后,将复位请求位置“0”,SJA1000就可以进入工作状态,执行正常的通信任务。
2.2 报文发送程序
发送程序负责节点报文的发送。发送时用户只需将待发送的数据按特定格式组合成一帧报文,送入SJA1000发送缓存区中,并将SJA1000的命令寄存器发送请求标志位(TR)置位。SJA1000会自动启动发送过程。但是,在往SJA1000发送缓存区送报文之前,必须先对发送缓冲器是否释放进行判断,只有当发送缓冲器标志(TBS)为“1”时,发送缓冲器才被释放,可将新报文写入发送缓存,否则,在发送缓冲器被锁定时,新报文是不能被写入发送缓冲器的。发送程序分数据帧和发送远程帧两种。远程帧无数据场。发送程序一般编写成子程序的形式。数据帧发送子程序流程图如图5所示。
2.3 报文接收程序
SJA1000的报文接收是由其自身独立完成的,其接收的报文经滤波验收后,暂存在接收缓冲器FIFO中。当报文进入接收缓冲器后,状态寄存器SR的接收缓冲器状态位RBS被置“1”,同时若中断使能寄存器IER的接收中断使能位RIE被设为“1”时,中断寄存器的RI位也被置“1”,SJA1000向CPU提出中断请求。SJA1000的报文接收可采用中断接收方式或查询接收方式。若对通信的实时性要求不是很强则可采用查询接收方式。两种接收方式编程的思路基本相同。图6给出了工作在中断方式下的报文接收中断服务程序流程。接收程序较发送程序的设计稍复杂些。一方面,在报文接收过程中,智能节点的微处理器负责将FIFO中的报文读入CPU的内存并进行处理;另一方面还要在处理接收报文的过程中同时对诸如总线脱离、错误报警、接收溢出等情况进行判断与处理。
本文介绍了基于SJA1000的CAN总线智能节点硬件电路的组成及与通信相关的程序流程。限于篇幅,略去了具体的程序,读者可结合SJA1000的结构与功能,根据流程图写出适合自己要求的程序。
参考文献
1 邬宽明.CAN总线原理和应用系统设计.北京:北京航空航天大学出版社,1996
2 史久根,张培仁,陈真勇.CAN现场总线系统设计技术.北京:国防工业出版社,2004
3 PHILIPS Corporation.SJA1000 stand-alone CAN controller product specification.2000