Arduino ADC

Ammar Ali 2024年2月16日
Arduino ADC

本教程將討論使用模擬引腳讀取模擬訊號並將其轉換為 Arduino 中的數字。

Arduino ADC

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,後跟 A0A1 等數字。要從 Arduino 的模擬引腳讀取訊號,我們可以使用 analogRead() 函式。

analogRead() 函式的基本語法如下。

output = analogRead(pin)

上述語法將從模擬引腳返回模擬訊號作為數字訊號。如果模擬引腳未連線任何訊號,該函式仍將返回一些浮點值。

不同的 Arduino 板對模數轉換器有不同的速度,可以改變,但它也會改變模數轉換器的解析度。因此,我們應該使用模數轉換器的預設設定來進行準確的模數轉換。

我們在上面討論過,一些 Arduino 板對輸入模擬訊號有 0 到 5 伏的參考電壓,而一些有 0 到 3.3 伏的參考電壓。這些是預設值,我們可以使用 analogReference() 函式更改它們。

我們可以根據不同型別的 Arduino 板傳遞不同的選項。

例如,對於 Arduino Uno 和 Mega,我們有如下選項:

  1. DEFAULT - 將參考電壓設定為 0 到 5 伏的整數範圍。
  2. INTERNAL - 將參考電壓設定為 0 到 1.1 伏的整數範圍。
  3. INTERNAL1V1 - 將參考電壓設定為 0 到 1.1 伏的整數範圍。
  4. INTERNAL2V2.56 - 將參考電壓設定為 0 到 2.56 伏的整數範圍。

在設定參考電壓之前,請注意,我們不能設定低於 0 伏和高於 5 伏的電壓值;參考電壓值應為 0 至 5 伏。

假設我們將一個電阻連線到模擬引腳。在這種情況下,輸入電壓將降低,因為模擬引腳內部已經存在一個 32K 值的電阻,在這種情況下,兩個電阻將構成分壓器,輸入電壓將根據電阻器的值。

檢查此連結以獲取我們可以在 analogReference() 函式中使用的選項的完整列表。檢視此連結以獲取有關 analogRead() 函式的更多詳細資訊。

作者: Ammar Ali
Ammar Ali avatar Ammar Ali avatar

Hello! I am Ammar Ali, a programmer here to learn from experience, people, and docs, and create interesting and useful programming content. I mostly create content about Python, Matlab, and Microcontrollers like Arduino and PIC.

LinkedIn Facebook