google-site-verification: google3bd66dd162ef54c7.html

アナログ気圧計2号機、文字盤作成

 アナログ気圧計2号機の製作は少しずつ進んでいて、基本的な部分の動作確認を行う段階まで来ました。

▼デバッグ中の気圧計
プログラムデバッグ中のアナログ気圧計
 左側のブレッドボードは3.3V/8Mhzで動く ATmega328P が乗っていて、Arduino IDEから Arduino pro として動かしています。気圧は右側のアナログ時計で表示させます。といってもこれではどう見ても気圧計には見えません。

 プログラムがかなり仕上がってきたので、そろそろ気圧計の文字盤を作ることにしました。気圧は時計の分針を使って表示させるのですが、以下のような仕様で動かすことにしました。

1. 気圧表示の範囲は 980~1035hPa (+α)
2. バッテリー電圧低下表示を行う

 ちなみに1号機の気圧表示範囲は980~1030hPaです。これでもほとんど問題は無いのですが、東京の最高気圧はごくまれに1030hPaを超えることがあって、スケールアウトしてしまうのでもう少し高い気圧まで表示させることにしました。
 下限は台風が直撃した時まで考えると、こんなものでは済みません。でも、台風の直撃なんてめったに無いし、気圧が大きく下がるのは数時間くらいのことなので、980hPaのままとしました。

 気圧の表示範囲を拡大し、更にバッテリー電圧低下表示を行うスペースを確保するためには、気圧のスケールを少し圧縮してスペースを開けないといけません。そこで、2号機では 1hPa を 50秒分のパルスで表示させることにしました。
 ちなみに1号機では 1hPa を時計の60秒(1分)で表示させています。こうすると秒針1回転がきっちり1hPaになるので1hPa以下の目盛りを付けることが可能になります。でも実際に作ってみると、風の影響などで0.1hPaくらいの気圧の変動は常にあるので、細かく表示させてもあまり意味はありませんでした。

 気圧は時計の分針を使って表示させます。時計の分針は3600秒で一回転するので、3600パルスで一回転する表示器として使うことが出来ます。なお時計のムーブメントは普通は正回転でしか使いませんが、この気圧計ではドライブ波形をいじることで逆転もさせています。

 話を文字盤作りに戻します。

▼文字盤製作の舞台裏
気圧計のスケールをエクセルで作図
 目盛りの作図が最大の難関です。ここはCADを使うべきなんでしょうが、そんなツールもスキルも持ち合わせていません。そこでエクセルのグラフで目盛りを作り、パワポで合成。その後、不要な部分をIrFanViewで修正した後に最後にパワポで文字入れという手順で文字盤のデーターを作りました。上の図はエクセルのドーナツグラフで目盛りの元絵を作っているところです。

▼文字盤
気圧計の文字盤
 もう少し改良したいと思っていますが、これが現在の文字盤データーです。電池が空になると下の赤い部分に針を移動させて電池切れを表示させる予定です。

 これを印刷して時計の文字盤と差し替えるとアナログ気圧計の誕生です。

▼気圧計の目盛りで表示
文字盤を作った
 まだ時計臭さが少し残ってますが、これで立派なアナログ気圧計の誕生です。暫定のプログラムを入れているので気圧計として動く状態になっています。

 完成までに残っている作業は、回路をユニバーサル基板で作って適当なケースに入れることと、プログラムの仕上げです。この辺も凝りだすとキリが無いので、ほどほどのところで切り上げようと思っています。

 しかしいつになったら完成するのやら。

アナログ気圧計2号機、電源供給方式の検討(2)

 アナログ気圧計作りの話の続きです。調査や検討ばかりやっていて、具体的な製作がなかなか始まらないのですが、元の方針がまずいと後で困るので、ここはじっくりとやりたいと思います。というのは表向きの話で、実はあまり時間がとれません。

 気圧計の電源供給方式については以前の記事で検討したのですが、まだ気になる点が残っています。それは電池電圧が下がった場合の挙動です。2号機では電池電圧の低下を検出して気圧計を安全に停止させる予定ですが、電圧がどれくらい下がったら停止処理をしないといけないか調べておく必要があります。それと、前回の検討に入っていなかった昇圧DC/DCコンバーターを使った場合についても調べることにしました。

 まずは前回の検討で決めたシリーズレギュレーターを使う方式です。

▼シリーズレギュレーターを使う案
案2
 電源は単三電池3本を使います。流す電流によって変わってきますが、入力電圧は出力電圧+200mV以上が必要とされています。データーシートを疑う訳では無いですが、念のために実際の回路で確認してみます。なお、負荷には気圧センサーを周期的に起動するプログラムを入れた回路を使います。また測定は回路が待機中、つまりパワーダウンの時に行っています。なお、待機時の電流は約33μAです。あと、シリーズレギュレーターは秋月で手に入るXC6202P332TB(3.3V150mA)を使いました。

▼入力電圧vs 出力電圧
LOD出力電圧
 入力電圧3.4Vまではほぼ一定の出力電圧になっています。それ以下では電源の電圧がそのまま出力に現れる状態になるようです。だったら、3.0Vくらいまで使えるといいなと思ったのですが、、、

