廖文鑫,陳光勝
(上海理工大學機械工程學院,上海 200093)
振鏡是激光振鏡掃描的核心部件,由于數(shù)字振鏡抗干擾能力強,已成為研究激光振鏡掃描的主要方向。在高精度數(shù)字振鏡控制系統(tǒng)中,通常采用正余弦編碼器獲取高精度位置數(shù)據(jù),但正余弦編碼信號的糾偏和細分效果是影響位置檢測效果的重要因素?,F(xiàn)階段常見的細分方法包括CORDIC 反正切算法細分、麥克勞林級數(shù)算法細分、閉環(huán)跟蹤算法細分、跟蹤環(huán)路算法細分等。
王強等[1]提出的CORDIC 反正切算法和李雪等[2]提出的優(yōu)化CORDIC 反正切算法均在FPGA 上實現(xiàn),但這類方法都不可避免地需要進行多次角度旋轉(zhuǎn)、運算迭代來計算細分值,迭代次數(shù)越多,細分精度也就越高,但運算處理時間也會隨之增加,造成算法獲取高精度位置周期長、消耗大。劉海龍等[3]提出運用麥克勞林級數(shù)展開式反向數(shù)據(jù),直接擬合正余旋編碼信號的相位以計算細分值,該方法獲取的細分值精度直接取決于正余旋編碼信號的質(zhì)量,因此對調(diào)理硬件電路設(shè)計的要求過高。吳立等[4]提出的閉環(huán)跟蹤算法細分和馬澤龍[5]提出的跟蹤環(huán)路算法都通過構(gòu)建閉環(huán)結(jié)構(gòu)計算當前角度與辨識角度誤差,以實時調(diào)整辨識角度,調(diào)整后的辨識角度即為細分值,該類方法的細分數(shù)可高達223,但構(gòu)建的閉環(huán)結(jié)構(gòu)十分復(fù)雜,運算環(huán)節(jié)較多,對硬件資源消耗極大。
為在減少算法對FPGA 硬件資源的消耗、簡化電路設(shè)計的同時,滿足位置獲取周期的要求。本文運用外部芯片處理正余弦編碼信號糾偏和細分,F(xiàn)PGA 讀取和解碼芯片的位置數(shù)據(jù)信息。具體的,利用IC_NQC 芯片完成正余弦編碼信號的糾偏和細分,然后利用BISS_C 模塊配置IC_NQC 芯片讀取振鏡位置信息,最后通過解碼模塊獲取振鏡位置。其中,位置獲取精度由配置參數(shù)決定,位置獲取速度由BISS_C 通信協(xié)議周期決定。
IC_NQC 是IC_Haus 公司出廠,帶信號校準的13 位Sin/D 轉(zhuǎn)換器,采用BISS_C 協(xié)議進行通訊。通過動態(tài)糾偏和細分技術(shù),將正余弦編碼信號數(shù)字化處理為細分精度可調(diào)的位置數(shù)據(jù)信息。采用數(shù)字量動態(tài)補償獲取高質(zhì)量的正余弦編碼信號,首先利用內(nèi)部集成的A/D 轉(zhuǎn)換器采樣當前正余弦信號并將數(shù)據(jù)傳輸至IC_NQC 內(nèi)部控制器,然后通過控制器測量當前正余弦信號的直流電平、幅值和相位并計算相對應(yīng)的補償值,接下來將補償值寫入對應(yīng)的偏置寄存器,最后通過D/A 轉(zhuǎn)換器調(diào)節(jié)可編程硬件電路,實現(xiàn)對正余弦編碼信號的糾偏。
糾偏過程需要預(yù)先配置寄存器的信號調(diào)節(jié)類功能位。例如,增益選擇(GAIN)、sin 信號偏移校準(SINOFFS)、cos信號偏移校準位(COSOFFS)等。糾偏后的正余弦信號既需要通過IC_NQC 內(nèi)置的周期計數(shù)器累計正余弦信號個數(shù),還要經(jīng)過反正切硬件電路進行細分。細分精度由反正切運算精度決定[6],反正切運算精度由寄存器的分辨率位(SELRES)決定。周期計數(shù)器值和反正切值由BISS_C 進行通信傳輸[7],根據(jù)配置寄存器的BISS 類功能位設(shè)置協(xié)議版本(Protocol Version)、數(shù)據(jù)輸出選項(M2S)及超時(TIM0)。
數(shù)字振鏡位置檢測原理如圖1 所示。其中,Mecury_1200 相對編碼器一般安裝于振鏡電機底部,當振鏡電機擺動時,Mecury_1200 會輸出差分正弦信號、差分余弦信號和差分零位信號[8]。為提高信號質(zhì)量,這三組差分信號會分別經(jīng)過IC_NQC 接口電路進行濾波處理。具體的,由FPGA的IC_NQC 配置模塊發(fā)送命令幀,通過BISS_C 通訊模塊的時鐘線MA 將命令幀傳輸至IC_NQC 芯片,復(fù)位芯片開始配置寄存器[9]。然后,利用IC_NQC 芯片對差分信號進行數(shù)字量動態(tài)糾偏,通過硬件電路對信號分別進行計數(shù)和反正切細分運算,以取得數(shù)字量位置數(shù)據(jù)信息。最后,通過BISS_C 通信模塊的輸出線(SLO)與零位信號線(Zero)提取數(shù)字量位置數(shù)據(jù)中的周期計數(shù)數(shù)據(jù)(P)、角度數(shù)據(jù)(A)和零信號數(shù)據(jù)(Z),并通過位置解碼模塊獲取當前振鏡電機的位置數(shù)據(jù)。
Fig.1 Principle of digital galvanometer position detection圖1 數(shù)字振鏡位置檢測原理
3.1.1 寄存器寫操作命令幀
為實現(xiàn)IC_NQC 芯片通訊,必須首先配置芯片寄存器功能位[10]。圖2 為利用BISS_C 協(xié)議對寄存器執(zhí)行寫操作的一個命令幀的數(shù)據(jù)結(jié)構(gòu)。
其中,初始位主要用于等待上一次命令幀的結(jié)束,由14bit 組成;起始位(S)、停止位(P)及控制選擇位(CTS)都為1bit,前兩者取1,后者取0;器件地址(IDL)主要為IC_NQC 的確定地址;讀控制位(R)與寫控制位(W)為低電平有效,執(zhí)行寫操作取1;寄存器地址位(ADR)和寄存器配置數(shù)據(jù)(DATA)需要根據(jù)功能選擇相應(yīng)的寄存器標志位進行配置;校驗位(CRC)是CRC 校驗的結(jié)果值,第一個用于校驗IDL 與ADR 組合數(shù)據(jù),后一個是用于校驗DATA數(shù)據(jù)。
Fig.2 Command frame data structure圖2 命令幀數(shù)據(jù)結(jié)構(gòu)
3.1.2 寄存器寫操作
寫操作主要將命令幀數(shù)據(jù)的每一位,通過時鐘線MA的控制數(shù)據(jù)操作位CDM 發(fā)出,命令幀數(shù)據(jù)的每一位均需要一個BISS_C 單周期傳輸[11]。IC_NQC 芯片寄存器寫操作主要分為以下兩種:
(1)如圖3 所示,IC_NQC 復(fù)位寫操作[12],數(shù)據(jù)傳輸線SLO 一直為高電平1,時鐘線MA 連續(xù)發(fā)出4 個脈沖,單個脈沖時間周期范圍為0.1~25us,隨后發(fā)送CDM 位的反碼,持續(xù)時間要超過30us。
Fig.3 IC_NQC reset write operation BISS_C single cycle sequence圖3 IC_NQC復(fù)位寫操作BISS_C單周期時序
(2)如圖4 所示,寄存器配置寫操作[13],當芯片復(fù)位后對IC_NQC 芯片寄存器的其它功能位進行寫操作,在MA的第2 個脈沖上升沿,SLO 進入應(yīng)答位(ACK)默認為0,第3 個脈沖上升沿進入開始位(Start)默認為0,第4 個脈沖上升沿進入控制數(shù)據(jù)抓取位(CDS),電平狀態(tài)與上一個BISS_C 周期的CDM 位相同,在最后一個脈沖上升沿MA 進入CDM 位,發(fā)送CDM 的反碼,SLO 進入超時階段(Time?Out),電平與CDS 位相同,并且保持至少46 個MA 脈沖周期以上,單個MA 脈沖周期最短為0.1us。
Fig.4 Register configuration write operation BISS_C single cycle se?quence圖4 寄存器配置寫操作BISS_C單周期時序
3.1.3 位置數(shù)據(jù)信息采樣
圖5 為位置數(shù)據(jù)信息采樣BISS_C 單周期時序圖。時序中,前4 個時鐘線MA 脈沖對應(yīng)的數(shù)據(jù)線SLO 變化和MA脈沖周期時間的要求與圖4一致。
在第5 個時鐘上升沿MA 不再進入CDM 位,而是作為采樣時鐘采集單周期數(shù)據(jù)SCD。單周期數(shù)據(jù)SCD 主要包括周期計數(shù)數(shù)據(jù)P、角度數(shù)據(jù)A、錯誤標志位ERROR 和校驗位CRC。其中,錯誤標志位為2 位,周期計數(shù)數(shù)據(jù)位P、細分數(shù)據(jù)位A 和校驗位CRC 均需通過寄存器數(shù)據(jù)進行配置。當MA 進入CDM 發(fā)送CDM 的反碼時,CDM 電平取0,SLO 進入超時階段(TimeOut),電平取0,并且保持至少46個MA 脈沖周期以上。
Fig.5 Location data information sampling BISS_C single cycle sequence圖5 位置數(shù)據(jù)信息采樣BISS_C單周期時序
3.2.1 通訊流程
圖6 為FPGA 與IC_NQC 通訊流程圖,時鐘線MA 波特率設(shè)置為5MHZ。首先,通過IC_NQC 進行復(fù)位寫操作,BISS_C 通信模塊以圖4 時序方式對IC_NQC 芯片逐位發(fā)送復(fù)位類寄存器功能位的命令幀。若零位置信號Zero 從高電平轉(zhuǎn)為低電平時,則代表復(fù)位完成,否則重新執(zhí)行復(fù)位操作。復(fù)位完成后,對IC_NQC 芯片進行寄存器配置寫操作,即通過BISS_C 通信模塊以圖5 時序方式逐位發(fā)送各寄存器功能位的命令幀。若在BISS_C 周期中,數(shù)據(jù)線SLO的CDS 位與上一周期的CDM 位(設(shè)為CDM1)均一致,則代表IC_NQC 寄存器配置完成,否則寄存器配置失敗,需重新回到復(fù)位操作。
寄存器配置完成后,通過BISS_C 通信模塊以圖5 時序方式采集IC_NQC 的單周期數(shù)據(jù)SCD,對周期計數(shù)數(shù)據(jù)位P和細分數(shù)據(jù)位A 的數(shù)據(jù)組合進行CRC 校驗(CRC 校驗的多項式由寄存器功能位M2S 決定),若校驗值的二進制表示與CRC 校驗位一致,則代表采集數(shù)據(jù)無誤,接下來將數(shù)據(jù)輸入位置解碼模塊進行處理,否則等待數(shù)據(jù)線SLO 超時階段(TimeOut)結(jié)束,進行下一BISS_C 周期位置數(shù)據(jù)采集。通常在實際應(yīng)用中,由于CRC 校驗正確代表著檢測錯誤標志位必然正確,因此省略了錯誤標志位E[1:0]檢驗。
Fig.6 FPGA and IC_NQC communication flow chart圖6 FPGA與IC_NQC通訊流程圖
3.2.2 位置解碼
IC_NQC 位置數(shù)據(jù)由周期計數(shù)器P 與角度值A(chǔ) 構(gòu)成,均為二進制表示。周期計數(shù)器P 累計一段弧度經(jīng)過正余弦個數(shù),為了保證位置坐標的唯一性,周期計數(shù)器P 累計最大正余弦個數(shù)所表示的弧度必須超過振鏡擺動范圍。
由于采用相對位置編碼器,為了確定唯一坐標,零信號位置對應(yīng)坐標零點,周期計數(shù)器P 應(yīng)全表示為0[14]。角度值A(chǔ) 為正余弦反正切計算的細分值,角度值A(chǔ) 的單位值代表位置坐標的最小分辨率[15]。振鏡運動方向由周期計數(shù)器P 和角度值A(chǔ) 累計的方式予以體現(xiàn)[16-17],當振鏡運動經(jīng)過一個正余弦時,順時針周期計數(shù)器P 累計遞減,逆時針運動P 累計遞增;當振鏡運動未經(jīng)過一個正余弦時,順時針角度值A(chǔ) 累計遞減,逆時針角度值A(chǔ) 遞增累計。此外,當零信號位置順時針移動一個正余弦,周期計數(shù)器P表示為全1。
為了便于后續(xù)處理位置坐標值,需要將位置值表示為32位浮點數(shù)。計算公式如式(1)所示。
其中,PF為P 處理后的32 位浮點化值的十進制表示。具體處理過程為:當P 的最高位為1 時,P 作反碼運算,并進行32 位浮點化處理,最后與-1 的32 位浮點數(shù)作浮點數(shù)減法得到32 位浮點數(shù)PF;當P 的最高位為0 時,直接進行32 位浮點化得到PF。AF為A 的32 位浮點數(shù)的十進制表示,2N為細分數(shù)(N為角度值A(chǔ) 的位數(shù)),C為零信號位置與實際位置坐標零點的偏置值,K為編碼器坐標與實際位置坐標轉(zhuǎn)化的角度系數(shù)[18]。圖7為位置解碼流程圖。
Fig.7 Flow chart of location decoding圖7 位置解碼流程圖
如圖8 所示,實驗搭建的數(shù)字振鏡位置檢測實驗平臺采用某一國產(chǎn)擺動電機并安裝有振鏡片[19],電機擺動范圍為±0.191 9rad,電機底部安裝Mercury_1200 正余弦相對編碼器,單位正余弦對應(yīng)的弧度為2.308mrad??刂浦靼宓目刂浦餍酒吞枮閄linxSpand6LX45,并安裝有13 位Sin/D轉(zhuǎn)換器IC_NQC。
Fig.8 Experimental platform圖8 實驗平臺
在ISE14.6 軟件環(huán)境下,分別對CORDIC 反正切算法細分檢測方法[20-21]、麥克勞林級數(shù)算法細分的檢測方法、閉環(huán)跟蹤算法細分的檢測方法及本文采用的IC_NQC 細分檢測方法進行比較,設(shè)置以上方法的細分數(shù)均為1 024,通過型號為XlinxSpand6LX45 的FPGA 實現(xiàn)并進行綜合編譯。其中,寄存器、查找表和片選等FPGA 核心硬件資源消耗數(shù)量如表1所示。
Table 1 Comparison of FPGA hardware resource consumption表1 FPGA硬件資源消耗對照表
由表1 可見,采用IC_NQC 細分方式的檢測方法寄存器和查找表和片選消耗都至少減少了30%。
將IC_NQC 細分檢測方法作為三閉環(huán)控制器的位置反饋環(huán),設(shè)置細分精度為2.25urad。通過fifo 模塊采集位置數(shù)據(jù),UART 串口進行傳輸,由MATLAB 進行數(shù)據(jù)處理和顯示,采樣時間為28.1us。零點位置波動圖如圖9所示。
Fig.9 Zero position fluctuation圖9 零點位置位置波動
由圖9 可見,控制器的定位誤差為9urad,能夠滿足高精度振鏡控制對重復(fù)定位誤差的要求。
通過三閉環(huán)控制器將振鏡固定至零點位置,控制振鏡間歇式作20ms 的勻速擺動,單周期勻速運動時間為10ms,速度為4mrad/s,運動位置波動圖如圖10所示。
由圖10 可見,3 個周期勻速運動階段平均速度分別為4.037mrad/s、4.015mrad/s 和4.009mrad/s,最大速度誤差為0.037mrad/s,能夠滿足高精度振鏡控制對速度偏差的要求。
通過實踐驗證,IC_NQC 細分方式相較于以往檢測方法,在相同位置檢測精度的條件下,硬件資源消耗至少了減少了30%,位置獲取周期為28.1us,通過1 024 細分方法能夠有效滿足高精度數(shù)字振鏡控制對位置獲取及誤差的要求。
Fig.10 40mrad/s constant speed intermittent motion position fluctu?ation圖10 40mrad/s勻速間歇運動位置波動圖