孫可森
(四川大學機械工程學院,四川 成都 610044)
工業現場環境會給缺陷在線檢測系統帶來噪聲干擾,為提高系統的穩定性,降低誤報率,系統必須對周邊噪聲進行抑制,其中流水線編碼器就是一個較大噪聲源。當前在線檢測系統往往采用將編碼器接入視頻采集卡,由視頻采集卡通過一定的邏輯處理觸發相機拍照的方式,但視頻采集卡通常假設編碼器產生的A/B 相信號是理想信號,忽略了工業現場環境的噪聲干擾,常常造成相機的誤觸發,使得在線檢測系統誤報率較高。為了提高系統的穩定性,系統必須對編碼所產生的噪聲進行抑制。但視頻采集卡針對編碼器的處理邏輯處于未知狀態,很難通過修改視頻采集卡的程序來提升系統的穩定性。
基于上述考慮,針對編碼器的處理單獨設計成系統,取代視頻采集卡的部分功能,并在此基礎上擴展一些功能模塊,降低缺陷在線檢測系統的誤報率。
印刷品企業為了提高生產效率,往往將流水線以較高的速度運行,速度通常高達300 m/min,如此高的速度需要在線檢測系統在短時間內處理較大的數據,普通CPU 往往基于馮諾依曼結構,對指令的處理通常經過取指令、譯碼、運算等步驟,并且不同的指令處理時間不同,這就造成了通用芯片對數字信號的處理效率低下、響應時間不能達到系統要求、脈沖信號的處理時間難以估計等劣勢[1]。不同于普通CPU,FPGA采用可編程的邏輯列陣,具有處理速度快、容易仿真、處理時間可以估算等優點,因此本此系統設計選用FPGA 作為主控芯片[2]。根據系統需要實現的功能,結合FPGA 自頂而下的設計方法,硬件描述語言要實現的模塊主要有4 個,分別為濾波、脈沖信號處理、測速、通信。系統結構設計如圖1 所示。

圖1 系統整體結構設計
系統內部全部模塊均是在濾波模塊的基礎上實現的自身功能,系統整體則采用松耦合的設計模式,不同功能模塊之間不存在信息共享。采用這種設計的優點是當系統出現故障時有利于排查問題,方便維護人員快速定位,提高系統的健壯性和可維護性。
濾波模塊的主要功能是對編碼器輸入的脈沖信號A、B 相進行濾波。采用示波器觀察編碼器原始脈沖波形發現,編碼器輸出脈沖波形并不理想,存在尖峰脈沖,猜想是由于尖峰脈沖的存在導致視頻采集卡對脈沖的處理結果不理想,因此設計濾波模塊以消除尖峰脈沖對系統的影響。
脈沖信號處理模塊基于濾波模塊處理之后的編碼器波形,根據在線檢測系統的要求對編碼器雙相信號進行舍棄或倍頻。舍棄脈沖是指舍棄任意個脈沖,包含奇數個和偶數個;同時也可以對編碼器雙相信號進行倍頻,倍頻的數值可以在1~32 間任意指定。
測速模塊依據編碼器信號對傳送帶的速度和方向進行實時監測,并實時發送給在線檢測系統。
通信模塊設計的主要目的是建立編碼器處理系統與在線檢測系統的之間的通信機制。
濾波模塊主要功能是將編碼器雙相信號存在的尖峰脈沖濾除,這里采用判決濾波的方式。判決濾波是一種應用廣泛的設計方法,它的思想是基于數理統計,實際應用時具有運算速度快和高可靠性的優勢。假設系統針對編碼器波形的采樣周期是t,判決周期是T0,那么系統在整個判決周期內采樣的個數為:
在實際算法設計時,由于后續判決過程需要前面采樣時刻點獲得的采樣值,因此需要在FPGA 中定義n位寄存器作為采樣值的緩沖區[3]。寄存器的模型如圖2 所示。

