基于FPGA的A/D轉換采樣控制模塊的設計
摘要:本文采用FPGA器件EP1C6T144C8芯片代替單片機控制A/D轉換芯片ADC0809進行采樣控制,整個設計用VHDL語言描述,在QuartusⅡ平臺下進行軟件編程實現(xiàn)正確的A/D轉換的工作時序控制過程,并將采樣數(shù)據(jù)從二進制轉化成BCD碼。本設計可用于高速應用領域和實時監(jiān)控方面。
關鍵詞:FPGA;A/D轉換;VHDL;采樣控制;BCD碼
在以往的A/D器件采樣控制設計中,多數(shù)是以單片機或CPU為控制核心,雖然編程簡單,控制靈活,但缺點是控制周期長,速度慢。單片機的速度極大的限制了A/D高速性能的利用,而FPGA的時鐘頻率可高達100MHz以上。本設計以高集成度的芯片為核心,進行時序控制、碼制變換。具有開發(fā)周期短,靈活性強,通用能力好,易于開發(fā)、擴展等優(yōu)點。既降低了設計難度,又加快了產(chǎn)品的開發(fā)周期。
1 系統(tǒng)設計原理
本設計采用FPGA芯片EP1C6T144C8來對ADC0809進行采樣控制,并對數(shù)據(jù)進行處理,可將數(shù)據(jù)用LED顯示出來。如圖1所示,芯片EP1C6T144C8在對ADC0809控制時產(chǎn)生START轉換啟動信號,ALE地址鎖存允許信號(高電平有效),在工作過程中,F(xiàn)PGA不斷讀入轉換結束信號EOC判斷AD0809轉換是否結束。當EOC發(fā)出一個正脈沖時,表示A/D轉換結束,此時開啟輸出允許OE,打開ADC0809的三態(tài)緩沖鎖存器將轉換好的8位二進制數(shù)輸入FPGA芯片中。通過查找表的方法將8位二進制數(shù)轉換成12位BCD碼。
圖1 控制原理圖
2 FPGA模塊設計與仿真
本設計采用QuartusⅡ軟件平臺下的VHDL硬件描述語言進行軟件編程。主要分為兩個部分:ADC0809的工作狀態(tài)模塊和二進制到BCD碼轉換模塊。
2.1 ADC0809工作狀態(tài)模塊
采用雙進程有限狀態(tài)機的方法來實現(xiàn)。設計st0~st7八個工作狀態(tài)。st0:初始化。st1:產(chǎn)生ALE的上升沿將模擬通道IN1的地址鎖存。st2:產(chǎn)生START信號上升沿,啟動A/D轉換。st3:START信號延時一個脈沖。st4:A/D轉換中,等待。st5:轉換結束,開啟輸出允許信號OE。st6:OE延時一個脈沖,并開啟數(shù)據(jù)鎖存信號LOCK。st7:延時一個時鐘,輸出數(shù)據(jù)。狀態(tài)轉換方式見下面程序段。
case current_state is
when st0=> ale='0';start='0';oe='0';lock='0'; next_state=st1;
---初始態(tài)ST0向下一狀態(tài)ST1轉換,0809采樣控制信號初始化;
when st1=> ale='1';start='0';oe='0';lock='0'; next_state=st2;
---由ALE的上升沿將通道地址'001'鎖入0809的地址寄存器;
when st2=> ale='1';start='1';oe='0';lock='0'; next_state=st3; ---啟動采樣信號;
when st3=> ale='0';start='1';oe='0';lock='0';
if(eoc='0') then next_state=st4; ---轉換即將結束,轉換至下一狀態(tài);
else next_state=st3; ---轉換未結束,繼續(xù)在狀態(tài)ST3中等待;
end if;
when st4=> ale='0';start='0';oe='0';lock='0';
if(eoc='1') then next_state=st5; ---EOC由0恢復1,轉換結束;
else next_state=st4; ---轉換未結束,等待;
end if;
when st5=> ale='0';start='0';oe='1';lock='0'; next_state=st6; --開啟輸出允許OE;
when st6=> ale='0';start='0';oe='1';lock='1'; next_state=st7; --開啟數(shù)據(jù)鎖存LOCK;
when st7=> ale='0';start='0';oe='0';lock='1'; next_state=st0;
when others=>next_state=st0; ---其它狀態(tài)返回ST0;
end case;
2.2 二進制到BCD碼轉換模塊
本設計模擬量輸入范圍為0~+5V,用8位二進制數(shù)表示其精度為0.02。將ADC0809輸出的二進制數(shù)劃分為高四位與低四位,通過查表分別算出電壓值并寫出對應的12位BCD碼, 將得到的高四位電壓與低四位電壓值用12位BCD碼加法,把12位BCD碼分為三組,每組四位,相加從最低4位開始,且每4位相加結果超過10時需作進位動作,最終得到BCD碼分別對應高、中、低三位輸出顯示。
評論