《單片機(jī)系統(tǒng)設(shè)計仿真與應(yīng)用》課件第6章_第1頁
《單片機(jī)系統(tǒng)設(shè)計仿真與應(yīng)用》課件第6章_第2頁
《單片機(jī)系統(tǒng)設(shè)計仿真與應(yīng)用》課件第6章_第3頁
《單片機(jī)系統(tǒng)設(shè)計仿真與應(yīng)用》課件第6章_第4頁
《單片機(jī)系統(tǒng)設(shè)計仿真與應(yīng)用》課件第6章_第5頁
已閱讀5頁,還剩52頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

6.1A/D和D/A器件工作原理6.2ADC0809數(shù)據(jù)采集6.3用DAC0832產(chǎn)生任意波形

6.4用DAC0832控制直流電機(jī)轉(zhuǎn)速6.5小結(jié)習(xí)題

6.1.1ADC0809的結(jié)構(gòu)和工作原理

ADC0809是8位逐次逼近式單片A/D轉(zhuǎn)換芯片,可對8路0~5?V的輸入模擬電壓信號分時進(jìn)行轉(zhuǎn)換。ADC0809的分辨率為8位,轉(zhuǎn)換時間約100?

s,含鎖存控制的8路多路開關(guān),輸出有三態(tài)緩沖器控制,單5?V電源供電。

1.ADC0809的引腳和內(nèi)部結(jié)構(gòu)

ADC0809的引腳和內(nèi)部結(jié)構(gòu)如圖6-1所示。6.1A/D和D/A器件工作原理圖6-1ADC0809的引腳圖和內(nèi)部結(jié)構(gòu)圖

ADC0809芯片有28條引腳,采用雙列直插式封裝,其引腳分布如下:

(1)電源線(4條)。

(2)輸入線(11條)。

模擬輸入中的一路,在ALE有效時被鎖存。選通8路模擬輸入的真值表如表6-1所示。

(3)輸出線(8條)。表6-1ADDA、ADDB、ADDC真值表

2.ADC0809的工作原理

ADC0809的工作過程是:首先輸入3位地址,并使ALE=1,將地址存入地址鎖存器中。此地址經(jīng)譯碼選通8路模擬輸入之一到比較器。主要控制信號說明如圖6-2所示。圖6-2ADC0809控制信號6.1.2DAC0832的結(jié)構(gòu)和工作原理

DAC0832是8位雙緩沖器A/D轉(zhuǎn)換芯片,可對8路0~5?V的輸入模擬電壓信號分時進(jìn)行轉(zhuǎn)換。單電源供電,從+5~+15?V均可正常工作?;鶞?zhǔn)電壓的范圍為-10~+10?V;電流建立時間為1?ms;CMOS工藝,低功耗20?mW。

1.DAC0832的引腳和內(nèi)部結(jié)構(gòu)

DAC0832的引腳和內(nèi)部結(jié)構(gòu)如圖6-3所示。圖6-3DAC0832的引腳圖和內(nèi)部結(jié)構(gòu)圖

DAC0832的輸出方式為電流輸出:IOUT1+?IOUT2=?常數(shù)。

DAC0832是電流輸出,為了取得電壓輸出,需在電流輸出端接運(yùn)算放大器,RFE即為運(yùn)算放大器的反饋電阻端。運(yùn)算放大器的接法如圖6-4所示。

DAC0832輸出電壓值為-D×VREF/255。其中,D為待轉(zhuǎn)換的8位輸入數(shù)據(jù)。圖6-4運(yùn)算放大器接法

2.DAC0832與8051的接口電路

DAC0832的與CPU的連接可采用三種方式:直通方式、單緩沖方式和雙緩沖方式。

1)直通方式

直通方式是指D7~D0上一出現(xiàn)數(shù)字量,DAC即可將它們轉(zhuǎn)換成模擬量,見圖6-5。圖6-5直通方式

