国防信息化 加固计算机 仿真技术 通信指挥 计量测试 传感器 光电技术 电池电源 军用汽车 推荐展会
制造信息化 嵌入式技术 电子对抗 信息安全 测控技术 雷达导航 实验设备 电子元件 数控机床 推荐媒体
推荐厂商 推荐产品 商务中心 人才中心 技术中心 新闻中心 应用案例 环球军事 军工论坛 国防黄页
技术信息】 ┆专业论文研讨培训方案应用新品速递资料下载
信息搜索 首页 -> 技术信息 -> 专业论文 -> 正文
请输入查询的字符串:
基于ARM的CAN总线智能节点的设计
发布时间:2006-7-11 来源:21ic

        摘要:CAN总线是一种应用广泛的实时性现场总线,提出了基于具有ARM7TDMI内核的32位微控制器的CAN总线智能节点设计方案。详细介绍了ARM控制(LPC2294)的特点、智能节点的结构以及系统软件设计,同时结合现场实际使用给出了硬件抗干扰措施。
    关键词:CAN总线 ARM 嵌入式控制器
      CAN(Controller Area Network)即控制器局域网,CAN总线是国际上应用最广泛的现场总线之一。它最早是由德国Bosch公司推出的,CAN通信协议是一种用于汽车内部测量与执行部件之间的数据通信协议。
      作为一种技术先进、可靠性高、功能完善、成本合理的远程网络通讯控制方式,CAN总线已被广泛应用于各个自动化控制系统中。例如,在汽车电子、自动控制、智能大厦、电子系统、安防监控等各领域中,CAN总线具有不可比拟的优越性。本设计给出CAN总线节点方案。它采用内置多路CAN总线控制器PLC2294作为主控制器,使得该节点体积小、功耗低、抗干扰性好,因而特别适用于汽车、工业控制以及医疗系统和容错维护总线中。
1 硬件设计
1.1 LPC2294的特点
      ARM7系列具有ARM7TDMI内核的32位嵌入式微处理器是目前应用很广的嵌入式RISC处理器。该系列芯片体积小、功耗低、成本低,高性能与灵活性相结合,有较多的寄存器,提供了扩充的增强的固定长的16/32位双指令集。用16位的Thumb指令可以节省高达35%的空间。另外它还实行注水线作业,提供嵌入式ICE2RT逻辑,支持片上断点和调试点支持,具有先进的软件开发和调试环境。



    本设计选用的LPC2294是PHILIPS公司新推出的一款功能强大的超低功耗的具有ARM7TDMI内核的32位微控制器。144脚封装、两个32位定时器、八路10位ADC、四路CAN通道和PWM通道以及多达九个的外部中断,内部嵌入256K字节高速Flash存储器和16K字节静态RAM,包含76(使用了外部存储器)~112(单片)个GPIO口。如此丰富的片上资源完全可以满足一般的工业控制的需要,同时还可以减少系统硬件设计的复杂度。另外,LPC2294支持JTAG实时仿真和跟踪、128位宽度的存储器接口和独特的加速结构,使32位代码能够在高达60MHz的操作频率下运行。
      LPC2294内部集成有四路CAN控制器:符合CAN规范CAN2.0B,ISO 11989-1标准:总线数据波特度均可达1Mbps;可访问32位的寄存器和RAM;全局验收过滤器可识别几乎所有总线的11位和29位Rx标识符;验收过滤器为选择的标准标识符提供了FullCAN-style自动接收功能。
      作为本设计的核心部件,LPC2294不仅担起主控制器的作用,同时还作为CAN网络的节点控制器,与网络中的其它节点实现数据传输与交换。
