はじめに
先日、このようなツイートが私のタイムラインに流れてきました。電源OFF時に何かしらの現象が発生。高価なマイコンボードを焼いてしまったようです。
多くの有識者の方から考察がなされており、勉強になるなぁと感じて追いかけています。
今回の現象とは違いますが、私の経験上でもマイコンボードの電源供給では苦労したポイントがあり、それのまとめ・共有するために今回の文章を書きました。
市販のマイコンボードへの電源の問題
市販のマイコンボードは様々な使い方に対応するべく、様々な方式での電源供給が可能になっています。主に以下の3種類が挙げられるでしょう。
- USB電源
- 内部のレギュレータ電源
- 外部のレギュレータ/DC-DCで制御された電源
これらを単独で用いれば問題は起きないのですが、上記ツイートのように多少複雑なシステムを構成すると、複数の電源が様々なタイミングで入力され、衝突や過負荷などの問題が発生する場合があります。
USB電源と他の電源との衝突
5V以外の電圧や大きな電流を必要とするシステム(ラジコンなどモータを使う場合など)の場合、モータ用電源に連動させて動かすために電源を共通化したくなるでしょう。
また、プロダクトによってはマイコンボード内のレギュレータでは電流容量不足になるので、外部にDCDCを設定する場合もあるでしょう。
ケース1 モータ電源をONしながらPCに接続して衝突
このシステム構成でバッテリ側電源をONしたままUSBを接続(ソフトの書き換えやシリアルモニタなど)したらどうなるでしょうか?
マイコンボードをUSB接続すると電源が入ることからもわかるとおりPCからはUSBの5Vが供給されるわけですが、これがマイコンボード内のレギュレータ出力や外部のDC-DCコンバータと衝突してしまいます。複数の電源間で少しでも電圧差があると大きな電流が流れてしまいますので、基本的に同じ線に複数の電源を接続してはいけません。
ケース2 モータ電源をOFFしながらPCに接続してオーバーロード
また、バッテリがOFF時には衝突は起きないかわりオーバーロードが懸念されます。
一般にPCのUSB電源は0.5A程度しか供給できないので、5V系に繋がっている負荷が大きい場合は過負荷になってしまうからです。
大抵の場合、PC側で問題のある負荷だと判定されてUSB電源だけカットされるはずですが、場合によってはPCのシャットダウン。運が悪いとUSBポートが破壊されることもありえます。
対策
USBを差すときはマイコンボードを取り外せば問題は起きませんが、それではスマートでないので対策を考えます。
(もちろんUSBから電源供給されないように、USBケーブルから電源供給されないようケーブルやパターンをカットする方法もありますが、回路の電源OFF時には書き換えができなくなります。個人的にはモータ側電源ON状態でマイコンを書き換えるのはちょっと警戒感があります。暴走しないような対策が必要です。)
要件分析
まず、入力される電源(バッテリ、USB)に対して、各電源系統がどの電源を使用すべきかを表にまとめます。
バッテリ | USB | モータ系 | 外部5V | 内部5V | 内部3.3V |
---|---|---|---|---|---|
✕ | ✕ | OFF | OFF | OFF | OFF |
✕ | ◯ | OFF | OFF | USB | USB |
◯ | ✕ | バッテリ | バッテリ | バッテリ | バッテリ |
◯ | ◯ | バッテリ | バッテリ | バッテリ | バッテリ |
つまり、USBからはマイコンだけに供給する&バッテリ使用時はUSB電源を繋げない。という要件になります。
実装
ダイオード
このような都合のよい動きを実現する部品としてはダイオードがあります。
ダイオードは見た目通り矢印の方向にだけ電流を通す特性があります。
下図のように2個のダイオードを組み合わせると、電圧が高い方の電源のみが選択される用になります。これをダイオードOR回路といいます。
設計
DC-DCが生成する5V電源とUSBでPCから供給される5Vに対してダイオードORを適応すると、先の表を満たすような電源の切り替えを自動的に行うことができます。
このとき、バッテリ接続中にも関わらずUSBからの電源供給されることが無いよう、DC-DCの設定電圧を少し(0.5V程度)上げておくとより良いでしょう。ダイオードでのドロップ電圧を補う効果もあります。
しかし現実は・・・
感の良い方は気づかれたかも知れません。この対策は一見完璧な対策ですが実現できない場合があります。
なぜならば、マイコンボードのUSB電源にダイオードが設定されていない場合、マイコンボードの改造が必要になります。
しかも、マイコンボードによりダイオード有りだったり無しだったりしますし、ひどい場合では互換性をうたいながら違う構成だったり、複雑怪奇な世界です(タイトル回収)。
セーフな例
幸い、いくつかのマイコンボードでは予めダイオードが設定されています。こちらはArduino Unoの例ですが、USB電源にPchMOSによるスイッチが設定されています。このスイッチは、USB電源が入力されるとONしますが、VINが入力されている間はOFFとなります(寄生ダイオードがいますが、ちゃんと逆流しない方向になっています)。また、レギュレータU1の内蔵ダイオードを経由して駆動できるので、5V端子が入力されている間もOFFとなります。
ただし、GPIOのVinや5Vピンにはダイオードが無いので別途設けてください1。
【追記】
脳内シミュレーションでは不安があるのでLTSpiceでシミュレーションしてみました。DCジャックのみのタイミング①、USBのみのタイミング②、オーバーラップしている③の、各タイミングで電源の電流値を測りました。
USBから電流を持ち出しているのは②のUSBのみが供給されているタイミングになっています。
(回路に詳しい人はVpmosがタイミング②のみでONになっていることから理解できると思います)
電源端子 | タイミング① | タイミング② | タイミング③ |
---|---|---|---|
DCジャック | 約33mA | 約0mA | 33mA |
USB | 約0mA | 約33mA | 約0mA |
Arduino Microも同じようにPMOSのスイッチが付いています。
どちらもUNOもMicroもVinの電圧次第な面があるのでご注意ください。(どうやらUNOは6.6V以下だと不味いらしい2)。
Arduino NanoEveryは単純なダイオードのため、VINではなく5V入力で良さそうです(もちろん外付けでダイオードが必要)。
ダメな例
件のTenssy4の場合、一見PchMOSの寄生ダイオードが使えそうにも見えるのですが、常時ONなのでNGです。ただ、USB電源を切り離せるパターンがあるので、そこにダイオードを入れれば良さそうです。
AE-ATMEGA-328 MINI(秋月電子製ArduinoProMini互換ボード)の場合はガッツリ直結です(ただ、USBではなくシリアル接続なので配線にダイオードを入れてしまえばOKでしょう)。
まとめ
Arduinoを始めとした最近のマイコンボードは、回路のことをあまり分からなくても使えますが、少々複雑なプロジェクトになると思わぬトラブルに見舞われます。
回路を自分で設計するレベルは不要だとしても、なんとなくでも良いので勉強するしかなさそうです。
不安であれば、シミュレーションするとか、壊れても問題ない環境でのテストをおすすめします。