STM32マイコンでスイッチON/OFFを検出する
マイコンSTM32L101F4P6について
低消費電力を狙ったマイコンSTM32L101F4P6を使って、電池駆動により長期間スイッチの状態を監視する方法を考えてみました。STM32L010F4P6は秋月電子で安価に入手できるARM Cortex-M0を使用した32bitマイコンです(写真1、https://akizukidenshi.com/catalog/g/gI-15689/)。今回はSTM32L010F4P6の低消費電力という特性を生かして実現する例を紹介します。
実現イメージ
ドアの開け閉めに応じてON/OFFするスイッチを監視することを考えます。このスイッチのON/OFFの状態変化を検出して、ON→OFF、OFF→ONに変化したときにその状態をLPWAなどの無線を使って通知する応用を考えています。今回はスイッチの状態変化を待ち受ける部分を実現します。待ち受ける間はスタンバイモードを使用して、数uAまで待機電流を低減させ、電池で長期間駆動できるようにします。
実現における課題
本マイコンのデジタル入力にスイッチを接続するときには以下の課題があります。
(1) スタンバイモードを使用する時には外部からのWakeUp信号を入力するピン(WakeUpピン)を定義します。ところがWakeUpピンへのWakeUp信号として立上り、立下りのどちらか一方しか設定できないというハードウェア的な制約があります(https://community.st.com/t5/stm32-mcu-products/waking-up-from-stand-by-mode-with-both-rising-and-falling-edge/td-p/280456)。つまり1つのWakeUpピンでWakeUp信号の立上り、立下りの両方を捉えることができません。
(2)スイッチのチャタリングによる不要なWakeUp信号の立上り、立下りを除去する必要があります。
(3)スイッチが継続してON状態となるときにはスイッチを介して電源からGNDに電流が流れます。低消費電力化のため最小限の電流に止める必要があります。
STM32L101F4P6のモジュール化
本マイコンは20ピンのTSSOPパッケージ形状をしています。そこでピッチ変換基板(https://akizukidenshi.com/catalog/g/gP-10497/)を使用してブレッドボードで使用できるようにします。またピッチ変換基板上に電源バイパス回路、リセット回路もいっしょに組み込みました。マイコンモジュール回路図を図1に、外観を写真2に示します。


課題解決方法とスイッチ回路
課題(1)の解決方法
本マイコンは幸いWakeUpピンを2本定義できるようになっています(図3のSYS_WKUP1、SYS_WKUP3)。この2本を使って、それぞれWakeUp信号の立上り、WakeUp信号の立下りを拾えるようにします。1本にスイッチのON/OFF信号を加え、もう1本に反転させたON/OFF信号を加えるようにして、立上り、立下りの両方を拾えるようにしました。
課題(2)、(3)の解決方法
ドアの開け閉め動作を検出するという目的から、スイッチが高速にON/OFFされることはない点に着目して、スイッチ入力部にコンデンサC、抵抗Rによる遅延回路を設けました。これによりチャタリングによって生じる短いパルスを吸収できるようにしました。またCをゆっくり充放電すればよいのでRを大きく選び、スイッチON時に電源からGNDに流れる電流を極力小さくするようにしました。なお2本のWakeUpピンにはシュミットトリガバッファにより成形した信号が加わるようにしています。上記によるスイッチ回路を図2、スイッチON→OFF時の信号波形を写真3、スイッチOFF→ON時の信号波形を写真4に示します(各波形を取得した箇所は図2に示す)。

.jpg)
.jpg)
ブレッドボードでの実装
図2の回路をブレッドボード上に実装します。開発環境にはSTM32CubeIDEを使用し、回路図に合わせて図3のようにピンを定義します(システムクロックは低消費電力化のためSTM32CubeIDEのClock Configuration画面で4MHzに低減)。「図4_WakeUp時に実行されるコード」、「図5_起動中に実行されるコード」のようにファームウェアを作成し回路が以下のように動作するようにします。
(1)電源ON(稼働状態)・・・LEDが0.5秒毎に点滅を繰り返すマイコン稼働状態となります。
(2)スタンバイSW押下・・・マイコンがスタンバイ状態となりLEDが消えます。
(3)監視対象SW(OFF→ON)・・・LEDが短く点滅しマイコンがスタンバイ状態から電源ON(稼働状態)に戻ります。



なお監視対象スイッチには手持ち部品の都合上、タクトSWを使用しましたので、ON/OFF状態を保持することができません。そこで監視対象SWを押したままスタンバイSWを押し、スタンバイ状態になった後、監視対象SWを離すことで監視対象SW(ON→OFF)を実現します。写真5にブレッドボードに実装した様子を示します。

消費電流の様子
電源ON(稼働状態)での電流測定の様子を写真6に示します。稼働状態では図5に示すLED点滅やスタンバイSWの監視などを行っており、約500uA流れています。一方スタンバイSW押下しマイコンがスタンバイ状態となったときの電流測定の様子を写真7に示します。スイッチ回路やシュミットトリガインバータに流れるわずかな電流も合わせて2.4uAに低減されています。


今後の課題
本マイコンにはシリアル入出力が2系統ありますので、そのうち一つをLTE-Mモジュールとの通信に割り当てることで、遠隔での監視を実現したいと思います。