基礎教程7 Arduino 測量電壓與ADC精度

基礎教程7 Arduino 測量電壓與ADC精度

來自專欄 Arduino 魔法書

我是潘,曾經是個工程師。這是為 Ardui.Co 製作的 「Arduino 公開課」 系列的入門教程。第7課我們會繼續利用 Arduino 模擬埠和ADC功能,測量電池電壓,還會涉及到新的知識:串口通信。有任何疑問請在評論區提出,我會逐一回答。

第5課已經講過,Arduino Uno能夠讀取 0 ~ 5V 的電壓,並轉換為10bit 即 0~1023 級的數字信號。這怎麼理解呢?

如上圖,若解析度為 2bit(即22) ,意味著將 5V 分為 0~3 級的數字信號,每級精度是 5V /4 = 1250mV。如果解析度為10bit,即 0~1023,每級是 5V / 1024 = 4.88mV;如果是 12bit,即 0~4096 ,每級是 5V / 4096 = 1.22mV。解析度越高,每級分得越小,精度就越高。

得到0~1023級測量結果後,在程序內簡單轉化一下(沒有複雜函數,只用乘除法),就能直觀讀出電壓。接線圖如下:

問題來了,怎樣顯示電壓呢?這裡使用最簡單的 IDE 串口監視器,連著開發板,直接在電腦屏幕上顯示,但我們先要使用 Serial.begin() 啟動串口通信,然後通過 Serial.print() 將電壓在屏幕列印出來:

/* 作者:Ardui.Co 效果:串口顯示模擬埠的電壓值 版本:1.0 更新時間:2017年1月8日*/void setup(){ Serial.begin(9600); //指定串口通訊比特率為9600}void loop(){ int v = analogRead(A0); //從A0口讀取電壓,模擬埠電壓測量範圍為0-5V,返回的值為0-1024 float volt = v * (5.0 / 1024.0); //將返回值換算成電壓 Serial.print(volt); //串口輸出電壓值 Serial.println(" V"); //輸出單位,並且換行 delay(1000); //輸出後等待1s,降低刷新速度}

通過 A0 讀取電壓範圍不能超過 5V,否則會損壞開發板,但要測量更高的電壓怎麼辦?其實,我們可以通過分壓電路來實現:

根據歐姆定律,Va0 = V * R1/(R1+R2) = V * 10/20 = 1/2 V

即: V = 2 Va0

因此調整一下換算語句就能得出實際電壓:

1float volt = v * (5.0 / 1024.0) * 2

但經過分壓電路的測量會降低解析度 (R1+R2)/ R1 倍(上述電路為 2 倍),如果分壓式電阻R1 = 10K,R2 = 20K,可以測量 0 ~ 15V ,但解析度降低 3 倍。換句話說,分壓測量越高的電壓,解析度就越底。

ADC 的測量精度十分重要,尤其對數控機床、3D列印、機器人、能源系統等現實應用中。下一課我們用另外一個案例,來介紹怎樣提高 Arduino 模擬埠解析度。

推薦閱讀:

1套模板8個知識點,零起點超詳細,做完看你的PPT功力能漲幾成?
100種教師節賀卡手工創意DIY教程,總有一款適合你!
棒極了的三角邊境----有編織教程
【棒針教程】織襪子(從腳尖織起)
京劇基本功身段圖文教程:壓腿(正腿)

TAG:Arduino | 測量 | 教程 |