顧曉威,胡 毅,占瑜毅
(合肥工業大學 儀器科學與光電工程學院,合肥 230009)
關節臂坐標測量機為一類應用廣泛的三坐標測量機,其測量范圍不受導軌、標尺和工作臺尺寸限制,具有測量空間開闊的特點,更容易深入到正交坐標測量機不易深入的工件部位去測量,并且具有靈活、便攜、經濟、采集數據速度快等優點,適宜于車間現場使用,深受業界人士的好評,其中對多路光柵傳感器輸出信號進行處理和傳輸的研究是很重要的一方面。傳統多光柵采集系統多使用分立的邏輯電路和芯片,即把每路信號分別放在一片專用芯片中處理,再加上通信接口芯片等電路元件,容易造成系統結構復雜,可靠性和通用性差,不利于調試,處理速度慢等缺點。如果在一片FPGA芯片上集成多路光柵信號的處理與傳輸功能,可以抗干擾,減少系統的復雜度,從而提高系統的可靠性和速度。由于單片芯片體積小,還可以嵌入到其他系統中。而且FPGA芯片設計周期短,成本低,靈活性高,可以方便地對電路進行修改,必要的時候可以加入其它模塊[1],比如在各種不同總線的系統中使用時,對于數據傳輸的接口,不會再受到專用芯片接口單一且固定的限制,可以隨時增加或修改接口模塊以適應不同總線數據傳輸的需要。

圖1 光柵輸出信號特征Fig.1 Grating output signal characteristics

圖2 系統整體結構Fig.2 Overall structure of the system
在坐標測量機的設計中,測頭定向位置由3個關節6個圓光柵傳感器確定,對圓光柵輸出脈沖計數可實現角度的測量[2]。本設計采用FPGA芯片EP4CE6F17C8作為核心控制器,實現對關節式坐標測量機光柵信號數據采集處理系統,以取代價格貴、功能單一的專用芯片。光柵信號首先通過前置差分處理電路,再由FPGA進行整形、細分辨向、計數處理,最終串口通信發送到上位機軟件,并根據FPGA模塊化的特點,后期可實現多個光柵角度的采集。
增量式圓光柵編碼器一般有A相、B相及Z相3個輸出。A相、B相信號包含了圓光柵編碼器的旋轉方向、旋轉速率等信息[3]。每移動一個柵距,就會輸出兩路相位相差90°的A、B脈沖方波信號(如圖1),只需準確記錄這些脈沖的數目,就能夠精確計算出相對位移以及方向。除了A、B信號外,還有一個Z脈沖信號,這個脈沖信號作為參考點,用于異步清零,可以矯正系統的計數數據,避免累計誤差,確保了計數的準確度[4]。
本系統本質上就是實現對AB脈沖數的采集以及AB相位判斷,其整體結構如圖2所示,系統分為整形、細分辨向、計數、串口通信4大模塊。整形模塊主要是為了濾除高頻干擾對系統的影響;細分辨向模塊主要完成4倍頻和辨向功能;通信模塊主要作用是把角度信息上傳到上位機,便于后續處理。

圖3 整形模塊電路Fig.3 Shaping module circuit
信號整形模塊主要的作用是完成光柵信號的整形,防止一些信號毛刺的干擾,本質上是一個實現去抖濾波的數字濾波器(RTL電路如圖3)。其核心功能是用時鐘信號CLK_50M檢驗輸入方波信號的脈沖寬度,將小于3個CLK周期的窄脈沖視為抖動干擾加以過濾。一般情況下,時鐘信號CLK_50M頻率遠大于光柵信號頻率。因此,可以用時鐘信號的邊沿去采樣光柵輸出信號電平狀態。穩定的光柵信號會在一定時間內電平保持一致,也即脈沖寬度會大于一定時間。因此,若設置一個3位的寄存器數據類型值,每一個時鐘上升沿采樣當前光柵信號電平狀態送入寄存器內,連續3個時鐘周期內采樣值均一致,則可認為當前為有效信號,并輸出相應電平值,否則輸出信號電平狀態保持不變。
光柵正向運動時的A、B電平總是以(0,1),(0,0),(1,0),(1,1)循環變換,而反向運動時電平變化又是以(1,0),(0,0),(0,1),(1,1)循環變換。每個周期內都能檢測到4次電平跳變,因此可以輸出4次計數脈沖,實現四細分,且由于運動方向不同,每兩次跳變轉換都是不同的,若檢測每一次產生跳變時的前后電平狀態,就可以在固定的循環中對應上當前的運動方向信息。考慮到一般使用情況下,時鐘信號頻率仍可作為采樣信號,用其上升沿去采樣每個周期內的4次電平跳變,存入寄存器內,比較當前值與前一狀態值,狀態不變,暫不輸出脈沖,狀態跳變,根據多種電平狀態變化,輸出對應增減脈沖,用于后續處理。該模塊RTL級電路如圖4所示,輸入端時鐘信號CLK_50M,光柵輸入信號a、b,輸出端增計數up,減計數down。

