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