最近Raspberry Pi Pico(RP2040)を使ってロボット用基板を何枚か作りました。
Raspberry Pi Picoのデータシートに載っているP-ch MOSFETを使った自動電源選択回路が便利だったので、動作確認に使った回路シミュレータごと共有しようと思います。
Raspberry Pi Picoは、USB経由のVBUS(5V)またはVSYSピン(1.8V~5.5V)からの外部供給で動作します。
USB接続時はその5Vで動作するので良いのですが、ロボット基板でバッテリー駆動時はDCDCで降圧した電圧を外部電源として供給します。このとき、単純に電源を並列にしてしまうと、一方から他方への逆流を引き起こします。USBも外部電源も逆流されると困ります。特にUSBはPCを破壊しかねないので本当に不味いです。
最も簡易的な逆流防止策は、各電源ラインにショットキーバリアダイオード(SBD)を挿入する「ダイオードOR接続」です。しかし、この方法では、常にダイオードの順方向電圧降下が発生し、
で表される電力損失が発生します。これは、バッテリー駆動時のロスが増えるだけでなく、本来なら使える電圧でも電圧降下分があるために、バッテリーのエネルギーを最後まで使い切ることができない、といった事が起こります。
こちらの記事では、SBDとP-ch MOSFETで外部給電の比較を行い、SBDでは供給1.8V(VSYS1.51V)が下限なのに対し、MOSFETでは供給1.53V(VSYS1.47V)まで動作可能であることが試されていました。
また、ダイオードOR接続では電圧が高いほうから給電されるため、USBを接続しているのにバッテリーから給電されるような勿体ない事象が発生する可能性もあります。
Raspberry Pi Picoのデータシート の4.5. Powering Pico に外部電源用の回路の例が載っています。

これはP-ch MOSFETを変な繋ぎ方で使うものです。G, S, Dの繋ぎ方を間違えやすいです。機能としては、VBUS(USB電源)を優先して選択する電源選択回路です。
Power MultiplexerやPower ORing Circuit、Ideal Diode-ORなどと呼ばれるようです。
下がシミュレータで再現したものになります。
ページ上から実際に動かせます。
USB電源側のスイッチを押すとそちらが優先されます。これで、USB接続時はUSBから電源を優先的に供給する(のでバッテリーのエネルギーを浪費しない)という回路を組むことができます。
また、どちらの電源に対しても逆流しません。
公式が推奨していたDMG2305UXはJLCPCBのExtended Partsだったので、前作ったときはPreferred Extended Parts(Promotional Extended Partsに名前が変わった?)のHL6042を採用しました。Pch MOSFETを片っ端から確認して、ON抵抗が低いものを探した覚えがあります。

上記ブログにて紹介されているMOSFETの選び方としては、①ON抵抗が小さく、②電流の容量に余裕があり、③ゲートスレッショルド電圧が低いものです。
①ON抵抗 は
- ゲート電圧 -4.5V ドレイン電流 -4.0A の場合: 最大 43mΩ
- ゲート電圧 -2.5V ドレイン電流 -4.0A の場合: 最大 55mΩ
- ゲート電圧 -1.8V ドレイン電流 -2.0A の場合: 最大 75mΩ
- ゲート電圧 -1.5V ドレイン電流 -1.0A の場合: 最大 100mΩ
とかなり小さめです。
②ドレイン電流 は25℃で定常-5.0A、70℃でも定常-4.0Aなので十分です。
③ゲートスレッショルド電圧 は-0.3V~-0.9Vです。
DMG2305UXよりも全体的に性能が良さそうです。
他の事例として、ラズパイのコミュニティでAO3401を使う例がありました。
メインマイコンのRaspberry Pi Pico Wと、モーター制御用サブマイコンのRP2040-Zeroが1枚の基板に載ったものを作りました。
MOSFETによる電流スイッチはEasyEDAの回路図記号が間違っていることに気づかなかったため、電源をオフにできないというヤバいロボット基板になってます。

右下にある2つのMOSFETが電源選択回路です。マイコン2つにそれぞれUSBがついていて、バッテリーからDCDCで5Vを生成しているので、少し複雑になっています。
それぞれの電源がある場合とない場合を一覧にしたものが下の表です。これに合うようにしました。
DCDC5V | Pico W USB | Zero USB | 状態 |
---|---|---|---|
✕ | ✕ | ✕ | 電源が無いので動作しない |
○ | ✕ | ✕ | Pico WのVSYSにDC5Vを供給 ZeroはVSYSからP-MOSを介して供給 |
✕ | ○ | ✕ | Pico WのVSYSにVBUS 5Vが供給 ZeroはVSYSからP-MOSを介して供給 |
✕ | ✕ | ○ | Zeroの5VにVBUS 5Vが供給 Pico Wは起動しない |
○ | ○ | ✕ | P-MOSがDC5Vを遮断してPico WのVSYSにVBUS 5Vが供給 ZeroはVSYSからP-MOSを介して供給 |
✕ | ○ | ○ | Pico WのVSYSにVBUS 5Vが供給 P-MOSがPico WのVSYSを遮断してZeroにVBUS 5Vが供給 |
○ | ✕ | ○ | Pico WのVSYSにDC5Vを供給 P-MOSがPico WのVSYSを遮断してZeroにVBUS 5Vが供給 |
○ | ○ | ○ | P-MOSがDC5Vを遮断してPico WのVSYSにVBUS 5Vが供給 P-MOSがPico WのVSYSを遮断してZeroにVBUS 5Vが供給 |
これがシミュレーションです。各電源の条件と一致していると思います。
RP2040-ZeroはUSBのVBUSと5Vピンがダイオードも何もなく直結なので、USBの電圧が低いときにバッテリーから給電すると逆流する可能性があります。(USB2本刺しのときは同じ電源なので大丈夫なのと、P-MOSを介して少しは電圧降下してるはずなのでやっぱり大丈夫なはず)USBの電圧よりも低い電圧で供給する以外に方法を思いつかなかったので、USBアイソレータを常に使うことにして考えないことにしました。
この記事を書くためにCircuit Simulator Appletをastro-notion-blogに埋め込むためのコンポーネントを作りました。
この回路もCircuit Simulator Appletも便利なのでオススメです。
あとUSBアイソレータ、最強です。