基于C8051F500的井下CAN总线接口设计

基于C8051F500的井下CAN总线接口设计
张友明
【摘 要】CAN总线具有通讯速率高、稳定可靠、技术成熟的特点,是工程测井技术模块化应用的关键技术之一。文章介绍了CAN总线及C8051FS00集成单片机的特点,给出了基于该种单片机实现的CAN总线接口硬件结构和软件设计方法,并通过实验证明了该设计可以满足应用要求。
【期刊名称】《石油管材与仪器》
【年(卷),期】2015(001)001
【总页数】4页(P33-35,54)
【关键词】CAN总线;C8051F7500;接口硬件;接口软件;模块化工程测井应用
sero-0151【作 者】张友明
【作者单位】大庆油田测试技术服务分公司监测技术研发中心,黑龙江大庆163453
【正文语种】中 文过氧化氢含量的测定
【中图分类】TN919
在模块化应用设计中,高速井下总线是重要支撑技术[1]。CAN总线是由德国 BOSCH公司首先提出的用于汽车实时控制的串行通信总线技术,经多年发展,目前已是国际上应用最广泛的现场总线之一[2]。CAN总线采用了多种先进技术,总线采用差分结构,抗干扰能力强,物理介质为廉价的双绞线,总线构建十分简单。其通讯速率高达1 Mbps,可有效管理64个以上节点。由于CAN是基于报文的编码,而不是对CAN节点进行编码,增添或删除CAN节点不会对整个系统造成影响,特别适合模块化应用中短接按需挂接。基于上述原因,选择了CAN总线作为模块化应用的井下总线。
1.1 应用模型
如图1所示,在模块化应用中,不同短接挂接在同一CAN井下总线上,成为总线上一个节点,通过各自的CAN总线接口,一方面接收地面系统的下发指令,另一方面,解码指令,并按照指令要求,通过井下总线上传各短接模块的数据
由于CAN总线接口具有控制和指令判断等功能,是一智能接口,因此,多用MCU(或DSP)加CAN控制模块、CAN驱动器来构建接口硬件,如图2所示。若采用独立的CAN控制模块,如常见的CAN控制器SJA1000[3],来构建CAN接口,需占用MCU的I/O口及较多硬件和程序资源,单元之间连线也多,结构复杂,应用不便。由于CAN总线的广泛应用,众多厂家推出了各种内部集成了CAN控制器的MCU,本应用选择的C8051F500便是其中综合性能较高的一种。CAN驱动器,决定着CAN总线节点数目,随着技术的发展,其性能不断提高,功能不断完善。不同产品在驱动能力、抗干扰能力、防静电能力、总线隔离能力方面各有特点,可根据需要来选择[4]。铝合金橱柜柜体
由于C8051F500和驱动器体积小,连线简单,基于模块化设计思想,可将它们与其它少量辅助元件一起设计成CAN接口模块,如图3所示。它含有CAN通讯所需各种硬件,扩展了众多I/O口,方便用于短接功能模块的控制,可作为一个器件使用,适于应用在不同短接的CAN接口设计中。
1.2 C8051F500特点
C8051F500是Silicon Labs 推出的完全集成的混合信号片上系统型微处理器,它采用兼容
MCS-51指令集的高速8051μc内核,但指令方式为高效的流水线模式,执行速度是标准8051的10倍以上。除具备标准8051功能外,片上还集成了12位高速A/D、比较器等模拟外设,UART、CAN、SMBUS、SPI、PCA等数字外设,功能强大。C8051F500采用48-Pin QFP封装,体积小。具有40个I/O口,控制能力强。拥有64K片上程序存储空间和4K内部RAM,适合复杂编程。该芯片为汽车级芯片,工作温度-40℃~125℃,具有多种低功耗工作模式。
C8051F500集成了Bosch-CAN控制器,支持CAN2.0A(标准)和2.0B(扩展)规范,CAN通讯速率可达1 Mbps,它拥有多达32个消息邮箱用于发送和接收数据。如图4所示,该CAN控制器独立性强,只须MCU提供可编程时钟。由于C8051F500已将CAN控制器的协议寄存器一一对应地映射到MCU的寄存器,对CAN控制器的寄存器操作可通过直接操作MCU中对应寄存器来完成,控制简单高效[4]。
作为井下短接的CAN总线接口,主要功能是响应总线下发指令,并上传本短接的数据。总体软件流程如图5所示。考虑到指令接收的实时性,指令接收采用中断响应,在CAN接收中断程序中置位“命令接收标志”,供主程序查询,命令响应后,再清零“命令接收标志”。
由于C8051F500的CAN控制器集成了CAN物理层及数据链路层的大部分硬件功能, 包括数据的编码、解码、校验。用户只须定义应用层通讯协议,并按协议对CAN控制器进行配置,对发送和接收邮箱进行初始化,将数据写入发送邮箱即启动发送,接收时根据接收中断标志,直接从接收邮箱中获取接收数据。本例中通讯协议基于CA2.0B技术规范制订,充分利用其29位ID定义了短接的编号、数据类型、数据块长度、短接状态等信息。CAN通讯软件分为3部分:CAN 初始化、数据发送、命令接收。
mesh自组网
2.1 CAN模块初始化
CAN模块初始化就是根据应用层协议参数来设置好本短接要接收和发送的CAN帧的帧类型、帧格式、ID号,指定接收对象和发送对象使用的邮箱号,设置CAN通讯速率并启动CAN状态机。由于C8051F500中CAN控制器的易用性,只需将有关参数直接写入C8051F500的CAN0_PAGE中的相关寄存器即可,初始化程序一般结构如下:
voidInitCan( )
{
SFRPAGE= CAN0_PAGE;      ∥切换到CAN寄存器页
ClearMsgObjs();  ∥ 清空CAN缓冲区
InitTxMsgObj(MsgBoxNum1);  ∥根据应用层协议参数初始化发送报文对象
∥发送报文对象使用“MsgBoxNum1”号邮箱
InitRxMsgObj(MsgBoxNum2);  ∥根据应用层协议参数初始化接收报文对象
薄鳅∥接收报文对象使用“MsgBoxNum2”号邮箱
StartCan();  ∥设置CAN通讯速率率,启动CAN状态机
}
吸音墙2.2 CAN帧的发送与接收
在完成了CAN控制器初始化后,发送程序要做的就是将数据写入发送报文对象的数据场区,并为对象指定发送邮箱,CAN控制器将在总线空闲时将包含数据的CAN帧送至总线。
程序通常结构如下:
voldCanTransmit (char MsgBoxNum,*nTxBuf)
{
SFRPAGE= CAN0_PAGE;              ∥ 切换到CAN寄存器页
IF1CMDMSK=0xaf;  ∥ 设定为"写"发送报文对象
IF1DATA1=nTxBuf[0]; IF1DATA2=nTxBuf[1];  ∥ 填充发送报文对象的数据场
IF1DATB1=nTxBuf[2]; IF1DATB2=nTxBuf[3];
IF1CMDRQST=MsgBoxNum;  ∥通过IF1写“MsgBoxNum”号邮箱,并启动发送
}
CAN帧的接收也是由CAN控制器自动完成的。当CAN控制器侦测到总线上有CAN帧时,将其存入缓冲区,通过初始化中设置的掩码、仲裁字对CAN帧进行滤波,滤波通过则产生接
收中断,通知程序从接收邮箱取出数据,存入接收数组。接收程序如下:

本文发布于:2024-09-22 18:27:55,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/4/112693.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:总线   接收   发送   数据   接口   应用   指令
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议