这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 工业控制与自动化 » 基于SJA1000的CAN节点设计

共1条 1/1 1 跳转至

基于SJA1000的CAN节点设计

专家
2009-03-25 14:32:31     打赏
基于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函数库发送报文流程及相关例程。




关键词: 基于     SJA1000     节点     设计    

共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]