AVR单片机的CAN总线分析仪设计

发布者:asd123yui最新更新时间:2013-11-12 来源: eefocus关键字:AVR单片机  CAN总线分析仪  ATmega64L  SJA1000T 手机看文章 扫描二维码
随时随地手机看文章

引言

  国内基于CAN总线的工程应用也越来越多,但是在CAN现场总线产品开发前期和后期测试中缺乏有效的现场监测和排错手段,从而延长了开发周期,增加了开发成本。同时,国内CAN总线教学实验也同样缺乏成本低,功能强,操作简单的CAN分析仪器。

  目前CAN总线的监测主要是通过CAN适配卡与计算机相连,利用计算机软件来分析总线状况。高端CAN适配卡价格高昂,而低端CAN适配卡如CAN转232卡,由于232总线传输速度有限,很难做到准确监测。另外,计算机也不便于在现场进行监测。本文设计了一种造价低廉、操作简单的便携CAN总线分析仪,能够适应各种总线传输速度。

1 CAN分析仪的组成和功能

  主要由4个部分组成:MCU、液晶显示接口、键盘输入接口和CAN接口。能够实现以下功能: 总线波特率自适应、正常接收CAN总线数据、总线报文数和总线错误数及错误类型记录、总线负载率检测、总线报文显示、CAN协议类型辨识。硬件整体框架如图1所示。

图1 系统硬件框图

2 CAN分析仪的硬件设计

2.1 MCU与CAN接口

  本系统中使用Atmel公司生产的AVR单片机ATmega64L作为微控制器。ATmega64L是高性能、低功耗的8位AVR单片机。它具有哈佛总线结构、精简指令集(RISC)结构和丰富的片内资源。ATmega64L具有64 KB Flash程序存储器、2 KB的E2PROM、4 KB的SRAM、4个带有比较模式的定时器/计数器以及可编程带内部振荡器的看门狗定时器等,支持汇编和C语言在线编程。利用其优良特性可以使设计大大简化。

  CAN接口硬件原理图如图2所示,包括MCU、总线控制器模块、总线驱动模块、光电隔离模块。  总线控制器模块采用Philips公司的CAN控制器SJA1000。它可工作于BasicCAN 模式或PeliCAN 模式,具有64 字节的接收缓冲器,支持11位和29位ID,可热插拔,支持CAN2.0B 协议,仅依靠控制器本身的硬件电路就能够实现通信帧的组织和发送功能。

  CAN总线驱动模块采用82C251。为了增强CAN总线节点的抗干扰能力,实现各CAN节点间的电气隔离,SJA1000的TX0和RX0通过高速光耦6N137分别与82C251T的TXD和RXD相连。值得注意的是,光耦所采用的两个电源VCC和VDD必须完全电气隔离。

2.2 液晶显示接口

  分析仪监测到的总线状态需要外部器件来显示以方便观察。传统的数码管指示灯无法满足大量总线状态实时显示的需求。为了便于操作者的使用,本系统选用深圳安得利光电科技有限公司生产的AM1286425F57,它是128×64的图形点阵液晶模块,内置控制器是三星公司的LCD驱动及控制芯片S6B1713。

图2 CAN接口硬件电路原理

  图3是AM1286425F57硬件原理图。MCU电源和背光输入电源都为3.3 V。8位数据总线接在单片机的D口上,将D口配置为输出。AM1286425F57的RS是指令与数据选择信号。当RS=0时,表示数据总线D0~D7上是液晶控制指令;当RS=1时,表示数据总线D0~D7上是写入液晶的数据。CS1和CS2都是控制器芯片S6B1713的片选信号,当CS1=0,CS2=1,即2个片选同时有效时才能选中液晶,向它写入数据或指令。[page]

图3 液晶显示接口

2.3 键盘输入接口

  图4所示为键盘输入接口的硬件原理图。键盘输入采用了广州周立功单片机发展有限公司的数码管显示驱动及键盘扫描管理芯片ZLG7289B,它可以扫描管理多达64只按键。ZLG7289B采用SPI 串行总线与微控制器接口,仅占用少数几根I/O接口线。为了使键盘扫描得以正常进行,下拉电阻R1~R8和位选电阻R9、R10 是必需的。下拉电阻取值范围是10~100 kΩ,位选电阻取值范围1~10 kΩ。如果需要增加或减少按键,建议按列增加或裁减键盘,即增加或省略相应列的电阻。应注意裁减键盘时下拉电阻一个都不能省去。

