韩成浩,高晓红
(1. 吉林建筑工程学院 电气与电子信息工程学院,长春 130021;2. 吉林大学 机械科学与工程学院,长春 130022)
1986年德国最大的工业企业之一Rober Bosch公司首次提出了应用于汽车内各种传感器和执行器之间相互通信的CAN总线(Controller Area Network)技术以来,以其可靠性、实时性和灵活性强的特点,得到了诸多汽车开发商的青睐。本文介绍了CAN总线的通信协议,分析了CAN总线控制器SJA1000和驱动器PCA82C250的内部结构和工作原理,主要阐述了CAN总线技术在智能小区门禁控制系统中的应用。
CAN总线协议是建立在国际标准组织的开放系统OSI 7层互连参考模型基础之上的。其模型结构只有3层,即只取OSI底层的物理层、数据链层和应用层,保证了节点间无差错的数据传输。
CAN总线上用“显性”(Dominant)和“隐性”(Recessive)两个互补的逻辑值表示“0”和“1”。如图1所示,VCNA-H和VCAN-L为CAN总线收发器与总线之间的两接口引脚,信号是以两线之间的“差分”电压形式出现。在隐性状态,VCNA-H和VCANL被固定在平均电压电平附近,Vdiff近似于0。显性位以大于最小阀值的差分电压表示[1]。CAN总线的通信距离最远可达10Km(位速率为5 kbps) ,通信速率最快可达1Mbps(此时最长通信距离为40m)。
图1 CAN总线的位数值传输方式
CAN技术的报文传输为多主方式工作,网络上任意节点均可在任意时刻主动地向网络上其它节点发送信息,而不分主从。CAN节点只需通过对报文的标示符滤波即可实现点对点、一点对多点及全局广播等几种方式发送、接收数据。
CAN总线的数据传输(报文传输)采用帧格式。按帧格式的不同,分为含有11位标识符的标准帧和含有29位标识符的扩展帧。CAN总线的帧类型分为数据帧、远程帧、错误帧和过载帧。
只要总线空闲,任何单元都可以开始发送报文。如果两个或两个以上节点同时开始传送报文,那么就会有总线访问冲突。通过使用标识符的逐位仲裁可以解决这个冲突。仲裁的机制确保了报文和时间均不损失。当具有相同标识符的数据帧和远程帧同时发送时,数据帧优先于远程帧[2]。在仲裁期间,每一个发送器都对总线进行监测,如果发送和接收电平相同,则该节点可以继续发送报文。比如发送的是一“隐性”电平,而监视到的是一“显性”电平,那么这个节点就失去了仲裁,必须退出发送状态。
CAN总线控制器主要保证数据链路层和物理层的通信质量。SJA1000是一种独立的CAN总线控制器。SJA1000的内部结构如图2所示。
图2 SJA1000内部结构图
各功能模块的作用如下:
接口管理逻辑(IML)负责解释来自CPU的命令,控制CAN寄存器的寻址,向主控制器(CPU)提供中断信息和状态信息。发送缓冲器(TXB)是CPU和位流处理器(BSP)之间的接口,负责存储发送到CAN总线上的一条完整的报文。发送缓冲器的长度为13个字节,由CPU写入、位流处理器读出。
接收缓冲器(RXB、长度为13个字节)是验收滤波器和CPU之间的接口,用来存储从CAN总线上接收并被确认的信息。作为接收FIFO(RXFIFO,长度为64字节)的一个窗口,接收缓冲器可被CPU访问。CPU在接收FIFO的支持下,可以在处理一条报文的同时接收其他报文。
验收滤波器(ACF)将一条接收到的报文标识码与验收滤波器中的预设值相比较,以决定是否接收这条报文[3]。在纯粹的接收测试中,所有的报文都保存在接收FIFO中,但只有验收滤波通过且无差错的报文,才能被保存在接收缓冲器中。
位流处理器(BSP)是一个控制发送缓冲器、接收FIFO和CAN总线之间数据流的程序装置。它还执行总线上的错误检测、仲载、总线填充和错误处理。位时序逻辑(BTL)监视串行的CAN总线和位时序。它在信息开头“弱势支配”的总线传输时,同步CAN总线位流(硬同步),接收报文时再次同步下一次传送(软同步)。
错误管理逻辑(EML)负责限制传输层模块的错误。它接收来自位流处理器的出错报告,然后把有关错误统计告诉位流处理器和接口管理逻辑(IML)。
SJA1000有两种工作模式,即BasicCAN模式和PeliCAN模式。在这两种模式中,SJA1000寄存器从数量、地址分配到功能等方面都有所区别。SJA1000在复位状态下的默认模式为BasicCAN模式。CAN控制器在两种模式中又都有两种状态模式,分别称为操作模式和复位模式。处在这两种不同状态的模式中,对寄存器的访问操作功能是不同的。
SJA1000的控制寄存器、命令寄存器、状态寄存器、发送缓冲器(均为8位)等各种寄存器分配在0~31地址单元中。设置各寄存器中的参数可实现不同的操作功能[4]。
总线驱动器PCA82C250是CAN控制器与物理总线之间的接口。该器件对总线提供了差动发送能力,同时对CAN控制器提供了差动接收能力。它可以用高达1Mbps的位速率在两条有差动电压的总线上传输数据,总线可连接110个节点。总线驱动器PCA82C250的功能参如图3所示。
图3 PCA82C250的功能框图
图3中,引脚8(Rs)用于选定PCA82C250的工作模式。PCA82C250的工作模式有3种,即高速模式、斜率控制模式和待机模式。对于高速工作模式,发送器的输出级晶体管尽可能快速启动和关闭。在这种模式下,不采取任何措施限制上升和下降的斜率。采用斜率控制模式(Slope Control),可降低射频干扰。
利用CAN总线技术实现了智能小区单元门禁控制器和小区保安部门之间数据的快速、准确传递,提高了小区智能化管理水平。图4为小区单元门禁控制器的CAN总线通信部分电路。值得注意的是控制器AT89S52为高电平复位,而SJA1000为低电平复位。
为了增强CAN总线各节点的抗干扰能力,SJA1000的TX0、RX0和PCA82C250之间设置光电耦合器TLP521-2(即图4中的U3),实现了CAN 总线上各用户之间的电气隔离。同时,两根总线与地之间分别接了一个防雷击管P6KE6.8,当两输入端与地之间出现瞬变干扰时,通过防雷击管的放电可起到一定的保护作用[5]。
另外,PCA82C250的CANH和CANL之间接120Ω阻抗匹配电阻是非常必要,否则会影响总线的数据传输距离和传输质量。
CAN总线技术的软件设计主要包括:CAN总线控制器的初始化、报文发送和报文接收。SJA1000总线控制器的初始化对CAN总线的正常工作非常重要。SJA1000的初始化只有在复位模式下才能进行,初始化的关键是设置SJA1000内部寄存器的参数。其包括:设置工作方式、设置接收滤波方式,设置接收屏蔽寄存器(AMR)和接收代码寄存器(ACR)、设置波特率参数和中断允许寄存器(IER)等。在完成SJA1000的初始化设置以后,返回工作状态,进行报文的发送和接收通信。图5为SJA1000的初始化程序流程图。
图4 CAN总线硬件电路设计
图5 SJA1000初始化程序流程
图6 发送报文程序流程图
发送报文子程序负责完成报文的发送。发送时用户只需将待发送的报文按特定格式组合成一帧报文,送入SJA1000发送缓存区中,然后启动SJA1000的发送位,即可发送报文。以查询方式发送报文的程序流程如图6所示。
接收报文子程序负责完成报文的接收以及其他情况处理。接收子程序比发送子程序要复杂一些,因为在处理接收报文的过程中,同时要对总线关闭、错误报警、接收溢出等情况进行处理。图7为以查询方式接收报文的程序流程图。
图7 接收报文程序流程图
CAN 总线技术是较实用的现场总线技术,该总线以CAN总线控制器和驱动器为硬件基础,采用了开放式仲裁机制和“隐性”、“显性”位信号差分通信方式,保证了报文传输的可靠性、准确性、快速性和实时性。正因为如此,国外很多公司生产的控制芯片内置CAN总线控制器(如:Philips公司生产的P8xC591、Atmel公司生产的AT90CAN128 等器件),方便了用户的使用,缩短了开发周期。
[1] 甘永梅,李庆丰等.现场总线技术及其应用[M].北京:机械工业出版社,2005.
[2] 饶运涛,邹继军等.现场总线CAN原理与应用技术[M].北京:北京航空航天大学出版社,2004.
[3] 姜幼卿,左国华等.基于CAN总线的温室自动控制系统的通信设计[J].仪表技术与传感器.2005(4):60-62.
[4] 邬宽明.现场总线技术应用选编(1)[M].北京:北京航空航天大学出版社,2003.
[5] 张毅刚.单片机原理及应用[M].北京:高等教育出版社,2007.