《电子技术应用》
您所在的位置:首页 > 嵌入式技术 > 设计应用 > 基于CAN总线智能节点的设计与实现
基于CAN总线智能节点的设计与实现
来源:微型机与应用2012年第2期
纪文志1,陈国忠1,唐加山2
(1.南京邮电大学 通信与信息工程学院,江苏 南京210003; 2.南京邮电大学 理学院,江苏 南
摘要: 根据CAN总线技术特点,利用ARM STM32F107芯片和通用CAN收发器CTM8251T,给出了基于CAN总线智能节点的硬件和软件设计方法,并实现了智能节点之间的通信。实际应用表明,该智能节点工作稳定可靠,具有较强的抗干扰能力。
Abstract:
Key words :

摘  要: 根据CAN总线技术特点,利用ARM STM32F107芯片和通用CAN收发器CTM8251T,给出了基于CAN总线智能节点的硬件和软件设计方法,并实现了智能节点之间的通信。实际应用表明,该智能节点工作稳定可靠,具有较强的抗干扰能力。
关键词: CAN总线;CAN收发器;智能节点

1 CAN总线技术特点
    CAN(Controller Area Network)控制器局域网络是在20世纪80年代初由德国Bosch公司为解决现代汽车中众多的测控仪器之间的数据交换而设计的一种有效支持分布式实时控制的串行数据通信网络[1]。1993年11月ISO正式颁布了CAN国际标准(ISO 11898),它以半双工方式工作,采用基于数据的传输机制,通信介质可以是双绞线、同轴电缆, 其通信速率可达1 Mb/s,最大传输距离可达10 km(速率在5 kb/s以下)。CAN总线的主要特点[2]为:
    (1)多主技术。网络上任一节点均可在任意时刻主动地且不分主从地向网络上其他节点发送信息,同时将节点信息分不同的优先级,可满足不同的实时需求。
    (2)可靠性高。节点在错误严重的情况下,具有自动关闭输出功能,切断自身与总线的联系,使总线上其他节点的操作不受影响。
    (3)完善的错误监测机制。采用短帧结构,传输时延短,受干扰概率低,每帧信息都进行16 bit的CRC 校验及其他校验措施,使数据出错率极低。
    这些优良的特性使CAN总线在汽车工业、机械工业、医疗器械及传感器等领域得以广泛应用。CAN总线被公认为极具发展前途的现场总线之一。
2 CAN总线智能节点设计
2.1 CAN总线智能节点硬件电路设计

    本文中的CAN总线智能节点通信模块采用ARM STM32F107芯片作为CAN节点的微处理器,在CAN总线通信接口中,采用一款带隔离的通用CAN收发器芯片CTM8251T。本着智能节点结构简单、易于扩展以及能稳定可靠地进行通信的设计目标,设计了CAN总线智能节点硬件电路原理图,如图1所示。从图中可以看出,电路主要由两部分构成:ARM微控制器STM32F107和通用CAN收发器CTM8251T[3]。

    STM32F107芯片是意法半导体公司推出的一款STM32互连型系列、内核为ARM Cortex-M3的32位高性能微控制器。通用CAN收发器CTM8251T是用于CAN控制器和CAN总线之间的接口芯片,波特率是自适应的,其内部集成了所有通信必需的CAN隔离及CAN收发器件。此外,该芯片还具有自动热关断保护、未上电节点或者处于欠压状态的节点不会影响CAN总线、高压瞬态保护等特点。
2.2 CAN总线智能节点通信软件设计
    CAN总线智能节点软件设计的核心部分包括CAN智能节点初始化、CAN报文发送和CAN报文接收。根据STM32F107内部的PeliCAN的具体结构,需要对STM32F107芯片进行正确的初始化、报文发送和接收等操作[4]。
    (1)CAN智能节点初始化
    下面分别给出波特率和报文接收滤波器的设置方法。
    ①波特率的设置。波特率是CAN总线传输的一个重要参数,在应用中选择的波特率为250 kb/s。位时间特性逻辑通过采样来监视串行数据通信的CAN总线,并且通过与帧起始位的边沿进行同步,即通过与后面的边沿进行重新同步来调整其采样点。简单地说就是把名义上的每位时间分为三段,包括同步段(SYN_SEG)、时间段1(BS1)、时间段2(BS2)。位时间特性原理结构如图2所示。

 

 

    由位时间特性原理结构可知,CAN网波特率BaudRate=1/NominalBitTime,其中名义上的位时间NominalBitTime=1×tq+tBS1+tBS2,时间段1:tBS1=tq×(TS1[3:0]+1),时间段2:tBS2=tq×(TS2[2:0]+1),时间片tq=(BRP[9:0]+1)×tPCLK,tPCLK=1/36 MHz为APB的时钟周期,时间段1(TS1[3:0])可通过位时间特性寄存器CAN_BTR[19:16]位来设置,时间段2(TS2[2:0])可通过位时间特性寄存器CAN_BTR[22:20]位来设置,波特率分频器(BRP[9:0])可通过CAN_BTR[9:0]位来设置。
    由于选择的通信波特率为250 kb/s,为了计算方便,可以按如下方式进行设置:TS1[3:0]=0x08,TS2[2:0]=0x05,BRP[9:0]=0x09,则时间片tq=0.25μs,名义上的位时间NominalBitTime=16tq=4 μs,BaudRate=1/NominalBitTime=250 kb/s。
    ②接收滤波器的设置。STM32F107芯片共有14组过滤器,每组过滤器的位宽都可以独立配置,以满足应用程序的不同需求。此外过滤器可配置为屏蔽位模式和标识符列表模式,在屏蔽位模式下,标识符寄存器和屏蔽寄存器一起,指定报文标识符的任何一位,应该按照“必须匹配”(相应屏蔽位置为1)或“不用关心”(相应屏蔽位置为0)处理。本文采取的是屏蔽位模式,标识符寄存器中对应目的地址的1个字节位设置为本节点地址,屏蔽寄存器中对应目的地址的位全部置为1,剩余位置为0,则每个CAN节点都会收到目的地址为本节点地址的CAN报文,丢弃目的地址不是本节点地址的CAN报文。
    (2)CAN智能节点的报文发送过程
    STM32F107芯片提供一个专用的SRAM存储器用于CAN报文的发送和接收,其中有3个邮箱供软件来发送CAN报文,发送调度器根据优先级决定优先发送报文的邮箱。发送子程序主要负责CAN智能节点报文的发送。此发送子程序采用查询发送方式,发送时只需要将待发送的数据按照表1所示的帧格式(扩展帧)组合成一帧CAN报文,送入CAN报文发送缓冲区,然后判断发送缓冲区是否有空邮箱。若有空邮箱,则发送;否则等待直到有空邮箱然后发送。

    (3)CAN智能节点的报文接收过程
    STM32F107芯片提供2个接收缓冲区FIFO,每个FIFO都可以存放3个完整的CAN报文,它们完全由硬件来管理。接收子程序主要负责CAN智能节点报文的接收及其他情况处理。此接收子程序采用中断接收方式和设置使用接收缓冲区FIFO_0存放接收到的CAN报文,在接收到一个CAN报文后,就可以通过访问FIFO_0来读取它,一旦报文被处理,接收缓冲区FIFO_0就会被释放,以便为后面收到的报文留出足够的存储空间。
    (4)程序流程图
    CAN智能节点初始化流程如图3所示;CAN智能节点的报文发送流程如图4所示;CAN智能节点的报文接收流程如图5所示。

3 CAN总线智能节点间通信的实现
   根据本文第二部分设计的CAN智能节点很容易实现节点之间的通信。为方便起见,本文构建了一个简单的CAN网络,包括两个CAN智能节点Node1和Node2、两个120 ?赘的端接电阻、两根20 m的屏蔽双绞线、一块CAN适配器卡和一台PC机。CAN总线智能节点间通信的原理框图如图6所示。

    假设节点Node1为管理节点,控制数据优先级设置为2,节点地址置为0x66;节点Node2为从设备节点,查询应答优先级设置为3,节点地址为0x88;若数据长度小于或等于8 B,则不需要分段,其分段传输标志置为0,采用无组播发送,其组播码置为0000B,应答位Ack均置为0。依据表1中规定的CAN报文标识符和数据帧格式定义,定义了如下4种CAN报文: CAN网工作状态查询命令、CAN网工作状态应答命令、设备复位命令和设备复位报告命令。
      (1)CAN网工作状态查询命令帧标识符定义为0x408866a0,其报文数据部分设置如表2所示。

      (2)CAN网工作状态应答命令帧标识符定义为0x60668810,其报文数据部分设置如表3所示。
      (3)设备复位命令帧标识符定义为0x40-886600,其报文数据部分设置如表4所示。

      (4)设备复位报告命令帧标识符定义为0x446688f0,其报文数据部分设置如表5所示。
    现在让管理节点Node1与从设备节点Node2进行通信,用上位机软件来监视节点Node1与节点Node2通信过程中发送的CAN报文数据,实验结果如图7所示。

    分析图7的实验结果:4个在第0路CAN上传输的CAN报文的帧格式均为数据帧,帧类型为扩展帧;由第0条CAN报文帧标识符0x408866a0可知,报文优先级为2,目的地址为0x88,源地址为0x66,说明该报文是管理节点Node1发向从设备节点Node2的CAN网工作状态查询命令;由第1条CAN报文帧标识符0x60668810可知,报文优先级为3,目的地址为0x66,源地址为0x88,说明该报文是从设备节点Node2发向管理节点Node1的对CAN网工作状态查询命令的应答命令,此外由DATA4=0x00,DATA5=0x00可知,CAN错误状态寄存器接收计数器和发送计数器值均为0,说明CAN网是稳定可靠的;由第2条CAN报文帧标识符0x40886600可知,报文优先级为2,目的地址为0x88,源地址为0x66,说明该报文是管理节点Node1发向从设备节点Node2的设备复位命令;由第3条CAN报文帧标识符0x406688f0可知,报文优先级为2,目的地址为0x66,源地址为0x88,说明该报文是从设备节点Node2发向管理节点Node1的设备复位报告命令,即对设备复位命令的回应报文。
    本文设计的CAN总线智能节点已应用于车载控制系统中。应用结果表明,利用ARM STM32F107芯片和通用CAN收发器CTM8251T芯片设计的CAN总线智能节点具有结构简单、节点易于扩展、系统运行稳定可靠、实时性好、抗干扰能力强等特点,具有良好的应用前景。
参考文献
[1] 吴文珍,韩玉祥,司光宇,等.基于CAN总线智能检测仪的设计[J].大庆石油学院学报,2009,29(5):85-87.
[2] 饶运涛,邹继军,王进宏,等.现场总线CAN原理与应用技术[M].北京:北京航空航天大学出版社,2010.
[3] 王月娇,朱家驹.CAN总线智能测控节点的设计[J].湖北大学学报,2005,27(2):133-136.
[4] 徐爱钧.IAR EMARM V5嵌入式系统应用编程与开发[M]. 北京:北京航空航天大学出版社,2009.

此内容为AET网站原创,未经授权禁止转载。