圖2 寄存器模型
在上圖中,每一小方塊代表寄存器的一位,也就是采樣值。寄存器將采樣數據劃分為3 部分,寄存器內數據為判決濾波需要處理的數據,左右側分別為已經處理過的數據和即將處理的數據。每經過一個采樣周期,判決算法對寄存器內的數據求和,如果這n個采樣值的和大于n/2,濾波模塊就輸出高電平。相反,如果n個采樣值的和小于n/2,則輸出低電平。同時將寄存器向右滑動一位,將新的采樣值更新到寄存器。然后等待下一個采樣時刻采樣點,繼續重復這一過程。由于干擾脈沖的隨機性,采到高電平和低電平的概率是相等的,所以,作為判斷依據的百分比不能小于50%,也就是n位寄存器和的判決數量是在n/2 以上。本設計采用11 位寄存器(n=11),每次判斷時將n位寄存器求和,如果求和結果大于6,則濾波模塊輸出高電平,否則輸出低電平。在Modelsim 軟件對這種濾波方式進行仿真時,發現濾波效果比較理想。判決濾波程序的流程圖如圖3 所示。

圖3 濾波程序流程圖
脈沖信號處理模塊設計流程是對編碼器脈沖邊沿進行計數,計數器達到所要舍棄的脈沖邊沿個數的時候,所要產生的目標脈沖進行翻轉。而倍頻模塊的設計流程則是采用檢測濾波之后的編碼器A、B 相脈沖周期,產生下一周期倍頻信號的方法。設計框架較為簡單,但在設計時應考慮FPGA 特有的一些屬性,避免出現競爭冒險,產生毛刺的現象,并進行時序約束。
針對競爭冒險現象,采用狀態機的設計方式。使用狀態機可以實現信號的同步和消除毛刺的目的。只要在狀態機的觸發時間上加以處理,就可以避免競爭冒險,從而抑制毛刺的產生。
對于時序約束,在賽靈思軟件約束文件中增加時鐘約束 create_clock-name clk-period 20 [get_ports sys_clk]。設計完成后,查看賽靈思軟件所給的靜態時序約束文件報告,發現建立時間、保持時間等都是符合要求的。
由于在線測試系統與編碼器處理系統之間的數據通信量較少,采用串口通信協議就可以滿足帶寬需求,需要說明的是,由于在線檢測系統需要發2 種指令,一種是舍棄脈沖數,一種是倍頻數,需要占用串口一位進行區分。
編碼器通常輸出相差為90°的兩路方波信號,按照轉向的不同,A 相超前B 相,或B 相超前A 相。編碼器測速的算法主要有M 法、T 法、M/T 法,相對于M法和T 法的精度受速度的影響較大的缺陷,M/T 法對速度的適應性較好,具有較高精度,本文設計采用M/T法測速[4]。
在算法設計方面,采用Mealy 型狀態機。在接收到復位信號以后,狀態機進入(00)狀態,也就是初始化狀態。在這一狀態中,主要完成計時器T 和計數器m1、m2的復位。當第一個脈沖到來的時刻,狀態機改變狀態,進入(01)狀態,開啟計時器T 和計數器m1、m2。計時器T 計時結束,狀態機再次改變狀態,進入(10)狀態,此時計數器m1、m2計數不間斷。當最后一個脈沖到來時,狀態機進入(11)狀態,計數器m1和m2的數值鎖存,然后狀態機復位到(00)狀態[5]。狀態轉換圖如圖4 所示。

