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总线遭受严重干扰时控制器能够正常运行。
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函数库发送报文流程及相关例程。