在高階應用程式中使用 ADC
重要
這是 Azure Sphere (舊版) 檔。 Azure Sphere(舊版)將於 2027 年 9 月 27 日淘汰,且使用者此時必須移轉至 Azure Sphere(整合式)。 使用位於 TOC 上方的版本選取器來檢視 Azure Sphere (整合式) 檔。
本主題描述如何在高階應用程式中使用類比到數位轉換器 (ADC)。 如需 RTApps 中 ADC 使用的相關信息,請參閱 在即時可用的應用程式中 使用周邊。
Azure Sphere 支援類比數位轉換。 ADC 會將模擬輸入轉換成對應的數位值。 輸入通道和解析度的數目(如 ADC 輸出位的數目)是裝置相依的。
ADC_HighLevelApp範例示範如何在 MT3620 裝置上存取 ADC。
ADC 周邊代碼段示範使用簡化或進階函式與 ADC 互動的兩種方式。
MT3620 包含具有8個輸入通道的12位ADC。 ADC 會將輸入電壓與參考電壓進行比較,併產生介於 0 到 4095 之間的值作為其輸出。 ADC 輸入通道和 GPIO 針腳 GPIO41 透過 GPIO48 對應至 MT3260 上的相同針腳。 不過,如果您的應用程式使用 ADC,則會配置所有 8 個針腳作為 ADC 輸入。 它們都不能用於 GPIO。
ADC 需求
與 ADC 通訊的應用程式必須包含 adc.h 頭檔,並將 ADC 設定新增至 應用程式指令清單。
所有應用程式都必須 設定其目標硬體 ,並包含對應的硬體定義頭檔。
標頭檔
#include <applibs/adc.h>
#include "path-to-your-target-hardware.h"
將 「path-to-your-target-hardware.h」 取代為硬體頭文件的路徑。
應用程式指令清單設定
應用程式指令清單中的 ADC 設定會列出應用程式所存取的 ADC 控制器。 若要設定這些設定,請將功能新增 Adc
至應用程式指令清單,然後將每個 ADC 控制器新增至功能。 Azure Sphere 應用程式指令清單 主題有更多詳細數據。
在您的程式代碼中,使用為硬體定義的常數來識別 ADC 控制器。 當您建置應用程式時,編譯程式會將這些值轉譯為原始值。
例如,以下是以 MT3620 參考開發板 (RDB) 為目標之應用程式的應用程式指令清單摘錄。
"Adc": [ "$MT3620_RDB_ADC_CONTROLLER0" ]
下列摘錄顯示如何在以 Avnet MT3620 Starter Kit 為目標的應用程式中指定相同的 ADC 控制器:
"Adc": [ "$AVNET_MT3620_SK_ADC_CONTROLLER0" ]
實作概觀
若要實作您的應用程式來存取 ADC,請使用下列兩種方法之一:
本主題描述這兩種方法。 您可以在這裡找到每個方法的完整範例程式代碼:
使用簡化的函式進行 ADC 存取
Azure Sphere 高階應用程式可以藉由呼叫 Applibs ADC API 來存取 ADC。
開啟 ADC 控制器
若要開啟 ADC 控制器以進行存取,請呼叫 ADC_Open ,並將控制器的標識碼當做參數傳遞。 如果呼叫成功,將會傳回檔案描述元。 否則,將會傳回錯誤值。
int ADC_Open(ADC_ControllerId id);
從 ADC 讀取
若要從 ADC 讀取,請呼叫 ADC_Poll。 您會將下列參數傳遞至ADC_Poll:ADC_Open傳回的檔案描述元、ADC 通道,以及將儲存 ADC 值的指標。
若要取得ADC_Poll函式傳回的有效位數,請呼叫 ADC_GetSampleBitCount。
設定 ADC 參考電壓
呼叫 ADC_SetReferenceVoltage 以設定 ADC 參考電壓。
MT3620 具有晶片上的 2.5 伏特參考。 或者,它可以連接到小於或等於 2.5 伏特的外部電壓參考。
具有進階函式的 ADC 存取
作為與周邊互動的高階簡化函式替代方案,您可以利用ioctl連結庫來開啟功能。 本節說明如何執行這項操作,以及使用 ioctls 與使用一般 Linux 函式的方式不同。
ADC 進階函式代碼段 示範如何使用 Azure Sphere 進階函式讀取 ADC。
例如,您可以看到讀取 ADC 與簡化、進階和 Linux sysfs 實作的並存比較:
開啟 ADC 通道
若要開啟 ADC 控制器以供存取,請使用傳入目錄路徑的 Linux open
呼叫,其開頭 /dev/adc<number>
為 『number』 是控制器標識碼。 如果呼叫成功,則會傳回檔案描述元。 否則會傳回錯誤值。
請參閱 參數、許可權和錯誤檢查的範例實 作。
取得通道規格
使用進階函式時,請先使用ioctl呼叫來取得通道規格,再輪詢、設定參考電壓或取得樣本位計數。 您可以藉由硬式編碼一些取得的值來略過此步驟,但不建議這麼做。 請注意,此步驟是由簡單函式中提供的程式代碼所處理。
// Used to get the size of the buffer to allocate for the channel specification
IIO_GET_CHANNEL_SPEC_BUFFER_TOTAL_SIZE_IOCTL
// Used to get the channel specification and set the ‘iio_ioctl_chan_spec_buffer’ struct properly
IIO_GET_CHANNEL_SPEC_BUFFER_IOCTL
設定參考電壓
若要使用進階 API 設定通道的參考電壓:
設定在取得通道規格中擷取之結構中
iio_ioctl_chan_spec_buffer
填入的 ADC 資訊。取得要為通道設定之屬性的屬性索引。
使用屬性索引和通道規格資訊寫入參考電壓。
若要取得參考電壓屬性的索引:
iio_ioctl_chan_spec_buffer
從取得通道規格中擷取的結構,使用來自欄位的值channel
,channel
並從欄位中使用 來自欄位的值ext_info
。 欄位ext_info
是iio_ioctl_chan_spec_ext_info
結構,是通道之屬性描述元連結清單的前端。從 0 開始,周遊計算節點的清單,直到
name
字位符合reference_voltage
字串為止。- 清單中的每個節點都有一個「下一個」欄位,指向清單中的下一個節點。 最後一個節點指向 NULL。
- 產生的計數器是 屬性的索引。
若要設定參考電壓,請使用
IIO_WRITE_CHANNEL_EXT_INFO_IOCTL
採用 型iio_ioctl_write_chan_ext_info
別 結構的ioctl,其中包含相關數據(在此案例中為電壓)、要設定的通道,以及為該通道設定的特定屬性(參考電壓)。
取得範例位計數
若要使用進階 API 來設定參考電壓:
請確定您取得適當的 ADC 通道資訊。 此資訊會在
iio_ioctl_chan_spec_buffer
取得通道規格一節中擷取的結構中填入。取得您要為通道讀取的屬性屬性索引,在此案例中為範例位計數。
使用 Linux ioctls 以使用屬性索引和通道規格來取得範例位計數。
若要取得樣本位計數的屬性索引,請使用與設定參考電壓相同的程式。 不過,在逐一查看類型iio_ioctl_chan_spec_ext_info
為 ext_info
的連結清單時,符合字串 current_bits
。
呼叫ioctl IIO_READ_CHANNEL_EXT_INFO_IOCTL
,以在欄位中填入類型 iio_ioctl_read_chan_ext_info
為必要數據 buffer
的結構。
讀取 ADC 通道
若要讀取 ADC 通道,請使用 ioctl 呼叫 IIO_READ_RAW_CHANNEL_INFO_IOCTL
進行輪詢,並傳入結構,該結構 iio_ioctl_raw_channel_info
會填入 ADC 通道中的數據。
範例實作
若要使用 Azure Sphere 進階實作讀取 ADC,請參閱 ADC 進階應用程式範例中的代碼段。
若要比較在為 Azure Sphere 撰寫程式代碼和一般 Linux 系統編碼時,與周邊互動之間的語意差異,請參閱 LinuxSysfsNodes。
MT3620 支援
MT3620 支援的 ADC 功能列在 MT3620 支持狀態中。 MT3620 開發板使用者指南說明針腳配置和針腳功能。
Microsoft Azure Sphere SDK 安裝目錄中的 HardwareDefinitions 資料夾包含一般 Azure Sphere 開發板、模組和晶片的定義。 其中包含標頭和 JSON 檔案,這些檔案會定義 MT3620、MT3620 RDB 和其他 MT3620 硬體的主要介面。 HardwareDefinitions 資料夾的預設位置位於 C:\Program Files (x86)\Microsoft Azure Sphere SDK\Hardware Definitions
Windows 和 /opt/azurespheresdk/HardwareDefinitions
Linux 上。
GitHub 上的 Azure Sphere 範例存放庫包含標頭和 JSON 檔案,可定義 MT3620 晶片和 MT3620 RDB 的 SPI 主要介面,以及其他 MT3620 硬體。-->