數(shù)字電壓表設(shè)計實驗_第1頁
數(shù)字電壓表設(shè)計實驗_第2頁
數(shù)字電壓表設(shè)計實驗_第3頁
數(shù)字電壓表設(shè)計實驗_第4頁
數(shù)字電壓表設(shè)計實驗_第5頁
已閱讀5頁,還剩37頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

數(shù)字電壓表設(shè)計何賓2008.11第13章數(shù)字電壓表設(shè)計-本章概要本章給出了PLD器件在數(shù)字和模擬系統(tǒng)的典型應(yīng)用-數(shù)字電壓表的設(shè)計。數(shù)字電壓表實際上是一個模擬和數(shù)字混合系統(tǒng),該設(shè)計通過A/D轉(zhuǎn)換器將模擬信號轉(zhuǎn)換成離散的數(shù)字量,通過可編程邏輯器件PLD進行處理,最后通過7段數(shù)碼管顯示測量值。該章首先介紹了數(shù)字電壓表的功能要求和整體結(jié)構(gòu);隨后具體介紹了數(shù)字電壓表的模塊設(shè)計,其中包括數(shù)字電壓表的控制信號、ADC轉(zhuǎn)換原理和控制模塊的具體結(jié)構(gòu)。本章最后詳細描述了設(shè)計的具體實現(xiàn)過程,具體包括ADC控制模塊的原理及實現(xiàn)、顯示控制模塊原理及實現(xiàn)、頂層模塊的設(shè)計。第13章數(shù)字電壓表設(shè)計

-數(shù)字電壓表的功能要求

數(shù)字電壓表是一個模擬和數(shù)字混合系統(tǒng),該數(shù)字電壓表完成模擬直流信號的測試,并將結(jié)果在數(shù)碼管上顯示。數(shù)字電壓表主要有以下幾個功能:1、模擬信號通過ADC0809轉(zhuǎn)換為離散的數(shù)字量,設(shè)計模塊和ADC0809通過并口連接,并且向ADC0809發(fā)出控制信號;2、數(shù)字電壓表設(shè)計模塊,將外部的時鐘信號分頻后得到合適的采樣時鐘送給ADC0809;3、每當ADC0809完成一次模/數(shù)轉(zhuǎn)換過程后,設(shè)計模塊對采樣數(shù)據(jù)進行處理,并通過3個7段數(shù)碼管顯示測量的直流電壓值。第13章數(shù)字電壓表設(shè)計

-數(shù)字電壓表的整體結(jié)構(gòu)

第13章數(shù)字電壓表設(shè)計

-數(shù)字電壓表的整體結(jié)構(gòu)從圖中可以看出,實驗平臺上,在PLD和ADC0809之間加入了ADC控制模塊,由于該模塊的加入使PLD產(chǎn)生ADC控制模塊可以識別的信號,然后送到ADC0809。圖中的PLD的設(shè)計部分和ADC控制模塊、7段數(shù)碼管、外部時鐘信號、按鍵進行連接。第13章數(shù)字電壓表設(shè)計

-數(shù)字電壓表控制信號

該數(shù)字電壓表的控制邏輯由PLD完成,該模塊的輸入和輸出接口由下面信號組成:1、輸入信號外部時鐘信號(clk_in)外部復(fù)位信號(reset)ADC轉(zhuǎn)換后的數(shù)字信號(din)ADC轉(zhuǎn)換完的中斷信號(INTR)第13章數(shù)字電壓表設(shè)計

-數(shù)字電壓表控制信號2、輸出信號ADC片選信號(ncs)ADC讀信號(nrd)ADC寫信號(nwr)ADC通道選擇信號(nadd)ADC時鐘信號(nclock)LED選擇信號(led_select)LED數(shù)碼顯示控制信號(seg)第13章數(shù)字電壓表設(shè)計-ADC轉(zhuǎn)換原理

