模擬信號的幅度一般隨時(shí)間變化而連續(xù)變化。以下就是不同性質(zhì)模擬量的波形
而單片機(jī)中一般運(yùn)算用的是數(shù)字量(0/1的組合),這就涉及到了外圍電路需要有一個(gè)模數(shù)轉(zhuǎn)換的過程。顧名思義是把輸入的模擬信號盡可能無失真地轉(zhuǎn)化為數(shù)字量。
如果把數(shù)字量形容成是一個(gè)個(gè)分塊儲(chǔ)存信息的模塊,那模擬量這種連續(xù)的信息在轉(zhuǎn)換過程中要盡可能避免信息的喪失。處不來講轉(zhuǎn)換的思路就是把數(shù)字量分塊,以數(shù)字的形式轉(zhuǎn)換至數(shù)字量中。如數(shù)字量為有六位(000000-111111),那么就可以把模擬量均等分為64份,每份中儲(chǔ)存著轉(zhuǎn)換過來的相應(yīng)信息。
但是這個(gè)只是我們的初步思路,從原理上講,一般的A/D轉(zhuǎn)換分為采樣保持,量化和編碼三個(gè)過程。采樣的量一般是電壓(電流不好取),通過一定的采樣保持時(shí)間過后把采樣的電壓量轉(zhuǎn)換為數(shù)字量,并按一定形式的0/1編碼順序給出轉(zhuǎn)換結(jié)果,這就是得到了相應(yīng)的數(shù)字信號??驁D如下:
下面分別介紹相應(yīng)的理論知識。
1.采樣定理:(信號里面基本接觸過,還可以參考無失真系統(tǒng)需要具備的條件等知識)
采樣定理反映了采樣信號頻率與輸入信號頻率之間的制約關(guān)系,可理解為采樣信號的頻譜(低通濾波器)一定要包含輸入信號頻譜的全部內(nèi)容。
因?yàn)槊看螌⒉蓸与妷恨D(zhuǎn)化為數(shù)字量需要一定的時(shí)間,所以采樣后也必須把采樣電壓保持一段時(shí)間,故在采樣過程中最后反應(yīng)出的Vi都是采樣結(jié)束時(shí)候的值。
2.量化與編碼
數(shù)字信號一定是在數(shù)值上離散的。且任何一個(gè)數(shù)字量都會(huì)是一個(gè)基礎(chǔ)數(shù)字量的整數(shù)倍。
故選取一個(gè)最小的變量作為單位變量。將模擬電壓與之相除后就能得出相應(yīng)的數(shù)字二進(jìn)制代碼,經(jīng)推算也可以得出對應(yīng)的模擬電平。
上圖的單位變量就為1/8V,量化誤差(每兩個(gè)單位間隔中可能出現(xiàn)的最大誤差)也是1/8.
這其中有一個(gè)小知識點(diǎn)。怎么設(shè)計(jì)電路使其有采樣和保持的功能。
簡單的采樣保持電路如下圖所示,其將MOS管作為啟動(dòng)和停止的開關(guān),將信號通過反相放大器后得出輸出電壓。
這里的場效應(yīng)管也有反相截止的功能。即當(dāng)輸入由高轉(zhuǎn)低時(shí),電流無法通過場效應(yīng)管。
對于這種采樣速度低的電路,可以有以下改進(jìn)
VL引腳控制著開關(guān)的閉合,當(dāng)為高電平時(shí)開關(guān)打開。模擬電壓可經(jīng)過兩級跟隨器傳至Vo
當(dāng)VL由高變低時(shí),還有電容Ch放電提供相應(yīng)電壓,電平得以維持。
當(dāng)輸入的電壓比較大,超出了開關(guān)所能承受的最大電壓時(shí),引入一個(gè)二極管電路,通過單向?qū)ǖ男再|(zhì)可以起到分壓的作用,且當(dāng)電壓合適時(shí)該電路不起分壓作用。
常用的A/D轉(zhuǎn)換器有直接A/D轉(zhuǎn)換器(并行型/反饋比較型)以及間接A/D(需要轉(zhuǎn)成T,f等中間變量后再轉(zhuǎn)換)
1.直接
電壓比較器是對輸入電壓進(jìn)行分類,如圖所示,運(yùn)放的負(fù)極接模擬電平大小為2n-1/15(n=1,2,……7)的端口,分壓電阻每兩個(gè)電阻之間的節(jié)點(diǎn)都接在VI引出的這條總線上。進(jìn)行電壓比較后將比較結(jié)果數(shù)據(jù)傳到寄存器。寄存器設(shè)置的目的是因?yàn)楸容^結(jié)果可能會(huì)有變化,待穩(wěn)定后通過譯碼器部分對相應(yīng)的結(jié)果轉(zhuǎn)化為二進(jìn)制數(shù)字變量。各種變量之間的對應(yīng)關(guān)系如下
這種電路特點(diǎn)是傳輸速度較快,但缺點(diǎn)是隨著二進(jìn)制數(shù)字量位數(shù)的增加,需要比較器的數(shù)量呈指數(shù)型增長(2^n-1),且自帶采樣保持功能
(2)反饋比較型A/D
引入一個(gè)D/A轉(zhuǎn)換器和一個(gè)計(jì)數(shù)器,計(jì)數(shù)器傳送數(shù)字信號至D/A,轉(zhuǎn)為模擬信號后在電壓比較器這里與VI按位做比較,若一致就直接傳送至計(jì)數(shù)器,不一致通過比較器后也會(huì)變?yōu)檎_的那一項(xiàng),按位比較重復(fù)多次后,計(jì)數(shù)器將數(shù)據(jù)傳送至輸出寄存器。因?yàn)樵诒容^過程中數(shù)字不斷變化,故設(shè)置了輸出寄存器。這樣就可以起到逐步逼近模擬量的功能。
(3)逐次比較器
為了進(jìn)一步提升比較的速度,設(shè)計(jì)了逐次比較器。下圖是三位逐次比較器的原理圖
引入了具有鎖存功能的d觸發(fā)器,三位得出比較結(jié)果分別上接三個(gè)RS觸發(fā)器,在比較器C的正極輸入前又加入了累加器,減去了半個(gè)量化誤差。當(dāng)要輸出的位數(shù)越小時(shí),時(shí)鐘端的頻率就越高,處理速度就會(huì)越快
2.間接比較器
一般使用的是V-T比較和V-F比較兩類
剩下一個(gè)問題是關(guān)于A/D轉(zhuǎn)換的參數(shù)指標(biāo)。
大致有分辨率(轉(zhuǎn)換器對輸入信號的分辨能力),轉(zhuǎn)換誤差(實(shí)際輸出與理論輸出之間的差別)轉(zhuǎn)換精度及轉(zhuǎn)換時(shí)間四類。主要介紹分辨率及轉(zhuǎn)換時(shí)間
1.分辨率:輸入位數(shù)越多,轉(zhuǎn)換位數(shù)越多,分辨率就越高。
eg:5V是一個(gè)轉(zhuǎn)換器的輸入最大值,若要輸入8位二進(jìn)制數(shù),則有分辨率5/2^8V=19.53mV
2.轉(zhuǎn)換時(shí)間:
即在實(shí)際運(yùn)用中,需要綜合考慮選用哪一種轉(zhuǎn)換器最為合適
eg:
每個(gè)熱電偶平均1/16s的轉(zhuǎn)換時(shí)間,上述比較器都能用。
從0.1°C可知該轉(zhuǎn)換器要求的分辨率為1/4500 通過最大電壓范圍0.025/2^n《=1/4500就可得出位數(shù)。
接著介紹集成A/D轉(zhuǎn)換器的工作原理及實(shí)現(xiàn)方法。
因?yàn)椴煌募煞绞较聦?a target="_blank">接口可以有不同的處理方式,一般逐次性轉(zhuǎn)換器用的比較多,常用型號是ADC0804,實(shí)物圖如下
需要注意的端口如下:
因?yàn)楸救耸褂玫氖枪煜槔蠋煹腡X-1C增強(qiáng)版,現(xiàn)給出該開發(fā)板上ADC0804的接口方法
引入了74HC573鎖存器,他的Q7端(12引腳)接了AD芯片的片選端口,則可通過控制鎖存器來控制AD
ADIN與AD芯片之間連接要加限流電阻,以免因?yàn)殡娏鬟^大燒毀芯片
而引入R和C,在CLK,CLKR以及GND之間構(gòu)建振蕩電路,是為芯片提供工作所需的脈沖
也要記住WRˉˉˉˉˉˉ\overline{WR}
WR
與RDˉˉˉˉˉ\overline{RD}
RD
分別接了單片機(jī)的P3.6和P3.7接口,這個(gè)在編程中定義端口時(shí)要用到
在這里十分重要的是芯片啟動(dòng)的時(shí)序圖,在編程中需要對圖中的先后次序以及涉及到機(jī)器周期方面的細(xì)節(jié)有所體現(xiàn),這才算告訴編譯器一個(gè)時(shí)序變化的全過程
下圖是寫入數(shù)據(jù)時(shí)的過程
我們在寫單片機(jī)程序啟動(dòng)AD時(shí)應(yīng)該遵循上面的時(shí)序
下面是讀取數(shù)據(jù)的過程
具體代碼如下
#include《reg52.h》
#include《intrins.h》
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
sbit wela=P2^7;
sbit adwr=P3^6; //讀寫的端口定義
sbit adrd=P3^7;
uchar code table[]=
{0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x77,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71
};
void delayms(uint xms)
{
uint i,j;
for(i=xms;i》0;i--)
for(j=110;j》0;j--);
}
void display(uchar bai,uchar shi,uchar ge)
{
dula=1;
P0=table[bai];
dula=0;
wela=1;
P0=0x7e;//從右到左,為0的位是所選中位
wela=0;
delayms(5);
dula=1;
P0=table[ge];
dula=0;
wela=1;
P0=0x7d;
wela=0;
delayms(5);
dula=1;
P0=table[ge];
dula=0;
wela=1;
P0=0x7b;
wela=0;
delayms(5);//記得加延時(shí)
}
void main()
{
uchar a,A1,A2,A3,adval;//A1-A3為三位顯示在主函數(shù)中的變量名
//adval是中間變量
wela=1;
P0=0x7f;//初值
wela=0;
while(1)
{
adwr=1;//寫的全過程(類似于波形)
_nop_();
adwr=0;
_nop_();
adwr=1;
for(a=10;a》0;a--)//由于開發(fā)板頻率較低,搞出點(diǎn)延時(shí)來
{
display(A1,A2,A3);
}
P1=0xff;//初始化
adrd=1;//讀過程
_nop_();//機(jī)器周期延時(shí)
adrd=0;
_nop_();
adval=P1;//把P1的值讀入
adrd=1;//高電平抬起
A1=adval/100;
A2=adval%100/10;
A3=adval%10;
}
}
l=P1;//把P1的值讀入
adrd=1;//高電平抬起
A1=adval/100;
A2=adval%100/10;
A3=adval%10;
}
}
責(zé)任編輯:gt
評論