基于AT90CAN128的CAN总线节点设计与研究

2014-06-19 18:18金树军
现代电子技术 2014年9期
关键词:程序设计单片机

金树军

摘 要: CAN总线在汽车电子、楼宇控制及其他工业控制领域中得到了广泛应用,AVR型单片机在仪表、工业控制领域也得到了广泛应用。主要介绍AVR型单片机AT90CAN128在CAN总线节点中的实现方案及具体技术路线,给出增强型CAN总线节点电路原理图、主要程序设计方案,为开发人员快速应用提供必要的技术基础。

关键词: CAN总线节点; 单片机; 程序设计; 工业控制

中图分类号: TN911.7?34 文献标识码: A 文章编号: 1004?373X(2014)09?0093?04

0 引 言

CAN是控制器局域网络(Controller Area Network, CAN)的简称,是由研发和生产汽车电子产品著称的德国BOSCH公司开发,并最终成为国际标准(ISO 11898),是国际上应用最广泛的现场总线之一。在北美和西欧,CAN总线协议已经成为汽车计算机控制系统和嵌入式工业控制局域网的标准总线,并且拥有以CAN为底层协议专为大型货车和重工机械车辆设计的J1939协议。

CAN总线目前已经在车辆、船舶等运输业中;嵌入式机器控制、工厂自动化、过程自动化和发电等制造业中;电梯控制、嵌入式门控制、供暖控制、通风控制、空调控制等楼宇自动化中;医疗设备、重病监护等卫生保健中;分拣机、输送机、加油站、自动取款机等行业中;舞台控制、照明控制等娱乐行业中;煤矿安全监控系统等工业通信中得到广泛应用。

AVR单片机做为一款单周期指令的单片机,具有简单易学、费用低廉、功能强大等优点。目前已用于军事、工业、家用电器、智能玩具、便携式智能仪表和机器人制作等领域。广泛用于空调控制板、打印机控制板、智能电表、智能手电筒、LED控制屏、医疗设备、GPS等领域或设备。AT90CAN128作为AVR单片机系列之一,不仅拥有AVR单片机本身的功能和资源,更兼具了CAN控制器功能。设计时,只在其外围增加高速光电转换器和CAN收发器等器件即可。下面就基于AT90CAN128的CAN总线节点设计进行详细说明。

1 硬件设计

如图1所示,CAN总线节点电路主要由光电耦合器HCPL0600、CAN收发器PCA82C251组成。两个光电耦合器引出的CANTX、CANRX引脚分别与AT90CAN128单片机的TXCAN、RXCAN引脚连接。两个光电耦合器起到不同节点之间电气隔离的作用。需要特别说明的一点是光电耦合器部分电路所采用的两个电源VCC和VDD必须也是完全隔离的,否则采用光电耦合器就失去了意义。电源的完全隔离可采用小功率电源隔离模块或带多5 V隔离输出的开关电源模块实现。这些电路虽然增加了节点的复杂性,但是却提高了节点的稳定性和安全性,在CAN总线节点设计中是非常必要的。

PCA82C251的CANH、CANL引脚与CAN总线的接口部分也采用了一定的安全和抗干扰措施。PCA82C251的CANH和CANL引脚各自通过一个0 Ω的电阻与CAN总线相连,电阻可起到一定的缓冲作用,保护PCA82C251免受电流的冲击。CANH和CANL与地之间分别并联了一个30 pF的小电容,可以起到滤除总线上的高频干扰和一定的防电磁辐射的能力。CANH和CANL与地之间分别接了一个瞬态抑制二极管,当CAN总线受瞬间的高能量冲击时,它能以极高的速度(最高达1×10-12 s)使其阻抗骤然降低,同时吸收大电流,将其两端间的电压箝位在一个预定的数值上,从而确保后面的电路元件免受瞬态高能量的冲击而损坏。CANH和CANL在连入总线之前,均通过一个可恢复保险丝,当总线上有大电流时,大电流产生的热量使可恢复保险丝内的高分子材料迅速膨胀,切断链状导电通道,元件由低阻抗瞬变为高阻抗,阻断电路,保护负载,在故障排除后,高分子材料自动收缩,导电通道重新链接,元件又自行恢复至原始状态,从而实现“重复使用,无须更换,一劳永逸”之目的。CANH,CANL之间利用放电管,实现有限能量雷击的防护。PCA82C251的Rs脚上接有一个斜率电阻,大小可根据总线通信速度适当调整,一般在16~140 kΩ之间。

为了增强CAN总线的驱动能力,当波特率一定时,延长CAN总线的通信距离,笔者根据实践经验,设计了如图2所示的CAN总线信号增强电路,其设计核心思想是增加CANTXD的信号强度。实践证明,此电路能够延长通信距离30%以上。

图2 CAN总线信号增强电路原理图

2 软件设计

