傳統的數字電壓表設汁通常以大規模ASIC(專用集成電路)為核心器件,并輔以少量中規模集成電路及顯示器件構成。ASIC完成從模擬量的輸入到數字量的輸出,是數字電壓表的心臟。這種電壓表的設計簡單、精確度高,但是這種設計方法由于采用了ASIC器件使得它欠缺靈活性,其系統功能固定,難以更新擴展。后來發展起來的用微處理器(單片機)控制通用A/D轉換器件的數字電壓表的設計的靈活性明顯提高,系統功能的擴展變得簡單,但是由于微處理器的引腳數量有限,其控制轉換速度和靈活性還是不能滿足日益發展的電子工業的需求。而應用EDA(電子設汁自動化)技術及FPGA(現場可編程門陣列),其集成度高、速度快、性能十分可靠、用戶可自由編程且編程語言通俗易懂、系統功能擴展非常方便。采用FPGA芯片控制通用A/D轉換器可使速度、靈活性大大優于由微處理器和通用A/D轉換器構成的數字電壓表。 1 系統設計原理 本設計利用ADC0809作為電壓采樣端口,FPGA作為系統的核心器件,用LED(發光二極管)進行數碼顯示。 采用Alterla公司FLEX10K系列EPF10K20TC144-4 芯片FPGA作為系統的核心器件,負責ADC0809的A/D轉換的啟動、地址鎖存、輸入通道選擇、數據讀取。同時,把讀取的8位二進制數據轉換成便于輸出的3位十進制BCD碼送給數碼管,以顯示當前測量電壓值。這些工作由ADC0809轉換控制模塊、數據轉換模塊、譯碼模塊完成。 2 FPGA軟件設計及模塊仿真 2.1 A/D轉換控制模塊的軟件設計 本模塊完成ADC0809的初始化、A/D轉換的啟動、地址鎖存、通道選擇、狀態讀取及數據讀取、數據鎖存等功能。此模塊的軟件設計主要采用VHDL的多進程狀態機完成。 工作時序如下:上電瞬問,FPGA初始化,ADD置成"01",狀態機處于第1個狀態,此時ALE、START、OE、LOCK(數據鎖存信號)均置0,初始化ADC0809。第1個上升沿到來時,狀態機由狀態1轉換到狀態2,ALE、START置1,OE、LOCK為0,此時地址鎖存信號有效,由ALE將ADD的"01"狀態鎖存到地址鎖存器并譯碼,選擇IN1即通道1作為模擬信號輸入端,同時STRAT信號有效,啟動采樣。第2個上升沿到來時,狀態機由狀態2轉換到狀態3,ALE、START返回到低電平,OE、LOCK繼續為低電平,此時如果FPGA檢測到ADC0809的EOC引腳由低電平變成高電平(A/D轉換完成),則當時鐘上升沿到來時,轉換到狀態3,否則繼續保持在狀態2,直到轉換完成。由狀態2轉換到狀態3后,OE置高電平,允許轉換數據輸出,其余信號狀態保持不變。時鐘上升沿再次到來時,狀態機由狀態3轉換到狀態4,LOCK置高電平,其余信號與狀態3一樣。當LOCK由低電平轉換到高電平的瞬問,穩定的數據鎖存到鎖存器。上升沿再次到來,則狀態機返回狀態0。控制器在時鐘信號控制下完成狀態轉換,實現對ADC0809的控制。 2.2 數據轉換模塊的軟件設計 本設計采用5 V參考電壓,測量范圍為0~5 V,由于轉換器件為8位,則電壓的最小分辨率為0.02V,因此待轉換數據。 編一個查表程序,對上述電壓進行BCD碼編碼,然后根據對應的4位BCD碼相加的結果決定是否進位,從而得到待處理數據的BCD碼。例如:從AD0809上取得的數據為"11011110",1101對應的電壓值為4.16 V,其對應的BCD編碼為"010000010110",1110對應的電壓值為0.28 V,其對應的BCD編碼為"000000101000"。低4位相加為1110,大于9,加6將其調整為BCD碼,其值為0100,并且向前有一進位。4位相加的結果為0011,由于低位有進位,因此最終結果為0100。高4位的結果為0100。3位合計的值為4.44 V,與4.16+0.28的結果相符。 2.3 譯碼輸出模塊的軟件設計 本模塊的任務是把數據處理模塊處理得到的BCD碼轉換成能被數碼管識別的字型編碼。8位二進制數轉換成BCD碼后為12位,因此需3個數碼管顯示結果。為了節省資源,采用掃描方式控制數碼管的顯示,掃描時鐘由CK提供,其頻率應大于100 Hz,否則會有閃爍現象。 3 系統仿真及驗證 當FPGA從AD0809上讀取的數據為0F8H(十進制248)時輸出的段碼為66H、6FH、7D,分別對應字符4、9、6,加上小數點就是4.96 V,而其分辨率為0.02 V,則A/D轉換得到的電壓值應為0F8x0.02 V=4.96 V。顯示結果與理論推算完全相符。 選EPF10K10TC20TC144-4作為目標器件并進行正確的引腳鎖定后,將程序下載到目標配置器件。改變ADC0809的模擬通道輸入電壓,觀察數碼管的輸出,其輸出隨著輸人電壓的變化而變化,當輸入電壓變為0時,數碼管的輸出為0,輸人為5 V時數碼管輸出也為5.00 V,其余情況下輸入與輸出也一致,至此,基于FPGA的數字電壓表設計完成。本設計的結果已通過硬件測試。 4 結束語 本設計只用了ADC0809的一個通道,在不改變硬件電路的前提下,只要稍微改變VHDL的源程序,就可實現其余通道的利用,構成復雜的數據采集系統。數據處理模塊用查表方式設計,設計比較簡單,易于理解,但對FPGA的芯片資源利用率不高,因此要想編寫出更高效率的數據處理源程序,可以用權位相加的方法實現,其原理見文獻[5]。這種方法不是很好理解,但是其資源利用率明顯高于查表方式;同時可以用LCD(液晶顯示器)代替LED顯示,用LCD顯示時譯碼程序要進行相應更改,以便與LCD驅動時序同步。編碼用ASCII碼,并且由于LCD的速度較慢,因此時鐘頻率不能過高,否則將不能對LCD進行讀寫。本設計通過添加一些前置電路就可擴展其功能,如果采用16位A/D轉換器,則可以提高其分辨率。 |