基于AT90CAN128的CAN总线设计
1 前 言
现场总线是当前工业总线领域中最活跃的一个领域, CAN 总线是工业数据总线领域重要的现场总线之一。CAN 是Contro ller Area N etw ork的缩写, 是国际标准化的串行通信协议。在当今的汽车产业中, 出于对安全性、舒适性、方便性、低公害、低成本的要求, 各种各样的电子控制系统被开发出来。由于这些系统之间通信所用的数据类型及对可靠性的要求不尽相同, 由多条总线构成的情况很多, 线束的数量也随之增加。为减少线束的数量、通过多个LAN进行大量数据的高速通信, 1986年德国电气商博世公司开发出面向汽车的CAN 通信协议。而今CAN 在欧洲已是汽车网络的标准协议。CAN 的初衷是为了解决汽车里多种复杂数据的通信, 后来证实在很多工业领域也能应用自如。
2 CAN 总线特性及当今状况
CAN 总线与其他通讯网络的不同之处在于: 报文传送中不包括目标地址, 以全网广播为基础, 各接收站根据报文中反映数据性质的标识符过滤报文;强化了对数据安全性的关注, 满足控制系统较高的数据需求。它具有如下显着特征: 极高的总线利用率、低成本、高速的数据传输速率、远距离传输、可靠的错误处理和检错机制、可根据报文的ID决定接收或屏蔽该报文, 节点在错误严重的情况下具有自动退出总线的功能等等。
CAN 总线所需完善的通信协议可由CAN 控制器芯片和接口芯片实现, 大大降低了系统的开发难度、组成成本、缩短了开发周期, 其高性能高可靠性以及灵活的设计受到人们的重视, 应用也越来越广泛。目前比较流行的控制器芯片是飞利浦公司的SJA1000和收发器芯片TJA1050。
由于近几年来CAN 总线技术逐步在我国推广开来, CAN 总线技术的独特特点 传输数据的可靠性和实时性, 已获得国际自动化控制领域的认可,其应用前景十分光明。国内推动CAN 总线技术进步的应用事例不断扩展, 积极促进了我国自动化技术的进步。由于CAN 总线本身的特点, 其应用范围己经扩展到过程工业、机械工业、数控机床、医疗机械、家用电器及传感器等领域, 而在电梯控制系统中, 主板需要接收不同楼层呼梯、轿厢里呼梯、调整电梯运行参数等多路信号, 因此CAN 总线的优势明显。如图1所示。
图1 CAN总线应用拓扑结构
3 集成CAN 控制器的ARM 微处理器
CAN 总线基于一组严格的协议, 一般来说在主CPU 外接一个专用CAN 控制器以实现。由于近年来微处理器的迅速发展, 出现了很多功能强大的集成CAN 控制器的CPU, 使得在CAN 总线应用上又简便了一些。而在价格上, 集成CAN 总线的微处理器和一般处理器加上专用CAN 控制器芯片的价格相当, 所以, 集成CAN 总线的微处理器必然成为今后CAN 总线应用的趋势。NXP 公司生产的ARM结构LPC2294就是其中一款流行的带CAN 总线控制器的CPU。它是基于一个支持实时仿真和跟踪的32位ARM7TDM I- S CPU 的微控制器, 并带有256k字节嵌入的高速Flash 存储器。极低的功耗、多个32位定时器、8路10位ADC、4路CAN以及多达9个外部中断使它们特别适用于工业控制, 因此,LPC2294也可作为电梯控制系统的主控制器。
4 集成CAN 控制器的高端8位AVR
上文提到, 电梯控制系统需要处理多路信息, 而且它们可能是具有不同传输速率的, 因此需要使用不同通道的CAN 总线控制器。对于控制系统, 必须具有可操作性, 考虑到要减轻主CPU 的负担, 因此,设计一个简单的操作系统对主系统进行操作, 而数据的交换方式就是采用CAN 总线传输, 此文中称这个操作系统为副系统。副系统相对比较简单, 其功能主要包括: ! 和主板进行信息交换; ? 具有按键供输入; # 具有显示信息的显示器。针对功能的需要和程序的体积, 选用了ATMEL公司近年力推的8位AVR控制器at90can128。
a t90can128是一种基于AVR 增强型R ISC结构的低功耗CMOS 8位单片机。通过执行一个单时钟周期的高效指令, AT90CAN128每MH z能达1M IPS,这就可让系统设计人员将功率损耗与处理速度优化。AVR内核具有丰富的指令集并带有32个通用目的工作寄存器。32 个寄存器全都直接连到运算逻辑单元( ALU ) , 允许两个独立的寄存器在一个时钟周期执行单个指令的方式访问。其结果就是, 采用这种结构的速度比常规的R ISC单片机快10倍的同时代码效率更高。它除了拥有一般AVR 处理器的AD 模块, SPI模块外, 还集成CAN 控制器, 为搭建基于CAN 通信的系统提供了便利。控制结构如图2所示。
图2 at90can128的CAN控制结构。
对于复杂的CAN 通信协议, 在此不详述, 以下就at90can128的CAN控制器使用作介绍。
a t90can128的CAN 控制器提供了所有有利于消息管理的硬件, 对于每个要发送或接收的信息都是通过一个叫做消息对象( message ob ject) 的东西来封装起来的。在对模块初始化的时候, 程序会指定哪些消息要发送, 哪些消息要接收, 只有那些约定好标识符的消息才能被正确无误地交换。另外, 对于接收到的远程帧, 控制器会进行相应的自动回复。
所以在这种方式下, 相对于最原始的CAN 控制方式, CPU 的负担大大减小了。用户可以根据自身要求, 通过对相关寄存器进行配置达到自己的要求。
而在发送消息之前, 必须初始化几个字段:
其中IDT 是标识符字段, IDE 是标识符扩展使能选择, RTRTAG是远程传输请求, DLC 是数据长度代码, RBnTAG 是保留字段( n = 0, 1) , MSG 是指向相应MOB的CAN 数据。当MOB 的发送指令执行后, MOB 就会准备发送一个数据或者是一个远程帧。接着, CAN 通道就会扫描各个MOB, 寻找到优先级最高的MOB, 将其发送出去。当传送成功后,MOB 状态寄存器CANSTMOB 中的TXOK 位就会置位。而最重要的是, 对于每一次新的数据传输都必须重新对相关寄存器初始化, 否则无法正常工作。
接收消息之前所要做的初始化步骤基本相同,只是多了IDMSK 和IDEMSK 标识符掩码的设置。
以下就给出基于AVR at90can128CAN 总线接口初始化以及发送、接收功能模块的关键代码及注解(见图3)。
图3 电梯系统主板与调试器之间的CAN通信。
CAN 初始化:
CANGCON " = 0X01;
for( i= 0; i< 15; i+ + )
{
CANPAGE = i< < 4; / /将15个MOB 都初始化一次
CANCDMOB = 0;
CANSTMOB= 0;
CAN IDT1= 0;
CAN IDT2= 0;
……
for( j= 0; j< 8; j+ + )
CANMSG= 0;
CANBT1= 0X1E; / /设置CAN 传输波特率, 16分频
CANBT2= 0X40;
CANBT3= 0X49;
CANPAGE = ( 0< < 4) ; / /选择MOB0作为接收MOB, 并设定标识码
CAN IDT1= 0X00;
CAN IDM1= 0X00;
……
CANPAGE = ( 1< < 4); / /选择MOB1作为发送MOB, 并设定标识码
CAN IDT1= 0X00;
……
}
发送模块代码:
CANPAGE = ( 1< < 4); / /选定MOB1
If( ( CANGSTA& 0X10) = = 0) / /查询CAN 状态寄存器的TXBSY 位, 为0, 则可以发送
for( i= 0; i< 8; i+ + )
{
CANMSG= my _dada[ i] ; / /将要发送的数据装入数据寄存器中, 共8 by te
CANCDMOB | = 0X48; / /发送
}
接收模块代码是类似的, 设计思路都是在判断发送允许标志之后, 如果允许, 就将数据装入到指定的MOB中, 而每个MOB 一个发送周期一共可以发送8byte的数据。而CAN 总线的另一端是NXP公司LPC2294的CAN总线外围, 其结构和原理都差不多, 当然, 在寄存器设置中会有一点差别, 但只要两个CPU 约定好数据帧的标识符编号是什么, 传输速率相同, 就可以进行数据交换了。由于篇幅有限,LPC2294的CAN接口设置在此就不作介绍了。
最后给出了CAN 总线应用CPU 外部的硬件原理参考图, 如图4所示。
- 基于MSP430系列单片机的CAN总线接口转换卡设计(01-17)
- CAN总线—PROFIBUS-DP总线网关的实现方法(01-17)
- 汽车CAN总线(01-21)
- CAN总线控制器与DSP的接口(01-21)
- 基于ARM的CAN总线智能节点的设计(01-24)
- USB-CAN-RS232总线转换电路设计及实现(02-13)