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