現在很多單片機都有ADC功能了,10位或者12位的,使用ADC測量電壓是很方便的,測量電阻阻值的話可以使用歐姆定律進行分壓然后測量分壓后的電壓即可計算出電阻阻值,最簡單的電阻測量電路如下圖:
這時候測量點的電壓計算公式為:Vo=R2 / (R1 + R2) * Uref。
這是最簡單的測量計算方法。但是因為簡單也會導致不少小問題,比如如果R1取值為2K,Uref為5V,而R2的阻值范圍在5到10歐姆左右,那么R2分得的電壓Vo=0.01247到0.02488,電壓變化的范圍過小,如果ADC是12位的,ADC的參考電壓為3.3V,這時候ADC的采集值的范圍在15到30,也就是AD值的變化范圍有30-15=15個,而電阻的變化范圍為10-5=5歐姆,也就是5歐姆的變化范圍用15個AD值的變化來計算,那么AD測量的精度就是:5歐姆 / 15個 = 0.33歐姆,也就是AD值加1,計算得到的電阻值就要加0.33歐姆,這精度著實讓人接受不了。
再比如R1和Uref的值不變,而R2的阻值范圍在1K到2K之間,同樣的計算方法得到R2的分壓值Vo=1.1到1.65伏,AD值的范圍為1365到2048,AD的測量精度為:1K/(2048-1365)=1.46。奇怪的是為什么AD值的范圍這么大了,精度反而更很差勁呢?因為電阻的取值范圍很寬,導致精度降低了。
怎么辦?我想要測量一個比較精密的電阻的阻值R2,該怎么辦?下面的方法是網上的電橋測量電阻的方法,我為了測量方便有所修改。電阻網絡電路如下圖:
R2的電阻阻值大約在100到200歐姆,我們取一個參考電阻R3為100歐,R1和R3阻值相同為2K。這樣得到了U1和U2兩個分壓值,U2為固定電壓U2=100 / (100+2000) * Uref。U1的值根據R2的變化而改變:U1=R2 / (R2+2000) * ref。得到了U1和U2之后可以計算壓差:
△U=U1-U2,將這兩個電壓輸入到運算放大器中去進行合理放大,使得得到的輸出電壓范圍在ADC參考電壓范圍內盡可能的寬,這樣使用ADC就能更加精確地測量到電壓值。使用運放進行放大的電路如下圖:
在R5=R6,R7=R8的情況下,運放的放大倍數m=R7 / R5。電路中的放大倍數為m=20。經運放放大后得到了Uo送到單片機系統的ADC中去進行AD采樣。那么我們可以計算一下ADC測量得到的AD值和電阻R2之間的關系。
現在假定ADC系統的參考電壓為Uadc,ADC采樣位數為12位,ADC的測量值為A,那么Uo的計算公式如下:
Uo = A / 4096 * Uadc
而Uo也是運放的輸出電壓,根據電橋網絡和運放進行計算可以得到:
Uo = (U1-U2) * m = ( (R2/(R1+R2) - R4/(R3+R4) ) * Uref * m
也就是說:
( (R2/(R1+R2) - R4/(R3+R4) ) * Uref * m = A / 4096 * Uadc —————————-①
上式中R1、R3、R4、m、Uref、Uadc都是已知的,那么根據ADC測量得到的值A’就可以輕松計算出來電阻R2的阻值。
上面說的是理論上的計算方式,的確是這樣的,但是往往現實都比較殘酷,由于電阻都有誤差而且運放也不是絕對精密,那么已知的R1、R3、R4、m、Uref、Uadc幾個參數都是和真實值有微小差別的,例如電阻R1的標稱電阻為2K,誤差為1%,萬用表測量得到的阻值為1980歐姆,顯然誤差是有的,直接帶入式子進行計算是不可行的。那怎么辦呢?
解決辦法總是有的。前面公式①中是根據ADC的測量值和幾個已知參數來求電阻R2的阻值,那么我們就反過來,使用若干組已知的固定阻值的R2電阻接入電阻網絡并測量出AD值A,來計算R1、R3、R4、m、Uref、Uadc幾個參數,但是這幾個參數有點多,6個未知參數需要6組式子才能解出來,非常的費勁,那么我們就簡化一下計算方式。
我們將R4設為0歐姆,也就是U2接到GND,U2=0,這樣式子①就能簡化成:
R2/(R1+R2) * Uref * m = A / 4096 * Uadc —————————-②
這不簡單多了!好,現在我們要求出式子中的R1的阻值和放大倍數m,兩個未知數我們就需要兩組已知的點(R2,A)來求出參數R1和m。這樣取第一個點的測試電阻為R21,AD值為A1,第二個點的測試電阻為R22,AD值為A2,帶入到式子②中去得到:
R21/(R1+R21) * Uref * m = A1 / 4096 * Uadc
R22/(R1+R22) * Uref * m = A2 / 4096 * Uadc
上面的式子除以下面的式子可以得到:
(R21/(R1+R21)) / (R22/(R1+R22)) = A1 / A2
進過整理之后得到:
R1=(R21 * R22) * (A2 - A1) / (R22*A1 - R21 * A2)
這就求出來了R1的阻值了。
然后我們再求m的值,根據式子②可以得到m的計算公式為:
m = (A / 4096 * Uadc) / (R2/(R1+R2) * Uref)
我們將電阻網絡的電源和ADC系統的參考電源連接到一起,也就是說Uref=Uadc,我們要保證電源的穩定性,可以使用TL431或者REF3030等高精度穩壓芯片生產穩定電壓源為電阻網絡和ADC系統供電。由于Uref=Uadc,這樣的話上面的式子得到了簡化:
m = (A / 4096) / (R2/(R1+R2))
整理得到:
m = A*(R1+R2) / (4096 * R2) —————————-③
式子③中R1在前面已經算出來了,那么m也求出來了。
到這里我們已經求出來了R1和m的值,后面就能根據這兩個參數和測量出來的AD值求出來待測電阻R2的值了。由于Uref=Uadc,式子②變成:
R2/(R1+R2) * m = A / 4096
整理得到:
R2 = A * R1 / (4096*m - A) —————————-④
式子④已經簡單到只需要A、R1、m就能計算出來R2的阻值了,并且使用的R1和m都是我們自己計算出來的值,而不是直接使用理論計算出來的值,精度提高了不少。同時我們可以發現由于Uref=Uadc,上面的式子②兩端約分了,所有計算竟然和Uref、Uadc沒有關系了,也就是說不管Uref、Uadc怎么變動,只要Uref和Uadc一直是相等的,所有參數和阻值的計算都不涉及到Uref和Uadc。但是我們最好要保證Uadc的穩定,不然測量出來的AD值會不準確的。
烜芯微專業制造二極管,三極管,MOS管,橋堆等20年,工廠直銷省20%,上萬家電路電器生產企業選用,專業的工程師幫您穩定好每一批產品,如果您有遇到什么需要幫助解決的,可以點擊右邊的工程師,或者點擊銷售經理給您精準的報價以及產品介紹
烜芯微專業制造二極管,三極管,MOS管,橋堆等20年,工廠直銷省20%,上萬家電路電器生產企業選用,專業的工程師幫您穩定好每一批產品,如果您有遇到什么需要幫助解決的,可以點擊右邊的工程師,或者點擊銷售經理給您精準的報價以及產品介紹