基于SJA1000的CAN总线接口电路的设计与实现
控制器局部网( CAN——Controller Area Network)属于现场总线的范畴,它是一种有效支持分布式控制或实时控制的串行通讯网络,其总线规范已被ISO国际标准化组织制定为国际标准,并被公认为是最有前途的现场总线之一。CAN总线的应用范围遍及从高速网络到低成本的多线路网络,广泛应用于控制系统中的各检测和执行机构之间的数据通信。
现场总线领域中, CAN总线得到了计算机芯片商的广泛支持,他们纷纷推出直接带有CAN接口的微处理器(MCU)芯片。带有CAN的MCU芯片总量已经达到1亿3千万片(不一定全部用于CAN总线);因此在接口芯片技术方面,CAN已经遥遥领先于FF、PROFIBUS、LONWORKS等其它所有现场总线。
现场总线标准及其技术日益成为国际自动控制领域关注的一大焦点,其原因是它改变了传统控制系统的结构,形成了全新的网络集成分布式控制系统。在我国,现场总线已经发展到推广应用阶段,中国已经成为各种现场总线激烈争夺的重要战场。因此研究现场总线技术及其产品就显得尤为重要。
1 CAN总线技术的特点
CAN总线与其它通信网的不同之处有二:一是报文传送中不包含目标地址,它是以全网广播为基础,各接收站根据报文中反映数据性质的标识符过滤报文,该收的收下,不该收的弃而不用。其好处是可在线上网下网、即插即用和多站接收;二是特别强化了对数据安全性的关注,满足控制系统及其它较高数据要求的系统需求。CAN具有以下主要技术特性:
( 1)CAN遵从ISO/OSI模型,采用了其中的物理层、数据链路层与应用层。采用双绞线,通信速率最高可达到1Mbps/40m,直接传输距离最远可达10km/5kbps.同一段总线内最多可挂接110个设备。
( 2)CAN的信号传输采用短帧结构,每一帧有效字节数为8个。因而传输时间短,受干扰的概率低。当节点发生严重错误时,具有自动关闭的功能,切断该节点与总线的联系,使总线上其它节点不受影响,具有很强的抗干扰能力。
( 3)CAN支持多主工作方式,网络上任一节点均可在任何时候主动向其它节点发送信息,支持点对点、一点对多点和全局广播方式接收/发送数据,而优先级低的节点则主动停止发送,从而避免了总线冲突。
2 CAN总线接口硬件电路的设计
硬件电路的设计主要是 CAN通信控制器与微处理器之间和CAN总线收发器与物理总线之间的接口电路的设计。CAN通信控制器是CAN总线接口电路的核心,主要完成CAN的通信协议,而CAN总线收发器的主要功能是增大通信距离,提高系统的瞬间抗干扰能力,保护总线,降低射频干扰(RFI),实现热防护等。
2.1 CAN节点核心器件及其选择
目前广泛流行的 CAN总线器件有两大类:一类是独立的CAN控制器,如82C200、SJA1000及Intel82526/82527等,另一类是带有在片CAN的微控制器,如P8XC582及16位微控制器87C196CA/CB等。本课题选取PHILIPS公司的SJA1000 CAN控制器以及82C250总线收发器,主要是考虑到SJA1000支持CAN 2.0A/B规约。而82C250可以支持110个CAN节点,并且国内市场上PHILIPS的产品型号比较多,购买比较方便。
2.2 CAN总线接口电路
SJA1000在电路中是一个总线接口芯片,通过它实现上位机与现场微处理器之间的数据通信。该电路的主要功能是通过CAN总线接收来自上位机的数据进行分析组态然后下传给下位机的控制电路实现控制功能,当CAN总线接口接收到下位机的上传数据,SJA1000就产生一个中断,引发微处理器产生中断,通过中断处理程序接收每一帧信息并通过CAN总线上传给上位机进行分析。AT89C51是CAN总线接口电路的核心,其承担CAN控制器的初始化、CAN的收发控制等任务。CAN总线接口框图见图1.
2.3 节点主要元件电路原理
接口主要元件电路原理图见图 2,在进行电路设计时应注意以下几点,否则达不到预期的效果。
( 1)总线两端必须接两个终端匹配电阻R T ,忽略掉它们,会使数据通信的抗干扰性及可靠性大大降低。
( 2)PCA82C250为CAN控制器和物理总线之间的接口,它可以提供向总线的差动发送能力和CAN控制器的差动接收能力,TXD和RXD引脚分别发送经过驱动后的发送和接收信号。其引脚8(R S )可以选择2种不同的工作方式:把该引脚直接与地相连,系统将处于高速工作方式,在这种方式下,为避免射频干扰,建议使用屏蔽电缆作总线;而在波特率较低,总线较短时,一般采用斜率控制方式,上升及下降的斜率取决于R S 的阻值,实践表明15-200k为R S 较理想的取值范围,在这种方式下,可以使用双绞线作总线(本系统采用该工作方式)。
图 2 接口主要元件电路原理图
( 3)SJA1000的TX1脚悬空,RX1引脚的电位必须维持在约0.5V CC 上,否则,将不能形成CAN协议要求的电平逻辑。因本系统传输距离近,环境干扰小,可以不用电流隔离,这样可以直接把82C250的V REF 端(约为0.5V CC )与SJA1000的RX1相连,从而简化了电路。
( 4)设计时将SJA1000的CLOCKOUT的时钟信号接至AT89C51的时钟电路输入端,作为AT89C51的外部时钟输入,解决了时钟同步问题;SJA1000中断输出信号/INT接至AT89C51的/INT0端,通过中断方式与AT89C51通信。
3 CAN总线接口软件设计
CAN接口通信软件分为3部分:CAN初始化、数据发送、数据接收。CAN初始化主要是设置CAN 的通信参数。需要初始化的CAN控制寄存器有:模式寄存器、时分寄存器、接收代码寄存器、屏蔽寄存器、总线定时寄存器、输出控制寄存器等。值得注意的是:这些寄存器只能在CAN控制器处于复位状态下才可写访问。发送数据程序把数据存储区中待发送的数据取出,组成信息帧,并将主机的ID地址,填入帧头,然后将信息帧发送到CAN控制器的发送缓冲区。在接收到主机的发送请求后,发送程序启动发送命令。信息从CAN控制器发送到总线是由CAN控制器自动完成的。信息从CAN总线到CAN控制器的接收缓冲区也是由CAN控制器自动完成的。接收程序只需从接收缓冲区读取信息,并将其存储在数据存储区。
#p##e#
3.1 CAN控制器SJA1000的初始化程序
设 SJA1000的首地址是8000H;
CR EQU 8000H;控制寄存器
CMR EQU 8001H;命令寄存器
SR EQU 8002H;状态寄存器
IR EQU 8003H; 中断寄存器
ACR EQU 8004H;验收码寄存器
AMR EQU 8005H;验收屏蔽寄存器
BTR0 EQU 8006H;总线定时寄存器0
BTR1 EQU 8007H;总线定时寄存器1
OCR EQU 8008H;输出控制寄存器
DI
LDB CL, #03H
STB CL, CR;开放接收中断,复位请求位置1,开始初始化
LDB CL, #01H
STB CL, ACR;将节点1标识符送给ACR
LDB CL, #0FFH
STB CL, AMR;验收滤波
LDB CL, #00H
STB CL, BTR0;波特率为250kbps
LDB CL, #14H
STB CL, BTR1;定义位周期宽度,采样点位置及采样次数
LDB CL, #0AAH
STB CL, 0CH
LDB CL, #1AH
STB CL, CR;复位请求位置0,初始化结束
EI
3.2 SJA1000接收与发送数据程序流程
程序流程见图 3、图4.
图 3 接收数据的中断服务程序流程图
SJA1000CAN总线接口电 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)