时间:2022-05-18 04:40:14
摘要 现场总线在控制领域得到广泛应用,CAN总线广泛应用于工业控制系统和汽车控制系统。本文对用内嵌CAN总线控制器的AVR单片机控制器AT90CAN128构建CAN节点的方案进行了探索。
关键词 CAN总线;AVR单片机;AT90CAN128;CAN总线节点实现方案
中图分类号TP336 文献标识码A 文章编号 1674-6708(2011)42-0208-02
0 引言
随着微型计算机、嵌入式系统、网络技术、传感与检测技术的发展,现场总线在控制领域得到广泛应用。德国Bosch公司推出CAN (Controller Area Network) 现场总线是的一种是国际标准化的串行通信协议。一般用主CPU 外接一个专用CAN 控制器以实现。广泛应用在汽车控制系统与工业领域。AVR单片机是由ATMEL公司利用Flash新技术研发的RISC精简指令集的高速8位单片机。高速、低耗、功能强大。AT90CAN128s是内置CAN 总线控制器的AVR单片机。本文介绍AT90CAN128实现CAN节点的方法。
1 集成CAN 控制器的AT90CAN128
AT90CAN128是ATMEL公司利用Flash新技术生产的一种基于RISC结构的8位AVR增强型单片机。资源丰富,功能强大。除拥有一般AVR处理器的基本接口模块外,还集成CAN 控制器。与CAN标准帧完全2.0兼容。为搭建基于CAN 通信的系统提供了便利。
2 硬件设计
一个CAN总线由模块控制器、CAN控制器、CAN收发器3个部分组成。本方案节点电路主要由AVR单片机at90can128和高速can总线收发器构成,如图1所示。AT90CAN128是为总线节点的模块控制器和CAN控制器,采用16MHz时钟,负责上层应用与系统控制,执行完整的CAN协议总线,实现总线数据的发送与接收通信。CA82C251为专用总线收发处理器,具有瞬间抗干扰能力和保护总线能力,主要实现逻辑电平的控制和接口电气特性的处理。
图1AT90CAN128CAN总线节点结构图
3 软件设计
依据模块控制器AT90CAN128内部结构与特点,本方案软件选用AVR单片机专用编程环境,用C语言进行设计,按模块化的设计方法。软件由CAN控制器初始化、数据发送与数据接收部分等构成。
3.1 CAN控制器初始化
CAN总线控制器初始化的操作包括:总线波特率设置,接收屏蔽寄存器设置、接受验码寄存器的设置,使能允许寄存器的设置等。主要实现如下:
AT90CAN128中总线波特率设置是通过设置定时寄存器CANBT1- CANBT3实现。本方案设置波特率分频因子16MHz,12TQ,1000k,5,3,3,1,代码为:
CANGCON=0x01;//设置控制器使能
CANBT1=0x00;//初始化定时寄存器
CANBT2=0x0C;
CANBT3=0x37;
AT90CAN128内总线控制器提供4个验收码寄存器CANIDT1- CANIDT4和4个接收屏蔽寄存器CANIDM1- CANIDM4构成验收滤波器进行报文滤波。所有验收屏蔽寄存器为“0”的位,验收码寄存器和总线信息帧对应位必须一致才能验收通过,所有验收屏蔽寄存器为“1”的位,验收码寄存器对应位的验收滤波功能被屏蔽。用这些寄存器进行通信对象的设置。本方案设置节点通信对象为ID为CanComm.ID。代码为:
CANCDMOB=0x88;//can2.0A, 8位信息
CANIDT4=0;//初始化验收码寄存器
CANIDT3=0;
CANIDT2=0;
CANIDT1= CanComm.ID; //只接收CanComm.ID的信息
CANIDM4=0xFF; //
CANIDM3=0xFF;
CANIDM2=0xFF;
CANIDM1=0xFF;
CANGEN1=0X00;
CANGIEN2=0X01;
CANGIE|=((1
CANIE2|=0x01; //MOB0接收中断
CANPAGE=0x00;//自动增量
CANCDMOB|=0x08;
CANGCON=0x02;//CAN控制器启动
3.2 节点接收数据
节点总据接收模块实现节点数据的接收与处理,一般采用中断和查询方式。本方案采用中断方式接收数据。主要代码如下:
CANGIE &=~(1
CanComm.RX_Data[RX_Number][i]=CANMSG ;//装载数据到数据缓存区
CANSTMOB &=~(1
CANCDMOB=0x88; //接收使能
CANGIE|=(1
3.3 节点发送数据
节点数据发送是将待发送的数据打包成符合CAN协议帧格式后,写入数据缓存区并启动发送。主要代码如下:
CANPAGE=(channel
CANSTMOB &=~(1
CANMSG=CanComm.TX_Data[i]; //装载信息数据
CANCDMOB=0x40|g_number; //IDE位为0表示标准帧,数据长度代码为number帧发送
CANPAGE=0x00; //自动增量
CANCDMOB=0x48; ////MOB0发送使能
3.4 异常处理
在总线发生严重故障的情况下,CAN总线有可能脱离总线。可在中断处理子程序加入异常处理代码即可;在数据传送错误时,根据协议作相应的处理。
4 结论
本方案使用的硬件结构简单,软件易于编写,已在某医疗仪器的控制系统中运行,运行稳定,证明了可用于各种多点通信控制系统中。
参考文献
[1]ATMELCorporation.AT90CAN32/64/128AutomotiveSummary./dyn/products/.
[2]绕运涛,邹继军,等.现场总线CAN原理与应用技术[M].北京:北京航空航天大学大学出版社,2007,8.
[3]求是科技.单片机通信技术与工程实践[M].北京:人民邮电出版社,2005,1.