,
(鎮(zhèn)江船艇學院,江蘇 鎮(zhèn)江 212003)
船舶隨動舵是航海模擬訓練器中用來操縱船舶航向的模擬裝置,其設計目標是仿真實際航海舵,自動、連續(xù)、精確地反映船舶航行的方向信號。在操縱過程中,隨動舵不停地轉動,這就要求計算機能夠實時地檢測出方向盤的方向和角度,故筆者采用旋轉編碼器結合CPLD技術實時檢測船舶隨動舵的方向和角度。
測量系統(tǒng)主要由聯(lián)軸器、增量式旋轉編碼器[1]、計算機系統(tǒng)組成。
用聯(lián)軸器將被測的船舶隨動舵與旋轉編碼器連接,隨動舵往復旋轉時帶動編碼器旋轉,其旋轉時將產(chǎn)生10位二進制數(shù)字信號,也就是編碼器提供的脈沖數(shù)量,通過CPLD技術和預先編寫好的程序將脈沖的數(shù)量累加計算。
船舶隨動舵在往復運動過程中,要實時檢測旋轉方向和旋轉角度。隨動舵旋轉的角度由旋轉圈數(shù)產(chǎn)生脈沖和單圈內(nèi)旋轉產(chǎn)生的脈沖累加而得[2]。
增量式旋轉編碼器輸出信號通常有2種形式:單端輸出和雙端輸出。單端輸出指轉軸旋轉時,有相應的一組脈沖輸出,其計數(shù)點(Z相)任意設定,可實現(xiàn)多圈無限累加和測量。但不能判斷旋轉的方向,也就不能測出隨動舵在旋轉過程中的方向。雙端輸出的旋轉編碼器則輸出兩組相位相差90°的脈沖(A、B相),通過這兩組脈沖不僅可以測量單圈內(nèi)旋轉角度,還可以判定旋轉方向。隨動舵在進行多圈旋轉時,編碼器的Z相可以計數(shù),從而可以準確判定隨動舵的方向、計算轉過的角度。
設計中選用雙端輸出,先判斷旋轉方向,然后判斷轉動的角度。旋轉方向的判斷是采用2個(A、B相)相位差90°的方波編碼方式,由A、B相2個波形的相位差決定,Z相是當旋轉編碼器轉一圈或者回轉時歸零將輸出方波脈沖。
當輸出波形A相超前于輸出波形B相時(圖1a)),認為順時針旋轉,反之,輸出波形A相滯后于輸出波形B相時(圖1b)),認為逆時針旋轉。如果旋轉方向發(fā)生變化時,其輸出信號發(fā)生鏡像翻轉(圖1c))。這樣通過A、B相的先后順序就很容易地判斷出隨動舵的轉動方向。
圖2 芯片設計原理圖
a) A相超前B相
b) A相滯后B相
c) 旋轉方向變化圖1 A、B相關
分辨率是旋轉編碼器的主要參數(shù),分辨率就是每轉脈沖數(shù),由編碼器的光柵線數(shù)決定,線數(shù)越多,分辨率越高。本文選用的是每轉1 024個脈沖的編碼器,分辨率為1 024/360°。一般情況下,以A相或者B相中的一相進行脈沖計數(shù)即可得到轉動的角度。如果要求系統(tǒng)精度更高,可以對A、B兩相分別進行計數(shù),這樣測量的精度可以提高4倍,相當于分辨率為4 096/360°。
隨動舵往復旋轉時,編碼器產(chǎn)生的10位二進制數(shù)字信號的計數(shù)由復雜可編程邏輯器CPLD完成。系統(tǒng)選用Altera公司生產(chǎn)的EPM7032SLC44-10芯片,利用軟件MAX+plusII編程實現(xiàn)對芯片的設計,邏輯原理見圖2。
和普通的可編程邏輯器件相比,CPLD具有以下優(yōu)點:操作靈活,使用方便;高性能的邏輯能力;存儲元胞密度高;可靠性好,經(jīng)久耐用;能實現(xiàn)電擦除;能為器件提供快速編程。其設計一般是一種“自上而下”的設計[3],設計過程包括下面幾個方面:
1) 行為設計。確定所設計的系統(tǒng)或CPLD芯片的功能、性能及允許的芯片面積或成本。
2) 結構設計。根據(jù)該系統(tǒng)或CPLD的特點,將其分解為接口清晰、相互關系明細、盡可能簡單的子系統(tǒng),得到1個總體結構。這個結構可能包括算術運算單元、控制單元、數(shù)據(jù)通道、各種算術狀態(tài)機等。
3) 邏輯設計。盡可能采用規(guī)則的邏輯結構或采用自己經(jīng)過考驗的邏輯單元或模塊。
4) 電路設計。將邏輯圖轉換成電路圖,在很多情況下,這時需要進行硬件仿真以最終確定邏輯設計的正確性。
最后,將設計好的電路經(jīng)過編譯,形成熔絲文件,將該文件下載到選定的CPLD就成為可以完成固定功能的ASIC了。在整個開發(fā)程序中,利用軟件MAX+plusII編程可完全實現(xiàn)設計和仿真。
圖2中,以A相脈沖數(shù)量來計算旋轉的角度,B相脈沖輔助判斷旋轉方向,Z相脈沖計算旋轉圈數(shù)。當編碼器順時針旋轉時,A相超出B相,A相上升沿到來時B相為低電平,則D觸發(fā)器輸出Q為低電平;當編碼器逆時針旋轉時,A相滯后B相,A相上升沿到來時B相為高電平,則D觸發(fā)器輸出Q為高電平,這樣根據(jù)D觸發(fā)器輸出Q電平的高低可以判定隨動舵的方向了。當隨動舵轉過一圈,Z相就會自動累加一個脈沖。這樣隨動舵轉過的角度就能真實地在航海模擬器中反映出來,指導實際操縱。圖2中相對應的VHDL編程如下:
PROCESS(NA)
BEGIN
IF(NA’ EVENT AND NA=‘1’)THEN
AB <= NB;
END IF
END PROCESS
根據(jù)A、B相變化前后狀態(tài),可以準確的判定旋轉方向。一圈內(nèi)以A相脈沖數(shù)量計數(shù)的VHDL編程如下:
PROCESS(NA,NB)
BEGIN
IF(NA′ EVENT AND NA=′1′)THEN
IF(NB=′1′)THEN
Counter <= Counter+1;
ELSE
Counter <= Counter-1;
END IF
END IF
END PROCESS
Z相表示多圈的計數(shù),VHDL編程如下:
PROCESS(Z,AB)
BEGIN
IF(Z′ EVENT AND Z=′1′)THEN
IF(AB=′1′)THEN
Counter <= Counter+1;
ELSE
Counter <= Counter-1;
END IF
END IF
END PROCESS
這樣就完成了方向的判定及編碼器的計數(shù)。運用CPLD技術對編碼器進行判定和計數(shù)時,考慮到旋轉編碼器的控制電源可以在較大范圍內(nèi)變化使用,為了確保系統(tǒng)的安全可靠,必須進行光電隔離[4]。同時為了防止噪聲引起的信號抖動,應采用斯密特觸發(fā)器進行抗抖動和信號處理。
本系統(tǒng)采用VC++進行軟件編程,在隨動舵的位置狀態(tài)檢測時,初始狀態(tài)設置為0,通過軟件定時掃描,檢測結果隨時傳送給主程序,流程見圖3。
圖3 檢測流程圖
將隨動舵的實時位置狀態(tài)建立強有力的數(shù)據(jù)庫應用程序,采用動態(tài)連接庫(DLL)技術,實現(xiàn)I/O接口函數(shù)的動態(tài)調(diào)用。DLL的代碼在運行時加載,同時被映射到其他進程的地址空間中。這樣就允許幾個不同的進程在內(nèi)存中共享DLL,從而實現(xiàn)代碼的共享和系統(tǒng)的優(yōu)化。這樣實時檢測到的隨動舵的狀態(tài)和航海模擬器的視景系統(tǒng)軟件有機地結合在一起。
利用編碼器測量隨動舵的方向和角度的方法已經(jīng)應用于多套船舶操縱模擬訓練系統(tǒng)中,訓練結果表明,該測試方法能精確的反映出實時航向信號,仿真效果好、工作可靠,顯示出廣泛的應用前景。
[1] 戴新敏,陸 榮.旋轉編碼器的應用[J].科技資訊,2006,23:2.
[2] 于曉東,胡大欣.旋轉編碼器在回轉體角度測量的應用[J].林業(yè)機械與木工設備, 2005, 33(2):67-68.
[3] 何 靜,李清峰.基于CPLD的混合邏輯乘法器的設計[J].微計算機信息,2006,2(2):244-246.
[4] 賀勝洪,錢學軍.基于CPLD技術的多通道編碼器數(shù)據(jù)采集系統(tǒng)[J].自動化與儀器儀表,2003(5):4-7.