ADC0809是CMOS的8位A/D轉(zhuǎn)換器,片內(nèi)有8路模擬開關(guān),可控制8個模擬量中的一個進入轉(zhuǎn)換器中。ADC0809的分辨率為8位,轉(zhuǎn)換時間約100us,含鎖存控制的8路多路開關(guān),輸出有三態(tài)緩沖器控制,單5V電源供電。第13章數(shù)字電壓表設(shè)計-ADC轉(zhuǎn)換原理第13章數(shù)字電壓表設(shè)計-控制模塊結(jié)構(gòu)第13章數(shù)字電壓表設(shè)計-控制模塊結(jié)構(gòu)1、ADC控制模塊ADC控制模塊產(chǎn)生ADC控制模塊需要的控制信號,同時讀取ADC轉(zhuǎn)換后的中斷信號和數(shù)據(jù)信號。該設(shè)計采用了教學(xué)實驗系統(tǒng),該系統(tǒng)的ADC控制模塊接收ncs,nrd,nwr和nintr信號。圖13.4給出了該模塊的控制信號時序關(guān)系。第13章數(shù)字電壓表設(shè)計-控制模塊結(jié)構(gòu)2、顯示控制模塊顯示控制模塊產(chǎn)生LED顯示所需要的LED選擇信號和LED數(shù)碼控制信號。3、采樣時鐘生成模塊采樣時鐘生成模塊對外部輸入的1MHz信號進行分頻后,為ADC0809產(chǎn)生合適的采樣時鐘信號。4、掃描時鐘生成模塊掃描時鐘生成模塊對外部輸入的1MHz信號進行分頻后,為LED正確顯示測量值產(chǎn)生合適的掃描時鐘信號。第13章數(shù)字電壓表設(shè)計

-主要控制信號說明

1、START是轉(zhuǎn)換啟動信號,高電平有效;

2、ALE是3位通道選擇地址(ADDC、ADDB、ADDA)信號的鎖存信號。當模擬量送至某一輸入端(如IN1或IN2等),由3位地址信號選擇,而地址信號由ALE鎖存;

第13章數(shù)字電壓表設(shè)計

-主要控制信號說明

3、EOC是轉(zhuǎn)換情況狀態(tài)信號,當啟動轉(zhuǎn)換約100us后,EOC產(chǎn)生一個負脈沖,以示轉(zhuǎn)換結(jié)束;在EOC的上升沿后,若使輸出使能信號OE為高電平,則控制打開三態(tài)緩沖器,把轉(zhuǎn)換好的8位數(shù)據(jù)結(jié)果輸出至數(shù)據(jù)總線。至此ADC0809的一次轉(zhuǎn)換結(jié)束了。

第13章數(shù)字電壓表設(shè)計-控制時序說明第13章數(shù)字電壓表設(shè)計

-實驗箱控制信號

在實驗儀器中CS與WR相與后接在了ALE和START端,CS與RD相與后接在了OE端,通過對時序和電路的綜合考慮,建議使用如下的AD控制時序。第13章數(shù)字電壓表設(shè)計

-FSM的設(shè)計可以將整個控制分成4個步驟狀態(tài):S0、S1、S2、S3,各狀態(tài)的動作方式如下:

1、狀態(tài)S0:CS=1、WR=1、RD=0(由控制器發(fā)出信號要求ADC0809開始進行模/數(shù)信號的轉(zhuǎn)換)。

2、狀態(tài)S1:CS=0、WR=0、RD=0(ADC0809進行轉(zhuǎn)換動作,轉(zhuǎn)換完畢后INT將低電位升至高電位)。

3、狀態(tài)S2:CS=1、WR=0、RD=1(由控制器發(fā)出信號以讀取ADC0809的轉(zhuǎn)換數(shù)據(jù))。

4、狀態(tài)S3:CS=0、WR=0、RD=0(由控制器讀取數(shù)據(jù)總線上的數(shù)字轉(zhuǎn)換數(shù)據(jù))。第13章數(shù)字電壓表設(shè)計

-FSM的狀態(tài)圖描述S1S2S3S4第13章數(shù)字電壓表設(shè)計

-FSM的設(shè)計由上述的四個狀態(tài)可以歸納出整個控制器的動作功能有:

1、負責(zé)在每個步驟送出所需的CS、WR、RD控制信號。

2、在狀態(tài)S1時,監(jiān)控INT信號是否由低變高,如此以便了解轉(zhuǎn)換動作結(jié)束與否。

3、在狀態(tài)S3,讀取轉(zhuǎn)換的數(shù)字量。第13章數(shù)字電壓表設(shè)計

-編碼轉(zhuǎn)換電路

計算轉(zhuǎn)換后的數(shù)字電壓信號與BCD碼的對應(yīng)關(guān)系:對8位的ADC0809而言,它的輸出準位共有2**8=256種,即它的分辨率是1/256。

VIN=輸入到ADC0808的電壓

Vfs=滿量程電壓

VZ=0電壓

DX=輸出的數(shù)字量

DMAX=最大數(shù)字量

DMIN=最小數(shù)字量

第13章數(shù)字電壓表設(shè)計

