如何利用單片機的ADC模塊(或者獨立的ADC芯片)得到接入ADC管腳上的實際電壓值?
這個問題,是第一次接觸ADC時候,大家都會遇到的問題。
會讀到什么值
單片機會讀到什么值?需要看一個特性,就是幾位的ADC,在手冊上就會給出,例如,STM32的ADC是12位的。另外,還有8位,10位,16位,24位等。
我先告訴你答案:STM32讀到的ADC值,是從0到4095,當(dāng)你把ADC引腳接了GND,讀到的就是0,當(dāng)你把ADC引腳接了VDD,讀到的就是4095。
接下來告訴你為什么:前面提到,STM32的ADC是12位的,我們知道,8位的值是從0~255;16位的值,是從0~65535。這兩個位的最大值,是我們最為熟悉的。
(怎么算出來的?這問題就又降低到另一個層面了,這里我們說的幾位的值,每個位只能是0或者1,比如2位的值,可以表示為00 01 10 11四種不同的值,這是以2進制表示的,轉(zhuǎn)換成十進制就是0 1 2 3,所以得出結(jié)論,2位的值可以表示從0~3。同理,3位的值,可以表示十進制的0~9,你可以展開計算一下。4位的值,可以表示0~16,5位的值,可以表示從0~31,同理,你可以得出任意位的值可以表示的范圍。)
所以,12位的值,可以表示從0~4095,這就是先在感性上,認識了為什么12位的ADC的值,是從0~4095.
讀到的值怎么換算成實際的電壓值
前面提到了,我們輸入GND,讀到的值是0,輸入VDD,得到的值是4095,那么,當(dāng)你讀到2035的時候,你知道輸入電壓多少V嗎?這個問題,歸根接地,就到了數(shù)學(xué)XY坐標,已知兩點坐標值(0,0)(3.3,4095),給出任意X坐標值,求Y值的問題了吧?簡單不簡單?
參考電壓是什么
討論這個問題之前,你先拿萬用表量一下你的VDDA的實際電壓是多大?是不是標準的3.300V?應(yīng)該不是吧?或許是2.296V,或許是3.312V。然后你把VDD連接到ADC引腳之后,得到的是4095,也就是,實際上,當(dāng)你讀出4095這個數(shù)據(jù)的時候,實際的電壓值不是你想象中的3.300V。有些初學(xué)者,覺得幾毫伏的電壓差無所謂,但實際應(yīng)用中,幾毫伏就可能代表很大的實際工況,例如,在一個量程為50克的電子稱上。
所以,這時候,芯片廠商就想了一個辦法,給ADC模塊中引入?yún)⒖茧妷?,由非常標準的參考電壓芯片來接入?yún)⒖茧妷阂_。標準的電壓芯片,我們一般叫做參考電壓芯片,或者叫做基準電壓芯片。例如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引腳之前,加入電阻分壓和放大器電路。
總結(jié):看完這篇文章,你是否會覺的,一切都只是基礎(chǔ)知識的融合。
學(xué)電子,歡迎關(guān)注微信公眾號:科技老頑童
聯(lián)系客服