高度なアプリケーションで ADC を使用する
重要
これは Azure Sphere (レガシ) のドキュメントです。 Azure Sphere (レガシ) は 2027 年 9 月 27 日に 再提供されておりユーザーは現時点で Azure Sphere (統合) に移行する必要があります。 TOC の上にある Version セレクターを使用して、Azure Sphere (統合) のドキュメントを表示します。
このトピックでは、高度なアプリケーション内でアナログ デジタル コンバーター (ADC) を使用する方法について説明します。 RTApp での ADC の使用法については、「リアルタイム対応アプリケーションでの周辺機器の使用」をご覧ください。
Azure Sphere では、アナログからデジタルへの変換がサポートされます。 ADC では、アナログ入力が対応するデジタル値に変換されます。 入力チャネルの数と (ADC の出力ビット数としての) 分解能はデバイスによって異なります。
ADC_HighLevelApp サンプルは、MT3620 デバイス上で ADC にアクセスする方法を示します。
ADC 周辺機器スニペットは、 実装 または advanced 関数を使用して ADC と対話する 2 つの方法を示しています。
MT3620 には、8 つの入力チャネルを持つ 12 ビット ADC が 1 つ含まれています。 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 にアクセスするためのアプリケーションを実装するには、次の 2 つの方法のいずれかを使用します。
このトピックでは、両方の方法について説明します。 各メソッドの完全なサンプル コードについては、以下を参照してください。
簡略化された機能を備えた ADC アクセス
高度な Azure Sphere アプリケーションでは、Applibs ADC API を呼び出すことによって ADC にアクセスできます。
ADC コントローラーを開く
ADC コントローラーを開いてアクセスできるようにするには、ADC_Open を呼び出し、コントローラーの ID をパラメーターとして渡します。 呼び出しが成功した場合は、ファイル記述子が返されます。 それ以外の場合は、エラー値が返されます。
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 ライブラリを利用して機能を開くことができます。 このセクションでは、これを行う方法と、ioctl の使用が汎用 Linux 関数の使用とどのように異なるかについて説明します。
ADC Advanced Functions スニペット は、Azure Sphere の高度な関数を使用して ADC を読み取る方法を示しています。
例として、読み取り ADC と、簡略化された高度な Linux sysfs の実装を並べて比較できます。
ADC チャネルを開く
アクセス用の ADC コントローラーを開くには、Linux open
呼び出しを使用して、ディレクトリへのパスを渡します。これは、"number" がコントローラー ID /dev/adc<number>
で始まります。 呼び出しが成功した場合は、ファイル記述子が返されます。 それ以外の場合は、エラー値が返されます。
パラメーター、アクセス許可、エラー チェックについては、「 Example の実装 」を参照してください。
チャネルの仕様を取得する
高度な関数を使用している間は、ポーリングの前に 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 を使用してチャネルの基準電圧を設定するには:
Get Channel 仕様で取得した
iio_ioctl_chan_spec_buffer
構造体に設定された ADC 情報を設定。チャネルに設定するプロパティのプロパティ インデックスを取得します。
プロパティインデックスとチャンネル仕様情報を使用して参照電圧を書き込みます。
参照電圧プロパティのインデックスを取得するには:
Get Channel 仕様で取得した
iio_ioctl_chan_spec_buffer
構造体からchannel
フィールドの値を使用し、channel
フィールドからext_info
フィールドの値を使用します。ext_info
フィールドは、チャネルのプロパティ記述子のリンクされたリストの先頭であるiio_ioctl_chan_spec_ext_info
構造体です。0 から、
name
フィールドがreference_voltage
文字列と一致するまで、ノードをカウントするリストを走査します。- リスト内の各ノードには、リスト内の次のノードを指す "next" フィールドがあります。 最後のノードは NULL を指します。
- 結果のカウンターは、プロパティのインデックスです。
基準電圧を設定するには、関連するデータ (この場合は電圧)、設定するチャネル、およびそのチャネルに設定されている特定のプロパティ (参照電圧) を含む、
iio_ioctl_write_chan_ext_info
型の構造体を取り込むIIO_WRITE_CHANNEL_EXT_INFO_IOCTL
ioctl を使用します。
サンプル ビット数を取得する
高度な API を使用して基準電圧を設定するには:
適切な ADC チャネルの情報を取得していることを確認します。 この情報は、「チャネルの取得の仕様」セクションで取得した
iio_ioctl_chan_spec_buffer
構造体に入力されます。チャネルに対して読み取るプロパティのプロパティ インデックスを取得します。この場合は、サンプル ビット数です。
Linux ioctls を使用して、プロパティインデックスとチャネル仕様を使用してサンプルビット数を取得します。
サンプル ビット数のプロパティ インデックスを取得するには、 Set 参照電圧と同じプロセスを使用します。 ただし、iio_ioctl_chan_spec_ext_info
型のext_info
と呼ばれるリンク リストを反復処理するときに、文字列current_bits
と一致します。
ioctl IIO_READ_CHANNEL_EXT_INFO_IOCTL
を呼び出して、buffer
フィールドに必要なデータをiio_ioctl_read_chan_ext_info
型の構造体に設定します。
ADC チャネルの読み取り
ADC チャネルを読み取るために、ioctl 呼び出し IIO_READ_RAW_CHANNEL_INFO_IOCTL
を使用してポーリングし、ADC チャネルからのデータが入力される構造体 iio_ioctl_raw_channel_info
を渡します。
実装例
Azure Sphere の高度な実装を使用して ADC を読み取る場合は、 ADC の高度なアプリ サンプルのスニペットを参照してください。
Azure Sphere のコーディング時の周辺機器との対話と汎用 Linux システムのコーディングのセマンティクスの違いを比較するには、「 LinuxSysfsNodesを参照してください。
MT3620 サポート
MT3620 でサポートされている ADC 機能は、「MT3620 サポートの状態」に一覧表示されています。 「MT3620 開発ボードのユーザー ガイド」は、ピンのレイアウトと機能について説明します。
Microsoft Azure Sphere SDK インストール ディレクトリの HardwareDefinitions フォルダーには、一般的な Azure Sphere 開発ボード、モジュール、チップの定義が含まれています。 これには、MT3620、MT3620 RDB、およびその他の MT3620 ハードウェアのマスター インターフェイスを定義するヘッダーファイルと JSON ファイルが含まれています。 HardwareDefinitions フォルダーの既定の場所は、Windows では C:\Program Files (x86)\Microsoft Azure Sphere SDK\Hardware Definitions
され、Linux では /opt/azurespheresdk/HardwareDefinitions
されます。
GitHub 上の Azure Sphere Samples リポジトリには、 MT3620 チップ および MT3620 RDB の SPI マスター インターフェイスを定義するヘッダーファイルと JSON ファイルと、その他の MT3620 ハードウェア 含まれています-->