第3回

アナログ計測入門!
電池の電圧計測




はじめに

前回は、デバイスの選定理由や、Web Bluetooth APIに簡単に触れ、第1回目で実際に使用した回路についての解説を行いました。今回は、回路やプログラムに変更を加えて応用を行います。また、アナログデジタル変換についても、もう少し触れていきたいと思います。

 


Notifyの追加

前回使用したソースコードに少し改変を加え、「Notify」の機能を付け足していきます。

前回のサンプルコードでは、データのReadを単純に繰り返す動作をMac側(Central側)で行いました。

図1, 前回のサンプルコード

 

Notifyの機能は、デバイス側(Peripheral側)にデータの変化があった場合にデータを受信します。Readでこの処理を行う場合、時間を指定(10秒に1度など)してデータを受信することも可能ですが、Notifyを使用すると、データに変化があった場合にデータを取得することが可能となります。

図2, 今回追加したNotify機能のコード

 

Notifyを使用する際は、Start Notifyのボタンを押すとNotify機能がONになります。

図3, ブラウザ上で表示したサンプルコード

 

Readの処理のコードは、前回のサンプルの繰り返しRead部分をコメントアウトしています。今回のサンプルでは、Readの際は、1度だけReadします。

図4, 今回のサンプルのRead機能のコード

 


Batteryの電圧値を表示させる

前回は、Battery Levelとして、電池の電圧を可変抵抗器で変更を加え、電圧を表示しましたが、今回はBLE Nanoに実際に使用している電池の電圧を表示してみます。

回路の接続を以下のように変更します。

図5, 電池の電圧値計測の回路図

 

図6, 電池の電圧値計測のブレッドボードの例

 


次に、BLE Nanoのプログラムにも変更を加えます。前回のプログラムではBatteryLevelに合わせた0〜100表示になっていたので、電池の電圧を表示するためにADコンバータで読み込んだデジタルデータを電圧値に変換します。(今回も、前回と同様にARM®社が提供するmbed™を使用します。)

Web Bluetooth APIのサンプルコードです。電池の電圧値を計測する用に変更を加えています。

 


アナログデジタルコンバータ(ADコンバータ)について

アナログデジタルコンバータ(ADコンバータ、またはADCと略します)は、アナログの電圧の値をデジタル値に変換します。変換する際、ICの内部には、基準電圧(Reference Voltage, REFなどと略します。)を使い、この基準となる電圧と実際にアナログ入力端子から入力された電圧を比較して電圧を計測します。計測する際には、基準電圧は非常に重要な要素になるため、高い精度のものを使用します。

まず、入力電圧がアナログ端子に入力されます。ADCの内部では、REF電圧(ここでは1.2V)を基準にし、その電圧を等しい間隔で分割したものを使用して、入力電圧と比較します。

例えば、REF電圧=1.2Vを8分割したものを使用して、未知の電圧を計測するとします。この電圧が、分割したものの6番目と7番目の間あたりの電圧であることがわかりました。この電圧を推測するには、1.2V/8=0.15Vが1目盛分となり、6番目の目盛りは0.15V*6=0.9Vとなり、7番目の目盛りは0.15V*7=1.05Vとなり、このケースでは、電圧は0.9V〜1.05Vの間ということがわかります。

図7, ADコンバータでの電圧計測の例

 

この時、6と7という数字は、10進数で表されていますが、2進数で表示すると「6は”0110”」、「7は”0111”」と表すことができ、アナログの入力がデジタルのコードに変換できるようになります。

このケースでは、電圧値が荒く電圧がうまく計測できていませんが、実際のICではこの目盛を10ビット(1024分割)〜24ビット(16777216分割)することによって、電圧値を可能なかぎり正確に計測することが可能になります。ADCの性能は、16bit ADCや24bit ADCなどと表示され重要な仕様になります。ビット数が多くなる、つまり分解能が上がると数uV(マイクロボルト)などの非常に小さい電圧変化を捉えることが可能になります。ただし、微小な電圧の計測は、ノイズや基準電圧など様々な要因が精度に影響を与えます。

