其實不只是adc0809,所有ad轉換器我都不懂,它究竟是怎麼實現單位的轉換的。比如說外界10攝氏度經過溫敏電阻電路測出來一個電信號,那adc又是如何通過這個電信號知道外界的溫度就是10攝氏度的呢?不只是書本,我查了大半天網頁都沒有找到想要的答案。


先說結論,ADC輸入的是模擬量,輸出的是數字量。模擬量指的是0V~5V這種具體的電壓值。數字量指的是0和1這種抽象的概念。對這些概念不理解的還是要百度一下。

然後,ADC的原理有很多種,我這裡用逐次比較型ADC說明模擬量是怎麼變成數字量的。以下多圖預警!!


如圖所示,這是一個電壓比較器應用電路。當+級電壓比-級高時,輸出高電平(5V),否則輸出低電平(0V)。現在請不要糾結電壓比較器是怎麼比較電壓的,只要記住這個特性就好了。

其實呢,這個電路可以稱之為1位ADC。1位就意味著只能用0和1表示。那麼我們先給-級的線路標個號:

現在我們把開關打到0號線

得到的結果是高電平。然後再把開關打到1號線

得到的結果是低電平。這時通過一個編碼器,把得到低電平的那條線的編號發出去,我們就能在輸出端得到AD轉換的結果:3V輸入=1。你可以搭這個電路試試,只有0V輸入是輸出0,其他電壓(限制5V以內)輸入都是1。我就不放圖了。

上面的1位ADC只能知道有沒有電壓,這肯定是不夠用的,現在我們擴展到2位ADC。

2位的ADC,能表示的結果有00,01,10,11(即0,1,2,3)這四種,所以我們構建一個4條線的分壓電壓電路,反正見上圖就知道了。

和上次一樣,先把開關打到0號線,再依次打下來。結果會是

假設有這樣的編碼器,把第一個得到低電平的線編號發送出去,由於在2號線首先收到低電平,於是該ADC輸入3V,輸出是2。那如果輸入是1V呢?結果會是

即輸入1V,輸出1。你看,結果是不是和3V的不一樣了。為什麼呢?

放上電壓探針就知道,電阻組成分壓器,把電壓分成了4份,於是結合電壓比較器的特性得出以下表格

你看,這時候如果知道ADC的輸出,雖然不能推導出ADC輸入電壓,但起碼知道電壓的範圍了吧。

再瘋狂一把,來個4位ADC:

4位ADC能表示的結果有0000,0001,0010,0011,0100,0101,0110,0111,1000,1001,1010,1011,1100,1101,1110,1111。即0~15。和之前一樣,編上號。

輸入3個電壓1V、2.5V、3V的時候

按照上面編碼器的設定,他們會得到這樣的輸出:

正如上面的2位ADC把電壓分成了4份,這個4位ADC會把電壓分成16份。而且是把5V分成了16份。於是可以總結出公式:

  1. [公式]
  2. [公式]

於是得到 [公式]

這個公式可以推廣到8位,16位甚至更高的ADC上。同時換上專業術語:

[公式]

現在發現沒有,通過這個公式,我們能把一個模擬量Vin變成數字量的AD值。

拿上面的例子驗證一下: [公式] (約等於並不是四捨五入,而是直接去掉小數),可以看到和測量結果完全一致。證明瞭這個公式是正確的。

那麼,第二個問題也很簡單了。熱敏電阻就是電阻值隨著溫度變化而變化的電阻。把熱敏電阻和一個定值電阻組合成分壓電路,溫度變化引起電阻變化,電阻變化引起分壓的電壓變化。那麼我用ADC測量變化的電壓,得到AD值。在測溫項目中,如果不藉助萬用表,那麼已知的就只有AD值。那我們可以先通過上面的公式把AD轉成電壓值,再由電壓值推導出熱敏電阻的電阻值,再由電阻值推導出溫度。最終得知了外界的溫度。


我舉個例子,一個熱電阻,始終給他通1mA的電流。

溫度80度的時候,阻值為1k歐,他的電壓就是1V。

這個時候我們就知道,1V對應80度。

而如果這個AD轉換器,是12位的,那他的取值就是0-4095。如果輸入範圍是0-5v,那1V對應的取值就是819。

這個時候我們就知道819對應的電壓是1V,而1V對應的溫度是80度。

在這個過程能理解嗎?

說複雜一點,實際被測參數x,如溫度值。可以通過感測器原理和設計電路得到電路的電壓為u=f(x),再通過AD轉化得到AD的輸出為n=g(u)。

而我們實際得到n之後,一路求反函數就能算出x。

u=g』(n),x=f』(u)

而一般g只是一個線性拉伸的關係,求反函數非常容易。如果你不理解,自己動筆算一算。

f的話有一些複雜,電路部分會要掌握橋式電路和運算放大器。感測器本身也有可能是非線性的,一般用有限階的多項式擬合,也可以用代數插值法。得到一個簡化後的式子之後再求反函數即可。


所謂感測器,其實無非就是一個量綱和數值轉換器。把各種類型各種量程的非電信號轉化為某種量程的電信號。而ADC就是把模擬的電信號轉化為數字的電信號。處理器只能處理高低電平,高電平就是1,低電平就是0,而模擬信號會有比如0.1、0.34、4.7V等等不同的值,這個時候處理器無法直接處理,就需要adc幫忙。ADC0809作為一款SAR型adc,其工作方式就是不停的生成二分法的模擬電壓值,然後和實際輸入比較,最後二分出實際電壓值對應的數字量。


adc只能測量電信號

你所謂的單位轉換是把電信號的數值轉換成溫度的數值,這個是數字處理器在做的,和ADC並沒有實質聯繫。這裡處理器乾的事就是對照熱敏電阻轉換關係把溫度數值算出來


輸入A輸出D


adc代表模數轉換,有八個模擬埠可以輸入,輸出的是0到255的數字量


哦吼,我知道遼~~

adc有好幾種,其中adc0809是逐次逼近型的ad轉換器。在adc眾多引腳中有一個基準電壓Vref,這個電壓是ad轉換器所能轉換的最大量程。在adc0809裡面,總共有八位引腳,所以可以把基準電壓Vref分成256份。在adc0809裡面有一個da轉換器:

一開始,在dac裡面放1000 0000B,這個數並不是真的就說

Vref=128V

,而是說

Vref=128*(Vref/256)

然後對比Vn和Vin大小如何,如果Vin大,說明輸入的電壓並沒有1000 0000B那麼大,所以可以確定這個電壓所代表的二進位最高位(第八位是0),然後其他位不變,再往第七位放1,比較Vin和Vn的大小,同理可以知道第七位是1還是0.如此下來就能夠知道外部給出的電信號等於(Vref/256)乘以多少了,也就知道外部模擬信號對應的是量程的幾分之幾,也就完成了a和d的轉換。

至於別的類型的adc----積分型,並行比較型/串並行型、Σ-Δ調製型、壓頻變換型..等我沒有了解,就不bb了。

我回答我自己!


推薦閱讀:
相關文章