版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
數(shù)字電壓表設(shè)計(jì)何賓2008.11第13章數(shù)字電壓表設(shè)計(jì)-本章概要本章給出了PLD器件在數(shù)字和模擬系統(tǒng)的典型應(yīng)用-數(shù)字電壓表的設(shè)計(jì)。數(shù)字電壓表實(shí)際上是一個(gè)模擬和數(shù)字混合系統(tǒng),該設(shè)計(jì)通過(guò)A/D轉(zhuǎn)換器將模擬信號(hào)轉(zhuǎn)換成離散的數(shù)字量,通過(guò)可編程邏輯器件PLD進(jìn)行處理,最后通過(guò)7段數(shù)碼管顯示測(cè)量值。該章首先介紹了數(shù)字電壓表的功能要求和整體結(jié)構(gòu);隨后具體介紹了數(shù)字電壓表的模塊設(shè)計(jì),其中包括數(shù)字電壓表的控制信號(hào)、ADC轉(zhuǎn)換原理和控制模塊的具體結(jié)構(gòu)。本章最后詳細(xì)描述了設(shè)計(jì)的具體實(shí)現(xiàn)過(guò)程,具體包括ADC控制模塊的原理及實(shí)現(xiàn)、顯示控制模塊原理及實(shí)現(xiàn)、頂層模塊的設(shè)計(jì)。第13章數(shù)字電壓表設(shè)計(jì)
-數(shù)字電壓表的功能要求
數(shù)字電壓表是一個(gè)模擬和數(shù)字混合系統(tǒng),該數(shù)字電壓表完成模擬直流信號(hào)的測(cè)試,并將結(jié)果在數(shù)碼管上顯示。數(shù)字電壓表主要有以下幾個(gè)功能:1、模擬信號(hào)通過(guò)ADC0809轉(zhuǎn)換為離散的數(shù)字量,設(shè)計(jì)模塊和ADC0809通過(guò)并口連接,并且向ADC0809發(fā)出控制信號(hào);2、數(shù)字電壓表設(shè)計(jì)模塊,將外部的時(shí)鐘信號(hào)分頻后得到合適的采樣時(shí)鐘送給ADC0809;3、每當(dāng)ADC0809完成一次模/數(shù)轉(zhuǎn)換過(guò)程后,設(shè)計(jì)模塊對(duì)采樣數(shù)據(jù)進(jìn)行處理,并通過(guò)3個(gè)7段數(shù)碼管顯示測(cè)量的直流電壓值。第13章數(shù)字電壓表設(shè)計(jì)
-數(shù)字電壓表的整體結(jié)構(gòu)
第13章數(shù)字電壓表設(shè)計(jì)
-數(shù)字電壓表的整體結(jié)構(gòu)從圖中可以看出,實(shí)驗(yàn)平臺(tái)上,在PLD和ADC0809之間加入了ADC控制模塊,由于該模塊的加入使PLD產(chǎn)生ADC控制模塊可以識(shí)別的信號(hào),然后送到ADC0809。圖中的PLD的設(shè)計(jì)部分和ADC控制模塊、7段數(shù)碼管、外部時(shí)鐘信號(hào)、按鍵進(jìn)行連接。第13章數(shù)字電壓表設(shè)計(jì)
-數(shù)字電壓表控制信號(hào)
該數(shù)字電壓表的控制邏輯由PLD完成,該模塊的輸入和輸出接口由下面信號(hào)組成:1、輸入信號(hào)外部時(shí)鐘信號(hào)(clk_in)外部復(fù)位信號(hào)(reset)ADC轉(zhuǎn)換后的數(shù)字信號(hào)(din)ADC轉(zhuǎn)換完的中斷信號(hào)(INTR)第13章數(shù)字電壓表設(shè)計(jì)
-數(shù)字電壓表控制信號(hào)2、輸出信號(hào)ADC片選信號(hào)(ncs)ADC讀信號(hào)(nrd)ADC寫(xiě)信號(hào)(nwr)ADC通道選擇信號(hào)(nadd)ADC時(shí)鐘信號(hào)(nclock)LED選擇信號(hào)(led_select)LED數(shù)碼顯示控制信號(hào)(seg)第13章數(shù)字電壓表設(shè)計(jì)-ADC轉(zhuǎn)換原理
ADC0809是CMOS的8位A/D轉(zhuǎn)換器,片內(nèi)有8路模擬開(kāi)關(guān),可控制8個(gè)模擬量中的一個(gè)進(jìn)入轉(zhuǎn)換器中。ADC0809的分辨率為8位,轉(zhuǎn)換時(shí)間約100us,含鎖存控制的8路多路開(kāi)關(guān),輸出有三態(tài)緩沖器控制,單5V電源供電。第13章數(shù)字電壓表設(shè)計(jì)-ADC轉(zhuǎn)換原理第13章數(shù)字電壓表設(shè)計(jì)-控制模塊結(jié)構(gòu)第13章數(shù)字電壓表設(shè)計(jì)-控制模塊結(jié)構(gòu)1、ADC控制模塊ADC控制模塊產(chǎn)生ADC控制模塊需要的控制信號(hào),同時(shí)讀取ADC轉(zhuǎn)換后的中斷信號(hào)和數(shù)據(jù)信號(hào)。該設(shè)計(jì)采用了教學(xué)實(shí)驗(yàn)系統(tǒng),該系統(tǒng)的ADC控制模塊接收ncs,nrd,nwr和nintr信號(hào)。圖13.4給出了該模塊的控制信號(hào)時(shí)序關(guān)系。第13章數(shù)字電壓表設(shè)計(jì)-控制模塊結(jié)構(gòu)2、顯示控制模塊顯示控制模塊產(chǎn)生LED顯示所需要的LED選擇信號(hào)和LED數(shù)碼控制信號(hào)。3、采樣時(shí)鐘生成模塊采樣時(shí)鐘生成模塊對(duì)外部輸入的1MHz信號(hào)進(jìn)行分頻后,為ADC0809產(chǎn)生合適的采樣時(shí)鐘信號(hào)。4、掃描時(shí)鐘生成模塊掃描時(shí)鐘生成模塊對(duì)外部輸入的1MHz信號(hào)進(jìn)行分頻后,為L(zhǎng)ED正確顯示測(cè)量值產(chǎn)生合適的掃描時(shí)鐘信號(hào)。第13章數(shù)字電壓表設(shè)計(jì)
-主要控制信號(hào)說(shuō)明
1、START是轉(zhuǎn)換啟動(dòng)信號(hào),高電平有效;
2、ALE是3位通道選擇地址(ADDC、ADDB、ADDA)信號(hào)的鎖存信號(hào)。當(dāng)模擬量送至某一輸入端(如IN1或IN2等),由3位地址信號(hào)選擇,而地址信號(hào)由ALE鎖存;
第13章數(shù)字電壓表設(shè)計(jì)
-主要控制信號(hào)說(shuō)明
3、EOC是轉(zhuǎn)換情況狀態(tài)信號(hào),當(dāng)啟動(dòng)轉(zhuǎn)換約100us后,EOC產(chǎn)生一個(gè)負(fù)脈沖,以示轉(zhuǎn)換結(jié)束;在EOC的上升沿后,若使輸出使能信號(hào)OE為高電平,則控制打開(kāi)三態(tài)緩沖器,把轉(zhuǎn)換好的8位數(shù)據(jù)結(jié)果輸出至數(shù)據(jù)總線(xiàn)。至此ADC0809的一次轉(zhuǎn)換結(jié)束了。
第13章數(shù)字電壓表設(shè)計(jì)-控制時(shí)序說(shuō)明第13章數(shù)字電壓表設(shè)計(jì)
-實(shí)驗(yàn)箱控制信號(hào)
在實(shí)驗(yàn)儀器中CS與WR相與后接在了ALE和START端,CS與RD相與后接在了OE端,通過(guò)對(duì)時(shí)序和電路的綜合考慮,建議使用如下的AD控制時(shí)序。第13章數(shù)字電壓表設(shè)計(jì)
-FSM的設(shè)計(jì)可以將整個(gè)控制分成4個(gè)步驟狀態(tài):S0、S1、S2、S3,各狀態(tài)的動(dòng)作方式如下:
1、狀態(tài)S0:CS=1、WR=1、RD=0(由控制器發(fā)出信號(hào)要求ADC0809開(kāi)始進(jìn)行模/數(shù)信號(hào)的轉(zhuǎn)換)。
2、狀態(tài)S1:CS=0、WR=0、RD=0(ADC0809進(jìn)行轉(zhuǎn)換動(dòng)作,轉(zhuǎn)換完畢后INT將低電位升至高電位)。
3、狀態(tài)S2:CS=1、WR=0、RD=1(由控制器發(fā)出信號(hào)以讀取ADC0809的轉(zhuǎn)換數(shù)據(jù))。
4、狀態(tài)S3:CS=0、WR=0、RD=0(由控制器讀取數(shù)據(jù)總線(xiàn)上的數(shù)字轉(zhuǎn)換數(shù)據(jù))。第13章數(shù)字電壓表設(shè)計(jì)
-FSM的狀態(tài)圖描述S1S2S3S4第13章數(shù)字電壓表設(shè)計(jì)
-FSM的設(shè)計(jì)由上述的四個(gè)狀態(tài)可以歸納出整個(gè)控制器的動(dòng)作功能有:
1、負(fù)責(zé)在每個(gè)步驟送出所需的CS、WR、RD控制信號(hào)。
2、在狀態(tài)S1時(shí),監(jiān)控INT信號(hào)是否由低變高,如此以便了解轉(zhuǎn)換動(dòng)作結(jié)束與否。
3、在狀態(tài)S3,讀取轉(zhuǎn)換的數(shù)字量。第13章數(shù)字電壓表設(shè)計(jì)
-編碼轉(zhuǎn)換電路
計(jì)算轉(zhuǎn)換后的數(shù)字電壓信號(hào)與BCD碼的對(duì)應(yīng)關(guān)系:對(duì)8位的ADC0809而言,它的輸出準(zhǔn)位共有2**8=256種,即它的分辨率是1/256。
VIN=輸入到ADC0808的電壓
Vfs=滿(mǎn)量程電壓
VZ=0電壓
DX=輸出的數(shù)字量
DMAX=最大數(shù)字量
DMIN=最小數(shù)字量
第13章數(shù)字電壓表設(shè)計(jì)
-編碼轉(zhuǎn)換電路假設(shè)輸入信號(hào)為0~5V電壓范圍,參考電壓(Vref/2)為2.56V時(shí),則它最小輸出電壓是5V/256=0.01953V,這代表ADC0809所能轉(zhuǎn)換的最小電壓值,我們?cè)谠搶?shí)驗(yàn)中取最小電壓準(zhǔn)位為0.02V。當(dāng)ADC0809收到的信號(hào)是01110110(76H),則其對(duì)應(yīng)的電壓值為:76H×0.02V=2.36V第13章數(shù)字電壓表設(shè)計(jì)
-編碼轉(zhuǎn)換電路要實(shí)現(xiàn)電壓值與BCD碼的對(duì)應(yīng)關(guān)系用多種方法(如查表法、比較法等)。查表法需要寫(xiě)大量的數(shù)據(jù),比較麻煩,在示例程序中使用了比較法。第13章數(shù)字電壓表設(shè)計(jì)-具體算法例如:10100101表示165*2=330=101001010165/255*5=3.26,用三個(gè)七段數(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è)計(jì)-具體算法
0000,0000,1010+0010,1100,0000,
0010,1100,10100000,0011,0000
比如:9+1=10,6+7=13,BCD碼的加法實(shí)際上就是10進(jìn)制的加法判斷:由于BCD碼顯示0-9,所以加法運(yùn)算要符合BCD碼的運(yùn)算當(dāng)>9時(shí),BCD+6,并且+1進(jìn)位否則<9,BCD<=BCD+1第13章數(shù)字電壓表設(shè)計(jì)-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è)計(jì)-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è)計(jì)-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è)計(jì)-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è)計(jì)-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è)計(jì)-程序包的設(shè)計(jì)
在該設(shè)計(jì)中,在處理數(shù)碼管顯示部分會(huì)多次使用到BCD碼到7段碼,為了提高對(duì)程序代碼的復(fù)用和減少程序代碼長(zhǎng)度,在設(shè)計(jì)中將BCD碼到7段碼的轉(zhuǎn)換過(guò)程通過(guò)函數(shù)調(diào)用實(shí)現(xiàn)。下面給出在程序包中的函數(shù)聲明過(guò)程。第13章數(shù)字電壓表設(shè)計(jì)-程序包的設(shè)計(jì)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è)計(jì)-程序包的設(shè)計(jì)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è)計(jì)-程序包的設(shè)計(jì)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è)計(jì)-程序包的設(shè)計(jì)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è)計(jì)-頂層模塊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è)計(jì)-頂層模塊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è)計(jì)-頂層模塊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è)計(jì)-頂層模塊Inst_adc0809_controller1:adc0809_controllerportmap(clk=>clk,rst=>rst,int=>int,cs=>cs,wr=>wr,rd=>rd,din=>din,dout=>d);第13章數(shù)字電壓表設(shè)計(jì)-頂層模塊Inst_disp_controller1:disp_controllerportmap(rst=>rst,scan_clk=>clk,din=>d,sel=>sel,seg=>seg,dp=>dp);endBehavioral;第13章數(shù)字電壓表設(shè)計(jì)-頂層約束該設(shè)計(jì)在基于xilinx的SPARTAN3的xc3s400pqg208-4c器件上實(shí)現(xiàn),在百科融創(chuàng)的EDA-IV實(shí)驗(yàn)平臺(tái)上
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 保育員學(xué)期工作計(jì)劃小班簡(jiǎn)短2022
- 中職學(xué)生開(kāi)學(xué)典禮精彩發(fā)言稿(14篇)
- 體育部部長(zhǎng)競(jìng)選演講稿三篇
- 五心好家長(zhǎng)先進(jìn)事跡(8篇)
- 主管護(hù)師述職報(bào)告
- 節(jié)水節(jié)電課件教學(xué)課件
- 影響農(nóng)村教師專(zhuān)業(yè)發(fā)展問(wèn)題的研究結(jié)題報(bào)告
- 影響地產(chǎn)金融的因素
- 輪胎噪聲測(cè)試方法 轉(zhuǎn)鼓法 征求意見(jiàn)稿
- 2025年山東轄內(nèi)農(nóng)村商業(yè)銀行高校畢業(yè)生招聘(2180人)筆試備考題庫(kù)及答案解析
- 門(mén)診發(fā)熱病人登記表
- 新課標(biāo)-人教版數(shù)學(xué)六年級(jí)上冊(cè)第五單元《圓》單元教材解讀
- 2022湖北漢江王甫洲水力發(fā)電有限責(zé)任公司招聘試題及答案解析
- 2019新人教必修1unit2Travelling-Around整單元完整教案
- 大學(xué)生辯論賽評(píng)分標(biāo)準(zhǔn)表
- 診所污水污物糞便處理方案及周邊環(huán)境
- 江蘇開(kāi)放大學(xué)2023年秋《馬克思主義基本原理 060111》形成性考核作業(yè)2-實(shí)踐性環(huán)節(jié)(占過(guò)程性考核成績(jī)的30%)參考答案
- 《我是班級(jí)的主人翁》的主題班會(huì)
- 酒店安全設(shè)施及安全制度
- 近代化的早期探索與民族危機(jī)的加劇 單元作業(yè)設(shè)計(jì)
- 租賃機(jī)械設(shè)備施工方案
評(píng)論
0/150
提交評(píng)論