Power Supply Unit for Raspberry-Pi on the Car


イントロ:

近年、テクノロジーの進化に伴い、あえて苦労してマイコンの不自由な環境でソフトウェアを開発しなくてもいい、というよりマイコンでは越 えられない壁 を一気に高性能なワンボードコンピューターで解決してしまうムーブメントが一気に立ち上がってきたような気がする。 日本国内においても、かつてはH8マ イコンにせいぜいμ-iTRONを搭載した程度が限界だったものが、数千円で買えるクアッドコアLinuxマシンを手に入れたことで一 気に状況がレ ベルアップした。例えば、豊富に手に入るUSB機器を繋いで使えたり、WiFiでスマホと通信したりinternetにアクセスしたり、HDMI経由で高 解像度のGUI画像を出力したりなんて事が一気に可能になったのだ。


開発プロジェクト方針:

 このようにパワフルなCPUボードは比較的安価に手に入るようにはなったが、実際に車載するとなるとまた幾つか解決しなくてはならない 課題がある。  小 さいとはいえLunuxマシンであるRaspberry-Piは、マイコンのように用が済んだらパチンと電源切ってはいけない事情がある。 また可能な限 り運転する以外の事には手間をかけたくないので、始動したら自動で電源がオンし、車を降りたら自動でシャットダウンするようにしたい。 また 温度上昇など による暴走で強制的に電源を切りたい場合にも対応したいし、ソフトのバグなどで再起動する必要が生じた場合にも簡単に対応できるようにしたい。

以上のことから、目標とする仕様は以下の通り

最小数の操作子ということで、今回は「ボタン1つ」だけで上記を実現することを目標にする。


Hardware編/回路設計:

 今回は消費電流も多いし、発熱も少なくしたいので車両の+12Vから安定化し た+5Vを生 成するのにはドロップ式のレギュレーターではなく、高効率なスイッチング電源を使用することにする。 スペースファクターに優れ、比較的コストも安い村 田製作所製のOKL-T/3-W12N-C(秋 月電子で500円で販売中)を購入することにした。 約12mm四方とコンパクトながら最大3Aと今回の要求に丁度いいサイズ、 もしチャージ 動作とかで多量に電力を消費するUSB機器を接続する可能性があるのなら1ランク上のOKL-T/6-W12N-Cに しておけば最大6Aなので 少々のモノを繋いでも安心できそうだ。

以下に何度かの試行錯誤を経て何とか使えそうな最初のバージョンの回路図を掲載する


使用部品について:

今回も結構複雑な超アナログ回路になってしまったが、やりたい事が込み入っているの で、ある程度は 仕方ないと 思う。 面倒臭いと思う方はマイコンで制御しましょう(笑)

まず、常時電源のBATT端子に入っている1Aのダイオードは普通の整流用を使用す る、逆接続時の 保護用というよ りも最大定格の入力電圧が14V迄のOKL-T/6-W12N-Cを比較的バッテリーの電圧が高めの欧州車で使うために電圧をドロップさせる目的で入れてあ る、2本直列にすれば約1Vドロップするので必要なマージンが確保できると思う、よってここはショットキーダイオードではその役目をしないので注 意。 回路を 表面実装部品で作 るために比較的高インピーダンスな値で設計してあるが部品の耐圧には注意してほしい、その理由は高誘電率のチップコンデンサーはDC電圧が掛かると実質的な容 量が1/5程度にも低下してしまうので時定数が想定通りにならない場合があるからで、チップ部品ならばなるべく高耐圧なものやX7Rタイプなどを 使いたいとこ ろだ。 なおSiと記載したダイオードは全て小信号スイッチング用(逆方向の電流漏れが多いのでショットキーDiは不可)。 その他の部品の置き換え時の注意 とし て、 左上のP-ch MOSFET(DMG3415U)は負荷に必要な電流を十分に流せるも低オン抵抗のものを使用すること、ここには5V負荷電流値 の約半分の電流が流れるからである。その他のFETは全て小信号のも ので構わない。

動作解説:

BATT端子に常時電源が供給されている状態でACC電源がオンになると、左下の 0.1uFのコン デンサ経由で左下の2N7002Kが一瞬オン、するとその上のDMG3415Uも導通するので5V電源が入る、このとき右下の2N7002Kはすでにオン状態 なので右上のDMG3415Uも導通し左下の2N7002Kはオン状態を維持する。

もし、この状態でON/OFFボタンを短く押すとGPIO6が一瞬下がるだけでラズパ イの電源は 切れない。 このGPIO6が一瞬落ちるのを検出してシステムをリブートさせるようにソフトウエアを構築しておく事にする。 また、ボタンを長押しした場合は 左下の2N7002Kがオフし、同時に右上のDMG3415Uもオフになり、その結果として左下の2N7002Kもオフするので、左上のDMG1415Uは強 制的にラズパイへの電源供給を遮断する動作をします。 そのあと電源遮断状態から再度電源を再投入するには短くボタンを一回だけ押します。

エンジンを止めてキーを抜きACC電源がオフになると、右下の2N7002Kはオフ状態になり、約 1分後には右上 の DMG3415Uもやがて遮断され、続いてその左側にある4.7uF/16Vの電解コンデンサーがチャージされていき、最終的には左下の2N7002Kがオフ 状態になり左上のDMG3415Uが遮断するのでラズパイの電源が落ちるという仕掛け。 この間ラズパイのGPIO6はプルアップがされない状 態(つまりL レベル)が持続しているので、これを検出すればシステムをシャットダウンさせる事ができる。

