C8051F040中CAN控制器的应用
[09-12 18:13:39] 来源:http://www.88dzw.com 单片机学习 阅读:8391次
文章摘要:如图2所示。 为了进一步提高系统的抗干扰能力,在CAN控制器引脚CANTX、CANRX和收发器PCA82C250之间并不是直接相连,而是通过由高速光耦6N137构成的隔离电路后再与PCA82C250相连,这样就可以很好的实现总线上各节点的电气隔离。这部分增加了节点的复杂性,但它却提高了节点的稳定性和安全性。 在PCA80C250与CAN总线接口部分也采用了一些安全和抗干扰措施。PCA82C250的CANH和CANL引脚各自通过一个5Ω的电阻与CAN总线相连,电阻可起到一定的限流作用,从而保护PCA82C250免受过流的冲击。在CANH和CANL与地之间各自接一个30pF的小电容,可以起到滤除总
C8051F040中CAN控制器的应用,标签:单片机开发,单片机原理,单片机教程,http://www.88dzw.com如图2所示。 为了进一步提高系统的抗干扰能力,在CAN控制器引脚CANTX、CANRX和收发器PCA82C250之间并不是直接相连,而是通过由高速光耦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*/CAN0DATH|=0x80;CAN0ADR=IF1DATA1;/*指向数据场的第一个字节*/for(i=0;i<4;i++){CAN0DAT=can_temp[i];/*将4字节数据写入发送缓冲器*/}CAN0ADR=IF1CMDRQST;CAN0DATL=MsgNum;/*将报文对象编号写入,则数据发送到对应的报文对象中*/}3.2.3 接收程序 CAN报文的接收与发送一样,是由CAN控制器自动完成的,接收程序只需从接收缓存器中读取接收的数据,再进行相应的处理即可。其基本方法与发送程序一致,只是接收程序采用中断方式。在此应用中,接收程序主要接收上位机对下位机的参数设置数据,只有当修改时才需要接收数据,所以采用中断方式处理比较合适。接收程序结构如下:void receive_data(void){SFRPAGE=CAN0_PAGE;/*指向CAN0页面*/CAN0ADR=IF1CMDMSK;/*向IF1命令屏蔽寄存器写入命令*/CAN0DAT=0X0083;CAN0ADR=IF1ARB2;/*指向IF1仲裁寄存器2*/CAN0DATH|=0x80;CAN0ADR=IF1DATA1;/*指向数据场的第一个字节*/for(i=0;i<4;i++){CAN0DAT=can_temp[i];/*将4字节数据写入发送缓冲器*/}CAN0ADR=IF1CMDRQST;CAN0DATL=MsgNum;/*将报文对象编号写入,则数据发送到对应的报文对象中*/}3.2.3 接收程序 CAN报文的接收与发送一样,是由CAN控制器自动完成的,接收程序只需从接收缓存器中读取接收的数据,再进行相应的处理即可。其基本方法与发送程序一致,只是接收程序采用中断方式。在此应用中,接收程序主要接收上位机对下位机的参数设置数据,只有当修改时才需要接收数据,所以采用中断方式处理比较合适。接收程序结构如下:Void receive_data(void){SFPRAGE=CAN0_PAGE;/*指向CAN0页面*/CAN0ADR=IF2CMDMSK;/*向IF2命令屏蔽寄存器写命令*/CAN0DAT=0x003F;CAN0ADR=IF2CMDRQST;/*将报文对象编号写入命令请求寄存器,对应地接收*/CAN0DATL=MsgNum;/*得到数据就从报文RAM中移到数据缓冲器中*/CAN0ADR=IF2DATA1;/*指向数据场的第一个字节*/for(i=0;i<4;i++){ /*读取4个字节数据*/CAN_RX[i]=CAN0DAT;}结语 本文是笔者在实际应用中得到的一点应用经验,期望对使用C8051F040中CAN控制器以及研究CAN总线的同行提供一些借鉴和帮助。文中的CAN控制器物理层电路完全能够使用,而且抗干扰能力较强。CAN总线以其稳定的特性、低廉的价格将会被更多用户所使用,而集成于微控制器内部的CAN控制器更是在设计过程中的首选。 有关CAN通信部分源程序见网站www.88dzw.com。
Tag:单片机学习,单片机开发,单片机原理,单片机教程,单片机学习
《C8051F040中CAN控制器的应用》相关文章
- › 芯片引脚及主要特性MC68HC805C4 8位微控制器(A/D)
- › 芯片引脚及主要特性MC68HC805B6 8位微控制器(A/D)
- › 74系列数字电路74HC805六个2输入或非门驱动器
- › C8051F EC2 JTAG仿真器电路图
- › C8051F340的USBXpress开发包USB通信设计
- › Silicon Laboratories推出C8051F336系列高整合8位微控制器
- 在百度中搜索相关文章:C8051F040中CAN控制器的应用
- 在谷歌中搜索相关文章:C8051F040中CAN控制器的应用
- 在soso中搜索相关文章:C8051F040中CAN控制器的应用
- 在搜狗中搜索相关文章:C8051F040中CAN控制器的应用
分类导航
最新更新