JAJU704B March 2019 – February 2021
電圧と電流のサンプリング時に発生するさまざまなイベントを、図 2-10 に示します。オリーブ グリーンの項目は、テスト ソフトウェアではなくハードウェア設定によって行われます。
図 2-10 電圧と電流のサンプリング イベント図 2-10に示されているプロセスを実行するため、各相について、すべての OSR ごと (この設計では 512 ごと) に、変調クロックサイクルごとに、新しい電流サンプルが準備されます。ADS131M04 デバイスからの最新の位相電流および電圧のサンプルが、N - 1 番目の電流および電圧のサンプル、または Iphx[N - 1] および Vphx[N - 1] に対応していると想定します。新しいサンプルの準備ができた時点で、ADS131M04 によって DRDY ピンが Low にアサートされます。ADS131M04 の DRDY ピンで立ち下がりエッジが発生すると、MSP432 MCU 上の GPIO ポート割り込みが発生し、それによって MSP432 MCU のポート ISR がトリガされます。バックグラウンド プロセスはポート ISR 内で実行されます。バックグラウンド プロセスを 図 2-11 に示します。このプロセスは主に、テスト ソフトウェアでタイミング クリティカルなイベントを処理します。
図 2-11 バックグラウンド プロセスバックグラウンド プロセスでは、以前に取得した電圧サンプル (Vphx[N - 2]) と、以前に取得した電流サンプル (Iphx[N - 2]) が保存され、後から per_sample_dsp 関数で使用できます。この関数は、計測パラメータの計算に使用される中間ドット積の数量を更新します。以前に取得した電圧と電流のサンプルを保存した後、チップ セレクトを Low にアサートし、ADS131M04 との通信がイネーブルされます。次に DMA が、ADS131M04 デバイスの最新の電流と電圧のサンプル (Iphx[N - 1] と Vphx[N - 1]) へのリクエストを送信し、ADS131M04 からのデータ パケット応答を受信するように構成されます。電流サンプルの要求および受信は、ソフトウェアではなく DMA モジュールによって自動的に実行されます。
MSP432 MCU の DMA によって送信されるパケットと、DMA によって受信および結合される ADS131M04 からの応答パケットを、図 2-12 に示します。送信および受信パケットには 6 ワードが含まれ、各ワードは 3 バイト長です。
図 2-12 ADS131M04 ADC のサンプル リクエスト パケットADS131M04 デバイスから ADC データを要求するとき、ADS131M04 に送信する必要がある最初のワードはコマンド ワードです。テスト ソフトウェアは、通常の ADC サンプル読み取り中に ADS131M04 の設定を変更したりレジスタを読み出したりする必要がないため、ADS131M04 に NULL コマンドを送信します。これにより、デバイスの状態を変えずに ADS131M04 から ADC サンプルを取得できます。NULL コマンドの実際のサイズは 16 ビットですが、24 ビットのワードが使用されるため、16 ビット コマンドの末尾に値 0x00 を追加してパディングする必要があります。したがって、送信される NULL コマンド ワードの値は 0x000000 です。MSP432 MCU がコマンド ワードをシフト出力している間、同じ MSP432 は同時に、前のパケットのコマンド ワードに対するレスポンス ワードをシフト入力しています。NULL コマンドに対する応答ワードは、STATUS レジスタの内容です。この設計では STATUS レジスタの内容は使用しないため、ADS131M04 から最初に受信したワードは無視されます。
コマンド ワードを書き込んだ後で、読み取る各バイトについてダミーの書き込みを行う必要があります。ADS131M04 デバイスからバイトを読み取るには、SPI クロックをイネーブルする必要があり、そのためにはダミー バイトの書き込みが必要です。ダミー バイトの書き込みごとに、EUSCIB0 の SPI 送信レジスタに値 0x00 が書き込まれます。コマンド バイトを書き込んだ直後に 3 バイトのダミーデータを書き込むことで、MSP432 MCU は ADS131M04 のチャネル 0 から 3 バイトの ADC 値を受信できます。続いて 9 バイトのダミー データを書き込むことで、チャネル 1、チャネル 2、およびチャネル 3 の ADC データをそれぞれ取得します。最後に、次の 3 つのダミー バイトを書き込むと、CRC ワードを取得します。CRC ワードは 24 ビットですが、実際の CRC は 16 ビットしかなく、24 ビット ワードの最上位ビットに配置されています。このため、CRC ワードを解析するとき最後のバイトは必要ありません (ただし、ADS131M04 を適切に動作させるため、この 0 でパッドされたバイトのダミー書き込みは送信する必要があります)。
図 2-12 は、DMAが Iphx[N - 1] パケットの全体を受信するたびに、ISR 内では、5 つのコマンドおよび ADC ワード (合計 15 バイト) にわたって CRC が計算されます。この CRC 計算では、MSP432 MCU の CRC モジュールを使用します。CRC モジュールは偶数バイト単位で動作しますが、利用可能なバイト数は合計で 15 バイトしかないため、CRC モジュールは最初の 14 バイトに対して使用されます。CRC モジュールの結果と 15 バイト目のデータを組み合わせて、最終的な CRC がソフトウェアで計算されます。この設計ではワード サイズが 3 バイトに設定されているため、最後の 1 バイトに対してソフトウェアで CRC 計算を行う必要があることに注意してください。ワード サイズの代わりに 2 バイトまたは 4 バイトを選択した場合、偶数のバイト数が存在するため、ソフトウェア CRC 計算は必要ありません。図 2-13 は、MSP432 CRC モジュールとソフトウェアを使用して 15 バイトを超える CRC を計算するコード スニペットを示します。
図 2-13 奇数バイトに対して CRC を計算するために、MSP432 MCU の CRC モジュールを使用するコード スニペットパケット全体の CRC を計算した後、それを ADS131M04 から送信されたパケット内の CRC と比較します。送信された CRC は、ADS131M04 パケットの 16 バイト目および 17 バイト目から解析されます。なお、18 バイト目は CRC ワードの一部ですがゼロでパディングされているため、解析には使用されません。計算された CRC と解析された CRC が等しい場合、CRC チェックは成功し、ADC データが解析されて、N - 1 の時点での電圧および電流サンプルの値が得られます。解析された電圧および電流サンプルは一時バッファに格納され、次回の割り込みで per_sample_dsp 関数が呼び出される際に使用されます。DMA 割り込みが終了する前に、チップ セレクト ラインを再び High に戻し、ADS131M04 から次の電流サンプルが準備される前に、ADS131M04 の通信を正しくリセットします。
DMA を使用して ADS131M04 から最新の電流サンプルを受信している間、ADS131M04 は次の電圧サンプル (Vphx[N]) および電流サンプル (Iphx[N]) を取得しています。同時に、テスト ソフトウェアは ADS131M04 から取得した前回の電圧サンプル (Vphx[N–2]) および電流サンプル (Iphx[N–2]) に対してサンプルごとの処理を実行します。このサンプルごとの処理を使用して、計測パラメータの計算に使用される中間ドット積の数量を更新します。サンプル処理の後、バックグラウンド プロセスは、エネルギー比例パルスの計算と出力に「per_sample_energy_pulse_processing」を使用します。per_sample_energy_pulse_processing が完了すると、テスト ソフトウェアはポート ISR を終了します。