原创 基于SJA1000的CAN节点设计

2008-12-5 18:22 3454 5 5 分类: 工业电子

        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  发送报文<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


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函数库发送报文流程及相关例程。


 

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
5
关闭 站长推荐上一条 /3 下一条