Web制作、Web開発の歩き方

STM32入門(組み込み開発)

■第4話:実践的な周辺機能1 -タイマーとセンサー, ADCの活用-

(最終更新日:2025.01.20)

C言語のイメージ
この記事は6分で読めます!
(絵が小さい場合はスマホを横に)

「センサーから効率的にデータを取得しよう!」

今回は、マイコンにおける周辺機能の活用法として、センサーの接続方法やデータ取得手法、 さらにADC(アナログ-デジタル変換)のシーケンス動作について解説する。 センサーからのデータ取得は、多くの組み込みシステムで重要な役割を果たす。 ADCを用いることで、アナログ信号をデジタル化し、効率的に処理することが可能になる。 また、複数の入力信号を順次変換するシーケンス動作やDMAを組み合わせた応用も取り上げ、実践的な実装方法を詳述する。


1.タイマーの活用法

タイマーは、マイクロコントローラー(MCU)で時間や周期的なイベントを管理するための基本的な周辺機能だ。 本項では、タイマーの基本動作、設定方法、PWM出力、ADC(アナログ-デジタル変換)との連携について詳しく解説する。

タイマーはクロック信号を基にカウントアップまたはカウントダウンする仕組みだ。 主に「イベント間隔の計測」「一定周期での割り込み処理」「周波数生成やパルス幅制御」に使用される。 タイマーの動作を制御する基本的な設定項目は以下の通りになる。

プリスケーラ設定
タイマーの入力クロックを分周してカウント速度を調整する。 例えば、48 MHzのクロックを持つタイマーでプリスケーラを47999に設定すると、カウント速度は1kHz(1ms間隔)になる。

カウンタ値の設定
タイマーがカウントする最大値(または比較値)を設定する。 この値に到達するとタイマーがリセットされ、必要に応じて割り込みが発生する。

割り込み設定
タイマーが指定のカウント値に到達した際に割り込みを発生させるように設定できる。 割り込み内での処理を記述することで、定期的なタスクを実行できる。

以下に、STM32でのタイマー設定例を示す。

STM32でのタイマー設定例

2.PWM出力の利用

PWM(Pulse Width Modulation)は、デジタル信号のデューティ比を制御することでアナログ的な動作を実現する技術だ。 主な応用例に「モータ制御(速度やトルクの調整)」「LEDの輝度調整」「オーディオ信号生成」などが挙げられる。 PWMは、以下のような基本構造を持つ。

  1. タイマーの出力ピンを指定(例えば、TIM2_CH1)
  2. 周期(Period)を設定し、PWM信号のベースとなる周波数を定義
  3. デューティ比(Pulse)を設定してON/OFFの比率を調整

以下にPWMの設定例を示す。基本構造を備えている。

PWMの設定例

3.ADCの使い方とセンサーの接続と値の取得

ADC(Analog-to-Digital Converter)は、アナログ信号(連続的な電圧値)をデジタル信号(離散的な数値)に変換する周辺機能だ。 ADCを使用することで、温度センサー、光センサー、圧力センサーなどから取得したアナログ信号をマイコンで処理できる。 応用例としては、温度計測、光強度の計測、音声信号のデジタル化、電圧モニタリングなどが挙げられる。

センサーの種類に応じて適切に接続する。ここでは、アナログセンサーを例に取る。 アナログセンサーの基本接続は以下の手順を踏む。

  1. 信号線(VOUT): マイコンのADC入力ピンに接続(例: STM32のPA0ピン)
  2. 電源(VCC): センサーが動作する適切な電圧(3.3Vや5V)を供給
  3. GND: マイコンのGNDに接続

ADCによるデータ取得の流れとしては、 ADCチャネルの選択(使用するADC入力ピン(チャネル)を指定。例: PA0を使う場合はADC_CHANNEL_0)、 変換の開始(ADCの動作を開始し、アナログ信号をデジタル値に変換。必要に応じて連続変換モード(Continuous Conversion)や単発変換モードを選択)、 取得した値の処理(ADCで得たデジタル値を電圧に変換し、物理量(例: 温度)に換算)になる。

下記に実装例として、LM35温度センサーを取り上げる。 LM35は、温度に比例した電圧を出力するセンサーになる。25度で0.25Vになる。

LM35温度センサーの実装

4.ADCのシーケンス動作
ADCのシーケンス動作は、複数のアナログ入力ピンを順次スキャンしてデータを取得する機能だ。 これにより、複数のセンサーやアナログ信号を効率的に処理できる。 例えば、温度センサーと光センサーを同時に測定したり、複数の電圧を一括で監視したりできる。

シーケンス動作は以下の設定を行う。

  1. チャネルの順序を設定: 測定する各チャネルを登録し、順序を指定する
  2. 連続変換モードの設定: 必要に応じて連続変換を有効化する
  3. DMAの活用: シーケンス動作の結果をDMA(Direct Memory Access)で自動的にメモリに転送し、CPUの負荷を軽減できる

以下は、ADCを使い、2つのアナログ入力(PA0とPA1)をシーケンス動作で変換する例になる。

複数チャネルのシーケンス動作

DMAを用いることで、ADC変換結果を自動的にメモリに転送できる。adcBuffer(メモリ)に変換結果を格納できる。

DMAを活用したシーケンス

まとめると、ADCを用いることでアナログセンサーのデータをデジタル化し、物理値に変換できる。 シーケンス動作により、複数のアナログ信号を効率的に測定可能になる。 DMAを併用することで、CPUを介さずメモリに変換結果を直接保存することで、処理効率をさらに向上させることができる。

5.まとめ

今回は、センサーの接続方法とADCを活用したデータ取得、さらにADCのシーケンス動作について詳しく解説した。 センサーを利用する際には、適切な接続や設定が重要であり、特にアナログセンサーではADCによる正確なデジタル変換が求められる。 具体例としてLM35温度センサーを用い、電圧計算や物理値変換のプロセスを紹介した。 また、複数チャネルを効率的に処理するためのシーケンス動作や、DMAとの組み合わせによる負荷軽減方法を取り上げた。 これらの技術を活用することで、センサーからのデータ取得や処理を効率化し、より高度な組み込みシステムの開発が可能となる。 本セクションで学んだ知識は、実践的な開発における重要な基盤となるだろう。

▼参考図書、サイト

STM32マイコン公式日本語サイト  STマイクロエレクトロニクス
 「WindowsではじめるSTM32」 インプレスR&D 山本 小鉄
Q&Aで学ぶマイコン講座(64) HAL(ハードウェア抽象化レイヤー)って何?   EDN Japan