李 鵬
[摘要]詳細研究對增量式光電編碼器脈沖信號進行細分、計數(shù)以及傳輸?shù)幕贔PGA(現(xiàn)場可編程邏輯陣列)的接口電路。采用以高度集成的FPGA芯片為核心的設(shè)計方式,實現(xiàn)增量式光電編碼器對信號的處理。編碼器輸出的數(shù)據(jù)在FPGA芯片中進行細分、辨向、計數(shù)等傳輸處理,最后所得的數(shù)據(jù)經(jīng)寄存器存儲。驗證光電編碼器FPGA接口信號處理系統(tǒng)的可行性。
[關(guān)鍵詞]FPGA 光電編碼器 接口 信號
中圖分類號:TP3文獻標識碼:B文章編號:1671-7597(2009)0510006-02
本課題的目的就是通過使用FPGA芯片實現(xiàn)對光電編碼器輸出信號進行數(shù)據(jù)采集,實現(xiàn)小型化、集成化、同時能夠?qū)ο鄳?yīng)的數(shù)據(jù)進行處理。整個數(shù)據(jù)處理系統(tǒng)的絕大部分數(shù)據(jù)處理工作都在FPGA芯片中進行的,具有很高的效率。
按照FPGA自頂向下的設(shè)計思想,將光電編碼器的實現(xiàn)分成倍頻、鑒向模塊、計數(shù)模塊、時鐘模塊、控制模塊和FIFO模塊這幾部分。倍頻、鑒向模塊主要功能是產(chǎn)生四倍頻信號和計數(shù)方向信號以提供給計數(shù)器;計數(shù)模塊的主要功能是根據(jù)編碼器的旋轉(zhuǎn)方向?qū)ζ溥M行加計數(shù)和減計數(shù)。時鐘模塊的主要功能是控制整個編碼器的時鐘信號??刂颇K的主要功能是控制計數(shù)器對不同脈沖分別計數(shù)。FIFO模塊的主要功能是能對脈沖進行讀寫操作,能把脈沖數(shù)據(jù)有效的保存。
一、時鐘模塊
本系統(tǒng)選用了300KHZ信號作為CLK信號的時鐘。而系統(tǒng)的全局時鐘頻率是3MHZ,因此我們對3MHZ的信號進行了分頻,將其分頻為需要的300KHZ。
在FPGA設(shè)計中一般都使用全局時鐘網(wǎng)絡(luò),這樣可以驅(qū)動所有觸發(fā)器和時序電路,保證到各個時序元件(觸發(fā)器)時鐘輸入端等長,同時全局時鐘網(wǎng)絡(luò)還具有很強的驅(qū)動能力,保證時鐘信號引入的抖動非常小。
鑒于時鐘信號的重要性,對3MHZ的分頻我們使用計數(shù)器分頻,將其分成所需的300KHZ。
二、倍頻、鑒向模塊
倍頻、鑒向模塊是光電編碼器FPGA實現(xiàn)的一個主要模塊。設(shè)計的倍頻、鑒向模塊方框圖如圖1所示。
其中CLK時鐘為在時鐘模塊產(chǎn)生的250KHZ的時鐘信號。AIN,BIN,ZIN對應(yīng)于通道編碼器的輸出信號。
DIRECT,CNT為倍頻、鑒向后的輸出信號,其中CNT為四倍頻后的輸出,DIRECT為鑒向后的輸出信號。
三、計數(shù)模塊
計數(shù)模塊是根據(jù)編碼器旋轉(zhuǎn)方向DIRECT的值,對四倍頻后的信號進行計數(shù),當(dāng)DIRECT為邏輯‘1時,進行加計數(shù);反之則進行減計數(shù)。其方框圖如圖2所示。
計數(shù)器模塊介紹如下:
clk1,clk2:來自時鐘模塊的時鐘信號。
reset:系統(tǒng)的復(fù)位信號。
direct:來自倍頻鑒向模塊的方向信號。
clear:系統(tǒng)的清零信號。
count[31..0]:計數(shù)器對A、B相的計數(shù)輸出。
countz[31..0]:計數(shù)器對Z相的計數(shù)輸出。
鑒向,倍頻和計數(shù)模塊都設(shè)計好了后,就可在頂層文件中直接調(diào)用它們了。因為設(shè)計中大量使用了觸發(fā)器,因此如果是直接調(diào)用,則會產(chǎn)生時鐘偏斜問題。
在本設(shè)計中為了避免產(chǎn)生時鐘偏斜,采用了兩個時鐘的方法,因為計數(shù)器主要是對四倍頻輸出信號CNT計數(shù),因此根據(jù)CNT的相位,由CLK時鐘派生出一個和CNT頻率相同的衍生時鐘,這樣,在計數(shù)器模塊中只對這個衍生時鐘進行計數(shù)就可以了。通過這種方法即解決了時鐘偏斜問題,同時也解決了四倍頻信號計數(shù)的問題。
將時鐘、鑒向、倍頻、計數(shù)模塊綜合在頂層文件后,生成綜合的編碼器處理模塊。圖3是倍頻、鑒向、計數(shù)后綜合模塊的方框圖。
綜合后編碼器模塊信號介紹如下:
clk:系統(tǒng)時鐘輸入信號,時鐘頻率為3MHZ。
reset:系統(tǒng)復(fù)位輸入信號,系統(tǒng)復(fù)位是計數(shù)器清零。
clear:計數(shù)器清零輸入信號,當(dāng)控制信號為1時,對計數(shù)器清零。
A,B,Z:編碼器的輸入信號。
count[31..0]:計數(shù)器對A、B相的輸出信號。
countz[31..0]:表示是對Z相計數(shù)的計數(shù)信號。
四、控制模塊
控制模塊主要是為了控制計數(shù)器在不同狀態(tài)下對不同的脈沖分別進行計數(shù),它的設(shè)計主要包括數(shù)據(jù)選擇模塊和計數(shù)控制模塊。
1.?dāng)?shù)據(jù)選擇模塊
為了實現(xiàn)分別對A、B相和Z相輸出脈沖的計數(shù),采用數(shù)據(jù)選擇模塊來給定控制的信號。根據(jù)m、n兩個輸入信號的狀態(tài)來控制計數(shù)控制模塊,從而實現(xiàn)對它們的分別計數(shù)。其結(jié)構(gòu)框圖如圖4所示。
數(shù)據(jù)選擇模塊介紹如下:
a,b:模塊的輸入信號;
y:模塊的輸出信號,作為數(shù)據(jù)控制模塊的控制數(shù)據(jù)輸入信號。
2.計數(shù)控制模塊
計數(shù)控制模塊主要就是收到計數(shù)狀態(tài)控制模塊送來的控制信號,通過分析、判斷,從而來控制計數(shù)器。其結(jié)構(gòu)框圖如圖5所示。
計數(shù)控制模塊的介紹如下:
clk:時鐘信號;
data[3..0]:控制信號;
count1[31..0]:對A、B相計數(shù)數(shù)據(jù)的信號;
count1z[31..0]:對Z脈沖計數(shù)信號。
五、FIFO讀寫控制模塊
FIFO是先入先出存儲器,它是一種單向數(shù)據(jù)傳輸物理器件,它只允許數(shù)據(jù)從輸入端流向輸出端。FIFO器件有兩個端口:寫端口(din)和讀端口(dout)。FIFO存儲器分成兩大類:同步FIFO存儲器和異步FIFO存儲器。同步FIFO存儲器只有一個時鐘信號,它同時用來控制存儲器的讀、寫操作;異步FIFO存儲器有兩個時鐘信號,分別控制存儲器的讀操作和寫操作;
由于本系統(tǒng)中的FIFO讀和寫操作都是相同的時鐘頻率下進行操作,因此設(shè)計中選用了同步FIFO存儲器。FIFO存儲器有7條信號線,其中DATA,CLK,WRREQ,RDREQ是存儲器的輸入信號,DATA為輸入數(shù)據(jù)信號線,WRREQ為存儲器寫操作控制線,RDREQ為存儲器讀操作信號線。Q,EMPTY,F(xiàn)ULL是存儲器的輸出信號,Q為輸出數(shù)據(jù)信號線,EMPTY為存儲器空信號,邏輯‘1有效,表示當(dāng)前存儲器為空,可以對存儲器進行寫操作。FULL信號為存儲器滿信號。當(dāng)寫入的數(shù)據(jù)與設(shè)定的存儲器深度相等時,F(xiàn)ULL信號為邏輯‘1有效,表示當(dāng)前存儲器已滿。
進行存儲器寫操作時, WRREQ為邏輯‘1,則存儲器在時鐘CLK的控制下,將DATA數(shù)據(jù)信號線上的數(shù)據(jù)寫入到FIFO存儲器中存儲。同時EMPTY空信號為邏輯‘0。進行存儲器讀操作時,RDREQ為邏輯‘1,則存儲器在時鐘CLK的控制下,將以先入先出的方式讀出存儲器中的數(shù)據(jù),同時FULL滿信號為邏輯‘0。
本次設(shè)計根據(jù)設(shè)計要求設(shè)計了FIFO存儲器的讀寫控制模塊,設(shè)計方法使用了狀態(tài)機的設(shè)計方法。FIFO讀寫控制模塊分為FIFO寫模塊和FIFO讀模塊兩個部分。FIFO寫模塊的功能是將鎖存后的計數(shù)值寫入存儲器中。FIFO讀模塊的功能是將FIFO中存儲的計數(shù)值讀出。
FIFO控制模塊方框圖如圖6所示。
各引腳信號功能介紹如下:
CLOCK:時鐘輸入端。
SCLR:復(fù)位信號輸入端。
WRREQ:FIFO存儲器寫使能輸入信號。為1時將鎖定后的計數(shù)值寫入到FIFO存儲器中。WRREQ是計數(shù)器控制模塊輸出的控制信號。
RDREQ:FIFO存儲器讀使能輸入信號。為1時,啟動FIFO讀模塊,從FIFO存儲器中讀出編碼器的計數(shù)值。
DATA:FIFO存儲器輸入數(shù)據(jù)信號線。
Q:FIFO存儲器輸出數(shù)據(jù)信號線。
六、整體功能模塊的設(shè)計及仿真
當(dāng)系統(tǒng)各部分模塊設(shè)計成功后。按照FPGA的設(shè)計思想,就可以在QuartusⅡ軟件中將編碼器輸入信號的倍頻鑒向模塊、時鐘模塊、計數(shù)模塊、計數(shù)控制模塊和FIFO讀寫模塊各個部分模塊在頂層文件中綜合,利用仿真工具對其進行仿真。仿真后的時序圖如圖7所示。
對仿真圖進行分析可以看出,整個的仿真過程分為兩個階段。
第一階段,當(dāng)編碼器正轉(zhuǎn)時,m、n信號為00時,empty信號為高電平,full信號為低電平;當(dāng)m、n信號為01時,向FIFO中寫的是對A、B相計數(shù)的數(shù)值;當(dāng)m、n信號為10時,向FIFO中寫入的是對Z相計數(shù)的數(shù)值。在兩個時刻empty信號為低電平,full信號為高電平。當(dāng)給定一個讀信號時,F(xiàn)IFO開始向外讀數(shù)據(jù),讀出了寫入FIFO中的計數(shù)值,q信號為00000002。
第二階段,當(dāng)編碼器反轉(zhuǎn)時,m、n信號的變化同第一階段相同。當(dāng)給定一個讀信號時,F(xiàn)IFO開始向外讀數(shù)據(jù),讀出q信號為FFFFFFFE。
這樣就完整的實現(xiàn)了系統(tǒng)的功能,說明整體的FPGA 模塊已達到了設(shè)計的要求,從而來實現(xiàn)數(shù)據(jù)的傳送。
七、結(jié)束語
基于FPGA的光電編碼器的接口設(shè)計來對數(shù)據(jù)進行采集和處理,克服了使用電路板和單片機對數(shù)據(jù)進行處理而產(chǎn)生的通用性差、編譯復(fù)雜等缺點。將信號處理等大量工作集成在FPGA中進行處理,具有實現(xiàn)小型化、集成化、同時能夠進行較高頻率數(shù)據(jù)處理等優(yōu)點。
參考文獻:
[1]劉皖、何道君、譚明,F(xiàn)PGA設(shè)計與應(yīng)用[M].北京:清華大學(xué)出版社,2000.
[2]董莉莉、熊經(jīng)武,光電編碼器的發(fā)展動態(tài)[J].光學(xué)精密工程,2000(8).