コンテンツにスキップ

ADC

ADCとは

ADC(Analog to Digital Converter)は、アナログ信号をデジタル値へ変換する機能である。

マイコンは基本的に

0
1

のみを扱うことができる。

しかし実際のセンサは

0.0V
1.2V
2.5V
3.3V

のような連続的な電圧を出力する。

ADCはその電圧をマイコンが扱える数値へ変換する役割を持つ。


なぜ必要なのか

例えば可変抵抗器を接続した場合、

0V ~ 3.3V

の間で電圧が変化する。

しかしSTM32は電圧を直接理解できない。

そこでADCを利用して

0V → 0

1.65V → 2048

3.3V → 4095

のようなデジタル値へ変換する。


アナログ信号とは

アナログ信号とは連続的に変化する信号である。

  • 温度
  • 光の強さ
  • 電圧
  • 電流

0.1V
0.2V
0.3V
0.4V
...

のように無数の値を取ることができる。


デジタル信号とは

デジタル信号は離散的な値で表現される。

0
1

0
1
2
3
...
4095

などである。

マイコン内部では全てデジタル信号として処理される。


ADCの仕組み

ADCは入力された電圧を一定数の段階に分割する。

例えば

0V ~ 3.3V

0 ~ 4095

に変換する。


イメージ

入力電圧

0V ---------------- 3.3V

↓ ADC変換

0 ---------------- 4095

分解能

ADCには分解能という概念がある。

STM32では一般的に

12bit ADC

が利用される。


12bitの場合

2^12 = 4096

段階に分割される。

そのため取得できる値は

0 ~ 4095

となる。


電圧とADC値の関係

基準電圧を

3.3V

とした場合、

ADC値は以下で求められる。

:contentReference[oaicite:0]{index=0}

電圧 ADC値
0V 0
0.825V 約1024
1.65V 約2048
2.475V 約3072
3.3V 4095

ADC値から電圧を求める

取得したADC値から電圧を求めることもできる。

:contentReference[oaicite:1]{index=1}


ADC = 2048

Vref = 3.3V

の場合

約1.65V

となる。


サンプリング

ADCは瞬間的な電圧を測定する。

これをサンプリングという。


1秒間に100回測定

なら

100Hz

でサンプリングしていることになる。


ノイズ

ADCは非常にノイズの影響を受けやすい。

例えば入力が一定でも

2048
2049
2047
2048
2050

のように変動することがある。


ノイズ対策

代表的な方法

平均化

複数回測定して平均を取る。

value =
(adc1 + adc2 + adc3 + adc4) / 4;

コンデンサの追加

入力付近にコンデンサを配置することでノイズを減らせる。


GND設計

適切なGND設計を行うことで測定精度が向上する。


STM32での利用

CubeMXでADCを有効化するだけで利用できる。

設定例

ADC1

12bit

Single Conversion

コード例

ADC開始

HAL_ADC_Start(&hadc1);

変換完了待機

HAL_ADC_PollForConversion(
    &hadc1,
    100
);

値取得

uint32_t value;

value =
HAL_ADC_GetValue(&hadc1);

DMAとの組み合わせ

ADCはDMAと非常に相性が良い。

通常

ADC
 ↓
CPU
 ↓
メモリ

となる。


DMAを使うと

ADC
 ↓
DMA
 ↓
メモリ

となりCPU負荷を削減できる。

高速サンプリングではほぼ必須である。


Asterでの利用例

Asterでは以下のような用途で利用できる。

  • バッテリー電圧監視
  • 電流測定
  • 可変抵抗入力
  • アナログセンサ
  • 温度センサ

バッテリー

↓ 電圧分圧

ADC入力

↓ 変換

STM32

注意点

ADC入力範囲を超えない

STM32のADC入力は通常

0V ~ 3.3V

である。

これを超えると故障する可能性がある。


電流は測れない

ADCが測定できるのは電圧のみである。

電流を測定する場合はシャント抵抗などを利用して電圧へ変換する必要がある。


基準電圧が重要

ADCの精度は基準電圧の精度に大きく依存する。


まとめ

ADCはアナログ信号をデジタル値へ変換する機能である。

  • 電圧を数値化できる
  • STM32では12bit ADCが一般的
  • 0~4095の値を取得できる
  • センサや電圧監視に利用される
  • DMAと組み合わせることで高効率な測定が可能

組み込み開発では非常に利用頻度が高く、センサや電源監視を扱う際の基礎となる重要な機能である。