▼入力電圧 vs 入力電流
入力電流
 電源電圧が下がると消費電流が増えています。ここまではデーターシート通りなのですが、このグラフに示した範囲を超えてもっと入力電圧を下げると、電流がミリアンペアオーダーに跳ね上がってしまいました。(このグラフにはプロット出来ませんでした) これでは危なくて入力電圧3.0Vなんて領域は使えません。
 ちなみにデーターシートに書かれているグラフでは供給電圧を下げても、なだらかに電圧・電流が変化するように書かれています。これはたぶん一定の負荷条件の場合の特性ではないかと思います。今回の気圧高度計では待機時 (33μA) と動作時(3mA)で一気に100倍近く電流が変化するため、回路が変な状態にはまるのでは無いかと思います。(ひょっとしてこの石はパチ物かも)

 出来るだけ低い電圧まで動かして電池の容量を使い切りたいと思っていたのですが、どうも3.4Vあたりが限界のようです。

 ちょうど良い機会なので昇圧DCDCコンバーターを使った場合の特性も測定してみました。

▼昇圧DDコンを使った場合
案3
 この場合は電池2本で済みます。

▼昇圧DCDCコンバーターで実験
昇圧DDコンで実験中
 右の6ピンのモジュールがテストしたDC/DCコンで、3.3V出力コイル一体型昇圧DC/DCコンバーター(XCL1010331BR-G)です。このモジュールの5V版の特性を以前測定したことがありますが、小出力時でも効率がそこそこ良かったです。

 ということで測定した結果が次のグラフです。

▼入力電圧電流特性
昇圧DDコン
 1V~3Vと広い入力電圧範囲で動作しています。新品の電池2本使って電源電圧が3Vなら消費電流は49μAで、なかなか良好な結果だと思います。ただ、入力電圧の低下と共に消費電流も増加しますが、これは原理的に仕方ないです。

◆シリーズレギュレーターか昇圧DC/DCコンバータ、どっちでいく?
 シリーズレギュレーターを使った場合は電池3本使いますが、昇圧DC/DCコンバーターでは2本で済みます。電池1本当たりの連続動作時間ということを考えた時、昇圧DC/DCコンバーターを使った場合は、シリーズレギュレーターを使った場合より1.5倍の電流が流れても経済性は同じと考えることが出来ます。
 この考え方を適用すると、シリーズレギュレーターを使った場合の消費電流は33μAなので、昇圧DCDCコンバーターの消費電流が1.5倍の49.5μAだったら勝負は互角と考えることができます。

 ここで昇圧DC/DCコンバーターの測定結果を見ると、電池が満タン(電圧3V)なら消費電流は約49μAとなっているのでこの時点では勝負は互角です。但し、DCDCコンバーターは電池電圧の低下に伴い消費電流はどんどん増えるのでこの点では劣っています。但し、電源電圧が1V(一本当たり0.5V)あたりまで低下しても動作するので、電池の容量を使い切ることが出来てその点では優れています。ということで一長一短があり甲乙つけ難いです。

◆まとめ
 昇圧DC/DCコンバーターで行くかLDOレギュレーターで行くか決めないといけませんが、悩ましいところです。まあいつまでも悩んでいても仕方がないので、今回は絶対的な連続動作時間を重視して、電池3本使ったLDOレギュレーター方式を採用することにします。これなら3年以上動くはずなので、Arduinoを電池で動かすアプリの最長記録になるかも知れません。

アナログ気圧計2号機、気圧センサーLPS25Hの設定

 時計の長針で気圧をアナログ表示させる気圧計作りの話の続き、今回は気圧センサーのLPS25Hを動かすプログラムを作ります。
 以前高度計を作った時にLPS25Hを使ったので、その時のプログラムが流用出来ると思っていたのですが、以前作った物はSPIインターフェイスで動かしていました。今回はI2Cで動かす予定なのでそのままプログラムを流用することは出来ません。また、今回は電池で長期間動かすために消費電流を極限まで少なくなるように設定する必要があります。

 ということで、LPS25HをI2Cバスに接続してテスト開始です。

 ところで、I2Cインターフェイスの部品でトラブルがあった場合まずは、I2Cインターフェイスの問題かデバイス自体の問題か切り分ける必要があります。そこでハードの接続が終わったら最初に、I2Cdetect I2Cdump のプログラムを使ってI2Cバス経由でデバイスと正常に通信出来ているか確認しておくと安心です。ということで、私の作ったプログラムの宣伝でした。

 ともかくI2Cバスが正常に動いていることが確認出来たので、LPS25Hの設定を開始します。

▼プログラムの条件を変えてあれこれテスト
デバッグ中
 ミニオシロ(DSO Shell)でI2Cバスを見ながらプログラムの設定を変えていきました。

 出来るだけ少ない消費電流になるようにLPS25Hを設定します。そのためのポイントは、