圖4 狀態轉換圖
由于通信模塊采用R232 串口通信的方式,每次發送的數據只能是8 位,另外FPGA 計算乘除法會消耗大量資源。對于測速算法而言,捕獲脈沖數目越多,測得速度越精準。由于有這些約束條件的存在,最終采用向主機發送傳輸0.5 ms 內捕捉到的編碼器發出的脈沖數的方法,在線檢測系統需要根據傳輸的數據做進一步換算才能得到速度,串口傳輸的脈沖數是n,已知編碼器轉輪直徑d=9.579 cm,編碼器5 000 線,采用四倍頻的方式,那么速度測算公式為[6-11]:
系統各個模塊之間采用松耦合的設計方式,模塊之間的相互依賴的程度較低,可以針對各個模塊采用單獨測試的方式。實驗測試環節,首先按照賽靈思引腳約束文件,將編碼器和在線測試系統接線成功,然后逐步測試各個模塊的輸出與輸入信號,最后對編碼器處理系統與在線檢測系統進行聯合測試,檢測編碼器處理系統的整體性能。
對于濾波模塊,在實際運行中,多次隨機采集編碼器經過濾波之后的波形,發現波形較好,沒有出現尖峰脈沖。實際波形如圖5 所示,在圖中可看到濾波之后編碼器A 相、B 相信號。

圖5 濾波后A 相、B 相
針對脈沖信號處理模塊,在實際運行中進行測試時發現,編碼器處理系統對編碼器A、B 相脈沖邊沿計數時出現偏差,造成產生的目標脈沖不理想。例如,當在線檢測系統向編碼器處理系統下發舍棄3 個脈沖的指令時,編碼器處理系統接收到指令后對編碼器A、B 相進行處理,正常情況下所產生目標脈沖邊沿無論是下降沿還是上升沿始終和編碼器信號中的一相的邊沿一致,但在實際運行中卻發現目標信號邊沿始終在上升沿和下降沿之間跳變。目標脈沖產生跳變如圖6所示。

圖6 目標脈沖產生跳變
圖6 中箭頭所指的位置就是開始出現跳變的時候。分析此時對應的編碼器A、B 相信號,發現編碼器A、B 相信號沒有出現幅值和相位異常,另外也沒有出現尖峰脈沖。猜想造成這種現象的原因是以下2 個:①外界對示波器產生干擾,造成波形輸出不穩定;②編碼器信號被干擾。
不采用示波器,采用工具SignalTap Ⅱ,直接查看FPGA 芯片內部寄存器狀態,發現目標脈沖依然會出現跳變。通過示波器分析編碼器A、B 相信號,發現編碼器A、B 相信號沒有出現幅值和相位異常,另外也沒有出現尖峰脈沖,可以排除編碼器信號被干擾的情況。在對編碼器單相信號進行測試時,發現舍棄脈沖任意數目,都能產生較為理想的目標脈沖,沒有出現跳變的情況。采用以下方式進行處理,對單相編碼器脈沖進行處理,實際舍棄脈沖數目為要求數目的1/2。當舍棄脈沖數目為奇數時,可以對單相脈沖邊沿進行舍棄,例如舍棄脈沖數目為7 時,可以對A 相信號舍棄3 個。但當舍棄脈沖數目為偶數時,卻無法對單相脈沖進行舍棄,此時依然對雙相脈沖進行舍棄。這樣的解決方案只能保證舍棄脈沖數目在奇數情況下是正常的。
另外一種解決方案是將A 相進行二倍頻,產生倍頻信號,模擬出將A、B 相兩相信號整合成一相的信號,再進行舍棄。這樣處理缺點是倍頻信號的邊沿信號會出現與B 相信號不一致的情況,但通過檢測A 相信號的周期進行調整,可以將影響降低。倍頻在設計之初采用鎖相環的方法,但發現鎖相環無法應對周期時刻改變的信號[12]。實際設計時采用檢測脈沖周期,產生下一周期倍頻信號的方法。實驗結果表明,這種方式沒有目標脈沖出現跳變的情況。
通信模塊與測速模塊的測試較為簡單,在頂層模塊中與其他模塊進行耦合,進行一些測試,沒有出現問題。
編碼器處理系統與在線檢測系統聯合測試時,能夠產生較為理想的相機觸發信號,相對于只使用視頻采集卡,在線檢測系統誤報率明顯降低。
本文設計將視頻采集卡針對編碼器處理的功能移至FPGA 來執行,并加入一些改進算法,有效降低了由于編碼器引入的噪聲對在線檢測系統的干擾,明顯提高了系統的可靠性。