AVR0/1シリーズで省電力な光センサーを作ってみた。

以前にATtiny10で光センサーを作ってみたが、

ATtiny10で光センサーモジュールを作ってみた。

デジタル入力回路で貫通電流が流れてしまうのが気になっていた。(壊れはしないけど...)

アナログコンパレータで解決できるがATtiny10は基準電圧が内臓されておらず外付け回路が必要となってしまうので基準電圧内臓かつさらなる省電力化を行えそうなものを調べてみると秋月電子でATtiny10の次に安いATtiny202(AVR0)が目に留まった。

AVRマイコン ATTINY202-SSNR

ATtiny10と比較するとピン数/メモリ容量/周辺機能/クロックの全てがスペックアップしていながら20円しか違わない。この価格帯では最強のCPUと言えそうだ。ちなみにデータシートを見る限りAVR0/1シリーズであればピン割り当てが違うだけで同様に使えるようだ。

【注文したATtiny202が届くのを待つ間にATtiny1614で試験してみた】
基準電圧の低さとか入力インピーダンスの高さが影響してるのか暗いほうの感度が以前の物よりかなり良い感じだ。

今回の電流測定のためにNordic Power Profiler Kit 2 (PPK2)を初めて使ってみたがデザインも洗練されていて使いやすくて超お勧めだ。

欲を言えばnsオーダーで計測したいときもあるけど普段使いとしては必要十分。nRF52840でこんなの作れるなんて開発者のセンスが眩しすぎるぞ!(-_-;)

Nordic Power Profiler Kit 2

mouserには在庫があるので購入可能。

【全体的な電流値】
ATtiny1614での測定結果。ATtiny202でも同様な結果となるがピーク電流が460uAと結構低かった。単なる個体差かな?

【スタンバイスリープのための一時的なクロックアップ時の電流変化】
測定結果から851.83uA x 258us / 82uA = 2680us以上待つときはビジーループよりスタンバイスリープのほうが消費電流が少ないという結論になる。

【スタンバイ・スリープ時の平均電流】

【ビジーループ時の平均電流】

【回路】
シンプルかつ点灯も可能な回路になっているが今のところファームウェアの点灯対応はなし。LEDは普通の安物でOKだが色などにより感度がだいぶ違うようなので色々試してみたほうが良い。

今回の回路は、アナログコンパレータの出力がそのままGPIOへ出力されるようになっている。パルスのON時間(最低1ms)をアプリ側で計測することで明るさが判断でき、明るい時は短いパルス、暗い時は長いパルスとなる。

省電力化のためCPUは内臓の32KHzRCクロックで駆動しスタンバイ・スリープでタイミング待ちするようにしてみたところ平均電流を65uA程度まで落とすことができた。

【修正履歴】
2023-12-28
改良版を作ってみたので興味のある方はどうぞ!
AVR0/1シリーズで省電力な光センサーを作ってみた。(改良版)

ACのVREFを0.55Vから1.1Vに変更。ACのVREFが0.55Vでは不安定っぽくなるようだ。LEDもダイオードなのでなんとなくわかる気も...

【ファームウェア(Microchip Studio)】
ファームウェアはかなりトリッキーな作りになっている。スタンバイ・スリープで動作可能な周辺機能(AC/RTC/GPIO)だけを使っているがACはスタンバイ・スリープ中の割込みに対応していないためAC出力ピンのGPIO割込み機能を利用して復帰させていること、32KHzクロック駆動時にRTCの同期がとれないため一時的に20MHz駆動に切り替えていること、選択したACのAINPn入力ピンのデジタル出力が禁止されないことなどに依存している。

【関連投稿】
AVR0/1シリーズで省電力な光センサーを作ってみた。(改良版)