Project_OKI’s diary

エンジニアの勉強ブログ

CubeIDE AD変換の設定

STM32 (DMAでAD変換)

1.本日の内容

 (1) CubeIDEのAD変換の設定項目についてまとめました。

   AD変換の設定を行う際の参考にしてください。

  ※使用マイコン:nucleof401

 

・目次

 

2.内容

​​(1) 設定内容

項目 説明
Clock Prescaler ADCのクロック周波数を設定する
 PCLK2 divided by 2/4/6/8 PCLK2を2/4/6/8で分割する。
Resolution 変換結果のビット幅を設定する
 12bits/10bit/8bit/6bit ADCの変換分解能を設定。下記に詳細を示す。
Data Alignment 変換結果のアラインメント方法を設定する
 Right alignment 右寄せ
 Left alignment 左寄せ
Scan Conversion Mode 複数チャンネルをスキャン変換するかどうかを設定する
 Enable 設定を有効にする。
 Disable 設定を無効にする。
Continuous Conversion Mode 変換を継続的に行うかどうかを設定する
 Enable 設定を有効にする。
 Disable 設定を無効にする。
Discontinuous Conversion Mode 途中で変換を一時停止するかどうかを設定する
 Enable 設定を有効にする。
 Disable 設定を無効にする。
DMA Continuous Requests 変換終了時にDMAを継続的にリクエストするかどうかを設定する。
 Enable 設定を有効にする。
 Disable 設定を無効にする。
End Of Conversion Selection 変換終了時のシーケンスを選択する
 EOC flag at the end of single channel vonversion 単一チャンネル変換後にEOCフラグを立てる
 EOS flag at the end of all conversions すべてのチャンネル変換後にEOSフラグを立てる
ADC_Regular_ConversionMode 通常変換モードの設定をする
Number Of Conversion 変換するチャンネル数を設定する
External Trigger Conversion Source トリガソースを設定する
 Regular Conversion launched by software ソフトウェアプログラムによってADC変換を開始するトリガソース
 Timer 1 Capture Compare 1event タイマー1(TIMER1)が特定の値に達した時、ADC変換を開始するトリガーソース
 Timer 1 Capture Compare 2event タイマー1(TIMER1)が特定の値に達した時、ADC変換を開始するトリガーソース
 ・・・
External Trigger Conversion Edge トリガのエッジを設定する
 Trigger detection on the rising edge トリガの立ち上がりエッジ検出時に、ADCを開始する。
 Trigger detection on the falilin edge トリガの立下りエッジ検出時に、ADCを開始する。
 Trigger detection on both the rising and fallin. トリガの立ち上がり、立下り両方検出時に、ADCを開始する。
Rank 変換するチャンネルの順序を設定する
 Channel 変換するチャンネルを選択する。
 Sampling Time サンプリング時間を設定する。:3,15,28,56,84,112,144,480
ADC_Injected_ConversionMode インジェクション変換モードの設定をする
Number Of Conversions インジェクション変換するチャンネル数を設定する
External Trigger Source トリガソースを設定する
External Trigger Edge トリガのエッジを設定する
Injected Conversion Mode インジェクション変換モードの設定
  Discontinous Mode 複数変換時、1つの変換が完了する度にADC変換を停止、変換間の時間を空ける。
  Auto Injected Mode 自動的に切り替え、複数のインジェクションチャンネルで変換を行う
WatchDog アナログウォッチドッグモードを有効にするかどうかを設定する
 Enable Analog WatchDog Mode アナログウィッチモードを有効にする。

 

​​(2) 設定の詳細内容

 (a) Data Alignment (データアライメント)

  ・コンピュータのメモリ内でデータを格納する際に、
   どのようにアドレスを割り当てるかを決定する方法です。
  ・右寄せ又は左寄せの設定を行います。

  アライメントとは

  ・メモリやストレージなどの記憶装置にデータを書き込む際、

  書き込むデータの大きさや先頭の位置(アドレス)を、

  装置の管理単位の整数倍になるように調節すること。

 

  例:32ビットの整数を4バイト単位でアライメントする場合
    先頭アドレスは4の倍数になるように割り当てられます。

 