图4 键盘输入接口

3   CAN分析仪的软件设计

  本系统的软件设计通过AVR单片机的开发工具AVRICC用C语言编制,并依据各项功能进行了模块化设计,主要包括:自适应波特率模块、定时器模块、报文接收模块、状态显示模块、CAN中断处理模块、控制器初始化模块和总线状态计算模块等。其中自适应波特率、报文接收和总线状态计算是核心与关键。限于篇幅,仅介绍这几种功能模块。

3.1 软件的主程序框架

  分析仪的主要功能是监测现场状况。首先要使其接入总线,能够正常接收总线报文。因为总线上的波特率未知,需要对总线的波特率进行自识别,找到正确的波特率并初始化CAN控制器,进入CAN总线正常工作状态,接收总线上的各种报文。CAN总线不是按地址来进行报文传送的,可以设置分析仪接收总线上的一切报文,也可以通过键盘输入需要接收的报文。CAN总线上一旦出现错误,出现错误的节点就会向总线发送标示错误的错误帧。利用这个特性,接收错误帧,并将它显示出来用于分析总线的各种错误。与此同时,通过定时器来确定每单位时间的正确报文数和错误报文数,用于分析总线的状态是否正常、利用是否充分等。程序总体框架如图5所示。

 

图5 程序总体框图

3.2 自适应波特率

  自适应波特率是在未知总线波特率的情况下自动检测CAN总线波特率,并且不影响总线的正常运行。已往的自适应波特率检测主要是向总线发出报文,若接入节点(分析仪)假设的波特率与网络实际波特率相冲突,则该节点自身的CAN控制器将产生错误帧,这是对检测到的总线错误的正常反应。如果允许该错误帧发送到总线上,将导致网络上其他节点也收到该错误帧,从而产生网络堵塞。这种方法严重影响了总线的正常运行,轻则使总线在检测阶段不能正常工作,重则影响总线的整个调度算法,使总线发生紊乱甚至关闭。

  本系统所选用的CAN控制器SJA1000具有独特的只听模式。在该模式下,CAN控制器进入错误认可状态,即无论接收信息成功与否,都不能向总线发送任何信息,只能接收报文。这样就不影响总线的正常运行,其他功能都如同在正常操作模式下一样使用。

  自适应波特率需要在网络中至少有1个节点在发送报文,而且需要预先设定1张包含所有可能波特率的表格。在建表时考虑到表的长度越长,检测所需要的时间和报文数就越多,所以只取了CiA(CAN in Automation)协会推荐的几种标准通信波特率和工业现场常用的波特率。

  CAN控制器首先进入复位模式。接着设置初始波特率,波特率的初始值可以通过拨码开关设置从最高波特率开始,或从最低波特率开始,从而减少自适应时间。最后使能接收中断进入只听模式。当未接收到总线报文时,即没有产生接收中断,进入复位模式选择下一个波特率;当产生1个接收中断时,表示检测到正确的波特率,这时软件就可以切换到正常操作模式,CAN分析仪即可参与总线通信。图6为自适应波特率的流程。[page]

图6 自适应波特率流程

3.3 报文接收

  CAN报文的接收有2种方式,分别为查询的方式和中断的方式。

  查询的方式是MCU以一定周期读取CAN控制器的状态寄存器,检查接收缓冲区状态标志是否至少接收到1个报文。接收缓冲区状态指示为“空”,表示没有接收到报文,MCU继续当前的任务。当接收缓冲区状态标志指示为“满”,表示已接收至少1个报文,MCU从控制器取出报文,并写命令释放接收缓冲区标志。查询方式的不足是: 查询周期如果过短,就会使MCU大部分时间运行在报文的接收查询上,使其效率降低;若查询周期过长,由于接收缓冲区的长度有限会造成数据溢出,导致系统不能正常工作。

  中断的方式是主程序在中断控制的报文接收之前使能接收中断和MCU的全局中断。当控制器已接收1个报文,该报文通过验收滤波器并放入接收缓冲区,则产生接收中断。这样MCU能够立即响应,处理这个接收到的报文,然后释放接收缓冲区。整个接收的过程可在中断服务程序中完成,不需要与主程序发生交互作用。中断方式可以避免查询方式的不足,增强系统的可靠性。所以在设计报文接收时选择中断方式进行报文的接收。图7为报文接收流程。

