本文介紹以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