笔者在软件设计过程中使用了ICCV7 for AVR和AVR Studio 4.14。ICCV7 for AVR用来建立工程、编写代码、编译代码;生成可供AVR Studio 4.14调用的镜像文件,即COF文件;生成可供AVR Studio 4.14下载的目标文件,即HEX文件。AVR Studio 4.14集成了汇编、编译器以及调试器功能,笔者使用深圳微雪电子有限公司的USB AVR JTAG ICE XPII仿真器,结合AVR Studio 4.14进行软件调试。

CAN总线节点的软件设计主要包括CAN控制器的初始化程序、数据接收程序、数据发送程序。

本软件设计是笔者在开发煤矿安全监控系统矿用本安型分站中验证过的,读者可根据本软件设计进行配置,即可实现通信。

2.1 CAN控制器初始化

笔者设计CAN控制器初始化软件时,硬件资源情况如下:AT90CAN128晶振频率为7.372 8 MHz,CAN通信波特率为5 Kb/s,禁能屏蔽寄存器。

2.1.1 复位设计

CAN控制器的初始化工作流程如图3所示。

只有在CAN控制器处于复位状态时,才能对它进行相关配置。因此,初始化工作的第一步就是复位CAN控制器。可通过对CAN通用控制寄存器CANGCON赋值0x01使CAN此时判断通用状态寄存器CANGSTA的Enable/Standby模式位是否为Standby模式,若是,则继续执行初始化程序的其他代码,若不是,则重新判断,直到是为止。此段程序代码可参考如下:

//等待CAN控制器进入Standby模式

while(CANGSTA & 0x04);

设计人员可在此处做定时及判断处理,以防止程序在此处死循环,不能执行其他程序。

图3 CAN控制器初始化程序流程图

复位邮箱的初始化工作包括对0~14个邮箱的标识符寄存器、标识符屏蔽寄存器、邮箱状态寄存器、邮箱控制和数据长度寄存器以及数据存储寄存器进行清零等工作。此段代码可参考如下:

unsigned char MobChannel;

unsigned char MobData;

for (MobChannel = 0 ; MobChannel < 15 ; MobChannel++)

{

CANPAGE = (MobChannel << 4);

CANIDT4 = 0;

CANIDT3 = 0;

CANIDT2 = 0;

CANIDT1 = 0;

CANIDM4 = 0;

CANIDM3 = 0;

CANIDM2 = 0;

CANIDM1 = 0;

CANSTMOB = 0;

CANCDMOB = 0;

for(MobData = 0; MobData < 8; MobData++)

{

CANMSG = 0;

}

}

2.1.2 位定时寄存器设计

位定时寄存器的初始化工作包括对CANBT1、CANBT2、CANBT3的这三个寄存器的配置。CANBT1可配置波特率预分频器,CANBT2可配置同步跳转宽度和传输时间段,CANBT3可配置相位段1、相位段2和采样点。应用中实际配置如下:

//波特率为5K

CANBT1 = 0x7e;

//同步跳转宽度为32 μs

//传输时间段为64 μs

CANBT2 = 0x6e;

//相位段1为16 μs

//相位段2为64 μs

//采样点为3,即总线采样3次

CANBT3 = 0x7b;

此时,可通过CAN定时器控制寄存器关闭CAN定时器,使其处于空闲状态。

2.1.3 邮箱寄存器设计

邮箱寄存器设计包括接收数据邮箱寄存器设计和发送邮箱寄存器设计。接收数据邮箱寄存器的初始化工作包括邮箱地址寄存器配置、邮箱状态寄存器配置、邮箱消息和DLC寄存器配置、标识符寄存器配置以及标识符屏蔽寄存器配置。

笔者在应用中实际配置如下:

CANPAGE=0x00;

邮箱地址寄存器配置为0x00,即选择邮箱地址为0,采用自动增加索引指针方式,索引指针默认为0。

选择好邮箱地址后才能对邮箱的其他寄存器进行配置。

CANSTMOB=0x00;

邮箱状态寄存器配置为0x00。使邮箱数据长度在设定的DLC范围内,处于未发送和未接收状态,位值监测标识、位填充标识、CRC校验标识、帧格式标识以及应答状态均处于正常状态。

CANCDMOB = 0x18;

邮箱消息和DLC寄存器配置为0x18。选择CAN2.0B工作模式,数据长度为8,当数据超过8时,只有8个数据有效。

//CAN标识符寄存器

CANIDT4 = 0x00;

CANIDT3 = 0x00;

CANIDT2 = 0x00;

CANIDT1 = 0x00;

//CAN标识符屏蔽寄存器

CANIDM4 = 0x00;

CANIDM3 = 0x00;

CANIDM2 = 0x00;

CANIDM1 = 0x00;

如上,配置标识符寄存器、标识符屏蔽寄存器均为0x00,不对数据进行滤波处理,接收数据后根据实际情况处理。设计人员可根据自身项目实际需要进行滤波设计。

发送数据邮箱寄存器的初始化工作包括邮箱地址寄存器配置、邮箱状态寄存器配置以及邮箱消息和DLC寄存器配置。

CANPAGE=(1<< 4);

邮箱地址寄存器配置为0x10,即选择邮箱地址为1,采用自动增加索引指针方式,索引指针默认为0。

