3軟件設計及實現
根據硬件架構,分別對DSP和FPGA進行軟件功能分析和具體編程實現。
FPGA部分使用Xilinx公司的ISE10.1開發軟件,采用Verilog語言,接受從接口管腳輸入的編碼器信號,相應地實現對海德漢高精度增量式編碼器輸出并經細分盒細分后的TTL脈沖計數和參考信號生成,或者是與絕對式編碼器的Endat2.2通信。DSP部分開發軟件采用TI公司的CCS5.2,使用C語言進行編程。DSP完成對信號最終的位置合成處理,在這里,首先要定義編碼器的相關參數,如:編碼器總刻度數、分辨率、帶參考碼道的增量式編碼器的參考點數,還要考慮增量信號進入FPGA前的細分數(取決于IBV600),以及FPGA對TTL計數是否進行四倍頻等。使用時,根據具體編碼器類型進行參數修改。
軟件實現了對高精度海德漢增量式編碼器和絕對式編碼器的位置值的讀取。下面將分別進行介紹。
3.1測量增量式編碼器位置值
3.1.1 相關部分的FPGA設計
增量式編碼器是一旋轉式光電編碼器,根據軸所轉過的角度,輸出一系列脈沖。一般來說編碼器輸出有三相信號:A、B、Z。A、B兩相信號是相位相差90°的正交方波脈沖串,每個脈沖代表被測對象旋轉了一定的角度,A、B之間的相位關系則反映了被測對象的旋轉方向,即當A相超前B相,轉動方向為正轉;當B相超前A相,轉動方向為反轉。Z信號是一個代表參考碼道的脈沖信號,可用于調零、對位。對象每旋轉一定角度時,A、B兩者的脈沖發生變化,根據AB相位變化方向和脈沖個數來計算角位移[8]。當AB相位變化為00 10 11 01 00時,為輸出正轉計數脈沖,脈沖計數P加1;當AB相位變化為00 01 11 10 00時,為輸出反轉計數脈沖,脈沖計數P減1。相位變化幾次計數操作幾次。需要指出的是,相位的狀態變化只有嚴格按照上面8中方式改變時,FPGA才進行計數操作。在Verilog編程時,可以把前一個AB相電平狀態和后一個AB相電平狀態組成一個散轉地址向量,然后把這個向量作為條件語句,進行計數操作。比如,當AB從00變為10時,向量就為0010,P=P+1。相反,若AB從10變為00,這個向量就為1000,P=P-1。下面為FPGA讀取TTL數據并組成散轉地址向量的Verilog代碼:
always @(posedgeinClk)
begin
regUa1a2State <= {inIncUa1,inIncUa2};//讀取AB向量
if(regUa1a2State!=regAllState[1:0]) //狀態變化
begin
regAllState<= {regAllState[1:0],regUa1a2State};//組成新的散轉地址向量
regPulseStateChanged<= 1;
end
elsebegin
regPulseStateChanged<= 0;
end
end
另外,增量式編碼器不具有斷電記憶功能,每次啟動時都需確定零位。以前,只有一個零位參考點時,有時需轉360°Z相位出現脈沖才能確定零位。高精度海德漢編碼器參考點碼道有若干個距離編碼參考點,任一參考點經過讀數頭時,Z相位輸出脈沖。此時,需要把之前的脈沖計數P保存下來(記為Q),P清零。這樣,每次Z相位輸出脈沖時,P的數值就為上次經過參考點后的脈沖數,這是DSP確定零位和當前參考點的重要依據。
FPGA測得4個讀數頭的4組信息,寫入雙口,等待DSP讀取。每組寫入雙口的數據有兩個:①上一次過參考碼道時的計數增量計數RefPulseCnt(Q值),②增量計數PulseCnt(P值)。
3.1.2 相關部分的DSP設計
DSP程序中先生成增量式編碼器參考碼道的參考角度,也就是每個距離編碼參考點所對應的脈沖數以及角度。又因為每兩個參考點間脈沖數(即Q值)是不同且唯一的,可以根據讀取的FPGA雙口中的Q值確定最近經過的參考點,然后“查表”可以得到該參考點的角度。同時,DSP讀取P值再乘以分辨率得到已當前參考點后的角度,合成后兩者相加可以確定相應讀數頭測得的位置值。分辨率為360°/刻度值總刻度數*進入FPGA前細分數*4(本模塊FPGA對TTL計數的處理實質就是對AB路信號進行了4倍頻)所有讀數頭過完零以后,輸入到DSP的4路讀數頭信號相對參考碼道的零點而言,都有一個絕對位置。一般來說,安裝讀數頭時,要參考測量的單個讀數頭的位置值對4個讀數頭的位置要進行調整,通常,相鄰兩個讀數頭之間相差90度最好。以任何一個讀數頭為基準,其他3個讀數頭的絕對位置相對基準讀數頭而言的位置差為90°,180°,270°。為了簡化,以電路板輸入端口的1作為基準量。合成位置量為A=(A1+A2+A3+A4-90-180-270)/4=(A1+A2+A3+A4-540°)/4,由于有安裝系統誤差,且要求合成位置值要大于0,計算時可以用520°替代540°。其范圍為(e,e+359.999999),e為誤差,這個時候要對360做求模處理,最后得到的合成值的工作范圍就為(0,359.9999999)。
3.2 測量絕對式編碼器的位置值
模塊參考海德漢公司提供的endat2.2相關技術手冊[5] [9],設置好參數:根據編碼器位數和模式命令設置傳輸的數據位數ct_tx_oem_value、ct_rx_oem_value;需要傳送的附加信息個數ai_count;傳輸時鐘頻率參數freq_oem_value;恢復時間III ( tST)的設置參數freq_tst_value等。測量EnDat2.2的子文件根據參數轉換狀態機,進行相應操作。另外,程序帶有電纜傳輸延遲測量模塊pdm。然后,按照下圖4的格式根據自己對信息的需求設置向編碼器傳輸的信號d_in。在系統時鐘上升沿到來后立即通過start_trans信號控制開始與編碼器通信。接收編碼器數據,讀出相應d_out信號數據,得到代表位置值的數據寫入雙口。
圖4endat2.2輸入數據“d_in”
上圖中,Mode bits為6位模式指令,最基本的編碼器發送位置值模式為000111。模式指令和其他參數的含義都可以在技術手冊中查到。
DSP從FPGA雙口RAM中讀取絕對式信號數據,取有效位數后再乘以該絕對式編碼器的分辨率即得到位置信息。分辨率為360°/2^N,N是對應的絕對式編碼器位數。
3.3 數據輸出
模塊通過RS422異步串行接口與上位機進行通信,串行接口通過DSP的SCI口實現,設計的模塊同時需要上位機發送的同步采樣頻率信號,將其與DSP相連,作為中斷信號啟動ISR功能。同時,該信號管腳通過跳針把該外同步時鐘分給FPGA。這樣,保證兩者的時鐘源是統一的,然后DSP訪問FPGA的雙口就能實現正確讀取所需數據。過程時序示意圖如圖5所示:
?
圖5整體過程時序示意圖
如上圖所示,在t_1時,FPGA即啟動與編碼器的通信,在t_2時,FPGA把增量式編碼器脈沖計數或者絕對式編碼器信息存入雙口,在t_3時,外同步時鐘上升沿啟動DSP中斷程序,讀取已經存儲在FPGA雙口中的數據并合成位置值,合成量綱后通過RS422接口把絕對位置值傳遞給主控機箱。這樣,主控得到的數據是上一幀的數據,即有一幀的延遲,時鐘頻率越大,延遲越小。因此,對采樣頻率有一定要求,不能太低。
4實驗及數據分析
模塊設計好以后,需搭建平臺檢測是否實現功能。實驗平臺如圖6所示:
圖6實驗平臺
如圖6所示:打開電源控制開關,然后從PC機把DSP和FPGA程序分別通過仿真器加載到F28335和XC3S700AN芯片中,打開主控機箱。最后,點擊CCS上的運行鍵,撥動編碼器,可在CCS軟件界面右上方的變量觀察窗口觀察編碼器位置值。界面如下圖7所示:
?
圖7實驗時,觀察位置值的CCS界面
本實驗中,所使用的編碼器為23位海德漢絕對式編碼器ECN1023,外同步時鐘源為500HZ。FPGA內部頻率為10MHz,向Endat2.2輸入的頻率為64MHz的32分頻。觀察到該界面中位置值為359.8117303848267度。在實驗中通過real-time與自動刷新功能還觀察到,界面上數據的變化與編碼器的轉動幾乎同步,編碼器停止轉動后,數據小數點后前3位之前的數據非常穩定,第3、4、5位數據比較穩定。由此可見,本模塊滿足了一定的測量速度和測量精度,能夠很好工作。
通過實驗對本模塊的性能有了一定了解后,還需對精度進行檢測。通過模塊與標準檢測儀同時測量一臺海德漢絕對式編碼器,360度測量正反相各測24組值。結果,正測RMS值為0.67角秒,極差為1.9角秒;反測RMS值為0.76角秒,極差為2.2角秒。兩組誤差曲線圖如下圖8所示:
?
圖8正反轉檢測兩組誤差數據曲線
從圖中觀察到,從0到23的24組數據皆是從0度到36度變化時測量得到的。如圖所示,兩組誤差曲線基本重合,可在最大誤差點加個修正值減小誤差。
結語
編碼器應用廣泛。本文詳細介紹了一個測量各類海德漢編碼器的數據的通用且實用的模塊。該模塊基于Xilinx FPGA平臺和TI DSP平臺,使用和調試方便,使用者可快速掌握;通過了實驗和精度的檢測,實現了設計目的,工作可靠;模塊小巧,可以與上位機通信,可以很好的被結合到嵌入式系統中。目前,本模塊已用于實驗轉臺用的增量式和絕對式編碼器數據的處理,擬結合到實驗室驅動控制機箱中,正進一步開發它對海德漢絕對式編碼器Endat2.2附加信息的測量和處理。
評論
查看更多