2)單緩沖方式

所謂單緩沖方式就是使0832的兩個輸入寄存器中有一個處于直通方式,而另一個處于受控的鎖存方式,或者說兩個輸入寄存器同時受控的方式。在實(shí)際應(yīng)用中,如果只有一路模擬量輸出,或雖有幾路模擬量但并不要求同步輸出的情況,就可采用單緩沖方式。單緩沖方式的電路有多種形式,其中一種接線如圖6-6所示。圖6-6單緩沖方式

3)雙緩沖方式

所謂雙緩沖方式,就是把DAC0832的兩個鎖存器都接成受控鎖存方式。雙緩沖DAC0832的連接如圖6-7所示。圖6-7DAC0832的雙緩沖方式連接6.1.3單片機(jī)與DAC0832和ADC0809的接口設(shè)計

1.原理圖設(shè)計

單片機(jī)與DAC0832和ADC0809的接口原理圖如圖6-8和圖6-9所示。圖6-8頂層原理圖圖6-9ADC/DAC子原理圖

2.原理圖說明

對于ADC0809和單片機(jī)的接口說明:

(1)CLOCK引腳接單片機(jī)的端口P3.4,單片機(jī)利用定時器在該端口產(chǎn)生固定頻率的方波。

(2)?ADC0809的轉(zhuǎn)換結(jié)果,一方面由單片機(jī)讀取進(jìn)行數(shù)據(jù)處理。

(3)使用了ADC0809的兩路輸入模擬量,模擬量采用可變電阻調(diào)節(jié)。對于DAC0832和單片機(jī)的接口說明:

(1)?DAC0832與8051的連接采用單緩沖方式,兩個輸入寄存器同時受控。

(2)放大器選用UA741,將電流輸出轉(zhuǎn)換為電壓輸出。

(3)?DAC0832的片選信號通過74LS138提供,為使片選信號有效,必須使P2.7和P2.4為高電平。此原理圖中所使用的元器件根據(jù)其名稱可在Proteus中查找得到。6.2.1設(shè)計要求

將模擬量轉(zhuǎn)換為數(shù)字量,具體要求如下:

(1)共有兩路模擬信號,信號電壓范圍為0~5?V,輪流采集。

(2)將兩路模擬信號的轉(zhuǎn)換結(jié)果,用LED燈顯示,并送數(shù)碼管顯示。

(3)報警功能。分別設(shè)定每一路的上限值和下限值,當(dāng)超過設(shè)定界限值時,通過指示燈閃爍或喇叭發(fā)聲,表示報警。

(4)將采集的數(shù)據(jù)存入內(nèi)存。

(5)分別采用查詢方式和中斷方式實(shí)現(xiàn)。6.2ADC0809數(shù)據(jù)采集6.2.2設(shè)計說明

本設(shè)計僅完成功能(1)和功能(2),并采用查詢方式實(shí)現(xiàn)。

ADC0809的工作過程參見圖6-2,下面再作簡單說明:首先輸入3位地址,并使ALE=1,將地址存入地址鎖存器中,此地址經(jīng)譯碼選通8路模擬輸入之一到比較器。6.2.3設(shè)計源碼

根據(jù)程序流程圖,可以寫出ADC0809采集數(shù)據(jù)的源程序,如例6-1。圖6-10程序流程圖【例6-1】ADC0809采集源碼。

#include<reg51.h>

#include<absacc.h>

#defineucharunsignedchar

//下面地址定義中包含使能138芯片的信息

#definePA8255XBYTE[0x80fc]//8255端口A的地址

#definePB8255XBYTE[0x80fd]//8255端口B的地址

#definePC8255XBYTE[0x80fe]//8255端口C的地址

#defineCOM8255XBYTE[0x80ff]//8255命令字的地址//ADC0809引腳定義

sbitAD_EOC=P2^1;

sbitAD_selA=P3^2; //只使用2路模擬信號輸入

