基于AT90CAN128的CAN总线节点的实现方案

时间:2022-05-18 04:40:14

基于AT90CAN128的CAN总线节点的实现方案

摘要 现场总线在控制领域得到广泛应用,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.

上一篇:云技术和云的发展 下一篇:信息时代基层科技情报研究工作的思索