また、微小な電圧を計測する場合に、その電圧を増幅、減衰させることによって、ADCに最適な電圧範囲に調整することも可能です。電圧の増幅にはオペアンプというデバイスが一般的に使用され、BLE Nanoにも内蔵されています。

今回のBLE Nanoは、10bitのADCが内蔵されているため、基準電圧を1024分割した値を計測することが可能です。REF電圧は、設定変更が可能なデバイスとなっています。

アナログ・デバイセズ社はこの「ADコンバータ」「オペアンプ」が主力製品となっている企業です。特に高精度な製品の分野において高いシェアを持っています。

マイコンに内蔵されているADコンバータでは一般的には精度が低いため、高精度な計測が必要な場合には、マイコンとは別にADコンバータを別に用意し測定精度を向上させることが可能です。

IoTなどのデバイスを開発する場合には、センサーの精度を最大限利用することで新たなサービスに繋がるアイディアが広がるかもしれません。高精度な計測が必要なものに関しては、応用例などを使って別の機会で説明を行います。

少し難しいですが、ビデオコンテンツがWeb上にありますので、興味のある方はご参考ください。

 


BLE NanoのADコンバータの設定について

BLE Nanoで電池の電圧を計測する際、内蔵のADCの設定を変更して計測します。

図8, 内蔵ADコンバータの設定変更のコード

 

デフォルトでは、入力電圧は、基準電圧がVdd(電源電圧)に設定されており、この電圧をプリスケーラというブロックで電圧が1/3にして使用されています。この設定では、電池の電圧が下がると基準電圧も下がってしまい、正確な電圧を計測することができません。

そのため、基準電圧を内蔵の1.2Vに切り替えて使用します。また、入力電圧を1/3にするプリスケーラを使用するように設定して最大3.6Vまでの電圧を読み込めるように設定します。

図9, BLE Nanoの内部の構成(参考URL先より)

 

Web上にある例では、Vddから直接読むことが可能ですが、シンプルにするため前回のアナログ入力と同様にAIN4から読んでいます。

実際のコードでは、以下のように計算を行なっています。

図10, 電圧値計測のコードと計算

 

コード上では、以下のような計算を挿入しています。

Vin=Code × 1.2V × 3 × 10  (式1)

最後に10を掛けているのは、BLEで通信する際、データの型が整数の0から255と決まっており、これに合わせるために10を掛けています。その後、入力電圧を1/3にしているプリスケーラの処理を元に戻すために、3を掛けています。この処理で、計測した電圧値を10倍した整数をBLEの通信で送信します。

Web Bluetooth APIの方でデータを受け取ったら、小数点のある電圧値に変換するため、1/10して電圧を表示させています。

図11, Web Bluetooth APIの電圧値の表示変換のコード

 

この変更により、以前はBatteryLevelとして、残量値を見ることができましたが、電池の電圧を計測することができました。また、単位の「V」の表示も追加しています。

図12, 電圧値表示の為に改変したWeb Bluetooth APIの表示例

 


まとめ

前回と今回で、アナログ電圧を計測することができました。世の中のセンサーの中には、電圧や電流で自然現象を数値化して出力されるものが多く存在しています。センサーの電圧は、実際には非常に小さい電圧だったりするため、精度よく計測することは簡単ではないケースが多いですが、アナログ・デバイセズでは、その計測を助けるための製品を多くラインナップしており、たくさんの技術資料も公開しています。

もし、「こんなものが計測できたらいいなぁ。」というものがあれば、アナログ・デバイセズのサイトで検索をしてみてください。わからなければ、ご相談にのることも可能ですし、電子回路の初心者、若い人、WebをはじめとするITエンジニアの方が「アナログ」の門を叩くのを歓迎しています。