图7 报文接收流程

3.4 总线状态计算

  CAN分析仪主要的功能就是分析CAN总线上的各种总线参数,从而给使用者提供一个透明的窗口来观测总线的运行状况。CAN 总线协议属于较为高级的现场总线协议, 工作过程较为复杂。从工程实用的角度看,以下性能参数具有较高的参考价值:

  ◆ 总线波特率,也叫做总线位速率,表示每秒钟传送信息位的数量,只有网络中各节点的波特率相一致时才能够进行正常的报文收发。

  ◆ 总线吞吐量,总线单位时间内传送的报文总数。

  ◆ 总线出错率,总线单位时间的错误报文数。

  ◆ 总线负载,每秒钟节点发送的位数与总线波特率之比。

除此之外,为了更方便地检查总线状态,又增添了显示功能,可以显示接收报文、状态寄存器、报文总数、报文计数器、错误代码等。总线分析软件程序中所采用的算法简述如下。

  (1) 总线吞吐量的测试

  首先设定计数器i=0,定时器时间t=0,测量值数组count[5]={0}。当接收到总线上的1个报文并释放接收缓冲区时启动定时器,设定定时时间t=5 s,等待定时中断发生。计数器放在接收中断函数中,当成功接收1帧报文时,i=i+1。定时器中断发生时,将计数器的值i存入count[5]数组中。之后启动下一次定时,当数组满时,结束测试,对count数组进行排序,并去除最大和最小值。总线吞吐量V为:

(2) 总线负载的测试

  通过之前的自适应波特率程序已经检测到总线上的波特率为bote,设定计数器j=1,定时器t=0,报文位数设为c1=0,报文位数数组bit_count[20]={0}。当接收到总线上的1个报文并释放接收缓冲区时启动定时器,设定定时时间t=1 s,等待定时中断发生。报文位数、报文位数数组和计数器放在接收中断函数中。当成功接收1帧数据时,j=j+1,通过读取接收帧信息SFF可以判定该帧数据有多少位,将位数写入c1,并存入bit_count[20]数组中。定时时间到时,拷贝计数器值,结束测试。总线负载U为:

3.5 实验结果

  为了便于测试分析仪的有效性和准确性,取单节点进行实验,即总线上只有1个节点在进行报文发送。分别取波特率5 kbps、10 kbps、50 kbps、100 kbps,发送报文时间间隔100 ms、150 ms、200 ms、250 ms、400 ms、450 ms、500 ms、800 ms,每帧报文有8字节数据域。实验得到的结果如表1所列。

表1 实验结果

从实验结果可以看出,当每100 ms发送1帧报文时,检测到的总线吞吐量为10帧/s,即总线每秒传送的报文总数为10帧,与实际相符。在不同的报文发送间隔和不同的总线波特率下,所测得的总线吞吐量和总线负载与实际相吻合。

4 结论

  本文设计的CAN总线分析仪在实验室和工业现场上进行了调试,主要调试的项目包括自适应波特率、液晶显示和CAN总线通信监测等。实践证明该设计实现了对CAN2.0B标准节点(并兼容CAN2.0A节点)监测分析的功能,指标达到预期的效果。为CAN总线的工程开发应用和教学提供了一种简洁、高效的调试和监测手段。

关键字:AVR单片机  CAN总线分析仪  ATmega64L  SJA1000T 引用地址:AVR单片机的CAN总线分析仪设计

上一篇:AVR单片机和Matlab串口通信的计时器系统
下一篇:ATMEL 89C系列单片机解密及加密原理分析

推荐阅读最新更新时间:2024-03-16 13:30

AVR单片机制被动式红外线报警器实验
该报警器由红外线发射、接收、蜂鸣器和LED指示灯组成。正常情况下,绿色的LED常烁,表示监控区域正常。一旦监控区域有人闯入,绿色LED熄灭,红色的LED快速闪烁,同时蜂鸣器立即报警。 实验器材 需要准备的器材:Atmega8、红色LED一只、绿色LED一只、万能实验板一块、5V电源、电阻、TTL0038或者其他类似38KHZ的红外接收头、5V长鸣型蜂鸣器。 线路图: 实验电路图及工作原理 该电路工作原理非常简单,Atmega8的PD0端口输出经过调制的38KHZ的方波信号,然后经Q2驱动红外线发射管LED0发出红外线信号。TL0038是集红外线信号接收放大为一体的接收器。其中心接收频率为38KZH,输出为TTL电平,平时输
[单片机]
<font color='red'>AVR单片机</font>制被动式红外线报警器实验
Lcd.h头文件下载-字符型液晶LCD的AVR单片机驱动程序头文件
/***************************************************************************** 单 位:广西民族大学物理与电子工程学院07物本班 文件名称:Lcd.h 文件标识:_LCD_H_ 摘 要:字符型液晶LCD的AVR单片机驱动程序头文件 当前版本:V2.0 *****************************************************************************/ #ifndef _LCD_H_ #define _LCD_H_ #include BaiYuAvrKuD
[单片机]
比较简单的AVR单片机超声波测距的实例
于调试检查及使用在不同场合。测量范围10cm-250cm,测距小于100cm时,误差是1~2cm.,大于 100cm时,误差是3~5cm。SL-SRF-25超声波传感器,还可以指定从单片机I/O端口上输出分段距离检测信号,可以直接装在双龙SL系列机器人上,作为寻物、避障探测等应用。LED发光二极管显示所测分段距离范围信号,可以用于机器人控制。 短路插针JD1-2/-3脚功能接地;JD1-1接PC5;短路块插于2,3间,使用LED数码管显示; 短路块插于1,2间,使用LED发光二极管显示,或超声波传感器输出分段控制信号。超声波传感器输出分段控制信号对应J1引脚 : 1、J1-1 PD0 避障距离范围
[单片机]
比较简单的<font color='red'>AVR单片机</font>超声波测距的实例
AVR单片机的I/O寄存器和端口操作
1.在头文件 sfr_defs.h 中定义的宏 _BV(bit) 也常用来实现位操作。 其中,宏 _BV(bit) 的定义为: #define _BV(bit) (1 (bit)) 例子: DDRD = _BV(PD0) | _BV(PD1) //在相应器件的ioxxxxxxx.h中PD0定义为0,PD1定义为1 所以,DDRD = _BV(PD0) | _BV(PD1) 等价于DDRD=0x03. 2.ATmega128每个I/O端口都有3个寄存器来控制,分别是: 方向寄存器DDRx、数据寄存器PORTx和输入引脚寄存器PINx。 其中,方向寄存器DDRx和数据寄存器PORTx是可读可写寄存器,而PINx为只
[单片机]
AVR单片机键盘子程序(中断方式和查询方式 )
AVR 单片机 键盘子程序 键盘扫描有中断方式和查询方式 #include jn8515def.h /******以下是键盘排列图****** | | | PC0 ___1|__2|__3|__ | | | PC1 ___4|__5|__6|__ | | | PC2 ___7|__8|__9|__ | | | PC3 ___C|__0|__S|__ | | | | | | PC4 PC5 PC6 *************
[单片机]
基于AVR单片机的医用臭氧治疗仪的设计
概述 臭氧作为一种高效冷杀菌手段,目前已经被广泛应用在各行各业中。具有高效、迅速杀菌作用的臭氧在医院环境消毒、术前消毒等方面应用广泛,其治疗效果优于其它传统杀菌治疗仪。因此研制一种运行稳定、使用方便、便携的臭氧治疗仪产品,为妇科疾病患者提供一种方便有效的在家治疗方式,具有实际意义。 目前市面上的同类型产品都是采用80C51单片机为控制核心的, 虽然也能实现它所需求的功能,但执行速度慢,在长期工作环境中,特别在臭氧治疗仪的内部大功率气泵模块和臭氧发生器的干扰下,系统功耗高和抗干扰性能差,系统性能不稳定等问题便凸现出来。对此本文采用了ATMEL公司的一款AVR高档单片机,对控制系统作了改进,提高了整机的性能。 臭氧产生的原理及方法 臭
[电源管理]
基于<font color='red'>AVR单片机</font>的医用臭氧治疗仪的设计
AVR单片机测温基于DS18B20
#include iom16v.h #include macros.h #include delay.h #define uint unsigned int #define uchar unsigned char #define dula_set PORTA |=BIT(3) //数码管段选 #define dula_clr PORTA &=~BIT(3) #define wale_set PORTA |=BIT(4)//数码管位选 #define wale_clr PORTA &=~BIT(4) #define DQ_IN DDRA&=~BIT(5) #define DQ_OUT DDRA|=BIT(5) #define
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved