Embedded Test 07 · アナログ周辺とセンサ — ADC・DAC・PWM と実世界の注入

Chapter 07

アナログ周辺とセンサ — ADC・DAC・PWM と実世界の注入

この章のゴール.

ADC・DAC・PWM・アナログセンサという「実世界との境界」を、 信号を注入し反応を観測することでテストでき、 校正・非線形性・タイミングのオラクルを立てられるようになること。

この章で使う既出の用語(定義は各リンク先). USB(01 章 2 節)、アナログ(01 章 2 節)、オラクル(01 章 8 節)、デバッグポート(01 章 2 節)、判定(02 章 1 節)、電源(02 章 2 節)、オシロ(04 章 8 節)、ロジックアナライザ(04 章 1 節)、UART(05 章 1 節)、I²C(06 章 1 節)、エラー処理(06 章 6 節)

1. 実世界との境界を試す

MCU は、温度・光・音・電圧・電流・角度といったアナログ量を ADC で読み、PWM や DAC でモーター・LED・音を駆動する。 デジタルバス(06 章)が「MCU と IC の会話」なら、アナログ周辺は「MCU と物理世界の会話」である。 ここをブラックボックスで試すには、物理世界の側を電気的に模擬する——本物の温度を変える代わりに、温度センサが出すはずの電圧を注入する。

物理世界の代わりに「センサが出すはずの電圧」を注入するDAC / 可変電圧源偽の電圧を作るMCU の ADC電圧→数値判定境界での挙動を見る下限外上限外正常範囲0・最小・最大・範囲外・急変を掃引し、クリップ/飽和/校正のずれを確かめる
図7-1 アナログ入力の境界テスト。

2. ADC 入力を試す — 電圧を注入する

MCU の ADC 入力ピンに、既知の電圧を与えて、ファームがそれをどう読むかを観測する(UART の状態表示、無線での報告、LED など)。

注入方法特徴
可変抵抗(ポテンショメータ)手軽。手で電圧を振る
DAC(USB-DAC、マイコンの DAC、pyvisa 制御の電源)精密・自動化可。掃引(ramp)や既知パターンを与える
信号発生器交流・波形。音声や振動センサの模擬
抵抗分圧・ブリッジ模擬サーミスタ・ロードセルなどの模擬

観測して作るオラクル:

# DAC で電圧を掃引し、機器の報告値と照合(骨格)
for v in [0.0, 0.5, 1.0, 1.5, 2.0, 2.5, 3.0, 3.3]:
    dac.set_voltage(v)
    time.sleep(0.2)
    reported = read_reported_value()          # UART/BLE 等で取得
    expected = v / 3.3 * 100                   # 例: 0–3.3V を 0–100 % に
    assert abs(reported - expected) < 2, f"{v}V で誤差大: {reported} vs {expected}"

3. PWM・DAC 出力を試す — 駆動を観測する

MCU が出す側(LED 調光、モーター、音、アナログ出力)は、オシロやロジックアナライザで観測する。

PWM はデューティ比(オンの割合)で出力の強さを表す25%50%75%指令→出力の遅延、複数出力の同期(14 章)、そして指令範囲外や通信断で出力が安全側(停止・既定値)に倒れるか=フェイルセーフを観る
図7-2 PWM のデューティ比と安全側挙動。

4. センサ全体をなりすます

06 章の「偽 I²C センサ」のアナログ版。センサの出力信号そのものを治具で作る。

AI 生成のセンサ処理コードは、断線・ノイズ・範囲外を想定していないことが多い。ここは意図的に厚くテストする(16 章)。

5. 出力から実世界の量を測り返す

機器が実世界に何かする(光る、鳴る、動く、熱を出す)なら、その物理量を測ってオラクルにする。

出力測る道具
光(LED・ディスプレイ)フォトダイオード・照度計・カメラ(点滅パターンの自動判定)
音(ブザー・スピーカー)マイク + FFT(周波数・パターン)。エフェクター編の周波数解析の考え方がそのまま使える
動き(モーター)光学式タコメータ、エンコーダ、加速度計
温度熱電対・サーモカメラ
力・圧力ロードセル

「LED が 1 Hz で点滅」「ブザーが 4 kHz」「モーターが 3000 rpm」——物理量を数値で捉えれば、自動判定できる。

6. 何をオラクルにするか(まとめ)

7. 手を動かす

電圧を掃引して校正を確かめる


この章のポイント