在高階應用程式中使用 ADC
本主題說明如何在高階應用程式中使用類比到數位轉換器 (ADC) 。 如需 RTApps 中 ADC 使用的相關資訊,請參閱 在支援即時的應用程式中使用介面 設備。
Azure 球體支援類比數位轉換。 ADC 會將類比輸入轉換成對應的數位值。 ) ADC 輸出位數來,輸入通道的數量和解析度 (相依于裝置。
ADC_HighLevelApp範例示範如何在 MT3620 裝置上存取 ADC。
ADC 周邊片段示範使用 簡化 或 進 階功能與 ADC 互動的兩種方式。
MT3620 包含 12 位 ADC 以及 8 個輸入通道。 ADC 會比較輸入電壓與參照電壓,並在輸出時產生 0 到 4095 之間的值。 ADC 輸入通道和 GPIO 會透過 GPIO48 將 GPIO41 釘選到 MT3260 上的相同圖釘。 不過,如果您的應用程式使用 ADC,則會配置所有 8 個 PIN 碼做為 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 球體 應用程式資訊清單 主題有更多詳細資料。
在程式碼中,使用為硬體定義的常數來識別 ADC 控制器。 當您建立應用程式時,編譯器會將這些值翻譯成原始值。
例如,以下是針對針對 MT3620 參考開發面板 (RDB) 之應用程式資訊清單的摘要。
"Adc": [ "$MT3620_RDB_ADC_CONTROLLER0" ]
下列摘要說明如何在針對 Avnet MT3620 Starter Kit的應用程式中指定相同的 ADC 控制器:
"Adc": [ "$AVNET_MT3620_SK_ADC_CONTROLLER0" ]
實作概觀
若要實作存取 ADC 的應用程式,請使用下列兩種方法之一:
本主題說明這兩種方法。 您可以在這裡找到每個方法的完整範例代碼:
含簡化函數的 ADC 存取權
Azure 球體高層級應用程式可以透過呼叫 Applibs ADC 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 存取權
作為與周邊設備互動之高層級簡化函數的替代方案,您可以利用設備庫來開啟功能。 本節說明如何執行這項作業,以及使用縮排與使用一般 Linux 函數有何不同。
ADC 進階函數片段 顯示如何使用 Azure 球體進階函數讀取 ADC。
例如,您可以看到閱讀 ADC 與簡化、進階和 linux sysfs 實作的並排比較:
開啟 ADC 通道
若要開啟 ADC 控制器以供存取,請使用傳送至目錄路徑的 Linux open
通話,其開頭會是 /dev/adc<number>
控制器識別碼為 「號碼」。 如果通話成功,就會傳回檔案描述。 否則,會傳回錯誤值。
請參閱參數、許可權和錯誤檢查的實作 範例 。
取得頻道規格
使用進階函數時,請在輪詢前使用 tl 通話、設定參照電壓或取得樣本位元數目,以取得頻道規格。 若要略過此步驟,可以對所取得的部分值進行硬編碼,但不建議使用此步驟。 請注意,此步驟是由簡易函數中提供的程式碼所處理。
// 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
結構的電池層,其中包含 (在此情況下的電壓) 、要設定的通道,以及針對該通道設定的參照電壓) 的特定 (屬性。
取得樣本位元數目
若要使用進階 API 設定參照電壓:
請確定您已取得適當 ADC 通道的資訊。 此資訊會填入
iio_ioctl_chan_spec_buffer
取得 [取得通道規格] 區段中所擷取的結構。取得您要讀取頻道之屬性的屬性索引,在此情況下為樣本位元數目。
使用 Linux 仿效工具使用屬性索引和通道規格來取得樣本位元數目。
若要取得樣本位元數目的屬性索引,請使用與 設定參照電壓相同的處理常式。 不過,在稱為 ext_info
type 的 iio_ioctl_chan_spec_ext_info
連結清單上反覆運算時,會比對字串 current_bits
。
撥號給系統 IIO_READ_CHANNEL_EXT_INFO_IOCTL
管理員,在欄位中 buffer
填入必要資料的類型 iio_ioctl_read_chan_ext_info
結構。
閱讀 ADC 頻道
若要讀取 ADC 頻道,請使用撥號來進行 IIO_READ_RAW_CHANNEL_INFO_IOCTL
投票,並依照會填入 ADC 通道資料的指示 iio_ioctl_raw_channel_info
進行投票。
實作範例
若要使用 Azure 球體進階實作閱讀 ADC,請參閱 ADC 進階應用程式範例中的片段。
若要比較 Azure 球體編碼與一般 Linux 系統編碼時,與周邊設備互動之間語義上的差異,請參閱 LinuxSysfsNodes。
MT3620 支援
MT3620 支援的 ADC 功能會列在 MT3620 支援狀態中。 MT3620 開發面板使用者指南說明釘選版面配置和釘選功能。
Microsoft Azure 球體 SDK 安裝目錄中的 [HardwareDefinitions] 資料夾包含常見 Azure 球體開發面板、模組和晶片的定義。 它包含可定義 MT3620、MT3620 RDB 主介面以及其他 MT3620 硬體的頁首和 JSON 檔案。 HardwareDefinitions 資料夾的預設位置是在 C:\Program Files (x86)\Microsoft Azure Sphere SDK\Hardware Definitions
Windows 和 /opt/azurespheresdk/HardwareDefinitions
Linux 上。