2017/06/06

Arduino互換汎用データロガー 2017



4年目のArduino互換データロガー基板。第三世代ということで、今までのプロジェクトで載せたことのある機能を盛り込んで、独立動作する汎用的なオンボードコンピューターとして使えるようにしてみた。
スリープ機能を重視し、目標消費電流は平均3mW以下。


システムブロック図



 今回はATmega644PA/1284Pを8MHzで動作させて、3.3V単電源とした。
オンボードの機器として、MPU-9250とRTCに加えて、気圧センサ(MS5611)とシャントモニタ(INA226)を追加。

 外部電源出力は、この基板では主にGPSやUART接続の通信モジュール等の接続を想定している。
基板の電源と独立した2つのレギュレータを載せ、マイコンから個別に出力をONOFFできるようにした。 EN出力付きのレギュレータは、ロードスイッチとしても使うことができる。レギュレータの各種保護機能により、下流での電源異常時の波及故障を分離できるのも良い。 とショートモードばかり気にするお仕事の癖が出てしまった…。 いろいろな故障モードを発生させることで、システムは強くなっていく。

 また、SPI接続の各種ROMに対応。SO-8サイズのFlashROMやFRAMを搭載できる。
microSDカードでも、ブランド製品は初期化後アクセスしない期間の待機電流は100μA程度まで下がるが、大容量のデータを貯める必要が無ければ、オンボードのメモリは電力的に有利だ。


 初めて素子を45°配置してみたが、なかなかかっこいい。
基板はelecrowにいくつかの基板を一緒に発注している。発注して6日で届くので便利だ。(輸送はShenzenDHL)年々品質が上がっているような気がする。

 実装が一通り終わったところで、スリープモードに移行した場合の消費電流を調べた。
MPU-9250やINA226はデフォルトだと電源投入後すぐに動作を始めるため、何もしなくても数mA消費してしまう。こうしたセンサはパワーダウンを有効化するためにコマンド送信が必要だ。センサをシャットダウンすることで、基板全体での待機電流値は200μA程度にまで落ちた。

消費電流の調査(デバッグ)

200μAは小さいほうだけど、想定よりかなり多い。
ためしに設計的には共通な第二世代のロガー基板を使って同じコードを走らせたところ、こちらは79μAだった。実装途中のマイコンとレギュレーターだけ載せた基板でも200μAとなる。原因を探ると実装したレギュレーターの消費電力にあった。 試作で安く手に入る型番を使っていたけれど、これがかなり自己消費していた様子だ。

いつも使うLT1761に交換してみると、待機時の電流は72μAまで落ちた。一個で安いレギュレータが10個買える値段なのだけれど、逆電圧保護もあって良く使っている。 マイコン系統だけは自己消費の少ないものにするのが折衷案としてよさそうだ。TIのTPSシリーズでは500nAレベルのものもある。効率を目指すのであれば、昇降圧DC/DCも視野に入ってくる。

せっかくなので段階的に部品を実装しながら調べてみた。
マイコンは端子の初期化とデジタルICのスリープコマンドを送った後、WDTで指定時間経過で間欠駆動するコードを入れたもの。

レギュレータ無しで電源装置から3Vを与えたとき、
・ATmega1284P 8MHz 23uA
・ATmega644AP 8MHz 23uA

LT1761ES5を実装し、3.7Vで動作させたとき
・ATmega1284P 8MHz +LT1761ES5    45uA
・第三世代 フル実装基板     72uA

参考 第二世代基板(ATmega644AP 16MHz)
3.7V時 79uA
5V時    110μA

20μAほどは、RTCの動作電流、FlashROMやセンサの待機電流などが現れているようだ。
・ATmega1284P 8MHz +LT1761ES5    45uA
+MPU-9250                                       55μA (データシートでは8μA)
+MS5611                                          55μA

