導航:首頁 > 使用方法 > 用單片機控制ADC的常用方法

用單片機控制ADC的常用方法

發布時間:2023-03-19 20:18:52

1. 單片機ADC

ADC可以用在電壓/電流含巧測量,或壓談宴鍵力感測器的輸入,等祥核模擬量的測量
如:電壓表,電子稱等產品

2. STC11F-10FXX系列單片機有7個中斷,其中的ADC中斷是如何控制的,

確實,STC11F-10FXX系列不提供ADC中斷功沒腔能,如果你用STC12C系列就支持ADC中斷了,手冊里有詳細的配碧方法.

void InitADC()
{
Uint16 i;

ADC_CONTR = 0xC0; //ADC模塊加電,420周期轉換一次
for(i=0;i<20000;i++); //ADC電源開啟培察舉後,延時
//設置P口外AD模式
P1M0 = 0x03; //ADC0/1 高阻輸入
P1M1 = 0x00;
EADC_SPI = 1; //開放ADCSPI總中斷
ADC_DATA = 0;
AUXR = EADCI; //開放ADC中斷
memset(&ADC,0,sizeof(STADC));
//啟動0號通道
ADC.Curch = 0;
ADC_CONTR |= ADC.Curch; //設置下一通道
ADC.Run = TRUE; //標志ADC正在轉換
ADC_CONTR |= ADC_START; //啟動AD轉換器
}

void ADCISR() interrupt ADC_VECTOR
{
ADC_CONTR &= ADC_STOP; //stop AD
ADC.Run = FALSE;
ADC.tempCvData[ADC.CvTimes] = ADC_DATA;//取轉換值
ADC_DATA = 0;

ADC.CvTimes++;
ADC.CvTimes %= 6;
if(ADC.CvTimes!=0)
{
ADC_CONTR |= ADC_START; //啟動AD轉換器
ADC.Run = TRUE; }
ADC_CONTR &= ADC_FLAG; //清除ADC_FLAG 中斷標志
}

3. 較之dac,adc介面需要由單片機多提供一個什麼控制信號

與DAC相比,ADC介面需要由單片機多提供時鍾信號
原因是
1、ADC晶元往往不具備內部時鍾,因此需要外部時鍾來校準采樣周期
2、不同位數的ADC晶元所需的采樣周期不同,需要由外部提供標准時鍾信號
控制信號的提供方法:
單片機中配置一短時間反復觸發的中斷,中斷處理中不斷對一IO口進行取反輸出,即可得到提供高低電平不斷交錯的時簡散鍾信巧隱號。如果對時序要求嚴格,需要精確計算。孝咐廳

4. 單片機控制ADC的常用方法哪些

1、ADC原理

ADC轉換器由前置濾波器、調制器、數字濾波器和梳值濾波器組成,22∃ADC的結構如圖1所示.它是將輸入信號通過22∃調制器量化成1bit的高速數據流,再經過數字濾波和采樣抽取後才得到最後的結果.和傳統的A󰃗D轉換相比,其原理和結構有很大地不同,下面以一階22∃調制器為例來說明22∃ADC原理.

圖1 2-∃ADC的結構

2、常用的方法

ADC0809是帶有8位A/D轉換器、8路多路開關以及微處理機兼容的控制邏輯的CMOS組件。它是逐次逼近式A/D轉換器,可以和單片機直接介面。

(1)ADC0809的內部邏輯結構

由下圖可知,ADC0809由一個8路模擬開關、一個地址鎖存與解碼器、一個A/D轉換器和一個三態輸出鎖存器組成。多路開關可選通8個模擬通道,允許8 路模擬量分時輸入,共用A/D轉換器進行轉換。三態輸出鎖器用於鎖存A/D轉換完的數字量,當OE端為高電平時,才可以從三態輸出鎖存器取走轉換完的數 據。

(2). ADC0809引腳結構

ADC0809各腳功能如下:
D7-D0:8位數字量輸出引腳。
IN0-IN7:8位模擬量輸入引腳。
VCC:+5V工作電壓。
GND:地。
REF(+):參考電壓正端。
REF(-):參考電壓負端。
START:A/D轉換啟動信號輸入端。
ALE:地址鎖存允許信號輸入端。
(以上兩種信號用於啟動A/D轉換).
EOC:轉換結束信號輸出引腳,開始轉換時為低電平,當轉換結束時為高電平。
OE:輸出允許控制端,用以打開三態數據輸出鎖存器。
CLK:時鍾信號輸入端(一般為500KHz)。
A、B、C:地址輸入線。

ADC0809對輸入模擬量要求:信號單極性,電壓范圍是0-5V,若信號太小,必須進行放大;輸入的模擬量在轉換過程中應該保持不變,如若模擬量變化太快,則需在輸入前增加采樣保持電路。

地址輸入和控制線:4條

ALE為地址鎖存允許輸入線,高電平有效。當ALE線為高電平時,地址鎖存與解碼器將A,B,C三條地址線的地址信號進行鎖存,經解碼後被選中的通道的模擬量進轉換器進行轉換。A,B和C為地址輸入線,用於選通IN0-IN7上的一路模擬量輸入。通道選擇表如下表所示。


數字量輸出及控制線:11條

ST為轉換啟動信號。當ST上跳沿時,所有內部寄存器清零;下跳沿時,開始進行A/D轉換;在轉換期間,ST應保持低電平。EOC為轉換結束信號。當 EOC為高電平時,表明轉換結束;否則,表明正在進行A/D轉換。OE為輸出允許信號,用於控制三條輸出鎖存器向單片機輸出轉換得到的數據。OE=1,輸 出轉換得到的數據;OE=0,輸出數據線呈高阻狀態。D7-D0為數字量輸出線。

CLK為時鍾輸入信號線。因ADC0809的內部沒有時鍾電路,所需時鍾信號必須由外界提供,通常使用頻率為500KHZ,

VREF(+),VREF(-)為參考電壓輸入。

2. ADC0809應用說明

(1). ADC0809內部帶有輸出鎖存器,可以與AT89S51單片機直接相連。

(2). 初始化時,使ST和OE信號全為低電平。

(3). 送要轉換的哪一通道的地址到A,B,C埠上。

(4). 在ST端給出一個至少有100ns寬的正脈沖信號基氏。

(5). 是否轉換完畢,我們根據EOC信號來判斷。

(6). 當EOC變為高電平時,這時給OE為高電平,轉換的數據就輸出給單片機了。

3. 實驗任務

如下圖所示,從ADC0809的通道IN3輸入0-5V之間的模擬量,通過ADC0809轉換成數字量在數碼管上以十進制形成顯示出來。ADC0809的VREF接+5V電壓。

4. 程序設計內容

(1). 進行A/D轉換時,採用查詢EOC的標志信號來檢測A/D轉換是否完畢,若完畢則把數據通過P0埠讀入枝或,經過數據處理之猛鋒伍後在數碼管上顯示。

(2). 進行A/D轉換之前,要啟動轉換的方法:

ABC=110選擇第三通道

ST=0,ST=1,ST=0產生啟動轉換的正脈沖信號 .

C語言源程序
#include
unsigned char code dispbitcode[]={0xfe,0xfd,0xfb,0xf7,
0xef,0xdf,0xbf,0x7f};
unsigned char code dispcode[]={0x3f,0x06,0x5b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,0x00};
unsigned char dispbuf[8]={10,10,10,10,10,0,0,0};
unsigned char dispcount;

sbit ST="P3"^0;
sbit OE="P3"^1;
sbit EOC="P3"^2;
unsigned char channel="0xbc";//IN3
unsigned char getdata;

void main(void)
{
TMOD=0x01;
TH0=(65536-4000)/256;
TL0=(65536-4000)%256;
TR0=1;
ET0=1;
EA=1;

P3=channel;

while(1)
{
ST=0;
ST=1;
ST=0;
while(EOC==0);
OE=1;
getdata=P0;
OE=0;
dispbuf[2]=getdata/100;
getdata=getdata%10;
dispbuf[1]=getdata/10;
dispbuf[0]=getdata%10;
}
}

void t0(void) interrupt 1 using 0
{
TH0=(65536-4000)/256;
TL0=(65536-4000)%256;
P1=dispcode[dispbuf[dispcount]];
P2=dispbitcode[dispcount];
dispcount++;
if(dispcount==8)
{
dispcount=0;
}

5. 關於單片機ADC輸入的問題

方李笑案很多,我列舉一兩個吧。
一、用凌陽單片機,凌陽單片機內部ADC,有十路通道,完全滿足你的需要。
二、用數據選擇器,一般用的是8選一,通過單片機控制晶元的三路地址來選擇輸出8路數據中伏擾衫的哪一路。晶元具體型號:74F151.關於具體用法看Datasheet。
三缺腔、自定義采樣協議,分時段對不同信號進行采樣。
.....

6. stc8單片機adc可以多來切換

最多兩路。
有兩種辦法,一個就是桐喚虧用兩個AD轉換晶元,兩路模擬量分別接一個。用單片機控制兩個AD晶元同時啟動轉換,這樣基本可以實現採集到同一時刻的兩路模擬量值。另一種辦法就是用兩個采樣保持器(LF398),來暫時保存模擬量的瞬時值。兩個保持器後面接模擬多路轉換器,模擬多路轉換器後面接一個AD轉換器。過程是這樣的:要採集之前先給兩個采樣保持鏈棗器一個保持信號,緊接著選擇多路開關通道局神,緊接著啟動AD轉換器。分別選擇多路開關的兩個通道,來取得兩路模擬量的值。

7. 用單片機控制adc,多次adc轉換求平均值代碼怎麼

定義一個計數器,每次讀完ADC轉化的爛廳值以後段悔,累加,然後計數到一定值以後,求平均。下飢燃隱面是示例:
void get_adc() //獲取ADC采樣值求平均

{
static int cnt = 0;//用於計數
static int sum = 0;

if(cnt==SET_CNT)
{
ADC_value = sum/cnt;
sum = 0;
cnt = 0
}
else
{

start_ADC();//開始轉換
tmp = read_ADC();//讀取ADC采樣值
tmp = tmp +tmp;
cnt++;
}

}

閱讀全文

與用單片機控制ADC的常用方法相關的資料

熱點內容
電腦打不了機維修方法 瀏覽:148
發動機艙的鑒別方法 瀏覽:915
有什麼催尿的方法 瀏覽:175
如何洗腳養腎的方法 瀏覽:571
勝利兆歐表使用方法 瀏覽:137
硃砂使用方法 瀏覽:954
緩解牙疼的最快方法按摩哪裡 瀏覽:51
游完泳耳朵悶堵快速解決方法 瀏覽:940
廚房中鑒別白醋顯酸性的三種方法 瀏覽:966
折紙飛機折得最遠的簡便方法 瀏覽:67
尿酸鹼度檢測標准方法 瀏覽:828
浴室熱水管道安裝方法 瀏覽:278
手機網路黑屏解決方法 瀏覽:209
花卉土培檢測方法 瀏覽:277
獲取檢測信息的方法有哪些 瀏覽:120
蛋糕比容的計算方法 瀏覽:738
破壞動物細胞膜最常用的方法 瀏覽:246
社會作業研究方法 瀏覽:542
手機怎麼拍攝長視頻的方法 瀏覽:302
如何把數字變成字母的方法 瀏覽:194