1 基于FPGA的可重構原理 FPGA(現場可編程門陣列)是一種可編程邏輯器件,他是在PAL,GAL等邏輯器件的基礎上發 展起來的。同以往的PAL,GAL等相比,FPGA的規模大得多,而單位邏輯門的成本卻低得多,多容量、低成本為FPGA在印花系統的應用創造了條件。利用FPGA可以實現I/O處理,脈沖發生、計數,數學運算等功能,可以大大簡化數控系統的設計。FPGA最大的特點就是他的內 部邏輯的在線可重構性。目前主流的FPGA都是基于查找表結構的,查找表(160kUP Table)簡稱為LUT,LUT本質上就是一個RAM。如圖1所示。在CMOS分離邏輯電路設計當中,通常采用圖1(a)的方法實現反相器。但是在FPGA中,卻是使用LUT來實現這一功能,如圖1(b)所示。MUX的控制輸入SEL被作為邏輯輸入,而IN1,IN2則是反向器的查找表。這樣做的原因有2點: 1) LUT是通用的,可以實現任何邏輯。 2) LUT可以高效地在硅片上實現。 由于SRAM的易失性,在系統上電后需要對FPGA進行配置,才能使FPGA進入工作狀態。配置信息通常存放在PROM或者 FLASH存儲器當中,但是也可以使用其他設備,比如CPU完成這個工作。因此可以利用CPU對FPGA進行配置,將配置信息存儲在CPU系統的存儲器內,不但降低了成本,而且可以根據實際需要選擇不同的配置信息。由于配置過程時間很短,通常在幾百毫秒 內,因此可以在系統工作過程中重新對FPGA進行配置,實現實時可重構。 2 光電編碼器的輸出波型及其測速方法 光電編碼器通常輸出相差為90°的兩路方波A相和B相,按照轉向的不同,A相或者超前B相。在使用光電編碼器測速時需要完成誤計數抑制、鑒向和測速3大功能。 在誤計數抑制方面,有模擬方式和數字方式。模擬的方法[1]采用RC電路將編碼器傳送來的方波信號轉換為脈沖信號。數字方式多采用D觸發器[2,3,4]對方波信號進行延遲之后再將經過延遲的波形進行邏輯運算,并根據兩路波型之間相差90°的邏輯關系,消除因抖動或干 擾而可能帶來的誤計數,消除因振蕩或電路干擾產生的毛刺的影響。其中D觸發器使用的級數對誤計數的抑制有直接關系[2]。在干擾嚴重的情況下,可以選擇具有長線驅動接口的編碼器,他將A、B相信號用RS 422(差動方式)分為A、A和B、B四根信號線傳輸。這樣可以有效地抑制共模干擾,提高傳輸距離。 測速功能的算法主要有M法、T法、M/T法、M法和T法都簡單容易實現,但是精度受速度的影 響。M/T法具有較高精度,M/T法和變M/T法是目前公認的高精度測速方法。 在測速實現方法上主要有純硬件、純軟件、軟硬件結合等方法。純硬件方法[2,5]的優點是不需要CPU的干預自動完成,缺點是外圍器件較多、只能實現M法和T法。純軟件[6]方法光電編碼器的信號線與CPU中斷輸入和I/O口相連。優點是外部器件使用較少,缺點是占用CPU時間過多且測量精度不高。例如80C196,時鐘頻率為12 MHz,經過分頻,T1定時器的基準頻率是0.75 MHz,無論采用M法、T法、M/T法,精度都受到基準頻率的限制,無法進一步提高。但是FPGA則可以大大提高基準頻率,可以在本質上提高測速的精度。軟硬結合的方法[3,4]是誤計數抑制、鑒相的功能由外部硬件電路完成,而計數的功能由CPU完成,是以上2種方法的折衷,但是精度仍然受到限制。? 3 采用FPGA的可重構設計 綜上所述,利用FPGA內部可編程、可重構的特點,可以將以往分離設計的邏輯電路,利用FP GA內部豐富的邏輯資源,以及VerilogHDL具有語言門級電路描述強的特點,集成到系統內部 。可以根據應用的要求實現各種測速方法且不需要CPU的干預,將他作為一個功能 模塊嵌入在系統當中,且可以根據不同的需要,選擇不同的測速方法,而不需要修改硬 件電路,實現重構造。 1) M法可重構設計的實現? 模仿傳統的D觸發器+計數器的結構,如圖2所示。通過VerilogHDL構造了兩個4級D觸發器串聯的誤差抑制電路(圖2中encode模塊)和鑒向電路,同時利用Quarts提供的Mega Fu nction功能實現一個16位同步可逆計數器(圖2中lpm_couter模塊),以及一個16位的鎖存器(圖2中d模塊)完成對編碼器脈沖的M法測速邏輯電路。 仿真結果如圖3所示,CHA,CHB信號進入FPGA,在分別經過第三、第四個觸發器延時后的波 行為A3,A4和B3,B4,經過鑒向以后得到DIR和REV信號,且這兩路信號是原來A相或者B相頻 率的4倍。為了說明方便,圖3的計數器僅測量了一個信號(DIR或REV)周期的時鐘數。 由于 每次測量完成以后計數器的數值都會被復位,因而必須將計數器的數值進行鎖存,這樣CPU讀出的才是有效的速度(圖2的d模塊)。從圖3中可以看到,在經過d模塊以后,speed_ou t信號穩定輸出。此例中基準時鐘信號CLOCK的頻率為50 MHz。 2) M/T法可重構的實現 由于結合了M法和T法的優點,測速比較準確,缺點是需要擴展大量的外圍芯片和占用單片機 中斷,編程相對復雜[5]。利用FPGA內部豐富的邏輯資源和有限狀態機的方法,實現M/T測速邏輯。狀態機是由組合電路和時序電路構成的硬件時序電路。狀態的轉移取決于當前的狀態和狀態機的輸入狀態,這種狀態機為米里(Mealy)型狀態機;狀態的轉移只取決于當前狀態的稱為莫爾(Moore)型狀態機。莫爾型狀態機可以看作是米里型狀態機的一個特例。 本設計采用米里(Mealy)型狀態機。在接收到復位信號以后,狀態機進入(00)狀態。在 (00)狀態中,主要完成計時器?T的復位,m1,m2計數器的復位。當第一個脈沖到來的時刻,狀態機進入(01)狀態。此時計時器T開始記時,同時m1,m2開始計數。Tg到時以后,進入(10)狀態。此時m1,m2 繼續計數,當最后一個脈沖到來以后,進入(11)狀態。將m1,m2的數值鎖存進入鎖存器以后,自動復位到(00)狀態。 采用模塊化設計的思想,將測速邏輯分為4個部分,其中pluse_couter和clock_coute r計數器是采用Quarts提供的Mega Function功能構造出來的加法計數器,分別完成對編碼器脈沖m1和基準時鐘脈沖m2的計數功能。 Encode模塊完成對編碼器信號CHA、CHB信號的鑒向信號REV和DIR、鎖存信號LOCK、計數器復位信號COUTER_RST、方向信號UPDOWN的控制。D_ TRIGGER單元完成兩個計數器結果的鎖存,同時將UP_DOWN信號和編碼器脈沖計數器測量得到的結果(7位)組合到一起構成8位的PULSE_D,這樣得到的脈沖數值就是有方向的脈沖數量。D_TRIGGER的輸出PULSE_D[7.0]和CLOCK_D[15.0]就是最終測量得到的結果。最終的仿真結果如圖7所示,采用了50 MHz的基準信號, CHA,CHB是0.5 MHz,相差為90°的方波。對兩相信號進行4倍頻,得到DIR和REV兩路方向脈沖信號。在有限狀態機(STA)的控制下,鎖定信號(LOCK),計數器復位信號(COUTER_RST)和兩個計數器單元PULSE_NUM_OUT和CLOCK_NUM_OUT按照預定的時序工作,達到了設計的需要。程序編譯完成以后,共占用68個邏輯單元(logic cells),最大延時13.8 ns。 4 結論 利用FPGA的可重構特性,減少了外圍器件、簡化了CPU程序的設計。可以根據現場的要求靈活選用M法、T法、M/T法。對于變M/T法和直接測量頻率法等測速電路同樣可以采用這種嵌入式設計的方式。通過構造與CPU的接口,對于CPU而言,FPGA就如同一個外部RAM一樣訪問,不需要對測速過程進行任何干預。同時如果將測速時間和基準頻率設計成外部可以控制的參數單元,就可以很方便地修改參數,實現不同場合、不同要求的情況下更高精度的控制。 參考文獻 1]朱華炳.用于位置與速度反饋測量的編碼倍頻器鑒相電路的設計與分析[J].機械與電子,1997,(5):32-33 2]劉新建.光電編碼器的誤計數抑制電路的設計[J].測控技術,19 98,17(6):54-55? 3]鄭紹春.用單片機提高光電編碼器分辨率的一種實現方法[J].交通與計算機, 1998,(2) 4]劉飛龍.光電編碼器四倍頻電路的實現及其應用[J].自動化儀表,2000,(9)? 5]肖本賢.一種提高轉速測量范圍與精度的新方法[J].自動化儀表,1997,(18):21-23. 6]趙哲身.光電編碼器的軟件鑒相及其使用技巧[J].自動化儀表,1998,(2 ):17-21. |