圖4 細分辨向模塊電路Fig.4 Fine resolution to module circuit

圖5 計數模塊電路Fig.5 Counting module circuits
可逆計數器模塊將前一模塊產生的增減計數作為觸發信號,每檢測到一個增或減計數脈沖上升沿,就先在兩個計數器中獨立地進行計數。最終計數值通過比較增減計數值得到,當增計數值大于減計數值,即正轉角度多于反轉角度時,最終計數值為增減計數值絕對差值;當減計數值大于增計數值,即反轉角度大于正轉角度時,最終計數值為光柵最大脈沖數同減計數值的絕對差值再合上增計數值,RTL電路如圖5所示。rst為復位輸入,up,down為增減脈沖輸入,z為零位信號輸入,d為計算出的脈沖數,angle為換算得到的角度信息。
本論文中,光柵傳感器采用的是Mercury 3000系列編碼器,轉滿一圈輸出的最大脈沖數為524288,經過軟件四細分后可達2097152。理論上,21位以上的計數器能滿足要求,因而采用22位可逆計數器。

圖6 串口發送示意圖Fig.6 Serial sending diagram
通用異步收發傳輸器(Universal Asynchronous Receiver/Transmitter,簡稱UART)是一種異步收發傳輸器,其將并行數據轉換成串行數據以便傳輸;將接收到的串行數據轉換成并行數據。它包括了RS232、RS449、RS423、RS422和RS485等接口標準規范和總線標準規范,即UART是異步串行通信口的總稱。UART串口通信的數據包以幀為單位,常用的幀結構為:1位起始位+8位數據位+1位奇偶校驗位(可選)+1位停止位,通信原理如圖6所示。將一個字節一位一位地通過串行總線按照一定的頻率(波特率)發送出去,該模塊主要作用是與上位機通訊,將光柵采集到的數據發送到上位機,RTL電路如圖7所示。

圖7 串口發送模塊電路Fig.7 Serial sending module circuit

圖8 整形模塊仿真Fig.8 Simulation of shaping module

圖9 細分辨向模塊仿真Fig.9 Detailed resolution module simulation

圖10 計數模塊仿真Fig.10 Counting module simulation

圖11 串口發送模塊仿真Fig.11 Serial transmission module simulation
完成以上設計后,編寫testbench仿真文件并用Modelsim進行仿真驗證。整形模塊Testbench仿真結果如圖8所示,圖中可以看出,連續3個時鐘周期內采樣值均一致,則可認為當前為有效信號,并輸出相應電平值,噪聲可能引起的誤計數很大程度上可以被消除,否則輸出信號電平狀態保持不變。圖3可以看出輸入信號u1,u2的毛刺在對應的輸出a,b中已經濾除。
圖9為四細分辨向電路模塊的testbench仿真結果,當信號a滯后于b時,表示光柵傳感器正在反向運動,則該模塊會在每個電平跳變處輸出一個減計數脈沖;當信號a超前b時,表示光柵傳感器正在正向運動,則該模塊會在每個電平跳變處輸出一個增計數脈沖,實現辨向目的。
圖10為計數模塊Testbench仿真,當復位鍵按下后,可以檢測到復位信號下降沿,并對增減計數值清零。正轉時,計數值增加,反之減少。當正轉過零時,零位信號自動置位,增減計數值清零;當反轉過零時,零位信號也自動置位,計數值變為光柵傳感器滿圈的最大脈沖數。
圖11為串口發送模塊的仿真結果,由于角度為360°大于串口一幀發送的8位最大值255,因而一次發送兩幀數據,待發送數據為0xAAAA時,UART_TX分兩次從高電平開始,依次發送起始位0,01010101(由低到高),以及停止位。待發數據為0x5555時,UART_TX則分兩次從高電平開始,依次發送起始位0,10101010(由低到高),以及停止位,皆符合設計要求。
本文針對關節臂坐標測量機,以FPGA為平臺設計了一種光柵編碼器信號采集系統,克服了使用專用集成電路帶來的通用性差、電路復雜、實時性差等問題。該采集系統設計主要由4個模塊構成,分別為濾波模塊、細分辨向模塊、可逆計數模塊、串口通信模塊。仿真結果表明,該采集方案在保證精度的同時,能夠有效消除干擾和抖動現象,準確無誤地進行脈沖計數,并且用Verilog硬件描述語言設計電路,改變電路,只需要修改程序即可,比較方便和靈活。相比傳統采用單片機的設計方法,該方法結構簡單、集成度高、可移植性強、功耗低、抗干擾強、所用器件數目少,適用于各種需要光柵編碼器測量速度和位置的領域,目前該程序已成功下載到實驗平臺,并對系統進行了硬件仿真驗證,運行情況良好。