引言
现场总线技术是一种基于现场设备之间进行数据通讯的新型总线系统,它综合了计算机技术、数字通讯技术、自动控制技术、网络技术和智能仪表等各种技术手段,从根本上突破了传统的“点对点”式的模拟信号或数字—模拟信号控制的局限性,构成了一种全分散、全数字化、智能化双向、互连、多变量、多结点的通信控制系统。
CAN总线是德国BoSCH公司为解决现代汽车中众多的控制与测试仪器之间的数据交换而开发的一种串行数据通讯协议。CAN总线以其高性能、高可靠性及其独特的设计越来越受到人们的重视,并被公认为是汽车电控系统中最有前途的总线之一。奔驰、宝马、大众等一些国际著名汽车生产厂家已经在各自的产品中采用了CAN总线技术。目前,国内的汽车生产厂家也已经开始重视该项技术。毫无疑问,CAN总线技术将是今后车载网络领域的主流协议标准。
P87C591芯片的特点
P87C591是一个单片8位高性能微控制器,除了80C51的标准特性之外,器件还为实际应用提供许多专用的硬件功能。片中带16K字节内部程序存储器,可外部扩展到64K字节;512字节片内数据RAM,可外部扩展到64K字节;并且有3个16位定时/计数器T0, T1(标准80C51)和附加的T2(捕获&比较),2个8位分辨率的脉宽调制输出(PWM),包含一个看门狗定时器T3。P87C591中包括4个中断优先级,l5个中断源,为编写高效率的程序软件提供了强大的硬件支持。
P87C591是NXP半导体公司推出的带有在片CAN控制器SJA 1000的新型微控制器。它完全履行CAN 2.0规范并提供一个独立CAN控制器的软件移植路径。其中包括增强型验收滤波器、支持系统维护、诊断、系统优化以及接收FIFO特性。该嵌入式CAN控制器包括了具有CAN的扩充特性。该嵌入式CAN控制器包括了下列功能模块:
① CAN内核模块根据CAN 2. 0规范控制CAN帧的接收和发送。
② CAN接口包含5个实现CPU与CAN控制器连接的特殊功能寄存器。
③ CAN控制器的发送缓冲区能够保存一个完整的CAN信息格式。只要通过CPU启动发送,信息字节就从发送缓冲区传输到CAN内核模块。
④ 所有验收滤波器验收的接收数据都保存在接收FIFO中。取决于操作模式和数据长度的不同,最多可存放21个CAN信息。
⑤ 当接收一个信息时,CAN内核模块将串行位流转换成并行数据输入到验收滤波器,通过该可编程滤波器,P87C591确定实际接收到的信息。
P87C591微控制器内部总线通过80C51微处理器接口与PeIiCAN相连。通过CANADR(地址)、CANDAT(数据)、CANMOD(模式)、CANSTA(状态)和CANCON(控制)5个特殊功能寄存器对PeIiCAN寄存器和RAM区进行访问。图1为P87C591的功能框图。
图1 P87C59的功能框图(略)
基于P87C591的CAN总线控制系统的设计研究
硬件电路设计
本文所设计的控制系统的CAN总线节点硬件电路由微处理器(P87C591)、CAN总线通信接口的收发器(NXP公司的82C250)和功能装置(传感器、执行器等)组成。如 图2所示为控制系统CAN总线节点通讯相关的硬件电路原理图。由于P87C591本身含有CAN模块,因此不需要外加CAN控制器,所需要的外部元件仅仅是一个晶振加两个电容,一个连接到复位脚的电容(使用片内复位电路)以及一个收发器用于将P87C591连接到CAN总线。
为了防止干扰,在CAN总线节点硬件设计上采取了以下措施:
①82C250与CAN总线的接口部分采取了抗干扰措施。82C250的CANH和CANL引脚各自通过一个5? 的电阻与CAN总线相连,电阻可起到一定的限流作用,保护82C250免受过流的冲击。CANH和CANL与地之间并联了两个30pF的小电容,可以起到滤除总线上的高频干扰和一定的防电磁辐射能力。另外在两根CAN总线接入端与地之间分别反接了一个保护二极管,当CAN总线有较高的负电压时,通过二极管的短路可起到一定的过压保护作用。
② 总线两端应接有两个120?电阻,对于匹配总线阻抗起着重要的作用,忽略掉它们会使数据通信的抗干扰性及可靠性大大降低甚至无法通信。
图2 车身控制系统CAN总线节点硬件电路原理图(略)
软件设计
在CAN总线程序设计中,初始化程序是整个软件设计中的重点和难点,它直接关系到系统能否正常工作。对CAN 控制器进行初始化,实际上就是对集成CAN控制器的P87C591芯片中的寄存器进行初始化设置,并对报文接收缓冲区进行设置。内容包括:操作模式、TXDC输出管脚的配置、总线定时、验收滤波器、中断等。CAN控制器初始化流程图如图3所示。
图3 初始化流程图(略)
对于CAN控制器的初始化,只与表1中所列寄存器相关。大多数CAN寄存器具有一个方便的恢复特性,在硬件复位或使CAN控制器进入复位模式后用户配置可保持不变(表1中标注“不变”)。
表1 CAN控制器寄存器设定(略)
CAN初始化子程序如下:
void init_can_controller(void)
{
/*进入CAN控制器复位模式*/
CANMOD=0x01; /*将CAN控制器设置为复位模式以启动初始化*/
/*TXDC Port (P1.1)配置*/
P1M2=P1M2|0x02; /*管脚TXDC设置为推挽模式*/
/*配置与CAN有关的中断*/
CANSTA=0x03; /*使能接收和发送中断*/
/*CAN位定时的配置*/
CANADR=BTR0; /*BTR0和BTR1编程为100kbit/s,在16MHz条件下*/
CANDAT=0x00;
CANADR=BTR1;
CANDAT=0x14; /*用户可根据具体的CAN网络来调整BTR0、BTR1的参数*/
/*验收滤波器1配置为接收ID=10000000XXX*/
CANADR=ACR0; /*将地址设置到验收代码寄存器0(BANK1)*/
CANDAT=0x80; /*验收代码0用于滤波*/
CANADR=AMR0; /*将地址设置到验收屏蔽寄存器0(BANK1)*/
CANDAT=0x00; /*BANKl:与验收屏蔽0有关*/
CANDAT=0xFF; /*BANKl:与验收屏蔽1无关,允许任何数据通过滤波器*/
CANDAT=0xFF; /*BANKl:与验收屏蔽2无关,允许任何数据通过滤波器*/
CANDAT=0xFF; /*BANKl:与验收屏蔽3无关,允许任何数据通过滤波器*/
CANADR=ACFMOD; /*将地址设置到ACF模式寄存器*/
CANDAT=0xFF; /*单验收滤波器使用29位ID(EFF)*/
CANADR=ACFPRIO; /*将地址设置到ACF优先级寄存器*/
CANDAT=0xFF; /*所有滤波器都为高优先级*/
CANADR=ACFEN; /*将地址设置到ACF使能寄存器*/
CANDAT=0x01; /*使能Bankl的验收滤波器*/
/*选择操作模式退出CAN控制器复位模式*/
CANMOD=0x00; /*使CAN控制器进入操作模式*/
}
结束语
本 文从硬件和软件的角度对内嵌CAN控制器(SJA1000)的P87C591进行了详细的介绍,不仅给出了P87C591的CAN总线硬件电路原理图,还给出了CAN总线的初始化子程序。P87C591是个高性能的CAN微控制器,可用于汽车和通用的工业应用。尤其在汽 车 车身控制系统中它可以发挥很好的作用,通过使用该系统进行CAN总线的车身控制,可以简化线路,减少车内线束连接的复杂性,保证信号无干扰、实时的传输,并且实现系统实时诊断、测试和报警功能。随着汽车电子技术的发展,其在汽车电控系统中必将得到更广泛的应用。 |