sbitAD_OE=P3^3;

sbitAD_CLK=P3^4;

sbitAD_ST=P3^5;

voiddelay(ucharx);

voidinit_8255(void);/*************采集數(shù)據(jù)函數(shù):使用AD器件采集數(shù)據(jù)*****************/

//使用ADC0809采樣通道0/1輸入模擬信號,轉(zhuǎn)換后進(jìn)行顯示

voidadc_0809(void)

{

ucharled_table[16]={0x3f,0x6,0x5b,0x4f,0x66,0x6d,0x7d,

?0x7,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

//0~F共16個數(shù),用于段控 staticucharcnt=0; //用于交替選擇通道0和通道1

uchartmp=0;

if(((cnt++)%2)==0)

{

AD_selA=0;//選擇通道0

}

else

{

AD_selA=1; //選擇通道1 }

AD_ST=0;AD_ST=1;AD_ST=0; //啟動轉(zhuǎn)換

while(AD_EOC==0);//等待轉(zhuǎn)換結(jié)束

AD_OE=1;

//允許輸出

delay(2);

//下面幾行代碼將AD轉(zhuǎn)換輸出到數(shù)碼管上

for(tmp=0;tmp<100;tmp++) //顯示結(jié)果延時一段時間

{ PB8255=0x0f;

PA8255=led_table[(P1&0x0f)]; //讀取低4位并顯示在一個數(shù)碼管上

delay(5);

PB8255=0x0e;

PA8255=led_table[((P1>>4)&0x0f)];

//讀取高4位并顯示在一個數(shù)碼管上

delay(5);

}

AD_OE=0; //關(guān)閉輸出}

/*************中斷處理函數(shù):使用AD器件采集數(shù)據(jù)*****************/

//T0定時器中斷提供時鐘信號,一次定時10/36?ms,作為AD采樣時鐘:約20?kHz

voidTimer0_Int(void)interrupt1using1

{

AD_CLK=!AD_CLK; //ADC0809采樣時鐘信號,約20?kHz

}

/*************定時器初始化函數(shù)*****************/

voidTime_init(void)

{ TMOD=0x02;TH0=0x6;TL0=0x6;

//定時器模式與初值設(shè)定

IE=0x82; //開中斷

TR0=1; //啟動定時器0

}

/*************main函數(shù):循環(huán)采集并顯示數(shù)據(jù)*****************/

voidmain(void)

{ init_8255();

//8255命令字,PA/PB均為輸出,PC低4位輸入,高4位輸出

Time_init();

//定時器初始化,為DA轉(zhuǎn)化提供時鐘

while(1)

{

adc_0809();

}

}6.2.4仿真結(jié)果

將例6-1編譯下載后進(jìn)行仿真,仿真結(jié)果如圖6-11和圖6-12所示。圖6-11數(shù)碼管上顯示的仿真結(jié)果從圖6-11可以看出,數(shù)碼管上交替顯示FF和80,這是輸入的兩路模擬量經(jīng)模數(shù)轉(zhuǎn)換器轉(zhuǎn)換后得到的數(shù)字量。該數(shù)字量也可以由子圖中的LED燈表示出來,如圖6-12所示,根據(jù)圖中LED燈的亮滅情況可知,前者代表數(shù)值0x80,后者代表數(shù)值0xff。圖6-12LED燈顯示的模數(shù)轉(zhuǎn)換結(jié)果6.3.1設(shè)計要求

設(shè)計并輸出模擬信號,具體要求如下:

(1)模擬信號為鋸齒波,周期為1?s。

(2)模擬信號為正弦波,周期為1?s。

(3)模擬信號為三角波,周期為1?s。

(4)交替產(chǎn)生上述三種波,周期為3?s。6.3用DAC0832產(chǎn)生任意波形6.3.2設(shè)計說明

本設(shè)計僅完成設(shè)計要求(1),產(chǎn)生鋸齒波,周期為1?s。其他設(shè)計要求,在理解設(shè)計要求(1)的基礎(chǔ)上,由讀者自行完成。

圖6-13為產(chǎn)生鋸齒波的流程圖。圖6-13產(chǎn)生鋸齒波的流程圖6.3.3設(shè)計源碼

根據(jù)程序流程圖,可以寫出DAC0832產(chǎn)生鋸齒波的源程序,如例6-2。

【例6-2】DAC0832產(chǎn)生鋸齒波源碼。

#include<reg51.h>

#include<absacc.h>

#defineucharunsignedchar

//下面地址定義中包含使能138芯片的信息

#defineDAC0832XBYTE[0x90ff]//DAC0832的地址

//函數(shù)聲明

voiddelay(ucharx);/*************使用DA器件生成鋸齒波*****************/

//向DAC0832反復(fù)遞增輸出0~255的數(shù)字量,經(jīng)模數(shù)轉(zhuǎn)換及電流到電壓的轉(zhuǎn)換后輸出鋸齒波

//輸出電壓值為:-I/255*VREF

voiddac_0832(void)

{

ucharI=0;

for(I=0;I<255;I++)

{

DAC0832=I;

delay(2);

}

}//主函數(shù)

voidmain(void)

{

while(1)

{

//數(shù)模轉(zhuǎn)換DAC

dac_0832();

}

}6.3.4仿真結(jié)果

將源程序編譯下載后進(jìn)行仿真,仿真結(jié)果如圖6-14所示。圖6-14數(shù)字示波器顯示的由數(shù)擬轉(zhuǎn)換得出的鋸齒波6.4.1設(shè)計要求

控制直流電機(jī)的轉(zhuǎn)速為5檔,5檔的輸入電壓分別為:+1?V、+2?V、+3?V、+4?V和+5?V。具體設(shè)計要求如下:

(1)?5檔轉(zhuǎn)速自動輪換運(yùn)行,每檔轉(zhuǎn)速運(yùn)行的時間均為2?min。

(2)使用5個按鍵來控制5檔轉(zhuǎn)速,每個按鍵對應(yīng)著1檔轉(zhuǎn)速,這樣當(dāng)按下某個按鍵時,則直流電機(jī)就以相應(yīng)的轉(zhuǎn)速運(yùn)轉(zhuǎn)。

(3)使用一個按鍵來控制5檔轉(zhuǎn)速,系統(tǒng)運(yùn)行后直流電機(jī)首先以1檔轉(zhuǎn)速運(yùn)行。6.4用DAC0832控制直流電機(jī)轉(zhuǎn)速6.4.2設(shè)計說明

直流電機(jī)的轉(zhuǎn)速跟驅(qū)動電壓值呈線性關(guān)系,驅(qū)動電壓值越大,直流電機(jī)的轉(zhuǎn)速也就越高。

本設(shè)計僅完成設(shè)計要求(1),5檔轉(zhuǎn)速自動輪換運(yùn)行,每檔轉(zhuǎn)速運(yùn)行的時間均為2?min。設(shè)計要求(2)和設(shè)計要求(3)則在掌握設(shè)計要求(1)和矩陣鍵盤原理的基礎(chǔ)上,很容易實(shí)現(xiàn),設(shè)計流程圖如圖6-15所示。圖6-15軟件流程圖6.4.3設(shè)計源碼

根據(jù)程序流程圖,可以寫出DAC0832控制直流電機(jī)轉(zhuǎn)速的源程序,如例6-3。

【例6-3】DAC0832控制直流電機(jī)轉(zhuǎn)速源碼。

voiddac_0832_dc(void)

{

ucharI=0;

for(I=0;I<5;I++)

{

DAC0832=255*(I+1)/5;

delay_min(2);//延時2?min

}

}6.4.4仿真結(jié)果

將源程序編譯下載后進(jìn)行仿真,仿真結(jié)果

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論