1.2 CAN节点硬件电路组成
      CAN节点硬件电路如图1所示,由ARM微控制器LPC2294、CAN总线收发器TJA1050T、高速光耦6N137和电源隔离模块B0505S等组成。
      主控芯片LPC2294的晶振频率范围为1~30MHz。本设计选晶振频率为20MHz,通过设置内部的VPB分频器可以提高CPU时钟频率。内部256K字节的高速Flash存储器用于代码和数据的存储。对于FLASH存储器,可通过内置的串行JTAG接口进行在系统编程(ISP),或进行在应用编程(IAP)。为了便于调试和系统升级,在设计中可以预留这些接口电路。
      LPC2294采用双电源供电。CPU的供电电压范围为1.65~1.95V(1.8V±8.3%),I/O的供电电压范围为3.0~3.6V(3.3V±10%)。
      收发器TJA1050T是CAN协议控制器和物理总线之间的接口,它与“ISO 11898”标准完全兼容。CANH和CANL理想配合,可使电磁辐射减到更低。除此之外,TJA1050T不上电时,总线呈现无源特性,这使得TJA1050T在性能上大大优于以前的CAN总线收发器。TJA1050T有两种工作模式:高速模式和静音模式(它们由引脚“S”来控制)。在高速模式中,总线输出信号有固定的斜率,并且以尽量快的速度切换。高速模式适用于最大位速度和最大总线长度的情况,而且此时其收发器循环延迟最小。静音模式时发送器是禁能的。它不管TxD的输入信号。静音模式可以防止CAN控制器不受控制时对网络通讯造成堵塞。
1.3 硬件的抗干扰设计
      在本设计所应用的场合中,产生电磁信号的设备较多,包括超短波设备、音频设备、电源等,因此抗干扰设备显示尤其重要。主要采取了以下措施:
      (1) 为了进一步提高CAN总线节点的抗干扰能力,保证各节点之间在电气上是完全隔离和独立的,LPC2294的TX0和RX0分别通过高速光耦6N137与TJA1050T的TXD的RXD相连。不过,应该特别说明的是,光耦部分电路所采用的两个电源必须完全隔离,否则采用光耦也就失去了意义。电源的完全隔离采用小功率电源隔离模块B0505S。电路虽复杂一些,但是却提高了节点的稳定性和安全性。
      (2) 在CAN总线的两端加有两个120Ω的电阻,这两个电阻对于总线阻抗的匹配起着相当重要的作用。去掉它们会使数据通信的抗干扰性及可靠性大大降低,甚至无法通信。
      (3) CANH和CANL与地之间并联了两个30pF的小电容,可以滤除总线上的高频干扰并且具有一定的防电磁辐射的能力;在两根CAN总线接入端之间并入了5.6V的TVS管,当CAN总线窜入电压干扰时可通过TVS管的短路起到一定的过压保护作用。
      (4) 为了减小现场对节点的干扰,有用屏蔽双绞线,且根据实际使用经验,屏蔽电缆的屏蔽层无需接地。
2 软件设计
      软件调试环境采用ARM公司的ARM核处理器集成开发工具ADSv1.2。ADSv1.2集成了汇编、C、C++编译器和调试器,编译效率高,提供了功能强大的系统库,支持软件调式、JTAG仿真调试及硬件调试。本设计采用的是JTAG仿真调试。
      对于一般的32位ARM应用系统,在运行主程序前必须初始化运行环境,即为ARM芯片编写启动代码。该启动代码包括异常向量表、堆栈初始化、存储系统初始化和目标板初始化等,一般用汇编语言编写。对于该设计来说,关键的是编写CAN驱动程序。主程序只需通过调用驱动程序提供的接口来实现数据的接收和发送,驱动程序包括四部分内容:CAN控制器的初始化、接收数据、发送数据和总线异常处理。图2为主程序流程图。
2.1 CAN控制器初始化
      初始化CAN控制器的操作包括:硬件使能、软件复位、设备报警界限、设备总线波特率、设备中断工作方式、设备验收滤波器工作方式、设备工作模式并启动CAN等。初始化程序如下:
