基于C8051F500的井下CAN总线接口设计
2015-05-09张友明
张友明
(大庆油田测试技术服务分公司监测技术研发中心 黑龙江 大庆 163453)
·开发设计·
基于C8051F500的井下CAN总线接口设计
张友明
(大庆油田测试技术服务分公司监测技术研发中心 黑龙江 大庆 163453)
CAN总线具有通讯速率高、稳定可靠、技术成熟的特点,是工程测井技术模块化应用的关键技术之一。文章介绍了CAN总线及C8051F500集成单片机的特点,给出了基于该种单片机实现的CAN总线接口硬件结构和软件设计方法,并通过实验证明了该设计可以满足应用要求。
CAN总线;C8051F500;接口硬件;接口软件;模块化工程测井应用
0 引 言
在模块化应用设计中,高速井下总线是重要支撑技术[1]。CAN总线是由德国 BOSCH公司首先提出的用于汽车实时控制的串行通信总线技术,经多年发展,目前已是国际上应用最广泛的现场总线之一[2]。CAN总线采用了多种先进技术,总线采用差分结构,抗干扰能力强,物理介质为廉价的双绞线,总线构建十分简单。其通讯速率高达1 Mbps,可有效管理64个以上节点。由于CAN是基于报文的编码,而不是对CAN节点进行编码,增添或删除CAN节点不会对整个系统造成影响,特别适合模块化应用中短接按需挂接。基于上述原因,选择了CAN总线作为模块化应用的井下总线。
1 接口硬件设计
1.1 应用模型
如图1所示,在模块化应用中,不同短接挂接在同一CAN井下总线上,成为总线上一个节点,通过各自的CAN总线接口,一方面接收地面系统的下发指令,另一方面,解码指令,并按照指令要求,通过井下总线上传各短接模块的数据。
图1 模块化应用示意图
由于CAN总线接口具有控制和指令判断等功能,是一智能接口,因此,多用MCU(或DSP)加CAN控制模块、CAN驱动器来构建接口硬件,如图2所示。若采用独立的CAN控制模块,如常见的CAN控制器SJA1000[3],来构建CAN接口,需占用MCU的I/O口及较多硬件和程序资源,单元之间连线也多,结构复杂,应用不便。由于CAN总线的广泛应用,众多厂家推出了各种内部集成了CAN控制器的MCU,本应用选择的C8051F500便是其中综合性能较高的一种。CAN驱动器,决定着CAN总线节点数目,随着技术的发展,其性能不断提高,功能不断完善。不同产品在驱动能力、抗干扰能力、防静电能力、总线隔离能力方面各有特点,可根据需要来选择[4]。
图2 CAN接口硬件结构示意图
由于C8051F500和驱动器体积小,连线简单,基于模块化设计思想,可将它们与其它少量辅助元件一起设计成CAN接口模块,如图3所示。它含有CAN通讯所需各种硬件,扩展了众多I/O口,方便用于短接功能模块的控制,可作为一个器件使用,适于应用在不同短接的CAN接口设计中。
图3 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]。
图4 C8051F500的集成CAN模块
2 接口软件设计
作为井下短接的CAN总线接口,主要功能是响应总线下发指令,并上传本短接的数据。总体软件流程如图5所示。考虑到指令接收的实时性,指令接收采用中断响应,在CAN接收中断程序中置位“命令接收标志”,供主程序查询,命令响应后,再清零“命令接收标志”。
图5 接口软件设计流程图
由于C8051F500的CAN控制器集成了CAN物理层及数据链路层的大部分硬件功能, 包括数据的编码、解码、校验。用户只须定义应用层通讯协议,并按协议对CAN控制器进行配置,对发送和接收邮箱进行初始化,将数据写入发送邮箱即启动发送,接收时根据接收中断标志,直接从接收邮箱中获取接收数据。本例中通讯协议基于CA2.0B技术规范制订,充分利用其29位ID定义了短接的编号、数据类型、数据块长度、短接状态等信息。CAN通讯软件分为3部分:CAN 初始化、数据发送、命令接收。
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帧进行滤波,滤波通过则产生接收中断,通知程序从接收邮箱取出数据,存入接收数组。接收程序如下:
voldCanReceive (char MsgBoxNum,*nRxBuf)
{
SFRPAGE= CAN0_PAGE; ∥ 切换到CAN寄存器页
IF2CMDMSK=0x4e; ∥ 设定为"读"接收报文对象
IF2CMDRQST=MsgBoxNum; ∥ 通过IF2读取“MsgBoxNum”号邮箱,获取数据
nRxBuf[0] = IF2DATA1; nRxBuf[1] = IF2DATA2; ∥ 指向数据场,接收数据,存入数据接收数组
nRxBuf[2] = IF2DATB1; nRxBuf[3] = IF2DATB2;
}
2.3 多帧处理
根据CAN协议,单个CAN帧只能传输8个字节,这对一般控制应用是足够的。在模块化应用中,控制命令的收发可使用单帧方式来完成,但工程测井通常采集数据量较大,需要通过多个CAN帧才能完成传输。实现数据多帧传输的方案很多,本例采取的方法是,在对象的ID中设置多帧标志,并将其数据场第1字节用作多帧计数器,只有多帧标志信显示为多帧时,此字节才计数,若是单帧,则此字节仍用来传输数据。程序中,若需要多帧传输,则在对象ID中置位多帧标志,根据短接数据量,计算所需单帧数量,按顺序逐帧传输,数据场第1字节用作帧序号。接收时,再按序号将多帧数据整合成完整数据帧。该方法比较容易实现,扩展性好。
3 应用实验
为检验上述CAN总线接口设计,进行了CAN通讯实验。实验中三个模拟CAN节点通过CAN接口挂接在CAN双绞线总线上。主节点向从节点1(Muledd短接)、从节点2(井径短接)、从节点3(方位短接)发送控制指令和索数指令,从节点响应指令、上传本节点数据及其状态到主节点,主节点再将这些数据与本节点数据合成统一数据帧,上传到PC机。实验中,双绞线长度20 m,速率为1Mbps,实验温度150 ℃。结果表明,数据、命令传输正常,命令实时响应正常。图6是实验截图。
图6 CAN总线通讯实验效果
4 结束语
基于C8051F500的CAN总线接口设计,以高性能的片上系统型MCU为基础,采用集成化设计方法,具有硬件结构简单、可编程能力强的特点。经实验验证,该设计可以满足模块化工程测井应用数据量大、控制复杂、实时性强的技术需求。
[1] 张友明, 刘青昕,刘向友. 套管检测技术的模块化应用设计. 大庆测试分公司论文集, 2012:120-120.(资料)
[2] 饶运涛,邹继军,郑勇芸. 现场总线CAN 原理与应用技术[M].北京:北京航空航天大学出版社,2003:208-209.
[3] 王 敏.CAN控制器与单片机的接口电路设计[J]. 石油仪器, 2011,25(2):76-80.
[4] 秦 健.基于CAN总线驱动器和异步收发器的通信网络[J].计算机测量与控制 2010,18(2):443-445.
·专利技术·
专利名称:一种撬装式油气分离计量测试仪
专利申请号:CN201320345710.9 公开号:CN203271708U
申请日:2013.06.17 公开日:2013.11.06
申请人:王成;李晓雷;王奔
本实用新型涉及一种撬装式油气分离计量测试仪,包括底座和设在底座下的滚轮,分离缓冲罐上开设有与旋流分离器相连通的入口分离器,分离缓冲罐顶部开设有出气口和底部开设有出液口,出气口处安装除雾器,出气口通过管道依次连通有压力计、控制阀和气体流量计,出液口通过管道依次连通有离心泵和质量流量计,气体流量计和质量流量计输出端连接有输出控制阀,控制显示部分分别控制旋流分离器、除雾器、离心泵、压力计和气体流量计以及质量流量计。所述的一种撬装式油气分离计量测试仪,此测试仪可以对特殊位置油井的产量进行计量,利用质量流量计和气体流量计实现油气水三相分离计量,其具有结构紧凑,便于操作并且便于移动运输,适用于单井计量。
(王元荪 提供)
Design of CAN Bus Interface for Underground Communication Based on C8051F500
ZHANG Youming
(Logging&TestingServicesCompanyofDaqingOilfieldCompanyLtd.,Daqing,Heilongjiang163453,China)
CAN bus is an advanced, stable and reliable bus technology with high communication rate, so it is used in modular engineering logging application as a key technology. The paper first introduces the technologic parameters of CAN bus and C8051F500 MCU, then gives the hardware structure and the software designing of CAN bus interface based on C8051F500. The experiment results verify that the interface design can meet the requirements of the modular engineering logging application.
CAN bus,C8051F500,hardware of interface,software of interface,modular engineering logging technology
张友明,男,1970年生,高级工程师,1992年毕业于大庆石油学院勘探系矿场地球物理专业,现在大庆油田测试技术服务分公司监测技术研发中心从事测井仪器研制工作。E-mial:dlts_zhangyoum@pefrochian.com.cn
TN919
A
2096-0077(2015)01-0033-03
2014-05-20 编辑:姜婷)