文獻標識碼: A
DOI:10.16157/j.issn.0258-7998.181686
中文引用格式: 王心鵬,門雅彬,張東亮,等. XBT自動投放測量系統電機控制單元設計與故障分析[J].電子技術應用,2019,45(1):92-96.
英文引用格式: Wang Xinpeng,Men Yabin,Zhang Dongliang,et al. Design and fault analysis of motor control unit in XBT automatic launch and measurement system[J]. Application of Electronic Technique,2019,45(1):92-96.
0 引言
海水溫度剖面數據是重要的海洋環境要素之一,該數據的獲取對水下聲波傳播速度和路徑變化研究具有重要意義,能夠為海洋科學研究和軍事應用提供重要幫助。投棄式溫度剖面測量儀(Expendable bathythermograph,XBT)是一種是能夠測量和感應海水溫度剖面的投棄式設備,是調查海洋溫度剖面時重要的測量手段[1-2]。
XBT自動投放測量系統可實現12枚探頭自動投放,完成對海水溫度剖面數據的快速獲取。它能夠在惡劣海況下完成投放測量任務,具有投放效率與自動化程度高、操作簡便等特點,彌補了傳統人工投放的不足之處。系統的投放過程主要靠步進電機、直流電機和伺服電機等多種裝置的組合運動完成,電機控制單元是系統電子控制的核心,在自動投放過程中發揮了重要的作用。
1 電機控制單元總體設計
電機控制單元主要由主控芯片、電源模塊、串口擴展芯片、伺服、步進、直流電機驅動器接口電路等部分組成,其硬件原理框圖如圖1所示。系統投放過程包含以下運動模式:投放桶旋轉、釋放裝置運動、數據采集裝置運動,通過對上述運動模式的合理設計完成探頭投放與測量數據采集。
2 硬件設計
2.1 主控芯片選型
考慮到開發難度及研發周期,對比選型后選用Silicon Laboratories公司的C8051F020微控制器作為主控芯片。它是完整的混合信號片上系統SoC芯片,具有64 KB可在系統編程Flash和4 532 B SRAM,70%的指令執行時間為1-2個時鐘周期,具有22個中斷源等特點,以上性能滿足電機控制單元的設計需求。
2.2 電源管理模塊
控制單元的電源輸入為12 V和24 V,選用National Semiconductor公司生產的LM2575和LM2937電源芯片,分別產生5 V和3.3 V電壓。前者用于步進電機控制信號及直流電機驅動芯片供電,后者用于主控芯片及數字器件供電,24 V電源用于步進電機驅動器及伺服驅動器剎車裝置供電。
2.3 通信接口模塊
為實現對系統中各類電機的控制,電機控制單元需要與伺服驅動器[3]、上位機及手動控制終端進行數據通信,其通信接口均使用RS232方式。由于單片機只有兩個UART串口,需要對其數量進行擴展。常用的擴展方法可通過軟件設計實現[4],也可由硬件芯片[5]完成。由于軟件虛擬串口的方法具有可靠性和穩定性方面的不足,因此采用專用硬件芯片的方式。選用EXAR公司生產的XR16L784專用串口擴展芯片,通過合理搭建外圍電路并編寫配置程序,實現多路串口擴展功能。
2.4 電機驅動接口
2.4.1 伺服電機驅動器接口
接口電路主要由RS232電平轉換和投放筒位置反饋輸入兩部分組成。電機控制單元與伺服驅動器的通信方式為RS232通信,波特率為9 600 b/s。選用MAXIM公司生產的MAX3232芯片完成單片機TTL電平與RS232電平轉換。伺服驅動器采用Modbus通信[6]協議,使用RTU模式進行數據傳輸。通信格式中每幀數據包含1個起始位,8個數據位,2個停止位。為與該格式匹配,將單片機UART0串口設置為模式2,每幀數據包含11 bit,其第9數據位可通過編程進行設定,設計時將其設定為與停止位相同的數值。每開始一輪投放任務前,投放桶都需要進行位置歸零,以保證投放點位置的精確性。使用光電開關作為檢測傳感器,通過檢測安裝在投放桶固定位置處的遮光板實現歸零操作。
2.4.2 步進電機驅動器接口
步進電機驅動器具有多種細分模式,根據系統需求將其設定為3 200。驅動器的控制信號包括電機使能、旋轉方向及步數,其中旋轉步數由輸入脈沖個數決定,使用單片機可編程計數器陣列(PCA)功能實現脈沖的精確輸出。單片機的控制信號經光電隔離器件與步進電機驅動器相連。為滿足系統對步進電機數量的擴展需求,在硬件實現時采用了2個步進電機驅動器接口的設計方案。
2.4.3 直流電機驅動接口
對XBT探頭數據的獲取通過測量裝置來完成,該裝置通過直流電機實現與探頭的連接和斷開。選用ST公司的L298P芯片[7]作為驅動芯片,該芯片供電電壓為5 V,引腳Vs為待驅動設備工作電壓,根據選用的直流電機工作參數將其設定為24 V??刂菩盘枮闃藴蔜TL電平,芯片最大驅動電流為2 A。使用單片機兩個IO口輸出控制信號,同時使用或邏輯門的輸出作為L298P使能信號,當控制信號1為高電平、控制信號2為低電平時,芯片驅動直流電機正轉。反之,則直流電機反轉。其原理圖見圖2。
3 軟件設計
在程序編寫時采用模塊化編程思想進行設計,選用Keil μVision4作為編程開發環境,編程語言以C語言為主,使用少量匯編語言完成MCU寄存器初始化。程序執行后首先對時鐘、UART、PCA等相應寄存器進行初始化,串口通信采用中斷方式[8]以提高效率。使用單片機片上外設PCA以一定頻率向步進電機驅動器發送脈沖,由于步進電機行程固定,因此采用定時器控制其運動時間。軟件流程圖見圖3。
系統初始化完畢后,通過位置傳感器確認各電機是否處于原點,若不在則自動完成位置歸零。在確認伺服驅動器工作狀態正常后進入自動投放模式,過程如下:伺服電機帶動投放桶旋轉30°,直流電機前進至與探頭相連,步進電機通過往復運動完成XBT釋放過程,探頭落入海水后對溫度剖面數據進行測量,待數據采集完成后直流電機后退至原點,完成一次投放過程。當12枚探頭均投放成功后,即可裝入新探頭以備下一輪次投放。為在電機出現異常時能對其人工調整,在程序設計時加入了手動控制模式,該功能不對用戶開放,僅在調試時使用。
電機控制單元與上位機的通信采用問詢、應答方式,問詢由上位機發起,控制單元收到后將相應動作的命令和子函數標志位賦相應值,通過在主函數中查詢標志位執行對應電機動作,執行完成后清除標志位,當查詢到子函數標志位清零后向上位機回復。其命令交互流程見圖4。
命令交互時采用的通信格式為:
上位機:$XX,AA*KK\r\n
電機控制單元:$XX,AA,BB*KK\r\n
其中,XX表示命令種類,AA表示控制字標號,BB表示電機控制單元執行結果,KK表示累加和校驗。例如,需要投放筒逆時針旋轉30°,則上位機發出指令$05,02*F3\r\n,電機控制單元通過串口收到該命令后,對命令進行分類,主函數中檢測到該命令對應的標志位后將控制電機執行相應動作,完成后則返回$05,02,00*7F\r\n。
4 電機控制單元測試結果及故障分析
在海上投放過程中,由于每枚XBT探頭的投放是由以上三種電機按照一定邏輯順序運動完成的,如果某個電機動作出現異常將直接導致投放失敗,因此對電機控制單元的功能、性能從多種角度進行測試十分必要。為保證其工作的可靠性,分別從功能、拷機和批量測試三方面進行測試。其中,前兩項試驗是對單一電路板的測試,批量測試則是對隨機抽取的10塊電路板進行驗證。
4.1 功能性測試
為測試電機控制單元的功能,將其與工控計算機通過RS232方式相連,同時將電機控制單元與伺服驅動器的串口發送引腳與地線分別引出并連接到工控計算機的兩個串口上,實時監測兩者間通信狀態??刂茊卧谧詣油斗拍J较聲凑赵O定的步驟依次完成投放12枚探頭的動作。
4.1.1 伺服電機故障及分析
在監測電機控制單元與伺服驅動器間通信數據時,發現伺服驅動器存在數據丟幀、出錯、寄存器值未更新等情況,直接導致投放桶不轉動或轉動次數少于設定值。其原因可能是驅動器內DSP對串行數據的處理響應速度及可靠性不足、外部電磁干擾等,這些異常情況會導致伺服電機無法對電機控制單元的指令及時做出響應。
為保證系統工作穩定可靠,單片機在每次發送控制指令后再發送一條讀取指令,檢查伺服驅動器內相關寄存器中的數據是否被成功寫入,若未成功更新則重新發送控制指令。同時,建立誤碼識別機制并記錄誤碼出現次數,當累計次數超過設定閾值時啟動報警,人為排查故障。
4.1.2 步進電機故障及分析
在測試過程中,步進電機出現了行程不到位的情況,導致投放裝置無法成功取下探頭銷,其原因是外部脈沖頻率設置過高導致步進驅動器無法及時響應從而造成失步[9],在設計時將PCA產生的脈沖頻率降低至2.4 kHz,該頻率下步進電機無失步現象,運動行程穩定。
4.1.3 直流電機故障及分析
在測試直流電機工作時使用外部穩壓源提供24 V直流電壓,當電機連續工作一段時間后發現其會出現異常停止現象,同時驅動芯片L298P異常發熱,穩壓源過流保護。經分析可知,由于直流電機在啟動和停止瞬間會產生較高的感應電動勢,若該電壓直接作用在OUT1和OUT2引腳將直接導致芯片燒毀。因此,在這兩個引腳上加入截止電壓為24 V的雙向TVS管,將直流電機啟停時產生的瞬間高電壓以電流形式直接釋放到電路的地平面,保證L298P芯片不會受到電機瞬時較高的感應電動勢影響。
4.2 拷機測試
為驗證電機控制單元對上位機命令響應的可靠性,使用串口調試助手周期性發送控制指令,通過觀察電機運動執行情況來判斷其響應結果。測試時間為24個小時,發送周期為4 s一次。測試中發現,直流電機在工作一段時間后停止運動,無法對外部命令做出響應,但每組試驗中電機停止運動的時間卻不相同。在確認驅動芯片L298P工作正常后,從程序設計角度對故障進行分析。
由于控制單元在輸出電機動作的指令后,需保證該動作執行期間其他電機無運動,因此在主程序中使用了while循環方式進行等待。但控制單元需要實時響應來自上位機的串口命令,因此將查詢串口緩存及命令狀態判斷等語句放在了每10 ms執行一次的定時器0中斷函數中。UART波特率為9 600 b/s,當單片機串口通信數據幀格式設置為1位起始位、8位數據位、1位停止位時,每幀數據傳輸時間為1.04 ms。程序中使用了定時器0和UART0中斷,前者中斷優先級高于后者,由于并未對中斷優先級(IP)寄存器進行設置,因此當定時器0和UART0中斷同時到來時,單片機優先執行定時器0中斷服務程序;而當UART0中斷程序執行過程中定時器0中斷到來時,不會發生中斷嵌套。
電機控制單元的晶振頻率是3.686 4 MHz,在1.04 ms的時間內包含3 837個時鐘周期。C8051F系列單片機一條匯編指令的執行時間為1~2個時鐘周期,而一條C語言語句對應多條匯編語句。上位機發送的控制命令包含11個字節,由于原設計中在定時器0中斷函數中添加了大量查詢串口緩存及狀態判斷語句,導致要執行的語句過多,在某些條件下執行時間超過了1.04 ms,造成保存在SBUF0中的串口接收數據還沒被讀入單片機內存就被下一個數據覆蓋,導致控制字丟失。
將主程序中使用while的程序部分用switch-case結構改寫,使程序不會停在某一位置持續等待,這樣可以將查詢串口緩存及狀態判斷的語句寫入主函數中,使其對外部命令的響應不依賴于定時器。改寫后的定時器中斷函數中的語句數量大幅減少,其執行時間遠小于1.04 ms,可保證SBUF0中的數據均能被及時讀入內存。調整后的電機控制單元在拷機實驗中對上位機命令均及時響應,無數據丟失。
4.3 批量測試
在該項測試中發現有2塊電機控制單元出現了投放筒旋轉次數明顯多于設定值的情況。在程序設計時,為保證伺服電機能可靠執行轉動指令,在每次運動前后由上位機分別讀取伺服驅動器中字長為4字節的軸位置信息并比較,若其差值小于設定閾值則判定電機未轉動,上位機會再次發送旋轉指令。由于旋轉30°對應的軸位置數據偏移量已知,經對返回數據核查得知,該故障是因軸位置數據出現異常所致。
在對程序設計核查確認無誤后,將導致該故障的原因定位在程序的編譯模式上。系統開發使用的Keil μVision4軟件,其變量編譯包括Small、Compact、Large三種模式[10]。在Small模式下,未指明存儲類型的變量,均將分配在單片機的內部存儲器上,其存儲空間較小,如果變量數量超過其范圍將會編譯報錯。由于電機控制單元需要使用變量較多,超過了內部存儲器的范圍,軟件編譯不能通過,因此不選擇該模式。在Compact模式下,未強制使用_at_指定地址的變量被分配在分頁尋址的片外內存中,每頁大小為256 B,變量的高8位地址由P2口數據決定,如果使用的變量總數超過1頁時,編譯器不會自動更新P2數據進行頁切換,也不會編譯報錯;在程序執行時,會造成變量的跨頁錯誤,即訪問變量跨頁時,由于未對高8位地址進行切換,仍然訪問以前的頁,造成變量訪問混亂。在Large模式下,未指明存儲類型的變量和XDATA變量都分配到片外數據存儲器中,最大可達64 KB,使用指針DPTR間接訪問。
電機控制單元程序編譯時使用了Compact模式,由于變量數量多,占用空間超過256 B,造成變量的訪問混亂,所以造成軸位置變量異常。將編譯模式改為Large后對程序重新編譯,將執行代碼寫入單片機測試,軸位置數據和電機旋轉次數均正常。此外,不修改變量編譯模式,通過修改程序,將部分變量通過_at_指定地址,使開發工具軟件自動分配的變量限定到256 B之內,也能解決該問題,同樣印證了軸位置的異常是由在Compact編譯模式下變量數量超過頁范圍引起的。
軸位置變量出錯現象只在兩個電機控制單元上出現,而其他單元并未出現。經分析其原因如下:每個單片機程序的執行與其時鐘頻率有關,同一函數的調用執行時刻在不同電機控制單元上有細微差別,導致了函數的內部變量臨時分配的區域不同,軸位置數據異常的控制單元在執行該函數時,內部變量跨頁,輸出數據異常,而其他單元執行該函數時,內部變量不跨頁,輸出數據正常,因此導致了相同函數在同一外部條件下,在不同電機控制單元上出現了不同的結果。為驗證該推斷,在不改變變量編譯模式的情況下,在函數定義前定義一定字節的空數組,該數組用于占用外部數據存儲器空間,調整該數組的大小使函數內部變量跨頁,在某些條件下,應該是所有電機控制單元都會出現故障,數據異常的位置也應不限定在電機軸位置上。通過逐步修改空數組的大小,在無故障的單元上也出現了電機異常轉動現象,數據異常也不僅限于電機軸位置一處問題,該實驗結果與推斷一致。將編譯模式設置為Large模式,不修改源程序,故障消失。該結果也驗證了電機軸位置數據異常是由于在Compact模式下變量數量超過頁范圍引起的。
通過對以上異常情況的處理,電機控制單元能夠實現對上述三類電機的可靠控制。在投放裝置海上試驗測試中系統工作正常,電機控制單元能夠有效控制投放裝置完成多枚XBT探頭的自動連續投放,保證系統正常運行。
5 結論
本文提出了XBT自動投放測量系統電機控制單元的設計思想,詳細給出了硬件和軟件實現方案。設計了三種測試方法,查找出了控制單元在對上位機命令實時響應過程中出現的各類故障,通過全面的機理分析進行了故障定位并改進驗證。實驗室和海上試驗的測試結果表明:電機控制單元能夠通過對伺服電機、步進電機、直流電機的運動控制完成多枚XBT自動投放,保證系統順利完成對海水溫度剖面數據的可靠獲取。本設計對使用單片機對多種電機進行實時組合控制的方法上具有一定借鑒作用。
參考文獻
[1] 黃興輝,宋海斌,PINHEIR L M等.利用反射地震數據和XBT數據聯合反演海水的溫鹽分布[J].地球物理學報,2011,54(5):1293-1300.
[2] 任強,魏傳杰.國產拋棄式溫度剖面儀(XBT)資料質量分析[J].海洋技術學報,2016,35(1):102-105.
[3] 中達電通股份有限公司.臺達高機能通訊型伺服驅動器ASDA-A2系列應用技術手冊[Z].2014.
[4] 鄭志雄,胡愛蘭.LPC1768的全雙工UART的軟件模擬實現[J].單片機與嵌入式系統應用,2013,13(6):25-28.
[5] 李家寶,鄭曉紅,王團部.單片機外中斷擴展及其多優先級軟件實現方法[J].現代電子技術,2006(17):140-143.
[6] 孟慶浩,周清清,禹東川.基于GSM/GPRS的海上導航燈器遠程監測系統[J].儀器儀表學報,2006(2):195-198.
[7] 孟英紅,齊婉玉,段學鋒.用L297,L298組成步進電機驅動電路[J].儀器儀表學報,2003,24(2):573-574.
[8] 周術誠,蔣萌輝,寧正元.微機與單片機串行通信中斷方式的實現[J].福州大學學報(自然科學版),2001,29:79-82.
[9] 李茂軍,劉鼎邦,張春光,等.步進電機細分驅動電磁轉矩分析[J].控制工程,2013,30(2):243-245.
[10] Eefocus. Keil Cx51編譯器編譯模式[EB/OL].(2015-09-29)[2016-09-19].http://www.eeworld.com.cn/mcu/2015/0929/article_22621.html.
作者信息:
王心鵬,門雅彬,張東亮,董 濤,孔佑迪
(國家海洋技術中心,天津300112)