HwEnCAN(CanEum); //硬件使能,CanNum=0~3,指四路CAN控制器
SoftRstCAN(CanNum); //软件复位寄存器
CANEWL(CanNum).Bits.EWL_BIT=USE_EWL_LAN[CanNum]; //设置错误警告界限
CANBTR(CanNum).Word=USE_BTR_CAN[CanNum]; //初始化波特率
VICDefVectAddr=(UINT32)CANIntPrg; //初始化中断为非向量中断
VICIntEnable 1=(1<<19)|(1<<(20+CanNum))|(1<<26+CanNum));
CANIER(CanNum).Word=USE_INT_CAL[CanNum];
CANAFMR.Bits.Accbp_bit=1; //配置验收滤波器(旁路状态,即屏蔽验收滤波器)
CANMOD(CanNum).Bits.TPM_BIT=USE_TPM_CAN[CanNum]; //初始化工作模式
CANMOD(CanNum).Bits.LOM_BIT=USE_MOD_CAN[CanNum];
SoftEnCAN(CanNum); //启动CAN
      LPC2294片内外设与引脚的连接由引脚连接模块控制。CAN控制器的硬件使能就是通过软件设备GPIO寄存器来控制多路开关的,将特定的引脚与CAN控制器连接起来。在设备各CAN寄存器之前必须进行软件复位,这是因为CAN的某些寄存器必须在软复位状态下读写。
      值得注意的是,LPC2294为所有的CAN控制器提供了全局接收标识符查询功能。2KRAM可容纳1024个标准标识符或者512个扩展标识符或两种类型混合的标识符。通过软件处理,可在该RAM中设置存放1~5个标识符表格。与独立CAN控制器SJA1000相比,它能更容易地任意复杂的ID进行筛选过滤,满足复杂的ID的接收过滤要求。这无疑大大减少了系统软件设计复杂度及运行时的负担。设置验收滤波器工作方式,必须首选创建LUT表格,指定每个表格的起始地址,并用实际的ID地址初始化该表格。最后设定验收过滤器模式寄存器。若该节点不主动发送数据,可选择在总线不活动时进入睡眠模式。
2.2 数据发送
      将待发送的数据打包成符合CAN协议的帧格式后,便可写入发送缓站区,并自动发送。图3为发送子程序流程图。
      在写发送缓冲区前必须查询其状态。LPC2294中的每个CAN控制器有三个发送缓冲区,它们的状态可通过查询CANSR得知。只有当其中有空间的发送缓冲区即才将数据写入。在发送大量数据时,这一步显得尤其重要,否则发送可靠性将不能保证。启动发送成功后,只能通过查询CANGSR的TCS位或配置发送成功中断来判断数据是否发送成功。
2.3 数据接收
      接收数据可采用查询方式或中断方式。在某一段时间内,CAN总线并不是总是在活动,为了提高效率,可采用中断方式。在初始化程序中必须使能接收中断。在中断服务子程序中,读取CANICR,判断是否有接收中断标志,有则读取接收缓冲区数据。为了防止接收缓冲区数据溢出,可开辟一个循环接收数据队列来暂时存储数据,主程序则通过查询该队列来获得总线数据。
2.4 异常情况处理
      在线总线发生严重故障的情况下,CAN节点有可能脱离总线,此时以下寄存器位被置位:CANSR的BS位、CANIR的BEI位和EI位(如果使能)和CANMOD的RM位。RM将许多CAN控制器功能复位和禁止。软件下一步必须置零RM位。发送错误计数器将递减计数总线释放条件(11个连续的隐性位)的第128个事情。软件可通过读取Tx错误计数器对计数器递减计数的情况进行监测。
      在应用中,若前面传输到CAN控制器的数据未被读出,而接收缓冲区又没有及时释放,就有可能引起后面信息的丢失。这时必须通过写命令寄存器来清除CANSR的数据溢出位。这两种异常可通过异常中断来处理,只要在中断子程序中加入处理代码即可。其它的总线异常处理可根据使用情况决定是否在软件中处理。
      总之,软件的编写和规划相当重要。ARM7TDMI指令集是基于RISC的,具有32位ARM/16位Thumb双指SR相互调用。因此,为了提高程序代码密度,某些对性能要求不高的代码可用Thumb指令集编写。
      由于该方案体积小、功耗低、抗干扰性好,现已应用于电磁环境复杂的某车载通信设备中,满足了该项目对CAN网络点节的要求。
【评论】发送给好友打印】【关闭
  相关链接
 
中国军工网 版权所有 京ICP备06011713号
客服QQ:203428 MSN :info@chinajungong.com
客服电话:010-51656356 电子邮箱:jungong@126.com