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と組み合わせることで高効率な測定が可能
組み込み開発では非常に利用頻度が高く、センサや電源監視を扱う際の基礎となる重要な機能である。