第二世代は5V系なので、第三世代で追加した機能以上に増えてしまっているようだ。第二世代まではArduino互換であることを重視していたので、電源系統は単純な常時供給としていた。

 RTCの割り込み出力はATmegaのINT2に接続されており、外部割込みをつかうことで、長期間にわたり正確なタイミングで動作させられる。
時折、GPSから時刻情報を得てRTCを補正するという運用なら、かなりの省電力化になる。
実験用に特小長距離無線機とGPSを組み込んだ例

2017/05/30

PIC32ブレイクアウト#2

以前試作したPIC32MM用ボードの修正板を実装してみた。

・SOSC用に32.768kHzの水晶をシリンダタイプに変更。
・ICSP端子を追加
・コンデンサの外形見直し。(10μFを1608へ)
・32MX1xxに対応。(2xxだとICSP端子のデータ、クロック線が使えないけど使うことはできる。)

PIC32MM

32MX1xx


 ピンヘッダつけてしまうと意外とめんどくさいので、いつか端面スルーホール処理にしてみたい。

 プロジェクトファイル置き場 https://github.com/kentN/PIC32-28P-Breakout

2017/05/15

簡易無電源環境光センサ

太陽電池を簡易的な環境光センサとして使ってみた。

CPC1822はとても小さな太陽電池セル。
透明なSO8パッケージに封入されたアレイで構成され、4V 50μA(6000Lux時)の発電能力を持つとデータシートにはある。残念ながらすでに生産中止品なので、部品屋に流通している分で販売終了のようだ。部品箱から発掘されたので、供養と称して特性を調べてみた。

  50μAで何ができるかといえば、アプリケーションとしては光検出、トリクル充電の電源といった用途になる。μAレベルの平均消費電力であれば、コンデンサを充電することでPIC12Fあたりを間欠駆動することもできそう。

光量センサとしては、無電源でADCに直結する簡易的な環境光センサとして使う事もできそうなので、簡単に実験してみた。


CPC1822のパッケージは向きが分かりにくいが、結線されている足は二つだけ。
シャント抵抗を取り付けて、I-V変換された電圧を読み取る。
(写真では100kΩを取り付けたときのもの)
Arduino(AVR系列)なら、基準電圧に1.1Vが使えるので、10kΩでシャントすれば直射日光下で余裕のあるレンジになりそうだ。

10kΩの抵抗を接続し、照度計と一緒に窓辺に置いて、端子間電圧を測定した結果が下記のグラフになる。曇り空のため、あるていど均一な光量が得られていた。

薄曇りの窓辺での計測結果 < 4000Luxまで


その後、雲間を通して直射日光が得られたので、変動の激しい中ではあるけど、プロットしてみた。


 34401Aにつないでシャント電圧を測定してみると、本来のデータシートの発電特性よりも4倍ほど高い電流値を示していた。負荷抵抗を外して直接電流計測しても4倍の電流が計測できている。 そういうものなのかな…。  6万ルクスで50μAが得られることになる。

 雲間の太陽光で計測した結果は、雲の動きが激しすぎて、プロット精度がとても落ちてしまった。快晴下で透過率を調節するのが理想かなぁ。
曇りのプロットと陽光下のプロットの傾きはやや異なる。セル自体はフィルタもないので、赤外線などの影響をかなり受けている。照度で測るなら、可視光帯域に調整された専用のフォトダイオードを使うのが良だろう。

照度計としては怪しいけど、光量センサとしては使える。発電量を刻々とモニタするという意味では役目を果たすので、機械が生き抜く感覚としては十分そうだ。

太陽電池をセンサだけにつかうのはもったいないので、普段は発電していて、時々電流値を測定できると、マイコンのADCのみで太陽電池の健全性確認ができる。
発電電流の大きな太陽電池だと、シャント抵抗に低抵抗が必要なので熱損失がかなり増える。一時的に負荷からセルを切り離し、FETで測定時のみ一時的にシャントする経路を設けておくとよさそう。