注意として、ACC電源が落ちている状態でON/OFFボタンを短く押すと約1分だけ ラズパイに電 源が供給されるが、そのあと自動で電源が切れるのでこの間で起動〜シャットダウンまでを完了できない場合にはACCオフ時にはボタンを押さない事。

プロトタイプ検討中の画像


Software/ソフト編

電源の状態によって自動的に変化するハードはできたが、これに対応したソフト ウェアを自前で 用意しないことには目的は達成できない。 ソフト的な動作を大別すると、自動シャットダウンと、リブート動作が必要である、今回はこれを一つの制御線でコント ロールする、具体的には瞬間的にL(おおよそ30mS以下)であればリブート、それ以上の間Lレベルが持続するならば自動的にシャットダウン動作に移行すると い う仕様であ る。
 以下に使用したファーム等の環境を示す。
まずは、作成したPSUボードがちゃんと動作しているか確認する。 
まず、sshでログインして作成したボードが動作しているかを確認する。
Ras-piを有線でルーターに接続し、iMac OS-Xならばターミナルを開いて以下のように打てば繋がる

iMac:~$ ssh -l pi moode

moodeデフォルトのパスワードを打ってログインに成功するとRaspberry-pi側のプロンプトが表示されるので

pi@moode:~$ gpio readall


Pi3 physical (22pin) GPIO.6の「V」を読むと「1」になっている、
この状態からACC電源を落として同じことを実行すると


今度は physical (22pin)の「V」が「0」に変わっているのが確認できた、そこでこのポートを使って動作を検出することにする、
Rapsberry-Pi3の場合旧機種で言うところのGPIO.6はBCMのポート名で指定する必要があるので、ここでは25番ポートとして記述する。
以下に自動シャットダウンとリブートに対応したpythonのコードを示します、このライセンスはGPLに準じます。
作成には以下のようにnanoエディターを起動し記述する。

pi@moode:~$ /home/pi/nano psu_switch.py

import RPi.GPIO as GPIO
import time
import os

GPIO.setmode(GPIO.BCM)
GPIO.setup(25,GPIO.IN,pull_up_down=GPIO.PUD_UP)

button_before = 1
button_now = 1
holdcount = 0
pushed = 0


try:  
  GPIO.wait_for_edge(25, GPIO.FALLING)

  while True:
    button_now = GPIO.input(25)
    pushed = button_before + button_now

    if (not(pushed)):
      holdcount += 1
    else:
      holdcount = 0

    if(button_now and (not(button_before))):
      os.system("sudo shutdown -r now")
    if((not(pushed)) and holdcount >= 100):
      os.system("sudo shutdown -h now")
      break

    button_before = button_now
    time.sleep(0.03)

except KeyboardInterrupt:  
  GPIO.cleanup()

GPIO.cleanup()


再起動した時に自動で起動するように永久設定してしまう前に、念のためテストをしてみる。

 pi@moode:~$ sudo python psu_switch.py

 ACC電源を落としたら自動でシャットダウン動作に入り、ボタンのチョイ押しならリブートするはず
ちなみに動作中にボタンを長押しするとシャットダウンせずに強制的に電源を切ってしまうので、
これはSDのバックアップを取ってからテストして欲しい(本来はハングアップ時用の操作)、
長押しで電源が切れた後は短くチョイ押しすれば電源が入り起動するはずだ。
うまく動いているのが確認できたら、いよいよ自動実行を埋め込む
/etc/rc.localの最終行の exit 0 する前行にpsu_switch.pyを自動実行する記述をnanoで以下のように追記する。

pi@moode:/etc$ sudo nano /etc/rc.local

# This Program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Moode; see the file COPYING.  If not, see
# .
#
# Moode Audio Player (c) 2014 Tim Curtis
# http://moodeaudio.org
#
# 2016-06-07 2.6 TC moodeOS 1.0
#
/usr/bin/udisks-glue > /dev/null 2>&1
/var/www/command/watchdog.sh > /dev/null 2>&1
/var/www/command/worker.php > /dev/null 2>&1
sudo python /home/pi/psu_switch.py &           
exit 0
 
以上でもって再起動しても、毎回 上記のPythonスクリプトが自動で実行されるようになる、これでRaspberry-Piを車載化した際にも、シャットダウン操作を気にすることなく運転に専念できる 下地がやっと出来たので 次のステップではハイレゾ対応のメディアサーバーとしての実用性と使いみちをとことん追求してみたいと思う。

[注意事項]
 本情報は、あくまでも部分的情報の公開が目的であり、確実で完全な情報であることを保証するものではありません。 ユーザー個人の趣味であり またメーカを冒瀆したり営業妨害を意図するものでもありません。 従って本情報に基づいて機器を改造した際に、機器が動作しない、もしくは、期待した 性能が得られない等の 障害が発生したり、万が一に事故等が発生したとしても、当方は一切の責務において関知しないものであります。 実際に機器の改造を行う際は、あく ま でも各自、個人の責任において行ってください、腕に自信の無い方は絶対にトライしないで下さい。 本設計の回路やアイディアの無断転載や商用化はご遠 慮ください。
[Caution:] (If you use above information, At Your own risk!)

更新日 2017.Sep.9th