-編碼轉(zhuǎn)換電路假設(shè)輸入信號為0~5V電壓范圍,參考電壓(Vref/2)為2.56V時,則它最小輸出電壓是5V/256=0.01953V,這代表ADC0809所能轉(zhuǎn)換的最小電壓值,我們在該實驗中取最小電壓準位為0.02V。當ADC0809收到的信號是01110110(76H),則其對應(yīng)的電壓值為:76H×0.02V=2.36V第13章數(shù)字電壓表設(shè)計

-編碼轉(zhuǎn)換電路要實現(xiàn)電壓值與BCD碼的對應(yīng)關(guān)系用多種方法(如查表法、比較法等)。查表法需要寫大量的數(shù)據(jù),比較麻煩,在示例程序中使用了比較法。第13章數(shù)字電壓表設(shè)計-具體算法例如:10100101表示165*2=330=101001010165/255*5=3.26,用三個七段數(shù)碼管顯示,分離326=0011,0010,0110將1010高四位,0101低四位分離.0101表示0000,0000,1010,BCD碼11010表示0010,1100,0000,BCD碼2下面就是BCD碼1+BCD碼2第13章數(shù)字電壓表設(shè)計-具體算法

0000,0000,1010+0010,1100,0000,

0010,1100,10100000,0011,0000

比如:9+1=10,6+7=13,BCD碼的加法實際上就是10進制的加法判斷:由于BCD碼顯示0-9,所以加法運算要符合BCD碼的運算當>9時,BCD+6,并且+1進位否則<9,BCD<=BCD+1第13章數(shù)字電壓表設(shè)計-VHDL描述libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;useIEEE.STD_LOGIC_ARITH.ALL;useIEEE.STD_LOGIC_UNSIGNED.ALL;librarywork;usework.disp_driver.all;entitydisp_controllerisport( rst:instd_logic;scan_clk:instd_logic;din:instd_logic_vector(7downto0);sel:outstd_logic_vector(1downto0);seg:outstd_logic_vector(6downto0);dp:outstd_logic);enddisp_controller;第13章數(shù)字電壓表設(shè)計-VHDL描述architectureBehavioralofdisp_controllerissignalvol_value:std_logic_vector(7downto0);signalbcd_value:std_logic_vector(11downto0);signalbcd_h,bcd_l:std_logic_vector(11downto0);signalscan_out:std_logic_vector(1downto0);begin第13章數(shù)字電壓表設(shè)計-VHDL描述process(rst,scan_clk)begin

if(rst='0')then

vol_value<="00000000";

bcd_value<="000000000000";

elsif(rising_edge(scan_clk))then

vol_value<=din;

bcd_h<=bin_bcd(vol_value(7downto4),'1');

bcd_l<=bin_bcd(vol_value(3downto0),'0');

bcd_value<=bcd_h+bcd_l;if(bcd_value(3downto0)>"1001")then

bcd_value<=bcd_value+"000000000110";endif;if(bcd_value(7downto4)>"1001")then

bcd_value<=bcd_value+"000001100000";endif;endif;endprocess;第13章數(shù)字電壓表設(shè)計-VHDL描述process(scan_clk)begin

if(rising_edge(scan_clk))then

if(scan_out="10")then

scan_out<="00";else

scan_out<=scan_out+'1';endif;endif;endprocess;第13章數(shù)字電壓表設(shè)計-VHDL描述process(scan_out)begincasescan_outiswhen"00"=>

seg<=display(bcd_value(3downto0));sel<="00";dp<='0';when"01"=>

seg<=display(bcd_value(7downto4));sel<="01";dp<='0';when"10"=>

seg<=display(bcd_value(11downto8));sel<="10";dp<='1';whenothers=>

seg<=display("1111");sel<="11";dp<='1';endcase;endprocess;endBehavioral;第13章數(shù)字電壓表設(shè)計-程序包的設(shè)計

