Arduino 的類比功能:如何運用在新設計中
資料提供者:Electronic Products
2012-02-01
無論您是嵌入式設計專家或程式設計新手,Arduino 開放式硬體平台的類比輸入和輸出通道,都可輕鬆讓您的專案延伸並觸及「真實世界」。 小型模組可輕鬆連接 MCU 的多通道輸入,可用來監測電壓並讀取多種類比感測器或取樣波形。
MCU 的數位類比轉換器具有相對中等的解析度和轉換速度,因此非常適合多種一般應用,涵蓋照明、馬達控制以及放大器增益偏壓的驅動等。 本文將介紹構成 Arduino 類比功能基礎的硬體與軟體資源,並說明如何運用在新設計中。
若您對 Arduino 並不熟悉,可在 TechZone 文章「Arduino 開放原始碼平台釋放創意」中瞭解相關知識。
專為類比而生
為了貫徹在真實世界應用中輕鬆套用數位技術的原則,Arduino 硬體平台的設計能完全發揮 Atmel 多功能 ATmega 8 位元 MCU 系列內建的類比能力。 Arduino 平台所採用的 ATmega 所有型號皆搭載晶片上多通道類比數位轉換器 (ADC)。 此 ADC 具有 10 位元解析度,能以 0 至 1023 整數的形式達到高達 15,000 的每秒取樣數。 絕大多數 AVR MCU 皆支援 6 個類比輸入通道,有些型號更可支援 8 和 16 個輸入。 類比引腳的主要功能是讀取類比輸入,除此之外亦可配置成數位一般用途輸入/輸出 (GPIO) 引腳。 若有需要,類比引腳可選用上拉電阻,能配置成跟 MCU 數位引腳的上拉電阻一樣。
有些 AVR MCU 配有數位類比轉換器 (DAC),但目前這一代的 Arduino 板系列成員是以快速切換其數位 I/O 引腳產生脈寬調變 (PWM) 訊號的方式產生類比輸出。 各個 PWM 輸出的 490 Hz(概略值)方波工作週期能進行編程,達到介於 0 至 5 V 的等量 RMS 電壓(分為 256 個 2 ms 增量,如圖 1 所示)。 即便多少受到能力限制,Arduino 的輸出仍可運用在眾多作業,例如 LED 驅動或馬達控制。
絕大多數的 Arduino 板皆可透過板邊緣的母端引腳連接器輕鬆連接 MCU 的類比(和數位)I/O 訊號。 類比通道數及其實體引腳配置會依據使用的特定 MCU 和板尺寸而有所不同,但多數型號還是會依據常用「官方」設計的引腳配置原則,例如 Uno(圖 2)、Mega 和 Nano。
由於 Arduino IDE 支援的程式語言包含原生的類比 I/O 命令集,因此亦可輕鬆透過類比 I/O 功能開發程式碼。 這些指令能達到類比輸入的讀取、類比 (PWM) 輸出的產生,並且配置 A/D 轉換器的參考電壓。
讀取類比輸入
將 Arduino 類比輸入運用到真實世界應用相當直覺,但需針對 AVR 的 A/D 轉換器小心選擇正確的電壓參考來源。 可使用預設、內部或外部參考電壓決定輸入電壓範圍的上限。 在預設模式下,MCU 會使用板載電源供應器穩壓器的輸出做為參考來源。 參考電壓可能是 5 V 或 3.3 V,視使用的特定 Arduino 板而定。
內部模式則採用 AVR 的晶片上精準參考來源。 此來源的電壓會隨著指定元件而變動,但通常為 1.1 V(適用於 ATmega168 或 ATmega328)或 2.56 V(ATmega8 和 Mega 系列)。 在外部模式中,則可透過 5 K 電阻將外部參考電壓連接到 AREF 引腳。 AREF 引腳具有內部 32K 防護電阻,能協同外接 5K 電阻當作分壓器使用。 因此,舉例而言,透過電阻施加 2.5 V 電壓,則可在 AREF 引腳上產生 2.5 * 32 / (32 + 5) = 約 2.2 V。
使用 Arduino 程式語言讀取類比電壓的流程涵蓋使用 analogReference(type) 選擇參考來源,接著調用讀取 analogRead(pin),(pin) 在此意指要取樣的排針座引腳數量。 選擇後,參考類型會保持恆定,除非有另外編程。 即使 AVR MCU 支援每秒高達 15k 取樣的轉換率,Arduino 硬體/軟體環境通常也會將轉換率限制在約每秒 10k 取樣。
建立 PWM 類比輸出
在 Arduino 的 PWM 引腳上產生類比電壓必須使用 pinMode(pin, mode) 命令,將所需的引腳配置成輸出,然後調用 analogWrite(pin, value),(pin) 在此意指用來進行輸出的排針座引腳,(value) 意指要產生之參考電壓的分數(增量為 1/255)。 配置完成後,引腳會產生穩定的 490 Hz 方波,並具有指定的工作週期,直到下次呼叫 analogWrite() 為止(或呼叫相同引腳的 digitalRead() 或 digitalWrite() 為止)。
I/O 引腳能支援高達 40 mA 的驅動電流,因此能直接驅動中等尺寸的 LED 陣列。 若要用於更高功率的照明或 DC 馬達,可使用類比輸出驅動功率電晶體或橋接電路。 若要用於更高要求的應用,則可使用簡易的 R/C 網路進行輸出過濾, 然後當作放大器或電流來源的控制電壓。
更多類比訣竅
有些 AVR MCU(包括 MEGA8 和 MEGA168)皆內建比較器,能比較輸入電壓以及外部輸入、PWM 輸出產生的電壓或參考裝置的內部參考電壓。 比較器的輸出能進行輪詢或用來觸發中斷。 由於作業使用更多軟體,處理器可透過中斷驅動的配置感測到欠壓/過壓情況,而無需重複對類比通道進行取樣。 從可調閾值動作偵測器、衝擊感測器到生物醫療監測等眾多應用,這都相當有益。
對於 MCU 內部沒有比較器的 Arduino 板而言,這些板件具有「快速修復 (Kluge)」區域,能在此區域內輕鬆添加 LM741、LM339N、TLC3704 等外部元件。 若平台缺乏空間容納使用者提供的電路,則可透過低價的原型擴充卡(圖 3)自行新增。
總結
Arduino 基於低成本和多功能的特色受到商業硬體開發人員的持續支持。 Arduino 硬體平台能發揮 Atmel ATmega 8 位元 MCU 系列元件的最大類比能力。 此系列 MCU 的所有型號皆搭載晶片上多通道類比數位轉換器 (ADC)。 本文的用意在於介紹構成 Arduino 類比功能基礎的硬體和軟體資源,並說明如何讓工程人員在未來的設計中使用這些功能。 為了達到此目標,本文探討類比輸入的讀取、PWM 類比輸出的建立,以及如何新增外部類比 I/O。 您可在透過本文內的連結,在 DigiKey 網站上取得更多有關 Arduino 產品的資訊。
聲明:各作者及/或論壇參與者於本網站所發表之意見、理念和觀點,概不反映 DigiKey 的意見、理念和觀點,亦非 DigiKey 的正式原則。