Arduino ADC
本教程將討論使用模擬引腳讀取模擬訊號並將其轉換為 Arduino 中的數字。
Arduino ADC
ADC,也稱為模數轉換器,將模擬訊號轉換為數字訊號。模擬訊號是連續的,這意味著它們內部有無限數量的值。我們無法讀取所有值,因此我們從連續訊號中讀取特定時間間隔的值,使訊號數字化。
從模擬訊號中取樣的過程稱為取樣。將模擬訊號轉換為數字訊號的過程如下圖所示。
上圖中的第一個訊號是一個無限值的連續訊號,第二個訊號是一個有限值的數字訊號。模數轉換器定期從模擬訊號中取值以使其成為數字訊號。
進行模數轉換是因為計算機無法處理模擬訊號;它只能處理 0s 和 1s 的數字訊號。處理完數字訊號後,我們還可以使用 DAC 或數模轉換器將訊號轉換回模擬訊號。
例如,連線上圖中第二個訊號中的點將變得與第一個訊號幾乎相同。我們在 ADC 中採集的樣本數稱為 ADC 的取樣率或位元率。
一些 Arduino 板具有 10 位模數轉換器,有些具有 12 位模數轉換器。位元率也稱為解析度,它定義了 ADC 將從模擬訊號中獲取的樣本數。
一個 10 位模數轉換器將從模擬訊號中獲取 1024 個樣本。例如,假設輸入訊號由 0 到 5 伏之間的電壓電平組成。
在這種情況下,電壓電平將對映到 0 到 1024 的整數範圍,這意味著模數轉換器將在每 5/1024 或 4.9 毫伏之後進行一次取樣。
模數轉換器的速度取決於基於 ATmega
的 Arduino 板中 Arduino 板的工作頻率;模數轉換器將需要 100 微秒將模擬訊號轉換為數字訊號,這意味著取樣率或讀取率為 10 kHz 或每秒 10,000 次。
Arduino Zero、Due 和 MKR 系列板等其他板具有 12 位模數轉換器,這意味著 0 到 3.3 伏的輸入模擬訊號將對映到 0 到 4095 的整數範圍。
預設情況下,12 位模數轉換器將設定為 10 位,但我們可以使用 analogReadResolution()
函式更改模數轉換器的位元率或解析度,將位數傳遞給功能設定解析度。
檢視此連結以獲取有關 analogReadResolution()
函式的更多詳細資訊。
每個 Arduino 板上的模擬引腳都標有 A
,後跟 A0
、A1
等數字。要從 Arduino 的模擬引腳讀取訊號,我們可以使用 analogRead()
函式。
analogRead()
函式的基本語法如下。
output = analogRead(pin)
上述語法將從模擬引腳返回模擬訊號作為數字訊號。如果模擬引腳未連線任何訊號,該函式仍將返回一些浮點值。
不同的 Arduino 板對模數轉換器有不同的速度,可以改變,但它也會改變模數轉換器的解析度。因此,我們應該使用模數轉換器的預設設定來進行準確的模數轉換。
我們在上面討論過,一些 Arduino 板對輸入模擬訊號有 0 到 5 伏的參考電壓,而一些有 0 到 3.3 伏的參考電壓。這些是預設值,我們可以使用 analogReference()
函式更改它們。
我們可以根據不同型別的 Arduino 板傳遞不同的選項。
例如,對於 Arduino Uno 和 Mega,我們有如下選項:
DEFAULT
- 將參考電壓設定為 0 到 5 伏的整數範圍。INTERNAL
- 將參考電壓設定為 0 到 1.1 伏的整數範圍。INTERNAL1V1
- 將參考電壓設定為 0 到 1.1 伏的整數範圍。INTERNAL2V2.56
- 將參考電壓設定為 0 到 2.56 伏的整數範圍。
在設定參考電壓之前,請注意,我們不能設定低於 0 伏和高於 5 伏的電壓值;參考電壓值應為 0 至 5 伏。
假設我們將一個電阻連線到模擬引腳。在這種情況下,輸入電壓將降低,因為模擬引腳內部已經存在一個 32K
值的電阻,在這種情況下,兩個電阻將構成分壓器,輸入電壓將根據電阻器的值。
檢查此連結以獲取我們可以在 analogReference()
函式中使用的選項的完整列表。檢視此連結以獲取有關 analogRead()
函式的更多詳細資訊。