原创 基于32位ARM7的CAN节点设计

2008-12-6 10:45 3611 2 2 分类: 模拟

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


      LPC2119(内部集成CAN控制器的32位ARM7芯片)+隔离CAN收发器(CTM Module)。


点击看大图


<?xml:namespace prefix = v />


图 1 CAN-bus通讯单元原理图


LPC2119/2129/2194处理器包含2个或4个CAN模块,可同时支持多个CAN总线的操作,使器件可用作网关、开关、工业或汽车应用中多个CAN总线的路由器。PHILPIS公司的LPC2119/2192/2194 ARM7TDMI-S处理器区别于LPC2214/2124处理器的最大特点就是内建CAN控制器。如图 1.1所示,给出了一个基于LPC2119的CAN节点电路,对于LPC2119芯片,最小系统需要两组电源、复位电路、晶振电路,P0.14引脚接一个上拉电阻(一个连接到正电源的电阻),以禁止ISP功能。该电路中采用了隔离CAN收发器模块,以确保在CAN总线遭受严重干扰时控制器能够正常运行.


CAN控制器发送示例程序<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


#include "config.h"    


#include "IncludeCan.H"


INT32U statue;    


int main()


{    


       InitCAN (CAN1);


       ConfigAFReg();


       CANRcvCyBufApp[CAN1].RcvBuf[0].CANRcvFS.Bits.DLC = 8;//数据长度


       CANRcvCyBufApp[CAN1].RcvBuf[0].CANRcvFS.Bits.RTR = 0;//远程帧,数据帧标志(1为远程帧


       CANRcvCyBufApp[CAN1].RcvBuf[0].CANRcvFS.Bits.FF = 0;  //标准帧,扩展帧标志(1为扩展帧


       CANRcvCyBufApp[CAN1].RcvBuf[0].RxCANID.Bits.ID = 0;//ID


       CANRcvCyBufApp[CAN1].RcvBuf[0].RDA.Word = 0x44332211;//前四字节数据


       CANRcvCyBufApp[CAN1].RcvBuf[0].RDB.Word = 0x88776655;//后四字节数据


//结束初始化


       while (1)


       {


              statue = CANSendData(CAN1,SIG,&CANRcvCyBufApp[CAN1].RcvBuf[0]);


              if (statue == 0)


                     CANRcvCyBufApp[CAN1].RcvBuf[0].RxCANID.Bits.ID++;


       }


}


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


 

PARTNER CONTENT

文章评论0条评论)

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