CAN总线系统的设计与实现

技术分类: 工业电子  | 2008-05-14
来源:电子产品世界 | 李胜明 初光宇 吕实诚

  在现场总线概念的出现到现在的近20年时间里,已经出现了好几种现场总线技术并走向成熟。其中CAN总线已被公认为几种最有前途的现场总线之一。 CAN是一种由带有CAN控制器组成的高性能串行数据局域通信网络,是国际上应用最广泛的现场总线之一。最初,CAN被设计作为汽车环境中的微控制器通信,在车载各电子控制装置ECU之间交换信息,形成汽车电子控制网络。由于其具有通信速度快、可靠性高和性能价格比好等突出优点,它正越拉越广泛地应用于汽车、机械工业、纺织机械、农业用机械、机器人、数控机床、医疗器械、家用电器及传感器等领域。图1所示是典型的CAN总线节点的系统框图。

CAN总线节点的系统框图

  系统硬件设计

  SJA1000独立CAN控制器是PHILIPS公司PCA82C200CAN控制器的替代产品,它是在完全兼容PCA82C200的基础上,增加了一种新的工作模式PeliCAN,SJA1000完全支持具有很多新特性的CAN2.0B协议。SJA1000的工作模式通过其内部的时钟分频寄存器中的CAN模式为来选择。SJA1000可以支持多种为处理器的时序特性,如Intel模式或Motorla模式,SJA1000与微处理器的接口非常简单,微处理器以访问外部存储器的方式来访问SJA1000。

  TJA1050是控制器局域网CAN协议控制器和物理总线之间的接口,TJA1050可以为总线提供不同的发送性能,为CAN控制器提供不同的接收性能。TJA1050主要有以下特征:完全符合ISO 11898标准,最高速到达1Mb/s,输入级3.3V以及5V器件兼容,至少可以连接110个节点。本设计的微处理器为89C51负责初始化 SJA1000及通过控制SJA1000实现数据的接收和发送等通信任务,系统电路图如图2所示。

系统电路图

  CAN控制器SJA1000的数据线AD0~AD7连接到51单片机的P0口,连接到基址为0xFA00的外部存储器片选信号,当访问地址 0xFA00~0xFA31时,CPU可对SJA1000执行相应的读写操作。SJA1000的、、分别与51对应的引脚相连,接51的使51可以通过中断方式访问SJA1000。

  系统软件设计

  本设计的系统由4个节点组成,一个节点由上位机通过并口转CAN总线的数据收发器构成,另外3个节点由图2所示的单片机CAN总线收发系统构成。单片机系统每秒发送一帧(8个字节)数据。连接上位机的CAN总线收发器有相应的上位机测试软件支持,本文主要介绍单片机CAN总线收发器的程序设计。图3是下位机软件的流程图。

下位机软件的流程图

  系统设计的部分代码如下:

main()
  {
Sja_1000_Init();     //初始化SJA1000
 Init_Cpu();      //初始化CPU
 Init_T0();       //初始化定时器
 flag_init=0x00;
 while(1)
 {
  if(rcv_flag)    //rcv_flag为接受标志位,有接收则单片机进行处理
  {
   rcv_flag=0; BCAN_DATA_RECEIVE(rcv_data);
 BCAN_CMD_PRG(0X04);
   disp_rec();
  }
if(flag_sec)    //定时中断标志为,定时时间到则发送数据帧
 {  flag_sec=0;  send_data[0]=0xaa;  send_data[1]=0x08;  send_data[2]=DA1;
 send_data[3]=DA2;
  send_data[4]=DA3;
  send_data[5]=DA4;
  send_data[6]=DA5;
  send_data[7]=DA6;
  send_data[8]=DA7;
  send_data[9]=DA8; BCAN_DATA_WRITE(send_data);  BCAN_CMD_PRG(0X01);
  }
  if(err_flag)
  {
   err_flag=0;
   disp_err();
  Sja_1000_Init();
  }
  display(a);  //循环显示接受数据

1】【2】【3
加载中

对文章的评论

剩余字数:  

浏览该文章的用户还看过...

  • 文 章

  • 论 坛

  • 博 客

  • 小 组

设计资源与分销