本文介紹以dsPIC30F6010A單片機(jī)為核心器件,充分利用單片機(jī)的自身資源,包括定時(shí)器、輸入捕捉模塊、高速運(yùn)算的特點(diǎn),實(shí)現(xiàn)3516適配短節(jié),用輸入捕捉模塊實(shí)現(xiàn)曼碼的軟件編解碼,定時(shí)器實(shí)現(xiàn)5道計(jì)數(shù),A/D采集等在硬件和軟件設(shè)計(jì)做了詳細(xì)論述。
【關(guān)鍵詞】dsPIC30F6010A 3516 曼碼 軟解碼 軟編碼
3516適配短節(jié)是5700井下儀器掛接3700儀器的中間短節(jié),可以下掛電阻率儀器、脈沖類儀器和井徑儀器,同時(shí)也是測(cè)量5700電法的必備遙傳短節(jié)。進(jìn)口3516適配短節(jié)是在90年代設(shè)計(jì),通訊方式M2(曼徹斯特碼)編解碼采用專用芯片HD-15530實(shí)現(xiàn),模擬道和脈沖道測(cè)量電路復(fù)雜,系統(tǒng)維護(hù)成本提高。考慮到目前單片機(jī)功能不斷提高,內(nèi)置外設(shè)不斷豐富,完全可以采用新型單片機(jī)來(lái)實(shí)現(xiàn)M2曼碼的軟編解碼功能,采用單片機(jī)內(nèi)部計(jì)數(shù)器做為脈沖信號(hào)計(jì)數(shù),利用單片機(jī)控制片外A/D和多路開關(guān)實(shí)現(xiàn)對(duì)模擬信號(hào)的多路采集。基于dsPIC30F6010A單片機(jī)實(shí)現(xiàn)3516儀器設(shè)計(jì),電路簡(jiǎn)單,易于維護(hù)。
1 dsPIC30F6010A簡(jiǎn)介
Microchip公司的dsPIC30F6010A是高性能的16位數(shù)字信號(hào)控制器(DSC),包括有廣泛的DSP功能和高性能的16位微控制器(MCU)架構(gòu)。dsPIC30F6010A處理器采用改進(jìn)的哈佛架構(gòu),具有獨(dú)立的程序和數(shù)據(jù)存儲(chǔ)器總線。該單片機(jī)的主要資源包括: 144KB FLASH,8KB RAM,4KB EEPROM;工作速度最高可達(dá)30MI/s;5個(gè)16位定時(shí)器/計(jì)數(shù)器;16位捕捉輸入功能;2個(gè)UART、2個(gè)SPI、1個(gè)I2C總線和2個(gè)CAN總線;最大I/O引腳數(shù)為68個(gè)。
2 儀器硬件
系統(tǒng)以dsPIC30F6010A單片機(jī)為主控芯片,利用片內(nèi)資源,實(shí)現(xiàn)M2曼碼編解碼,模擬信號(hào)采集,脈沖信號(hào)計(jì)數(shù)和儀器工作模式切換等功能。具體為:利用片內(nèi)輸入捕捉模塊實(shí)現(xiàn)M2命令軟解碼;利用片內(nèi)定時(shí)器2和I/O口RE5、RE7腳輸出,實(shí)現(xiàn)M2數(shù)據(jù)軟編碼;利用片上I/O和外部數(shù)據(jù)總線,通過(guò)控制片外A/D實(shí)現(xiàn)10道模擬信號(hào)的采集;利用片內(nèi)5個(gè)計(jì)數(shù)器實(shí)現(xiàn)5道脈沖測(cè)量;通過(guò)片上I/O口控制繼電器實(shí)現(xiàn)儀器工作狀態(tài)的切換。
工作原理:
(1)M2命令處理:M2(曼碼)命令從命令總線引入至變壓器,經(jīng)DS78C20J處理成標(biāo)準(zhǔn)曼碼UDI信號(hào),然后送到單片機(jī)輸入捕捉模塊的CEX0腳,并觸發(fā)輸入捕捉模塊0中斷,在中斷響應(yīng)程序記錄相鄰觸發(fā)時(shí)間差,單片機(jī)程序根據(jù)M2格式進(jìn)行軟解碼。根據(jù)接收到命令字(命令的第一個(gè)字)的高8位,判斷是否為3516命令(0x14xx或0x00xx),單片機(jī)執(zhí)行相應(yīng)的處理程序。命令字包括數(shù)據(jù)采集命令、數(shù)據(jù)發(fā)送命令、刻度命令(包括零刻、高刻、測(cè)井)和儀器狀態(tài)命令。
(2)M2數(shù)據(jù)發(fā)送:當(dāng)3516儀器收到數(shù)據(jù)發(fā)送命令時(shí),單片機(jī)進(jìn)入數(shù)據(jù)發(fā)送子程序,根據(jù)曼碼特性進(jìn)行編碼,用RE口產(chǎn)生曼碼信號(hào)BZO、BOO和控制信號(hào)MR,最后經(jīng)DS1633H和變壓器發(fā)送M2格式數(shù)據(jù)。曼碼信號(hào)經(jīng)M2數(shù)據(jù)總線,輸出至3514儀器。
(3)數(shù)據(jù)采集:當(dāng)數(shù)據(jù)采集命令送至3516儀器后,儀器對(duì)脈沖和模擬信號(hào)進(jìn)行采集和處理。5道脈沖信號(hào)經(jīng)整形后,進(jìn)入片內(nèi)計(jì)數(shù)器(16位計(jì)數(shù)方式)進(jìn)行計(jì)數(shù)。脈沖計(jì)數(shù)時(shí),單片機(jī)先停止計(jì)數(shù)器工作,然后讀取寄存器數(shù)據(jù),取完數(shù)據(jù)后清零計(jì)數(shù)器寄存器,然后進(jìn)入下個(gè)計(jì)數(shù)周期,再重新開始計(jì)數(shù)。采集的脈沖道數(shù)據(jù)存儲(chǔ)到片內(nèi)RAM中,并按3516數(shù)據(jù)格式存放。10道模擬信號(hào)經(jīng)低通濾波處理、增益放大和多路開關(guān)后,送到A/D(AD976),單片機(jī)通過(guò)數(shù)據(jù)總線讀取A/D采集到的數(shù)據(jù)。由于只有一個(gè)A/D芯片,單片機(jī)采用分時(shí)方式對(duì)每道依次采集,并自動(dòng)選擇通道增益(2倍或16倍)。采集的模擬道數(shù)據(jù)存儲(chǔ)到片內(nèi)RAM中,并按3516數(shù)據(jù)格式存放。
(4)工作模式設(shè)置:在3516儀器中,工作模式有多種,如刻度、換擋等。單片機(jī)利用內(nèi)部的P2口,通過(guò)對(duì)繼電器控制,實(shí)現(xiàn)工作模式的切換。
3 軟件設(shè)計(jì)
在dsPIC30F6010A軟件中,支持C語(yǔ)言和匯編語(yǔ)言編程,為了增加程序的可移植性和可讀性,本次設(shè)計(jì)使用C語(yǔ)言編程。
程序先解碼M2命令,當(dāng)命令是3516命令時(shí),即Cmd_Flag=1,執(zhí)行相應(yīng)的子程序,完成命令響應(yīng)。主程序的流程圖如圖1所示。
在軟件設(shè)計(jì)中,曼碼的軟編解碼編程核心,下面主要介紹這兩部分。
3.1 M2命令解碼
M2命令解碼利用dsPIC30F6010A中的輸入捕捉模塊0(邊沿觸發(fā)捕捉模式)來(lái)實(shí)現(xiàn)對(duì)M2命令的捕獲。曼碼數(shù)據(jù)經(jīng)電路整形成UDI信號(hào),其在上升沿和下降沿時(shí)觸發(fā)CEX0的中斷,程序根據(jù)相鄰上升沿、下降沿的時(shí)間差,先找出命令同步頭,再解碼16位命令數(shù)據(jù)和校驗(yàn)位。先根據(jù)校驗(yàn)位判斷解碼是否正確,再根據(jù)命令字判斷數(shù)據(jù)是否為3516命令,如果兩者都正確,則設(shè)置命令到達(dá)標(biāo)志。M2命令解碼流程圖如圖2所示。
在圖2中,S1-S7,代表當(dāng)前命令解碼狀態(tài)(status)。Thiswide_num表示相鄰觸發(fā)沿的時(shí)間差,數(shù)值代表半位的個(gè)數(shù),比如Thiswide_num=3代表3個(gè)半位。數(shù)據(jù)Bit_Cnt表示解碼數(shù)據(jù)位個(gè)數(shù),當(dāng)Bit_Cnt=16時(shí),表示命令數(shù)據(jù)解碼完成。當(dāng)CmdSync_Flag=1代表奇偶校驗(yàn)位正確,表示解碼成功。解碼具體過(guò)程如下:
在初始化時(shí),將狀態(tài)設(shè)置為S1。當(dāng)有脈沖沿觸發(fā)中斷時(shí),中斷響應(yīng)程序先計(jì)算Thiswide_num,,根據(jù)status狀態(tài)進(jìn)入相應(yīng)的處理程序,同時(shí)把當(dāng)前捕獲時(shí)間(IC0TIME_now)保存為上次時(shí)間(IC0TIME_last)。
(1)當(dāng)status=S1狀態(tài)時(shí):如果是上升沿觸發(fā),置status=s2;如果是下降沿觸發(fā),則不變。
(2)當(dāng)status=S2時(shí),當(dāng)觸發(fā)沿為上升沿并且Thiswide_num=3時(shí),代表找到第一個(gè)同步頭,status=S3。
(3)當(dāng)status=S3狀態(tài)時(shí),當(dāng)觸發(fā)沿為下降沿并且Thiswide_num=3或Thiswide_num=4時(shí),代表找到第二個(gè)同步頭,到此命令同步頭解碼完成。當(dāng)Thiswide_num=3時(shí),置status=S4,說(shuō)明到了第一個(gè)數(shù)據(jù)位的開始位置;當(dāng)Thiswide_num=4時(shí),置status=S5,表示到了第一個(gè)數(shù)據(jù)位的中間位置,開始取數(shù),Bit_Cnt++。
(4)當(dāng)status=S4狀態(tài)時(shí),當(dāng)Thiswide_num=l,表示到了數(shù)據(jù)位的中間位置,開始取數(shù),Bit_Cnt++。如果Bit_Cnt=16時(shí),代表16位命令數(shù)據(jù)解碼完成,置status=S6,否則置status=S5。
(5)當(dāng)status=S5狀態(tài)時(shí),當(dāng)Thiswide_num=1,表示到了數(shù)據(jù)位開始位置,置status=S4;當(dāng)Thiswide_num=2,表示到了數(shù)據(jù)位的中間,開始取數(shù),Bit_Cnt++。如果Bit_Cnt=16時(shí),代表16位命令數(shù)據(jù)解碼完成,置status=S6,否則置status=S5。
(6)當(dāng)status=S6狀態(tài)時(shí),當(dāng)Thiswide_num=1,代表在奇偶校驗(yàn)位開始,置status=S7;當(dāng)Thiswide_num=2,代表在奇偶校驗(yàn)位中間,取奇偶校驗(yàn)位,然后判斷校驗(yàn)位是否,如果正確,代表解碼成功,設(shè)置CmdSync_Flag=1,并且置status=S1,進(jìn)入下一個(gè)命令解碼循環(huán)。
(7)當(dāng)status=S7狀態(tài)時(shí),代表在奇偶校驗(yàn)位中間,取奇偶校驗(yàn)位,然后判斷校驗(yàn)位是否,如果正確,代表解碼成功,設(shè)置CmdSync_Flag=1,并且置status=S1,進(jìn)入下一個(gè)命令解碼循環(huán)。
3.2 M2數(shù)據(jù)編碼
利用dsPIC30F6010A的定時(shí)器2進(jìn)行精準(zhǔn)計(jì)時(shí),通過(guò)單片機(jī)的I/O口發(fā)送需要的高低電平,來(lái)實(shí)現(xiàn)M2數(shù)據(jù)編碼功能。將片內(nèi)定時(shí)器2設(shè)置為軟件定時(shí)器模式,定時(shí)時(shí)間是半位寬度時(shí)間(即12微秒),在定時(shí)器中斷響應(yīng)程序中發(fā)送半位電平。
在曼碼格式中,數(shù)據(jù)同步占6個(gè)半位(即000111),一位數(shù)據(jù)占兩個(gè)半位(數(shù)據(jù)1為10,數(shù)據(jù)0為01),奇偶校驗(yàn)位也占兩個(gè)半位。編碼數(shù)據(jù)發(fā)送時(shí),先發(fā)射數(shù)據(jù)同步,再取數(shù)據(jù)(從高位到低位),然后發(fā)射奇偶校驗(yàn)位,形成BOO和BZO信號(hào)。為保證發(fā)送頻率穩(wěn)定,軟件程序開定時(shí)器之前時(shí),先將數(shù)據(jù)以字為單位,按半位(12微妙)為周期轉(zhuǎn)換一個(gè)34字節(jié)數(shù)組,用0x00代表輸出低電平,用0x01代表輸出高電平。在片內(nèi)定時(shí)器2中斷響應(yīng)程序中,只需查詢數(shù)組當(dāng)前字節(jié)狀態(tài),選擇輸出高低電平。
4 結(jié)束語(yǔ)
本文介紹的基于dsPIC30F6010A實(shí)現(xiàn)3516適配短節(jié),充分利用單片機(jī)自身資源,實(shí)現(xiàn)了M2(曼碼)的軟編解碼,同時(shí)也實(shí)現(xiàn)了10道模擬信號(hào)A/D采集,5道脈沖信號(hào)采集和繼電器控制,電路十分簡(jiǎn)單,易于維護(hù),所列程序都實(shí)際應(yīng)用于3516儀器中,思路清晰、完整可靠,為3516設(shè)計(jì)者提供一個(gè)新的思路。
參考文獻(xiàn)
[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的數(shù)據(jù)采集系統(tǒng)[J].電子設(shè)計(jì)工程,2010,18(2).
[4]馬秀妮,梁羽佳.曼徹斯特碼地面解碼方法與實(shí)現(xiàn)[J].石油儀器,2009,23(4).
作者簡(jiǎn)介
車行(1984-),男,2006年畢業(yè)于西安電子科技大學(xué),獲得大學(xué)本科學(xué)歷?,F(xiàn)為中電科22所工程師,從事硬件設(shè)計(jì)工作。
作者單位
中國(guó)電子科技集團(tuán)公司第二十二研究所 河南省新鄉(xiāng)市 453003