右寄せの場合

  ・変換結果は下位ビットから順にメモリに格納。
左寄せの場合

  ・変換結果は上位ビットから順にメモリに格納。


データアライメントの設定

  ・データを処理する際にどのようにアクセスするかに影響を与えます。

  ・一般的に8ビットの符号なし整数データを変換する場合、

   変換後のデータの桁数も8ビットになるため、

   Data Alignmentはそのままで構いません。

  ・16ビットの符号付き整数データを変換する場合、

   変換後のデータの桁数が16ビットになるため、

   Data Alignmentを設定する必要があります。

 

・参考:データ型のアラインメントとは何か,なぜ必要なのか?

メモリマップ | APS|組み込み業界専門メディア

STM32H7でキャッシュ一貫性を保持したDMA転送(Memory-to-Peripheral) | ごはんたべよ

 

 (b) EOC flag at the end of single channel vonversion

  ・シングルチャンネル変換が完了したときに、ADCがフラグをセットします。

 

 (c) EOC flag at the end of all channel vonversion

  ・複数チャネル変換ですべてのアナログ入力ピンの変換が完了した後に、

   ADCがフラグをセットします。

  ・これらのフラグを使用することで、マイコンは変換が完了するまで待機し、

   変換データを読み取ることができます。

   これにより、正確で信頼性の高いAD変換が可能になります。

 

 (d) Regular Conversion launched by software

  ・マイコン内のソフトウェアプログラムによってトリガされる

   ADCの変換モードのことです。
  ・ソフトウェアプログラムがADC変換を開始するためにトリガ信号を送信します。


  ・このトリガー信号が送信されることで、ADCが変換を開始し、

   変換結果をレジスタに格納します。
  ・このモードは、タイマ等の外部トリガソースを使用しない場合に選択されます。

 

  ・Regular Conversion launched by softwareを使用する場合、
   ADCを起動するためにHAL_ADC_Start()関数を使用します。
   この関数は、ADCコンバータを開始し指定したチャンネルで変換を開始します。


  ・変換結果が利用可能になると、HAL_ADC_PollForConversion()関数などを使用して

   結果を取得することができます。


  ・HAL_ADC_Stop()関数を使用してADCを停止する必要があります。

   ※DMAで使用する場合は、HAL_ADC_Start()ではなく、

    HAL_ADC_Start_DMAを使用します。
    DMAを使用して変換を開始し、変換が完了するとDMA割り込みを発生させます。

 

 (e) Timer 1 Capture Compare 1event

  ・タイマ1(TIMER1)が特定の値に達したときにADC変換を開始するトリガーソースの1つです。
  ・TIMER1は、マイクロコントローラ内のタイマー/カウンターの1つであり、   

   Capture/Compare機能を備えています。

  

  ・Capture:タイマ1の計算値を外部からの入力パルスを

    トリガとして、レジスタに取りこみます。

 

  ・Compare:レジスタに設定れた値とタイマ1の計算値を比較し、

     一致すると、割り込み要求を発生させます。

  この機能により、タイマーが特定の値に達すると、

  タイマ1のCapture Compareレジスタ1(CCR1)で定義されたイベントが発生します。

 

  このイベントは、ADC変換をトリガーするのに使用できます。
  具体的には、CCR1レジスタに設定された値と一致すると、
  タイマー1 Capture Compare 1eventが発生し、ADC変換が開始されます。

 

  ・1eventは、タイマー1のキャプチャ/コンペアユニットのCCR1が一定の値に達した  

   ときに発生するイベントを指します。
  ・2eventは、CCR2が一定の値に達したときに発生するイベントを指します。

参考:電子工作室

