在高階應用程式中使用 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 設定通道的參照電壓:

  1. 設定在取得通道規格中擷取的結構中 iio_ioctl_chan_spec_buffer 填入的 ADC 資訊。

  2. 取得屬性的屬性索引,為通道設定。

  3. 使用屬性索引和通道規格資訊撰寫參照電壓。

若要取得參照電壓屬性的索引:

  1. iio_ioctl_chan_spec_buffer從取得通道規格中擷取的結構,使用欄位中的 channel 值,然後從 channel 欄位使用欄位中的 ext_info 值。 字 ext_info 段是一種 iio_ioctl_chan_spec_ext_info 結構,是頻道屬性描述的連結清單標題。

  2. 從 0 開始,在清單中追蹤節點的計數, name 直到欄位符合 reference_voltage 字串為止。

    • 清單中的每個節點都有一個「下一個」欄位,指向清單中的下一個節點。 最後一個節點會指向 Null。
    • 產生的計數器是屬性的索引。
  3. 若要設定參照電壓,請使用 IIO_WRITE_CHANNEL_EXT_INFO_IOCTL 採用類型 iio_ioctl_write_chan_ext_info 結構的電池層,其中包含 (在此情況下的電壓) 、要設定的通道,以及針對該通道設定的參照電壓) 的特定 (屬性。

取得樣本位元數目

若要使用進階 API 設定參照電壓:

  1. 請確定您已取得適當 ADC 通道的資訊。 此資訊會填入 iio_ioctl_chan_spec_buffer 取得 [取得通道規格] 區段中所擷取的結構。

  2. 取得您要讀取頻道之屬性的屬性索引,在此情況下為樣本位元數目。

  3. 使用 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 上。