CAN 2.0B协议数据单元由标识码和数据域两个,部分组成,标识码包括了优先权(P)、保留位(R)、数据页(DP)、格式域(PF)、特定域(PS)、源地址(SA)和数据域(DF)七部分。
SAE J1939是以CAN 2.0B扩展信息格式为基础,用于大型车辆的协议。该设计参照此协议并兼容了北京公交的无轨电车电器控制CAN编码协议,规定了通讯的波特率为200 kHz。标识码由29位组成,分别为状态ID和指令ID。定义为:PF=0XFF,PS=0X04,优先级=3,地址=0X09。数据域由8个字节,64位组成,各个单元的数据域都有不同定义。
3 软件例程与应用
软件采用模块化、结构化的编程方法,本系统软件部分主要由单片机的数据采集模块和CAN接口的通信模块组成;所有代码在ICC AVR开发环境中进行C语言编写。本系统中,核心处理器器ATmega 16与CAN控制器之间采用中断触发的方式进行命令、数据的接收,并采用轮询方式进行数据的发送。
系统周期性采集到外部信号后,按照规定的格式发送数据到总线上,同时根据需要提前报文和标志并判别是否发送成功;若CAN控制器接收到外部命令数据,利用屏蔽滤波寄存器对接收报文的标识符和预先在接收缓冲器初始化时设定的标识符进行有选择地逐位比较,只有标识符匹配的报文才能进人接收缓冲器并发送信号到MCU的对应引脚,从而触发中断。
3.1 系统初始化
系统初始化主要对系统中ADC与CAN控制器工作时的各参数设置,其主要内容包括:设置对应2个I/O口为ADC口、设定ADC使能和查询读数方式、硬件使能CAN、设置CAN报警界限、设置总线波特率、设置中断工作方式、设置CAN验收滤波器的工作方式、设置CAN控制器的工作模式等。初始化流程如图4所示。