キャプチャ・コンペア

 

 (e) Sampling Time

  ・アナログ入力ピンからアナログ信号を取り込む時間の長さを設定します。
  ・この時間は、アナログ信号がキャプチャされ、

   デジタル値に変換されるための時間です。

 

  ・STM32のADCは、サンプリング時間を1.5サイクルから239.5サイクルの範囲で設定できます。
  ・サンプリング時間が長いほど、より正確な変換結果を得ることができますが、

   変換速度が低下します。


  ・サンプリング時間が短い場合、変換速度が向上しますが、

   精度が低下する可能性があります。

 

 (f) ADC_Injected_ConversionMode

  ・ADC Regular Conversionは、ADCが連続的に入力信号をサンプリングし、デジタ

   ル信号に変換する方法です。
  ・この変換モードでは、1つのアナログチャネルに対して1回の変換が行われます。

  ・変換を完了するまでに複数のサンプルが必要な場合でも、

   同じチャネルで実行する必要があります。

 

  ・ADC Injected Conversionは、

   ADCが複数のアナログチャネルから1回の変換を行う方法です。


   この変換モードでは、ADCによって定義された複数のチャネルが、

   同時にまたは順次変換されます。

 

  ・チャネルごとに変換結果を取得できます。
   例えば、ADC Injected Conversionを使用すると、

   複数のセンサーからの信号を同時に変換できます。

   これにより、処理速度が向上し、システムの全体的な精度が向上します。

 

 (f) Discontinuous Mode

  ・ADCが複数の変換を行う際に、1つの変換が完了するたびにADC変換を停止することで、変換間の時間を空けるモードです。

  ・これにより、ADC変換によるノイズが減少し、精度の高い変換を実現できます。

 

  ・例えば、4つのチャンネルを持つADCで、Discontinuous Modeを使用する場合、

   1つの変換が完了すると、ADCは変換を停止し、指定された時間(Discontinuous Modeの設定値)を待ってから次の変換を開始します。

   これにより、ADC変換間の時間を空けることができます。

 

  ・Discontinuous Modeは、通常、オペアンプを使用してシグナルを増幅する必要がある場合や、シグナルが不安定な場合に使用されます。

   このモードを使用することで、シグナルのノイズが減少し、より正確な変換結果を得ることができます。

 

 (g) Auto Injected Mode

  ・変換シーケンスを開始するためのトリガが必要です。
  ・トリガは、ソフトウェアトリガー、外部トリガー、またはレギュラーチャンネル変換の完了トリガーなど、複数のオプションから選択できます。

  ・トリガが発生すると、ADCはインジェクションチャンネル変換を開始し、

   自動的にインジェクションチャンネルを切り替えながら変換を行います。

  ・最後のインジェクションチャンネル変換が完了すると、

   ADCが変換シーケンスの終了を通知するフラグが立ちます。

 

  ・変換結果はDMA転送を使用して転送することができます。
  ・複数のインジェクションチャンネル変換結果を取得するには、

   JDR1、JDR2、JDR3、JDR4といった複数のレジスタを使用します。

 

 (h) Enable Analog WatchDog Mode

  ・ADCが取得したアナログ信号の値が、あらかじめ設定した上限値と下限値の範囲外になった場合に、割り込みまたはDMA転送をトリガーする機能です。

  ・これを有効にすると、入力信号が範囲外になった場合にすばやく対応することができます。

 

  ・このモードを有効にするには、ADCのクロックを設定、チャンネルを構成、

   ADCのアナログウォッチドッグモードを有効にする必要があります。

 

  具体的には、次の手順を実行します。

  (a) ADCのクロックを設定する。
  (b) 変換するチャンネルを構成する。
  (c) ADCのアナログウォッチドッグモードを有効にする。
  (d) アナログウォッチドッグレジスター(AWD)の上限値と下限値を設定する。
  (e) ADCを有効にする。
 
 

3.関連記事

関連記事一覧:
 
組み込みC言語