现场总线技能[1]是现在主动化操控范畴开展比较敏捷的一门技能,其间CAN(Controller Area Network)总线[2]是在国际上使用最广泛的现场总线之一。近几年跟着轿车电子职业的开展,现代轿车中CAN总线已经成为有必要选用的设备之一。本文以ATMEL公司新近出产的一款内置CAN操控器的单片机——AT90CAN128为根底,规划了一款车载CAN总线体系,经过CAN智能测控外表对车中部分单元参数量进行实时监控,使各单元之间和谐作业。别的,传输线束大大简化,可靠性得到了极大的进步,有用节省了线束装置空间和体系本钱。
1 AT90CAN128特性概述
1.1 根本特性
AT90CAN128[3]是依据AVR RISC结构的8位低功耗CMOS微处理器,它选用了先进的指令集以及单周期指令执行时刻,其数据吞吐率高达1 MIPS/MHz,其内核具有丰厚的指令集和32个通用作业寄存器。一切寄存器都直接与ALU相衔接。经过将8位RISC CPU与体系内可编程的Flash集成在一个芯片内,为许多嵌入式操控使用供给了灵敏而低本钱的计划。
1.2 内置CAN操控器概述
AT90CAN128内置有完全符合CAN2.0A和2.0B规范协议的CAN操控器。选用MOb(音讯方针)方法进行数据的发送和接纳,共有15个 MOb,它们具有相同的特点:有11位标识符(2.0A协议),也可扩展至29位(2.0B议);8位数据缓冲(静态分配);Tx,Rx帧
缓冲或主动呼应装备;时刻标识。
MOb是一个CAN音讯帧的描绘符。它包含处理一个CAN音讯帧的一切信息。这意味着一个MOb能够当作一个方针,来描绘一条CAN音讯。MOb的数目是从0到14。它们彼此独立,但在多重比较的时分,低位的MOb会取得优先权。每个MOb都被安顿在一个页中来保存。页的序号便是MOb的序号。
2 车载CAN总线操控体系[4]的规划
因为对实时性要求比较高,所以选用高速CAN总线,信息传输速度为500kbps,衔接的首要方针有:驾驶员核算机、发动机、主动变速器、安全气囊、外表信号收集体系、联合制动体系等。因为各个节点效果不同,所以在硬件搭建和软件规划以及通信协议的拟定上都选用了相应的计划。下面以联合制动单元为例,做具体分析。
联合制动单元接纳由驾驶员核算机终端发送的CAN总线音讯指令,依据对液力制动扭矩、机械制动扭矩、组成扭矩等参数进行检测的状况,经过电液操控算法核算,完成前驱、后驱制动操控。对正常制动回路油位、紧迫制动回路油位的报警等信息,经过CAN总线反馈给驾驶员核算机终端。
2.1 联合制动单元硬件电路组成
以AT90CAN128单片机作为操控体系中心,外围设有8路光隔模拟量输入、4路模拟量输出、多路光隔开关量输入、输出、LED报警及CAN总线收发器,总线的接口芯片选用的是Philips公司的PCA82C250。
2.2 通信协议拟定
2.2.1 各终端音讯标识符的界说
选用CAN扩展帧的29位标识符进行界说,其间P为3位优先级;R为保存扩展位;8位的BW为报文类型代码;8位的BD为方针地址或报文类型扩展码;8位的BY为发送报文源地址。部分设备节点称号和分配地址如下:主驾驶员终端地址10、副驾驶员终端地址20、联合制动单元地址30。
2.2.2 各音讯类型和指令值内容的界说
驾驶员核算机终端对联合制动单元的操控音讯内容为2个字节——指令类型和指令值。指令类型包含:状况查询指令(数据0x1,指令值0x0)、前/后驱制动指令(数据0x2/0x3,指令值0x0)、联合制动单元前/后驱制动信息承认(数据0x4/0x5,指令值0x0)等。
联合制动单元供给给驾驶员核算机终端的音讯内容包含:联合制动单元状况信息(7字节,分别为液力制动扭矩、机械制动扭矩、组成扭矩、速度以及紧迫回路和正常油压的数值,以及正常制动回路油位和紧迫制动回路油位的报警状况)、联合制动单元报警信息(2字节,分别为正常制动回路油位报警和紧迫制动回路油位的报警)、联合制动单元制动回来音讯(2字节,分别为收到的前驱或后驱制动指令的指令数据和指令值)等。
2.3 软件规划(CAN总线通讯部分)
2.3.1 初始化部分
初始化前将CAN通用操控寄存器的最高方位1(复位形式)。完成后,回到操作形式。
下面给出了CAN操控器的初始化程序:
void CAN_INIT ( void )
{
CANGCON = 0x80 ; /*进入复位形式而且复位MOb*/
while ( ENFG == 1 ) ; /*测验CANGSTA中的ENFG位是否为0*/
CANGIE = 0xB0 ; /*使能一切中止及接纳、发送中止*/
CANIE2 = 0xFF ; /*MOb 0~7中止使能*/
CANIE1 = 0x00 ; /*MOb 8~14中止制止*/
CANBT1 = 0x02 ; /*设置波特率为500kbps*/
CANBT2 = 0x20 ;
CANBT3 = 0x01 ;
CANTCON = 0x8F ; /*设置定时器预定标*/
/*以“联合制动单元状况查询音讯”为例*/
CANPAGE = TX_PAGE ; /*指定此音讯的MOb页(寄存器中的高4位)*/
CANCDMOB = 0x17 ; /*制止状况,IDE位为1表明扩展帧,数据长度代码为7*/
CANIDT1 = 0x84 ; /*标识符设置*/
CANIDT2 = 0xB1 ;
CANIDT3 = 0x18 ;
CANIDT4 = 0xF2 ;
CANIDM1 = 0xFF ; /*标识符屏蔽设置*/
CANIDM2 = 0xFF ;
CANIDM3 = 0xFF ;
CANIDM4 = 0xFF ;
CANGCON = 0x02 ; /*进入操作形式*/
While ( ENFG == 0 ) ; /*测验CANGSTA中的ENFG位是否为1*/
}
2.3.2 音讯的发送部分
音讯的发送均选用中止方法完成。首要经过设置CANPAGE寄存器来指定被发送的页数,将数据装载到CANMSG寄存器中,然后由CANCDMOB寄存器来操控发送动作,将音讯发送出去,一起将触发CANSTMOB中的TXOK中止。
下面以协议中的“联合制动单元状况查询指令”为例,给出了发送程序:
void CAN_TX ( void )
{
CANPAGE = TX_PAGE ; /*指定此音讯的MOb页(寄存器中的高4位)*/
CANMSG = 0x01 ; /*装载音讯数据*/
CANMSG = 0x00 ; /*装载音讯指令值*/
CANCDMOB = 0x52 ; /*发送状况,IDE位为1表明扩展帧,数据长度代码为2*/
}
void CAN_TX_INTER ( void ) /*发送中止子程序*/