您好,  [请登录] [QQ登录]  [支付宝登录[免费注册]

商品分类

分享到: 百度搜藏 搜狐微博 新浪微博 腾讯微博 QQ收藏 人人网 Facebook Twitter

基于LPC2131嵌入式体系的CAN模块计划与实现

发布日期:2011-05-15

  随着信息技能技能的飞速生长, ARM技能方案架构作为一种具备低功耗、高性能、以及小体积等特性的32位嵌入衰落处理惩罚器,得到了浩繁的知识产权授权用户,此中包括天下顶级的半导体和体系公司。如今已被遍及的用于种种电子产品,汽车、斲丧娱乐、视频、产业控制、海量存储、网络、安保和无线等范畴。被业界人士以为,基于ARM的技能方案是最具市场远景和市场上风的办理方案。
  
  现场总线CAN是为办理当代汽车中浩繁的电控模块之间的数据互换而开辟的一种串行通讯协议。由于其具有多主站依据优先级举行总线访问,采取非粉碎性总线仲裁,可完成对通讯数据的错误查验和优先级鉴别,数据长度最多为8个字节,传输时间短,受滋扰的概率低,抗滋扰本领较强,通讯速率最高可达1Mbit/s等特点,它被遍及应用在汽车,产业,斲丧类电子等范畴,而被公以为是最有前程的现场总线之一。
  
  基于ARM在嵌入式体系方面上风和CAN总线的遍及应用,如今越来越多的ARM处理惩罚器内部都自带了CAN控制器,极大的方便了开辟职员对CAN总线的开辟。但如今仍有些产品中的ARM处理惩罚器没有内置CAN控制器,为了可以或许适应节点间对数据传输所提出的及时性,可靠性的请求,同时又不变化原来的硬件布局,通过外扩CAN接口模块来实现CAN通讯成了一个较为符合的选择。
  
  本文基于ARM7TDMI-S处理惩罚器LPC2131,对内部没有集成CAN控制器的处理惩罚器,计划了较为通用的CAN接口模块的硬件电路,并对CAN总线举行了可靠性计划,并且对基于嵌入式及时操纵体系μCOS-II实现CAN通讯,举行了嵌入式软件的计划,终极在实践中对CAN总线通讯的可靠性和可行性举行了验证。
  
  LPC2131
  
  Philips LPC2131是基于ARM7TDMI-S的高性能32位RISC微控制器,它一方面具有ARM处理惩罚器的全部好处:低功耗、高性能;同时又具有较为丰富的片上资源,非常得当嵌入式产品的开辟。其特点如下:
  
  ·集成了Thumb扩展指令集。
  
  ·32KB可在体系中编程(ISP)的片内Flash和可在应用中编程(IAP)的8KB RAM,具有向量停止控制器。
  
  ·2个UART,2个I2C串行接口,2个SPI串行接口,2个定时器(7个捕获/比较通道),PWM单位可提供多达6个PWM输出,8通道10位ADC,及时时钟RTC,看门狗定时器WDT,48个通用I/O引脚。
  
  ·CPU时钟高达60MHz,具有片内晶体振荡器和片内PLL。
  
  LPC2131内部没有集成CAN控制器,而无法利用CAN总线来举行通讯。为了使得LPC2131可以或许利用CAN总线举行通讯,可以通过外部扩展来拓展其成果。
  
  硬件电路计划
  
  由于LPC2131是由3.3V供电的ARM7TDMI-S微处理惩罚器,其各个IO引脚是3.3V的TTL电平,并且可以遭受5V的电压。而独立CAN控制器SJA1000是5V供电,其各个IO口的电平是5V的TTL电平,以是二者兼容,其IO可以直接相连。
  
  LPC2131与CAN控制器接口
  
  LPC2131与CAN控制器接口如图1所示,LPC2131的P0.8~P0.15与SJA1000的AD0~AD7直接相连实现数据交互,P0.22,P0.25,P0.31,P0.23分别与SJA1000的ALE/AS,RD/E,WR,CS相连实现读写和片选,P0.30,P0.27分别与SJA1000的INT,RST相连实现停止和复位。
 
  LPC2131访问SJA1000时,可通过软件模仿SJA1000中所规定的读写时序来举行,SJA1000的模式引脚MODE通过VCC而置为高电平,使得SJA1000事变在Intel的模式。
  

LPC2131与CAN控制器接口电路

 
图1 LPC2131与CAN控制器接口电路
  
  CAN收发器与CAN总线接口
  
  CAN收发器与CAN总线的接口如图2所示,此中SJA1000的TX0,RX0分别与CAN收发器的TXD,RXD相连,为进步CAN收发器82C250与CAN总线的接口部分的抗滋扰本领,特在82C250 的CANH 和CANL 引脚串接一个共模扼流圈,以消除肯定的共模滋扰,而使得总线差分信号可以或许顺利通过。
 
  并且CANH和CANL分别通过一个磁珠与总线相连,以起到消除肯定的高频滋扰。同时CANH 和CANL与地之间并联了两个30pf 的小电容,可以起到滤除总线上的高频滋扰和肯定的防电磁辐射的本领。别的在两根CAN总线接入端与地之间分别接了一个TVS,当CAN 总线有较高的电压时通过TVS的击穿而接地,可起到肯定的过压掩护作用。82C250 的Rs引脚上接有一个斜率电阻以低落CAN总线的向外辐射。
  

CAN收发器与总线接口电路

图2 CAN收发器与总线接口电路
  
  对付其他无内置CAN控制器的可以或许遭受5V的TTL电平的处理惩罚器来说,只需变化与SJA1000的数据端口ALE/AS,RD/E,WR,CS,INT,RST相连接的引脚即可完成外扩CAN接口的硬件计划事变,不然在两者之间加一个逻辑电平转换的器件即可。
 
  软件计划
  
  对SJA1000的读写访问
  
  由于LPC2131的48个引脚满是IO,以是起首必要通过软件模仿读写SJA1000的时序,来对SJA1000举行操纵,进而完成CAN通讯成果。
  
  依据SJA1000在Intel模式下的读写时序[4],可编写LPC2131通过CAN控制器SJA1000发送数据的写函数void WriteCan(uint8 Addr,uint8 Data)和担当CAN控制器所担当的数据的读函数uint8 ReadCan(uint8 Addr),此中Addr为SJA1000相应的寄存器的地点,Data为LPC2131所发送的数据,读函数ReadCan可返回所担当的数据。
  
        CAN通讯的实现
  
        要实现一个CAN通讯必要实现3个成果模块:对SJA1000的初始化模块;数据发送模块;数据担当模块。
  
        ·对SJA1000的初始化模块
  
        在开始通讯之前,起重要在SJA1000的各个成果寄存器举行设置,包括模式寄存器,波特率,时钟分频器,停止使能寄存器,,滤波寄存器,输出控制寄存器。
  uint8 IniSJA1000(uint8 BTR0,uint8 BTR1)
  {
  IO0CLR=CS;      //片选SJA1000
  WriteCan(0,0x09);  //进入复位模式
  WriteCan(31,0xe8); //设置时钟分频器
  WriteCan(4,0xfd);  //设置停止使能寄存器
  WriteCan(16,AcceptCode1);//设置验收代码1
  WriteCan(17,AcceptCode2);//设置验收代码2
  WriteCan(18,AcceptCode3);//设置验收代码3
  WriteCan(19,AcceptCode4);//设置验收代码4
  WriteCan(20,MaskCode1); //设置验收屏蔽1
  WriteCan(21,MaskCode2); //设置验收屏蔽2
  WriteCan(22,MaskCode3); //设置验收屏蔽3
  WriteCan(23,MaskCode4); //设置验收屏蔽4          
  WriteCan(6,BTR0); //设置总线时序寄存器1
  WriteCan(7,BTR1); //设置总线时序寄存器2
  WriteCan(8,0xfa);  //设置输出控制积蓄器
  WriteCan(0,0x08);  //进入操纵模式
  OSCANMbox=OSMboxCreate(0);/创建CAN通讯邮箱
  if (OSCANMbox==NULL)
  {
  return FALSE;
  }
  return TRUE;
  }
  
       ·数据发送模块
  假设要发送的数据的ID存储在数组ID[4]中,数据存储在数组SendData[8]中,其发送模块步伐如下所示,此中参数DLC为发送的字节数,FF为帧范例,即0为数据帧,1为长途帧。
  void Tx(uint8 DLC,uint8 FF)
  {
  uint8 i;
  OS_ENTER_CRITICAL();
  If (FF==0x01)
  {
  WriteCan(16,DLC+0x80);     //数据帧
  }
  else
  {
  WriteCan(16,DLC+0xd0);    //长途帧
  }
  WriteCan(17,ID[0]);
  WriteCan(18,ID[1]);
  WriteCan(19,ID[2]);
  WriteCan(20,ID[3]);         //TX标识码
  for (i=0;i
  WriteCan(21+i,sentdata[i]); //TX数据
  WriteCan(1,0x01);//设置发送寄存器发送
  OS_EXIT_CRITICAL();
  }
 
      ·数据担当模块
       根据电路图1,采取停止担当的方法来担当数据,LPC2131的P0.30设置为外部停止3,整个数据担当模块由数据担当函数void ReceiveData(uint8 *Rt)、停止处理惩罚函数Can_Exception(void)构成。当SJA1000担当到CAN总线数据,通过吸取停止使得LPC2131孕育产生外部停止3而使其进入停止处理惩罚函数,进而对担当到的数据举行处理惩罚。此中数据担当函数和停止处理惩罚函数如下:
  void ReceiveData (void)
  {
  uint8 i, err,*Rt;
  OS_ENTER_CRITICAL();
  Rt=(uint8 *)OSMboxPend(OSCANMbox,0,&err);
  //通过邮箱担当数据
  for (i=0;i<13;i++)
  ReceiveData[i]=*Rt++;    //将担当到的数据存在全局变量中供后续处理惩罚
  OS_EXIT_CRITICAL();
  }
  void Can_Exception(void)
  {
  u 
int8 temp[13],i;
  OS_ENTER_CRITICAL();
  for (i=0;i<13;i++)
  temp[i]=ReadCan(16+i); //读取CAN数据
  OSMboxPost(OSCANMbox,(void *)temp); //将
  CAN数据以邮箱发送到担当函数
  EXTINT=0x08;  //明白ENT3
  VICVectAddr=0;       //停止返回
  OS_EXIT_CRITICAL();
  }
  
        结语
  以ARM芯片作为主控制器,CAN总线作为数据传输方法来举行通讯的嵌入式体系得到了越来越遍及的应用。同时CAN通讯的可靠性也成为影响体系性能的关键部分之一。
 
       本文以LPC2131为例,给出了一类微处理惩罚器与CAN控制器SJA1000之间的较为通用的硬件连接要领,对CAN总线举行了可靠性计划,并基于嵌入式及时操纵体系μCOS-II举行了CAN通讯软件开辟,该计划现已在工厂车间中的散布式监控体系中得到了应用,运行可靠、稳固。