2418319_ja-JP

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

2418319_ja-JP

2418319_ja-JP

ADC変換時間の問題

こんにちは、NXPサポートの皆さん、

私はS32 Design StudioとRTDドライバーを使ってS32K312 MCUを扱っており、シングルチャネルの通常変換におけるSAR ADCの実際の変換タイミングを理解しようとしています。

私の設定は以下の通りです。

  • MCU:S32K312

  • コアクロック:120MHz

  • ADC機能クロック:120MHz

  • ADCモード:通常変換

  • チャネル数:1

  • プリサンプリング:無効

  • サンプリング時間:33 ADCクロックサイクル

  • 計算に使用した変換時間:48 ADCクロックサイクル

  • ハードウェア平均化:このテストでは無効になっています

  • チェーン終了通知/割り込みが有効

該当するコードは以下のとおりです。

int main(void) {

Clock_Ip_Init(&Clock_Ip_aClockConfig[0]);

IntCtrl_Ip_Init(&IntCtrlConfig_0);

IntCtrl_Ip_EnableIrq(ADC0_IRQn);

Siul2_Port_Ip_Init( NUM_OF_CONFIGURED_PINS_PortContainer_0_BOARD_InitPeripherals, g_pin_mux_InitConfigArr_PortContainer_0_BOARD_InitPeripherals );

volatile Adc_Sar_Ip_StatusType status = ADC_SAR_IP_STATUS_ERROR;

status = Adc_Sar_Ip_Init(0, &AdcHwUnit_0);

ステータス = Adc_Sar_Ip_DoCalibration(0);

Adc_Sar_Ip_EnableNotifications( 0, ADC_SAR_IP_NOTIF_FLAG_NORMAL_ENDCHAIN );

Siul2_Dio_Ip_TogglePins(PTA_L_HALF, 1U < 1U);

Adc_Sar_Ip_StartConversion( 0, ADC_SAR_IP_CONV_CHAIN_NORMAL );

while(1)

{ __asm__ ("nop");

}

}

void Adc_EndOfNormalChain_Callback(void)

{

Siul2_Dio_Ip_TogglePins(PTA_L_HALF, 1U < 1U);

}

ロジックアナライザを使用して、2つのGPIO遷移間の時間を測定します。

ADCのタイミングのみに基づいて計算したところ、約700ナノ秒という値が得られました。

しかし、測定されたGPIOパルス幅は約4μsである。

以下の点について理解を深めたいです。

  1. プリサンプリングとハードウェア平均化が無効になっている場合、単一の正規変換を行うための正しい式は何ですか?

  2. Adc_Sar_Ip_DoCalibration()によって実行される ADC キャリブレーションは、後続のすべての ADC 変換のタイミングに影響しますか、それとも初期化時にのみキャリブレーション値を計算/保存しますか?

  3. ゲイン補正、オフセット補正、内部コンデンサの充電、セトルタイム、または内部ADCプロセッシングは変換ごとに追加のサイクルを加えるのでしょうか?

  4. 通常の変換モードでの1チャネルのS32K312 SAR ADCの正確な変換時間公式は何ですか?

  5. 測定された時間間隔は:

    • Adc_Sar_Ip_StartConversion()

    • およびAdc_EndOfNormalChain_Callback()

    RTDソフトウェアのオーバーヘッド、割り込みレイテンシ、ISR処理、またはコールバックオーバーヘッドを含むべきか?

  6. RTDや割り込みのオーバーヘッドを除き、ADCハードウェア変換時間のみを測定する推奨される方法はありますか?

  7. 可能であれば、この構成で期待されるADCタイミング(クロックサイクル単位)を教えてもらえますか?

私の主な目的は、約4μsの測定値が主にADCのハードウェアタイミングによるものか、RTD/割り込み/ソフトウェアのオーバーヘッドによるものかを明らかにすることです。

このADC変換に関するご協力は大歓迎です!

ありがとう。

Re: ADC Conversion time issue

こんにちは、

ADC変換時間の方程式はS32K3リファレンスマニュアル60.3.18節に直接記載されています「変換時間」あなたの設定(シングルチャネル、プリサンプリング無効、ハードウェア平均無効)では、その式と設定されたADCクロックを使って変換時間を計算できます。

補足事項:

1. Adc_Sar_Ip_DoCalibration() は、後続の変換のタイミングに影響を与えません。キャリブレーションは初期化時に実行され、そのキャリブレーション値はADCハードウェアによって使用されます。

2. 測定された約4µsは、ADC変換時間だけではありません。測定範囲:

  • Adc_Sar_Ip_StartConversion()
  • ADCサンプリングと変換
  • ADC割り込み生成
  • NVIC割り込みレイテンシ
  • RTD ISRプロセッシング
  • コールバックディスパッチ
  • GPIOトグル操作

したがって、測定されたパルス幅にはADCのハードウェア時間とソフトウェアのオーバーヘッドの両方が含まれます。これは、RM式のみから計算される変換時間よりも明らかに長くなると予想される。

3. ADCハードウェア変換時間をより正確に測定するために、以下に推奨します

  • Adc_Sar_Ip_StartConversion() が戻った直後に、最初の GPIO をトグルします。これにより、測定されたパルスから、起動APIの実行時間の大部分が除去されます。
  • ADC割り込みハンドラでは、設定された通知コールバックを呼び出す前に、できるだけ早い段階でGPIOを切り替えてください。これにより、割り込み処理の開始とコールバックディスパッチのオーバーヘッドが分離されます。
  • GPIOソフトウェアの負荷を最小限に抑えるために、Siul2_Dio_Ip_TogglePins()の代わりに一時的に直接SIUL2 GPIOレジスタ書き込みを使用してください。
  • あるいは、ADCのチェーン終了ステータスフラグをポーリングし、ハードウェアフラグがセットされたらすぐにGPIOを切り替える。これによりNVICやコールバックのオーバーヘッドは除外されますが、ポーリングループやGPIO書き込みレイテンシは残ります。

したがって、提供された情報に基づくと、~4μsの測定値はADC変換自体よりもソフトウェア/割り込み経路全体に支配されている可能性が高いです。

BR、ペトル

タグ(1)
評価なし
バージョン履歴
最終更新日:
月曜日
更新者: