當前位置:首頁 > 文章資訊 > 機電專業 > 信息技術:單片機A/D采樣和轉換的原理
信息技術:單片機A/D采樣和轉換的原理
單片機A/D采樣的原理 是信息專業學生專業課。
自己學習的單片機也有一段時間了,剛開始接觸單片機的時候,就總是強調AD,單片機自帶AD不,等一些說法,但是自己從來沒有仔細想過AD的過程,只是知道是將模擬量轉化為數字量,但是不知道這個采集過來的電壓是2.5V,為什么在數碼管上顯示為2.5V就是轉化成數字量了,現在來說一下自己的理解,只是自己的主觀理解,不一定準確!
在A/D轉換器中,因為輸入的模擬信號在時間上式連續的,而輸出的數字信號代碼是離散的。所以A/D轉換器在進行轉換時,必須在一系列選定的瞬間(時間軸上的一些規定點上)對輸入的模擬信號采樣保持,然后再把這些采樣值轉換為數字量。因此,一般的A/D轉換過程是通過采樣保持、量化和編碼這三個步驟完成的,即首先對輸入的模擬電壓采樣保持,采樣結束后進入保持時間,在這段時間內將采樣的電壓量轉化為數字量,并按一定的編碼形式給出轉換結果,然后開始下一次采樣。下圖給出模擬量到數字量轉換過程圖:
采樣定理
可以證明,為了正確無誤的用5.2.2圖中所示的采樣信號Vs表示模擬信號V1,必須滿足:
因此,A/D轉換器工作時采樣頻率必須高于上式所規定的頻率。采樣頻率提高后,留給A/D轉換器每次轉換時間縮短。
所謂模擬量很好理解就是模擬量是指變量在一定范圍連續變化的量;也就是在一定范圍(定義域)內可以取任意值(在值域內)。數字量是分立量,而不是連續變化量,只能取幾個分立值,如三位進制數字變量只能取7個整數值0.1.2.3.4.5.6.7。
而不是經過AD通道的話,經過的是普通的IO口,那么模擬信號只會在引腳上出現兩種數字結果,一個是1一個是0,而不能比較準確的描述出模擬量的數值,模擬量信號是一種變量信號,比如果0V--10V,或50MA到100MA,開關信號是一種通斷信號,比如家里的燈開關,數字信號是一種連續的開關信號或高低電平信號,比如1101----高高低高。一連串的信號代表數字信號。
再繼續說一下AD精度的問題,8位AD精度的話就是將這個滿電壓值分成2^8=256份,比方說51單片機采集的電壓范圍是0-5v那么0v對應的是0 5v對應的是255.
現在再來講解一下逐次逼近型ADC的原理。
一、逐次逼近式AD轉換器與計數式A/D轉換類似,只是數字量由“逐次逼近寄存器SAR”產生。SAR使用“對分搜索法”產生數字量,以8位數字量為例,SAR首先產生8位數字量的一半,即10000000B,試探模擬量Vi的大小,若Vo>Vi,清除最高位,若Vo
單片機會讀到什么值?
單片機讀值要看一個特性,就是幾位的ADC,在手冊上就會給出,例如,STM32的 ADC是 12位的。另外,還有8位,10位,16位,24位等。
我先告訴你答案:STM32讀到的 ADC值,是從0到4095,當你把 ADC引腳接了GND,讀到的就是 0,當你把 ADC引腳接了 VDD,讀到的就是 4095。
接下來告訴你為什么:前面提到,STM32的ADC是 12位的,我們知道,8位的值是從 0 ~ 255;16位的值,是從 0 ~ 65535。這兩個位的最大值,是我們最為熟悉的。
(怎么算出來的?這問題就又降低到另一個層面了,這里我們說的幾位的值,每個位只能是 0或者 1,比如 2位的值,可以表示為 00 01 10 11四種不同的值,這是以 2進制表示的,轉換成十進制就是 0 1 2 3,所以得出結論,2位的值可以表示從0 ~ 3。同理,3位的值,可以表示十進制的 0 ~ 9,你可以展開計算一下。4位的值,可以表示0~16,5位的值,可以表示從 0 ~ 31,同理,你可以得出任意位的值可以表示的范圍。)
所以,12位的值,可以表示從 0 ~ 4095(2^12),這就是先在感性上,認識了為什么 12位的 ADC的值,是從 0 ~ 4095.
讀到的值怎么換算成實際的電壓值?
前面提到了,我們輸入GND,讀到的值是0,輸入VDD,得到的值是4095,那么,當你讀到2035的時候,你知道輸入電壓多少V嗎?這個問題,歸根接地,就到了數學 XY坐標,已知兩點坐標值(0, 0)(3.3, 4095),給出任意X坐標值,求Y值的問題了吧?簡單不簡單?
ADC測電壓示意圖:

參考電壓是什么?
討論這個問題之前,你先拿萬用表量一下你的 VDDA的實際電壓是多大?是不是標準的 3.300V?應該不是吧?或許是 2.296V,或許是 3.312V。然后你把 VDD連接到ADC引腳之后,得到的是 4095,也就是,實際上,當你讀出4095這個數據的時候,實際的電壓值不是你想象中的 3.300V。有些初學者,覺得幾毫伏的電壓差無所謂,但實際應用中,幾毫伏就可能代表很大的實際工況,例如,在一個量程為 50克的電子稱上。
所以,這時候,芯片廠商就想了一個辦法,給 ADC模塊中引入參考電壓,由非常標準的參考電壓芯片來接入參考電壓引腳。標準的電壓芯片,我們一般叫做參考電壓芯片,或者叫做基準電壓芯片。例如 REF3133(輸出 3.300V) REF3025(輸出 2.500V)等等。
注意:STM32 的 100腳以上(含 100腳)有參考電壓引腳。在沒有參考電壓引腳的單片機上,可以把基準電壓芯片接入 VDDA,但是 VDDA和 VDD的電壓差不能超過 0.3V,例如,VDD是 3.3V的話,可以給 VDDA接入一個 3.3V的參考電壓芯片或者 3.0V的參考電壓芯片,但是不能接入 2.5V的參考電壓芯片,后果就是芯片不能工作。
ADC引腳的輸入電壓范圍是多大?
一般情況下,ADC引腳的輸入電壓,是從0 ~ VDD,如果有REF引腳,一般是0 ~ Vref,也有0 ~ 2Vref 的情況。
如果被測的電壓大于ADC的輸入電壓,例如,要用STM32測量 0 ~ 5V的電壓的話,可以在輸入ADC引腳之前,加入電阻分壓和放大器電路。
注意:如果用內部基準電壓作為參考基準,公式就跟用外部芯片供電電壓測量有點不同
#define REF_VOLTAGE 1224UL // 基準電壓千倍
#define VOLTAGE 3300UL // 電壓千倍
#define ADC_DIP(X) (X) // ADC分辨率
一般我們用外部芯片供電電壓為參考基準就用下面那個公式,也就是上面說的XY比例
ADC_value = (uint32_t)(ADC_value*VOLTAGE >> ADC_DIP(12)); // 換算成千倍的電壓值
若用內部基準電壓作為參考則用以下公式
VDD_value = (uint32_t)((REF_VOLTAGE << ADC_DIP(12)) / VDD_value); // 換算成千倍的電壓值
內置的參照電壓看芯片的datasheet;外部芯片供電電壓最好用萬用表測一下
以上就是100唯爾(100vr.com)小編為您介紹的關于單片機的知識技巧了,學習以上的信息技術:單片機A/D采樣和轉換的原理知識,對于單片機的幫助都是非常大的,這也是新手學習機電專業所需要注意的地方。如果使用100唯爾還有什么問題可以點擊右側人工服務,我們會有專業的人士來為您解答。
本站在轉載文章時均注明來源出處,轉載目的在于傳遞更多信息,未用于商業用途。如因本站的文章、圖片等在內容、版權或其它方面存在問題或異議,請與本站聯系(電話:0592-5551325,郵箱:help@onesoft.com.cn),本站將作妥善處理。
單片機課程推薦
機電專業熱門資料
機電專業技術文檔
推薦閱讀