在該設(shè)計中,在處理數(shù)碼管顯示部分會多次使用到BCD碼到7段碼,為了提高對程序代碼的復(fù)用和減少程序代碼長度,在設(shè)計中將BCD碼到7段碼的轉(zhuǎn)換過程通過函數(shù)調(diào)用實現(xiàn)。下面給出在程序包中的函數(shù)聲明過程。第13章數(shù)字電壓表設(shè)計-程序包的設(shè)計libraryIEEE;useIEEE.STD_LOGIC_1164.all;packagedisp_driverisfunctiondisplay(a:instd_logic_vector(3downto0))returnstd_logic_vector;functionbin_bcd(bin:instd_logic_vector(3downto0);flag:std_logic)returnstd_logic_vector;enddisp_driver;第13章數(shù)字電壓表設(shè)計-程序包的設(shè)計packagebodydisp_driverisfunctionbin_bcd(bin:std_logic_vector;flag:std_logic)returnstd_logic_vectorisvariablebcd_x:std_logic_vector(11downto0);beginif(flag='0')thencasebiniswhen"0000"=>bcd_x:="000000000000";when"0001"=>bcd_x:="000000000010";when"0010"=>bcd_x:="000000000100";when"0011"=>bcd_x:="000000000110";when"0100"=>bcd_x:="000000001000";when"0101"=>bcd_x:="000000001010";when"0110"=>bcd_x:="000000001100";when"0111"=>bcd_x:="000000001110";when"1000"=>bcd_x:="000000010000";when"1001"=>bcd_x:="000000010010";when"1010"=>bcd_x:="000000100000";when"1011"=>bcd_x:="000000100010";when"1100"=>bcd_x:="000000100100";when"1101"=>bcd_x:="000000100110";when"1110"=>bcd_x:="000000101000";when"1111"=>bcd_x:="000000110000";whenothers=>bcd_x:="111111111111";endcase;elsif(flag='1')then第13章數(shù)字電壓表設(shè)計-程序包的設(shè)計casebiniswhen"0000"=>bcd_x:="000000000000";when"0001"=>bcd_x:="000000110010";when"0010"=>bcd_x:="000001100100";when"0011"=>bcd_x:="000010010110";when"0100"=>bcd_x:="000100101000";when"0101"=>bcd_x:="000101100000";when"0110"=>bcd_x:="000110010010";when"0111"=>bcd_x:="001000100100";when"1000"=>bcd_x:="001001010110";when"1001"=>bcd_x:="001010001000";when"1010"=>bcd_x:="001100110010";when"1011"=>bcd_x:="001101010010";when"1100"=>bcd_x:="001110000100";when"1101"=>bcd_x:="010000010110";when"1110"=>bcd_x:="010001001000";when"1111"=>bcd_x:="010010000000";whenothers=>bcd_x:="111111111111";endcase;endif;returnbcd_x;endbin_bcd;第13章數(shù)字電壓表設(shè)計-程序包的設(shè)計functiondisplay(a:std_logic_vector)returnstd_logic_vectorisvariabler:std_logic_vector(6downto0);begincaseaiswhen"0000"=>r:="0111111";when"0001"=>r:="0000110";when"0010"=>r:="1011011";when"0011"=>r:="1001111";when"0100"=>r:="1100110";when"0101"=>r:="1101101";when"0110"=>r:="1111101";when"0111"=>r:="0000111";when"1000"=>r:="1111111";when"1001"=>r:="1101111";whenothers=>r:="1111111";endcase;returnr;enddisplay;enddisp_driver;第13章數(shù)字電壓表設(shè)計-頂層模塊libraryIEEE;useIEEE.STD_LOGIC_1164.ALL;useIEEE.STD_LOGIC_ARITH.ALL;useIEEE.STD_LOGIC_UNSIGNED.ALL;entitytopisport(rst:instd_logic;clk:instd_logic;int:instd_logic;cs:outstd_logic;wr:outstd_logic;rd:outstd_logic;din:instd_logic_vector(7downto0);sel:outstd_logic_vector(1downto0);seg:outstd_logic_vector(6downto0);dp:outstd_logic);endtop;第13章數(shù)字電壓表設(shè)計-頂層模塊architectureBehavioraloftopissignald:std_logic_vector(7downto0);componentadc0809_controllerport(clk:instd_logic;rst:instd_logic;int:instd_logic;cs:outstd_logic;wr:outstd_logic;rd:outstd_logic;din:instd_logic_vector(7downto0);dout:outstd_logic_vector(7downto0));endcomponent;第13章數(shù)字電壓表設(shè)計-頂層模塊componentdisp_controllerport(rst:instd_logic;scan_clk:instd_logic;din:instd_logic_vector(7downto0);sel:outstd_logic_vector(1downto0);seg:outstd_logic_vector(6downto0);dp:outstd_logic);endcomponent;第13章數(shù)字電壓表設(shè)計-頂層模塊Inst_adc0809_controller1:adc0809_controllerportmap(clk=>clk,rst=>rst,int=>int,cs=>cs,wr=>wr,rd=>rd,din=>din,dout=>d);第13章數(shù)字電壓表設(shè)計-頂層模塊Inst_disp_controller1:disp_controllerportmap(rst=>rst,scan_clk=>clk,din=>d,sel=>sel,seg=>seg,dp=>dp);endBehavioral;第13章數(shù)字電壓表設(shè)計-頂層約束該設(shè)計在基于xilinx的SPARTAN3的xc3s400pqg208-4c器件上實現(xiàn),在百科融創(chuàng)的EDA-IV實驗平臺上

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論