0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

STM32シリーズマイコンのADCキャリブレーション

Last updated at Posted at 2025-08-14

1. はじめに

HAL関数のバージョンが変わっていて,引っかかったので備忘録とする。

2. HALを使ったADCについて

STM32マイコンのADC実装は他記事が豊富にあるので割愛するが,簡単に説明すると
① CubeIDE内のCubeMXでADC設定
② コードで以下のような関数を呼んでスタート

stm32fXxx_hal_adc.c
HAL_StatusTypeDef HAL_ADC_Start(ADC_HandleTypeDef* hadc);
HAL_StatusTypeDef HAL_ADC_Start_IT(ADC_HandleTypeDef* hadc);
HAL_StatusTypeDef HAL_ADC_Start_DMA(ADC_HandleTypeDef* hadc, uint32_t* pData, uint32_t Length);

③ 変換を待って値を読むなり,DMAの値を読んでADC値を取得
といった流れである。

3. そもそもADCキャリブレーションとは

簡単に言えばアナログを正確に取得するための下準備である。
正確には,一度"0V"と"VCC"をADCに入力し,それぞれの変換値を取得,ADCの特性が0~VCC対0~4095(12bitの場合)で線形になるように取得値から補正をかける,といったものである。

キャリブレーションを実行せずともADCは動作するが,取得したADC値にズレが生じる可能性が高い。
特に理由がない場合は実行することおすすめする。

4. ADCキャリブレーション関数

以下の関数を呼び出すだけである。
なお,HAL_ADC_Start()系の関数実行前,またはHAL_ADC_Stop()実行後に行う事。

stm32fXxx_hal_adc_ex.c
HAL_StatusTypeDef HAL_ADCEx_Calibration_Start(ADC_HandleTypeDef* hadc, uint32_t SingleDiff);

ここで本記事を書く理由となった過去の関数を記載する。

stm32fXxx_hal_adc_ex.c
HAL_StatusTypeDef HAL_ADCEx_Calibration_Start(ADC_HandleTypeDef* hadc);

新しいバージョンのHAL関数では"uint32_t SingleDiff"という引数が追加されている。
この引数は,ADCの設定が「シングルエンドモード」「差動モード」どちらであるかを記述する必要がある。
引数はヘッダファイル内で定義されており以下である。

stm32fXxx_hal_adc_ex.h
#define ADC_SINGLE_ENDED                (0x00000000U)
#define ADC_DIFFERENTIAL_ENDED          (0x00000001U)

つまり,実際にコードとして書く場合は

main.c
// ADCユニット1 シングルエンドモードの場合
HAL_ADCEx_Calibration_Start(&hadc1, ADC_SINGLE_ENDED);

のようになる。

5. おわりに

I2C通信でカラーセンサから色を取得しているが,ずれが発生する事象が発生した。
マイコンへ電源供給をしているNucleoボード上のLDOをカラーセンサの電源としているので,ここの電圧が変化している可能性があった。
V_REFINTを利用したVDD測定を実施しようとしたところで今回の問題で躓いた。

大ハマりにはならなかったが,もしハマっている人の役に立ったら幸い。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?