CANSTMOB = 0x40;

邮箱状态寄存器配置为0x40。提前置位TXOK位,使邮箱处于数据发送完成状态。

CANCDMOB = 0x18;

邮箱消息和DLC寄存器配置为0x18。选择CAN2.0B工作模式,数据长度为8,当数据超过8时,只有8个数据有效。这样配置使得CAN总线节点接收和发送的数据类型保持一致。

2.1.4 中断寄存器设计

中断寄存器的初始化工作包括中断使用寄存器配置和邮箱使能寄存器配置。

笔者在应用中实际配置如下:

CANGIE=0xef;

中断使用寄存器配置为0xef。使能全局中断、接收中断、总线关闭中断、邮箱错误中断、帧缓冲区中断、通用错误中断、CAN定时器溢出中断,禁能发送中断。

CANIE1=0x00;

CANIE2=0x01;

使能地址为0的邮箱中断,禁能地址为1~14的邮箱中断。

2.1.5 结束设计

在这个设计里主要包括邮箱优先级配置、邮箱接收使能配置、CAN控制启动配置。

CANHPMOB = 0x00;

CANPAGE = 0x00;

CANCDMOB |= 0x80;

如上配置,使地址为0的邮箱优先级最高,同时,使能地址为0的邮箱的接收功能。

CANGCON |=0x02;

通过配置CAN通用控制寄存器的Enable / Standby为1,并等待CANGSTA的ENFG状态为1时,使CAN控制器进入正常工作模式。至此,CAN控制器初始化工作完成。

2.2 数据接收程序设计

数据接收程序负责每个CAN节点数据的接收以及简单的数据处理。AT90CAN128的CAN控制器主要有两种数据接收方式:中断接收方式和查询接收方式。笔者在应用中使用的是中断方式。

AT90CAN128的CANIT中断段号是19,在定义函数时,可采用如下方式:

#pragma interrupt_handler CanIsr:19

void CanIsr(void)

{

(此处略去接收数据程序代码)

}

当有总线上有数据发送,即可进入这个中断函数。

2.3 数据发送程序设计

数据发送程序负责CAN节点数据的发送。 首先将待发送的数据按特定格式送入发送缓存区中,然后启动发送,等待发送成功,清除发送完成标志位即可。因该功能设计简单,这里不做赘述。

3 结 语

本文通过CAN总线节点硬件电路设计及分析,为设计人员提供了实际可行的CAN总线电路原理,并通过各种保护电路的设计,增强了CAN总线节点的抗干扰能力、抗高电压能力、抗大电流能力,提高了CAN总线节点的整体性能。尤其是通过信号增强电路,提高了CAN总线节点的信号稳定性、可靠性,大大延长了CAN总线节点的通信距离,使CAN总线节点因保护电路受到的损失得到弥补和提高。笔者应用本电路原理在煤矿、金属矿山监控分站中已经得到成功应用。实践证明,该电路性能稳定、可靠,技术指标完全满足工业控制、通信领域要求。

本文通过AT90CAN128单片机CAN控制器驱动程序设计、发送程序设计、邮箱清理程序设计、中断接收程序设计,为设计人员提供了实际可行的程序设计方案。设计人员可按照文中给出的晶振、波特率等参数进行设计,即可实现CAN总线节点之间的通信,大大节省了设计人员的开发时间。

本文设计和研究的CAN总线节点技术和AT90CAN128单片机的CAN控制器程序设计技术都是目前各领域常用的基本技术,CAN总线的核心技术,即多主通信技术,是工业控制和通信领域解决关键问题的重点和难点,限于篇幅,这里不作赘述。本文所作论述,难免存在疏漏和不足,有待以后的进一步实践和研究。

参考文献

[1] 李真花,崔健.CAN总线轻松入门与实践[M].北京:北京航空航天大学出版社,2010.

[2] 张培仁.CAN总线设计及分布式控制[M].北京:清华大学出版社,2012.

[3] 马潮.AVR单片机嵌入式系统原理与应用实践[M].2版.北京:北京航空航天大学出版社,2012.

[4] 王卫东.模拟电子技术基础[M].北京:电子工业出版社,2010.

[5] 许莉娅,段帅君,李传南.基于Verilog HDL语言的CAN总线控制器设计及验证[J].现代电子技术,2012,35(10):43?46.

[6] 张辉.基于C8051F040单片机的CAN总线测试模式研究[J].现代电子技术,2012,35(6):43?44.

猜你喜欢
程序设计单片机
基于Visual Studio Code的C语言程序设计实践教学探索
基于单片机的SPWM控制逆变器的设计与实现
基于单片机的层次渐变暖灯的研究
从细节入手,谈PLC程序设计技巧
基于单片机的便捷式LCF测量仪
小议PLC与单片机之间的串行通信及应用
基于单片机的平衡控制系统设计
高职高专院校C语言程序设计教学改革探索
OBE理念下基于Greenfoot的Java程序设计课程教学改革
PLC梯形图程序设计技巧及应用