1) 待機時はパワーダウン状態にして消費電流を減らす。(これで消費電流は0.5μAになるはず)
2) 上記の条件で動かすためにワンショットモードで使用。
3) アベレージング効果と処理時間のバランスを取る。なお、FIFOは使わない。

 上記の1)、2)項はPDビットとONESHOTビットを使えばOKなはずです。またワンショットの開始と完了確認方法についてはアプリケーションノート AN4450 Application note Hardware and software guidelines for use of LPS25H pressure sensor の4.3 One-shot mode measurement sequence に記載されていた手順で行うことにしました。

 気圧測定のアベレージング回数は8回、32回、128回、512回の4種類が指定出来ますが、各々の設定を行った場合の測定結果のバラツキ(標準偏差)と処理時間の関係を調べると結果は以下のようになりました。なお、標準偏差は測定を200回行った結果から求めたものです。
AVGP1AVGP0アベレージング回数測定結果の標準偏差(hPa)処理時間(ms)
0080.1457.7
01320.08279
101280.046115
115120.0370138
 注:上記の処理時間には測定条件の設定なども含んでいます。

 アベレージング回数を増やすと標準偏差は減りますが、処理時間は増えていて、まあ予想通りの挙動です。ともかくアベレージングはうまく行われているようなので一安心です。

 今回作る気圧計は表示の更新に1秒くらいの時間は必要で、測定(アベレージング)に38msかかってもゴミみたいなものです。ということで、測定ばらつきを少しでも小さくするためにアベレージング回数は最大の512回でいくことにします。

 こう書くと順調に調査が進んだように見えますが、実際には不可解な現象が発生して解決に手間取りました。その現象というのは、繰り返し測定を行っていると突然測定結果がプラス方向に0.5hPa程度ホップするというものです。グラフにすると下記のような現象です。

▼気圧の測定結果が時々上にホップする
気圧測定結果異常
 一度ホップするとしばらく同じ状態が続きます。またこの現象はランダムなタイミングで発生するみたいでした。

 いろいろ調べたのですがこの現象の解決方法は判りませんでした。ひょっとしてこのセンサーの個体の問題かと思って、別の物に組み込んでいたLPS25Hを取り外して試してみると問題は起こりません。

▼LPS25H 右がダメ、左がOK
LPS25H

 センサーが不良なのか、まだ何か設定の問題があるかも知れませんが、解決に時間がかかりそうなので、問題の無い方のセンサーを使うことにしました。これ安易な解決方法なので後で問題が再発しないか一抹の不安がありますが、ともかく先に進むことにします。

 次は消費電流の確認です。

 待機中はLPS25Hをパワーダウンモードに入れているので消費電流は極小になるはずです。データーシートでは 0.5μAになると書かれていますが本当にそうなっているか実測で確認してみました。

▼全体の消費電流
待機時消費電流
 これは5V→3.3VシリーズレギュレーターとCPUのAtmega328P、さらにこの気圧センサ(LPS25H)の消費電流の合計の値です。33.27μAなのでこれなら大丈夫そうです。
 ちなみに大雑把な内訳としては、シリ-ズレギュレータが5μA、CPUが28μA、気圧センサが0.5μA消費しています。

 実はここでもちょっとした落とし穴があって、最初は気圧センサのパワーダウン中の消費電流が6.5μAもありました。データーシートによるとパワーダウン中の消費電流は0.5μAとなっているので10倍以上も多くてちょっと納得がいきません。

 ということで調べてみると、I2Cアドレスの選択ピン(SA0)をLowにすると消費電流が増えることが判りました。たぶんこのピンは内部で抵抗でプルアップされていて、SA0をLOWにすることで電流が流れ続けるのだと思います。
 対策としてSA0をHighにして使ってみると消費電流は仕様通り0.5μAまで減らすことができました。たぶんプルアップ抵抗に無駄な電流が流れなくなったのだと思います。ともかくそんな事情があるので、LPS25HのI2Cアドレスは0x5Dで使うことにしました。
 なお、6.5μAなんてゴミだからケチケチするなと言われそうです。でも一年間では57mAhになり、ボタン電池の容量くらいの電流量に匹敵するのでバカにはなりません。

◆まとめ
 今回の記事は図が無くて文章でゴチャゴチャと書いて判り難くなってしまいました。ともかくこれで気圧センサーの設定方法は判りました。

 あと残るのは電池電圧の検出方法と電池が空になった時の表示をどうするかです。そのあたりの話は次回の記事で触れる予定です。
カレンダー
03 | 2017/04 | 05
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 - - - - - -
プロフィール

ラジオペンチ

Author:ラジオペンチ
電子工作を中心としたブログです。たまに近所(東京都稲城市)の話題など。60過ぎて視力や器用さの衰えを感じつつ日々挑戦!
コメントを入れる時にメールアドレスの記入は不要です。なお、非公開コメントは受け付けていません。

記事が気に入ったらクリックを!
最新記事
カテゴリ
最新コメント
リンク
FC2カウンター
検索フォーム
月別アーカイブ
RSSリンクの表示
QRコード
QRコード