月別アーカイブ: 2014年12月

DC-DCコンバータの超高効率を実感!

電子工作で使用する、定電圧回路にはリニアレギュレータが定番です。 できるだけ効率のよいものを選定するようにはしますが、この手のパーツはストックがあったり、使い回しをしたりで、古い型のものを使う場合も少なくありません。

DC-DCコンバータを使った電源基板

DC-DCコンバータを使った電源基板

ハウスローバーの電源レギュレータも少し(?)旧型のレギュレータを使っていましたが、ヒートシンクが触れなくなるほどの高温に…。 小型のバッテリーで、触れられないほどの熱を出し続けるのは相当な電力を無駄にしていると感じ、DC-DCコンバータに入れ替えてみることにしました。

スーパー3端子レギュレータ V7805-1000

スーパー3端子レギュレータ V7805-1000

スーパー3端子レギュレータ V7805-1000。 秋月電子で630円。 低損失リニアレギュレータなら100円で入手できますから、高価なパーツですね。

バッテリーのコンディションを監視する」で検証したINA226モジュールも含めた、電源基板を作成。 早速、効果の程を実測です。

電流測定回路

電流測定回路

バッテリー側にマルチメーターを繋ぎ、負荷はRaspberry Pi、webカメラ、無線LANアダプタ等、通常接続しているハードウェアです。

 アイドル時
(起動3分後)
高負荷時
(ストリーミング使用)
シャットダウン時
(CPU停止)
リニアレギュレータ
LM2940-5
570mA680mA510mA
DC-DCコンバータ
V7805-1000
410mA470mA350mA

年季の入った古いマルチメーターでは、その差が計測できないのでは?と思っていましたが、予想を超える数値でした。 概ね、30%程度の省エネルギー化です。 発熱もほとんど感じられず、稼働時間も伸び、 630円は高くない買い物でした。

 

バッテリーのコンディションを監視する

バッテリー駆動の機器では、バッテリーパックのコンディションを監視することがとても重要です。 以前から、バッテリーの電圧検出回路は搭載する予定でしたが、Raspberry PiにはADコンバータがありませんので、適当なデバイスを探していました。 今回は、I2Cインターフェースで簡単に接続でき、電流、電力も取得できる ストロベリー・リナックス社のINA226 I2Cディジタル電流・電圧・電力計モジュールを使用してみました。

INA226 I2Cディジタル電流・電圧・電力計モジュール

 

このモジュールには、電流測定用のシャント抵抗も含まれているので、初期設定として、その補正値を設定するだけで、測定を開始できます。 また、必要に応じて、複数回の平均値で計測したり、異常値の検出、測定サイクル速度の変更などができます。 テキサス・インスツルメンツ社のデータシート(英語!)

接続はこんな感じでハイサイド接続。

ina226接続図

コマンドラインから

i2cset -y 1 0x42 0x05 0x0a00 w  // Calibrationレジスタに a00hを書き込み

i2cget -y 1 0x42 0x02 w               // 電圧レジスタの読み込み

i2cget -y 1 0x42 0x04 w              // 電流レジスタの読み込み

i2cget -y 1 0x42 0x03 w              // 電力レジスタの読み込み

という感じで、値を確認できます。 簡単ですね。 (今回、I2Cアドレスを42hにしています)

電流値はそのままの数値でmA表示ですが、電圧は1.25倍、電力は2.5倍にする必要があります。 また、表示される数値はリトルエンディアンなので、右側1バイトが上位、左側1バイトが下位となります。(ここちょっとハマりました)

PHPでサンプルプログラムを作成しましたが、リトルエンディアンの変換がスマートではありません。 unpack()で、サックとできそうなのですが、文字列操作でこねまわしちゃいました。(!)

<?php
//ina226 testプログラム

// Calibrationレジスタに a00hを書き込み
exec("i2cset -y 1 0x42 0x05 0x000a w");

while (1){
	$vol = exec("i2cget -y 1 0x42 0x02 w");	// 電圧レジスタの読み込み
	$anp = exec("i2cget -y 1 0x42 0x04 w");	// 電流レジスタの読み込み
	$pow = exec("i2cget -y 1 0x42 0x03 w");	// 電力レジスタの読み込み

	$vol = hexdec(substr($vol,-2).substr($vol,2,2)) * 1.25 / 1000;
	$anp = hexdec(substr($anp,-2).substr($anp,2,2));
	$pow = hexdec(substr($pow,-2).substr($pow,2,2)) * 0.025;

	printf("電圧 %.2f V  電流 %.1f mA  電力 %.2f W\n", $vol,$anp,$pow);

	sleep(1);
}
?>

 

ina226テストプログラム実行

 

これで、バッテリーパックの状態が把握できるようになりました。

 

移動量センサーを実験する

ロボットの移動量測定には、フォトインタラプタなどによる車輪の回転量計測や加速度センサー等によるものなどがありますが、非接触で移動量を検出する身近で安価なアレが使用できないかと思い立ち実験してみました。

ロジテックマウスMX510

これです。 ロジテック光学マウスMX510。 2、3年使い込んだ現役引退物ですので、結構古いです。

光学マウスはその性質上、マウスの底面から3ミリ程度までしか反応しないように設計されています。 そこで、センサー部に別のレンズを使用して反応距離を伸ばそうという試みです。

マウス基板  マウス基板

レンズと言っても適当なものがなく、古いデジカメから取り外しセンサー部に取り付け、位置や距離を試行錯誤。

なんとか、レンズ面から30ミリの距離で床面の移動を検知出来る状態になりました。

実装するとすれば、こんな感じでしょうか。

IMG_0293  IMG_0294

なんとか、使い物になりそうな感じですが、床面との距離には敏感で、焦点深度4ミリといったところでしょうか。 凹凸のある路面では厳しいかな…。

光源や光学系の性能次第ですね。

光学センサーを用いた移動ロボット用位置推定システムについて、東北大学の方が論文を書かれていました。

http://www.astro.mech.tohoku.ac.jp/~keiji/papers/pdf/2010-Robomec-IN-online.pdf

安価なセンサーだからといっても、移動ロボット用として信頼性を上げるのは簡単なことではなさそうです。