基于dsPIC30F6010A实现3516适配短节
2016-07-10车行
本文介绍以dsPIC30F6010A单片机为核心器件,充分利用单片机的自身资源,包括定时器、输入捕捉模块、高速运算的特点,实现3516适配短节,用输入捕捉模块实现曼码的软件编解码,定时器实现5道计数,A/D采集等在硬件和软件设计做了详细论述。
【关键词】dsPIC30F6010A 3516 曼码 软解码 软编码
3516适配短节是5700井下仪器挂接3700仪器的中间短节,可以下挂电阻率仪器、脉冲类仪器和井径仪器,同时也是测量5700电法的必备遥传短节。进口3516适配短节是在90年代设计,通讯方式M2(曼彻斯特码)编解码采用专用芯片HD-15530实现,模拟道和脉冲道测量电路复杂,系统维护成本提高。考虑到目前单片机功能不断提高,内置外设不断丰富,完全可以采用新型单片机来实现M2曼码的软编解码功能,采用单片机内部计数器做为脉冲信号计数,利用单片机控制片外A/D和多路开关实现对模拟信号的多路采集。基于dsPIC30F6010A单片机实现3516仪器设计,电路简单,易于维护。
1 dsPIC30F6010A简介
Microchip公司的dsPIC30F6010A是高性能的16位数字信号控制器(DSC),包括有广泛的DSP功能和高性能的16位微控制器(MCU)架构。dsPIC30F6010A处理器采用改进的哈佛架构,具有独立的程序和数据存储器总线。该单片机的主要资源包括: 144KB FLASH,8KB RAM,4KB EEPROM;工作速度最高可达30MI/s;5个16位定时器/计数器;16位捕捉输入功能;2个UART、2个SPI、1个I2C总线和2个CAN总线;最大I/O引脚数为68个。
2 仪器硬件
系统以dsPIC30F6010A单片机为主控芯片,利用片内资源,实现M2曼码编解码,模拟信号采集,脉冲信号计数和仪器工作模式切换等功能。具体为:利用片内输入捕捉模块实现M2命令软解码;利用片内定时器2和I/O口RE5、RE7脚输出,实现M2数据软编码;利用片上I/O和外部数据总线,通过控制片外A/D实现10道模拟信号的采集;利用片内5个计数器实现5道脉冲测量;通过片上I/O口控制继电器实现仪器工作状态的切换。
工作原理:
(1)M2命令处理:M2(曼码)命令从命令总线引入至变压器,经DS78C20J处理成标准曼码UDI信号,然后送到单片机输入捕捉模块的CEX0脚,并触发输入捕捉模块0中断,在中断响应程序记录相邻触发时间差,单片机程序根据M2格式进行软解码。根据接收到命令字(命令的第一个字)的高8位,判断是否为3516命令(0x14xx或0x00xx),单片机执行相应的处理程序。命令字包括数据采集命令、数据发送命令、刻度命令(包括零刻、高刻、测井)和仪器状态命令。
(2)M2数据发送:当3516仪器收到数据发送命令时,单片机进入数据发送子程序,根据曼码特性进行编码,用RE口产生曼码信号BZO、BOO和控制信号MR,最后经DS1633H和变压器发送M2格式数据。曼码信号经M2数据总线,输出至3514仪器。
(3)数据采集:当数据采集命令送至3516仪器后,仪器对脉冲和模拟信号进行采集和处理。5道脉冲信号经整形后,进入片内计数器(16位计数方式)进行计数。脉冲计数时,单片机先停止计数器工作,然后读取寄存器数据,取完数据后清零计数器寄存器,然后进入下个计数周期,再重新开始计数。采集的脉冲道数据存储到片内RAM中,并按3516数据格式存放。10道模拟信号经低通滤波处理、增益放大和多路开关后,送到A/D(AD976),单片机通过数据总线读取A/D采集到的数据。由于只有一个A/D芯片,单片机采用分时方式对每道依次采集,并自动选择通道增益(2倍或16倍)。采集的模拟道数据存储到片内RAM中,并按3516数据格式存放。
(4)工作模式设置:在3516仪器中,工作模式有多种,如刻度、换挡等。单片机利用内部的P2口,通过对继电器控制,实现工作模式的切换。
3 软件设计
在dsPIC30F6010A软件中,支持C语言和汇编语言编程,为了增加程序的可移植性和可读性,本次设计使用C语言编程。
程序先解码M2命令,当命令是3516命令时,即Cmd_Flag=1,执行相应的子程序,完成命令响应。主程序的流程图如图1所示。
在软件设计中,曼码的软编解码编程核心,下面主要介绍这两部分。
3.1 M2命令解码
M2命令解码利用dsPIC30F6010A中的输入捕捉模块0(边沿触发捕捉模式)来实现对M2命令的捕获。曼码数据经电路整形成UDI信号,其在上升沿和下降沿时触发CEX0的中断,程序根据相邻上升沿、下降沿的时间差,先找出命令同步头,再解码16位命令数据和校验位。先根据校验位判断解码是否正确,再根据命令字判断数据是否为3516命令,如果两者都正确,则设置命令到达标志。M2命令解码流程图如图2所示。
在图2中,S1-S7,代表当前命令解码状态(status)。Thiswide_num表示相邻触发沿的时间差,数值代表半位的个数,比如Thiswide_num=3代表3个半位。数据Bit_Cnt表示解码数据位个数,当Bit_Cnt=16时,表示命令数据解码完成。当CmdSync_Flag=1代表奇偶校验位正确,表示解码成功。解码具体过程如下:
在初始化时,将状态设置为S1。当有脉冲沿触发中断时,中断响应程序先计算Thiswide_num,,根据status状态进入相应的处理程序,同时把当前捕获时间(IC0TIME_now)保存为上次时间(IC0TIME_last)。
(1)当status=S1状态时:如果是上升沿触发,置status=s2;如果是下降沿触发,则不变。
(2)当status=S2时,当触发沿为上升沿并且Thiswide_num=3时,代表找到第一个同步头,status=S3。
(3)当status=S3状态时,当触发沿为下降沿并且Thiswide_num=3或Thiswide_num=4时,代表找到第二个同步头,到此命令同步头解码完成。当Thiswide_num=3时,置status=S4,说明到了第一个数据位的开始位置;当Thiswide_num=4时,置status=S5,表示到了第一个数据位的中间位置,开始取数,Bit_Cnt++。
(4)当status=S4状态时,当Thiswide_num=l,表示到了数据位的中间位置,开始取数,Bit_Cnt++。如果Bit_Cnt=16时,代表16位命令数据解码完成,置status=S6,否则置status=S5。
(5)当status=S5状态时,当Thiswide_num=1,表示到了数据位开始位置,置status=S4;当Thiswide_num=2,表示到了数据位的中间,开始取数,Bit_Cnt++。如果Bit_Cnt=16时,代表16位命令数据解码完成,置status=S6,否则置status=S5。
(6)当status=S6状态时,当Thiswide_num=1,代表在奇偶校验位开始,置status=S7;当Thiswide_num=2,代表在奇偶校验位中间,取奇偶校验位,然后判断校验位是否,如果正确,代表解码成功,设置CmdSync_Flag=1,并且置status=S1,进入下一个命令解码循环。
(7)当status=S7状态时,代表在奇偶校验位中间,取奇偶校验位,然后判断校验位是否,如果正确,代表解码成功,设置CmdSync_Flag=1,并且置status=S1,进入下一个命令解码循环。
3.2 M2数据编码
利用dsPIC30F6010A的定时器2进行精准计时,通过单片机的I/O口发送需要的高低电平,来实现M2数据编码功能。将片内定时器2设置为软件定时器模式,定时时间是半位宽度时间(即12微秒),在定时器中断响应程序中发送半位电平。
在曼码格式中,数据同步占6个半位(即000111),一位数据占两个半位(数据1为10,数据0为01),奇偶校验位也占两个半位。编码数据发送时,先发射数据同步,再取数据(从高位到低位),然后发射奇偶校验位,形成BOO和BZO信号。为保证发送频率稳定,软件程序开定时器之前时,先将数据以字为单位,按半位(12微妙)为周期转换一个34字节数组,用0x00代表输出低电平,用0x01代表输出高电平。在片内定时器2中断响应程序中,只需查询数组当前字节状态,选择输出高低电平。
4 结束语
本文介绍的基于dsPIC30F6010A实现3516适配短节,充分利用单片机自身资源,实现了M2(曼码)的软编解码,同时也实现了10道模拟信号A/D采集,5道脉冲信号采集和继电器控制,电路十分简单,易于维护,所列程序都实际应用于3516仪器中,思路清晰、完整可靠,为3516设计者提供一个新的思路。
参考文献
[1]BakerAtlasAPR1L.3516XA WTS Slam Adapter.1998.
[2]Microchip.dsPIC30F6010A/6015Data sheet[DB/OL].http://ww1.microchip.com/downloads/cn/DeviceDoc/cn530931.pdf.
[3]李媛媛,孙敬华,曹丙霞.基于AD7862和dsPIC30F的数据采集系统[J].电子设计工程,2010,18(2).
[4]马秀妮,梁羽佳.曼彻斯特码地面解码方法与实现[J].石油仪器,2009,23(4).
作者简介
车行(1984-),男,2006年毕业于西安电子科技大学,获得大学本科学历。现为中电科22所工程师,从事硬件设计工作。
作者单位
中国电子科技集团公司第二十二研究所 河南省新乡市 453003