您现在的位置: 范文先生网 >> 理工论文 >> 电子通信论文 >> 正文

C8051F040中CAN控制器的应用

时间:2007-1-20栏目:电子通信论文

50之间并不是直接相连,而是通过由高速光耦6N137构成的隔离电路后再与PCA82C250相连,这样就可以很好的实现总线上各节点的电气隔离。这部分增加了节点的复杂性,但它却提高了节点的稳定性和安全性。

在PCA80C250与CAN总线接口部分也采用了一些安全和抗干扰措施。PCA82C250的CANH和CANL引脚各自通过一个5Ω的电阻与CAN总线相连,电阻可起到一定的限流作用,从而保护PCA82C250免受过流的冲击。在CANH和CANL与地之间各自接一个30pF的小电容,可以起到滤除总线上的高频干扰和防电磁辐射的能力。另外,在CANH和CANL之间并联一个15V的瞬态电压抑制二极管(TVS),可以保护PCA80C250在瞬间高电压情况下而不受损坏。PCA82C250的RS脚上接有一个下拉电阻,电阻的大小可根据总线速率适当的调整,其值一般在16kΩ~140kΩ之间,图2中选用47kΩ。

C8051F040供电电源为2.7V~3.6V,其所有I/O口允许5V(极限值为5.8V)输入,但是I/O输出电平为VDD。而PCA82C250为5V系统,为了能够驱动其工作,在CANTX引脚上拉一上拉电阻,其值为4.7kΩ。

3.2 CAN通信软件实现

此下位机CAN通信部分主要完成的任务是:将现场检测到的数据传送给上位机或其它的下位机节点;同时,上位机可以对下位机的相关参考进行设置,即下位机还须接收一定量的数据。

由上可知,此节点的CAN通信主要包括系统初始化程序、发送程序、接收程序等。软件部分设计的好坏将直接决定系统能否正常工作,对于初次接触CAN总线系统的设计人员来说是一个难点,也是一个重点。在本例中,系统软件采用结构化程序设计方案,使其具有较好的模块性

和可移植性,对于不同的系统功能或不同的应用环境,可以方便地进行编程重组。

3.2.1 系统初始化初始化

初始化程序主要完成对所有的报文对象进行初始化(一般将所有值置零),对CAN控制寄存器(CAN0CN)、位定时寄存器(BITREG)进行设置,还要对发送报文对象和接收报文对象分别进行初始化。其中,位定时寄存器的设置较为复杂,这里我们使用外部晶振为8MHz,CAN通信速率为500k/s,得到BITREG的初始值为0x2301。主程序中规定对象初始化、发送和接收初始化,最后才启动CAN处理机制(对BITREG和CAN0CN初始化),下面为CAN启动程序:

void start_CAN(void){

SFPRAGE=CAN0_PAGE;/*指向CAN0页面*/

CAN0CN|=0x41; /*将CCE和Init置“1”开始初始化*/

CAN0ADR=BITREG;/*指向位定时寄存器进行配置*/

CAN0DAT=0x2301; /*位率为500k/s*/

CAN0CN|=0x06;/*允许全局中断,IE和SIE置位*/

CAN0CN &=~0x41; /*清楚CCE和INIT位,启动CAN状态机制*/

}

3.2.2 发送程序

CAN报文发送是由CAN控制器自动完成的,用户只需根据接收到的远程帧的识别符,将对应的数据转移到发送缓冲寄存器,然后将此报文对象的编码写入命令请求寄存器启动发送即可,而发送由硬件来完成。这里,我们使用定时更新发送报文对象中的数据,数据的发送有控制器自动完成,当其收到一个远程帧时,就将具有相同识别符的数据帧发送出去。其发送程序结构如下:

Void transmit_message(char MsgNum){

SFRPAGE=CAN0_PAGE;/*指向CAN0页面*/

CAN0ADR=IF1CMDMSK;/*向IF1命令屏蔽寄存器写入命令*/

CAN0DAT=0X0083;

CAN0ADR=IF1ARB2;/*指向IF1仲裁寄存器2*/

上一页  [1] [2] [3] [4] [5] 下一页

下页更精彩:1 2 3 4 下一页