1. 程式人生 > >ADC值轉換成實際電壓值

ADC值轉換成實際電壓值

如何利用微控制器的ADC模組(或者獨立的ADC晶片)得到接入ADC管腳上的實際電壓值?

這個問題,是第一次接觸ADC時候,大家都會遇到的問題。

會讀到什麼值

微控制器會讀到什麼值?需要看一個特性,就是幾位的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,這就是先在感性上,認識了為什麼12位的ADC的值,是從0~4095.

讀到的值怎麼換算成實際的電壓值

前面提到了,我們輸入GND,讀到的值是0,輸入VDD,得到的值是4095,那麼,當你讀到2035的時候,你知道輸入電壓多少V嗎?這個問題,歸根接地,就到了數學XY座標,已知兩點座標值(0,0)(3.3,4095),給出任意X座標值,求Y值的問題了吧?簡單不簡單?

ADC測電壓2-2

參考電壓是什麼

討論這個問題之前,你先拿萬用表量一下你的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引腳之前,加入電阻分壓和放大器電路。