EDN首页   博客首页 用户登陆  |  注册

日志档案

发表于 2008/12/4 9:58:45

标签: 基于SJA1000的CAN节点设计  

基于SJA1000的CAN节点设计

        CAN总线是一种最有前途的现场总线,因其优异性能而在工业控制、汽车电子、安防等方面得到广泛应用。设计CAN-bus通讯接口是很重要的一个环节,设备的正确运行与其密切相关。如图 1.1给出了一个实际的CAN-bus通讯单元电路图,电路结构为:

MCU(P89C52)+CAN控制器(SJA1000)+隔离CAN收发器(CTM Module)。

点击看大图

       整个系统电源采用+5V电源输入,上电复位芯片(CAT810L)可保证上电时正确的启动系统。微处理器采用PHILIPS的P89C52单片机,该系列单片机是80C51微控制器的派生器件,采用先进的CMOS工艺制造,指令系统与80C51完全相同。CAN控制器采用PHILIPS的SJA1000,SJA1000是一款独立的控制器,用于汽车和一般工业环境中的控制器局域网络。它是PHILIPS半导体PCA82C200 CAN控制器(BasicCAN)的替代产品。而且,它增加了一种新的工作模式(PeliCAN),这种模式支持具有很多新特性的CAN 2.0B协议,是目前市面上用的最广的一款CAN控制器。该电路中采用了隔离CAN收发器模块,以确保在CAN总线遭受严重干扰时控制器能够正常运行。

程序清单1.3  发送报文

main()

{

       SJA_CS_Point=&CAN_SJA_BaseAdr;

       Sja1000HardwareRst();                  //SJA1000硬件复位

       SJA1000_Config_Normal();                     //SJA1000进入正常模式配置

       WriteSJAReg(REG_CAN_IER,0x02);      //使能SJA1000发送中断位

       WriteSJARegBlock(16,Send_CAN_Info_ID,5);       //扩展帧,向发送缓冲区写入5个数据

       WriteSJARegBlock(21,Send_CAN_Data,8);//扩展帧,向发送缓冲区写入8个数据

       while(1)

       {

              canstatus = ReadSJAReg(REG_CAN_SR);

              if((canstatus&0x0c)==0x0c)//判断是否可以发送

              {    

                     WriteSJAReg(REG_CAN_CMR,1);//使能发送请求,发送数据。

              }

       }

}

程序 2  自收发程序

       以上为51单片机+SJA1000+CTM隔离CAN收发器构成的CAN节点,介绍了隔离CAN收发器的优点:简化设计,稳定可靠,能够实现CAN总线上各节点在电气、电源上完全独立和隔离。软件设计部分简单介绍了基于PeliCAN函数库发送报文流程及相关例程。

 

系统分类: 工业控制   |   用户分类: 无分类   |   来源: 原创   |   【推荐给朋友】   |   【添加到收藏夹】

该用户于2008/12/5 18:22:25编辑过该文章

1

阅读(848)  |  评论(0)  |  收藏(0)  |  举报  

投一票您将和博主都有获奖机会!