Raspberry Pi Picoのバッテリー動作環境 その1

2021年8月27日金曜日

Raspberry Pi Pico

t f B! P L

Raspberry Pi Picoをバッテリーで動作させる環境を作成してみました。本体OFFのスタンバイ状態から通常動作、DeepSleep、シャットダウン、充電ステートを含めた簡易的ではありますが統合的なパワーマネージメントを、一般的に入手可能な部品のみを使った外部追加回路との組み合わせで実装してみました。

Raspberry Pi Pico バッテリー動作環境

Raspberry Pi Picoのバッテリー動作関連機能

バッテリー動作環境構築の説明の前に、Raspberry Pi Picoには通常のマイコンボードには標準装備されてないようなバッテリー動作を支援する機能が搭載されているのでこれらについて説明します。バッテリー動作環境を構築するために、これらの機能をフル活用します。

ステップアップ、ダウン両対応のDC/DCコンバータ

RICHTEK社 RT6150B-33GQW

一般的なマイコンボードにはUSB 5Vからのステップダウンで3.3Vを生成するDC/DCコンバーター、あるいは単なるLDOが搭載されていることが多いです。しかし、Li-poバッテリーの使用を想定した場合、標準電圧は3.7Vで、満充電時4.2Vから過放電手前の電圧2.9V程度の範囲の電圧が供給される可能性があり、3.3Vを生成するには、ステップアップ、ダウン両対応のDC/DCコンバータが必要です。Raspberry Pi PicoにはRICHTEK社のRT6150B-33GQWが搭載されており、入力電圧として1.8V~5.5Vがサポートされています。また800mAまでの電流出力をサポートしているので、Raspberry Pi Pico本体のみならず、周辺回路にもこのDC/DCコンバータから供給することが可能です。またこのDC/DCコンバータとの連携として以下の機能もRaspberry Pi Picoボードでサポートされており、バッテリー動作時に非常に役立ちます。

  • Raspberry Pi Picoボードの37ピン 3V3_ENによるDC/DCのEN (動作/停止) 制御
 
DC/DCのEN制御

DC/DCのEN制御に関しては3V3_ENピン未接続時はプルアップによりDC/DCが常時イネーブルとなります。

  • GPIO23によるDC/DCのPS (動作モード) 設定
 
DC/DCのPS設定

PS設定に関してはPS = 0にて効率優先モード (PFM Mode)、PS = 1にてリップル低減モード (PWM Mode: 低負荷時に効率悪化)となり、デフォルトではPS = 0です。

USB電源の接続検出

USB電源接続検出

GPIO24をGPIO入力として使用することで、High検出 = USB電源接続、Low検出 = USB電源未接続が検出できます。

バッテリーチャージャーとの接続サポート

バッテリーチャージャー接続

pico-datasheet.pdfのUsing a Battery Chargerセクションを参照するとバッテリーチャージャーとの接続例が示されています。この回路の通りにP-ch MOSFETを接続すれば、USB電源未接続時はバッテリー電源を使用し、USB電源接続時はバッテリーを充電しながらDC/DCコンバータ側にはUSB電源が供給されるようにすることができます。上記図内で赤色で示された部分はRaspberry Pi Picoボードに未実装なので回路の追加が必要です。この部分はP-ch MOSFETを通常のハイサイドスイッチの使用法とは少し異なった使い方をしており勉強になるので後ほど回路図のところで別途コメントします。

電源電圧検出

VSYS電圧検出

GPIO29_ADC3をADC3入力として使用することで電源電圧が検出できます。VSYS端子の電圧をADCにて計測することができますので、上記のバッテリーチャージャーを接続した状態ではUSB電源の電圧、バッテリー動作時にはバッテリーの電圧が計測されます。この電圧測定により例えば4.3V以上ならUSB電源接続、4.3V未満ならバッテリー動作を認識するというようなこともできそうですが、判断電圧基準値は別途吟味が必要なので、上記のGPIO24を用いた検出が簡単で確実そうです。ADC3入力はVSYSからの200Kohmと100Kohmの分圧により定常的な分圧電圧を測定するようになっているので、(1) 微小ではあるが定常的な電流消費がある(15uA以下)、(2) ADCへの出力インピーダンスが高く測定誤差の原因になりうる、の2つの問題点があり、より正確かつ定常的な電流消費をしない方法としてはアクティブな回路を構成して必要なタイミングでのみ計測する方法もありますが、おおよその電圧を測定するにはRaspberry Pi Picoボードの実装方法で充分であるとも言えると思います。

DeepSleep機能

SDK側では、DeepSleep状態に該当するdormant状態への遷移がpico-extrasのpico_sleepにて準備されています。RP2040自体の電源はONを維持した状態で消費電力を極力抑える方法として有効です。CPU自体は休止状態となりますが、GPIOの状態は保持されます。dormant状態からの復帰にはGPIOピンによるレベル検出 (High/Low) またはエッジ検出 (立ち上がり/立ち下り) の指定が可能です。SDKではdormant状態への移行とwake upの条件設定はサポートされていますが、dormant状態に入る前の動作状態(例:クロック設定、PWM使用、タイマー等の割込みの設定)の復元については別途に自前の手続きをする必要があります。

パワーマネージメントの全体構成

機能要件

今回製作したバッテリー動作環境の機能要件については以下を考えました。

  1. DC/DCがOFFの待機状態を設けること(スタンバイ状態)
  2. 1つまたは2つのスイッチを使ってをPowerステートをコントロールできること
  3. RP2040のdormant状態を活用したDeepSleepステートへの移行、復帰ができること
  4. 完全にプログラム制御下でDeepSleepステートまたはスタンバイ状態への移行を行うこと
  5. DeepSleepステートではDC/DCがON状態になるが、その他の周辺デバイスへの電源はOFFにできること
  6. バッテリーの電圧監視を行い、しきい値電圧を下回った場合はスタンバイ状態に移行すること
  7. USB電源接続時はDC/DC ONを維持すること(プログラム書き換え時のため)
  8. サンプルとしての確認用のためOLEDディスプレイにて動作状態を表示

Powerステート遷移

簡易的なパワーマネージメントを実現するために以下のPowerステートを準備します。ステート間の遷移はサンプルプログラム上で実装されたものを記載していますが、遷移条件を変更することで異なる運用の仕方への対応も可能です。
Powerステート遷移図

Stand-by状態

  • Raspberry Pi Picoボード上のDC/DCコンバータがOFFの状態で電力消費の非常に小さい状態
  • RP2040および周辺デバイスへの電源供給OFF
  • Powerスイッチ長押しでNormalステートに遷移
  • USBを接続した場合はChargeステートに遷移
 

Normalステート

  • このプロジェクトでは通常動作状態を示すためにRaspberry Pi Picoボード上を点滅させる
  • Userスイッチを押すことで周辺デバイスへの電源供給をトグル (OLED ON/OFF)
  • USBパワーによる動作かバッテリーによる動作かを判別可能 (OLEDに表示)
  • Userスイッチの長押しでDeepSleepステートに遷移
  • Powerスイッチの長押しまたはバッテリーの低電圧検出でShutdownステートに遷移
 

DeepSleepステート

  • pico-extrasのpico_sleepでサポートされているdormantモードを活用
  • 周辺デバイスへの電源供給を停止することでDeepSleepステートでの消費電力を最小化する
  • Powerスイッチを押すことでNormalステートに復帰
 

Shutdownステート

  • OLEDにShutdownステートであることを表示し3秒後にChargeステートに遷移
 

Chargeステート

  • USBから電源供給されている場合、OLEDにChargeステートであることを表示し3秒後にdormantモードに入る
  • USBから電源供給されていない場合、またはUSBからの電源供給が停止した場合に、H/W的にStand-by状態に入る
  • Powerスイッチを押すことでNormalステートに遷移
  • プログラム書き換えはこのステート上で実施される
 

外部追加回路

バッテリー動作環境を機能させるための外部追加回路を提示します。SMD部品を使用した最適化回路と、ブレッドボード上での確認のためできるだけSMD部品を使用しない回路の2つを用意しました。
SMD部品を使用した最適化回路
ブレッドボードテスト用回路
PDF版はこちらからどうぞ。

サンプルプログラム

Githubにサンプルのプログラムを置いておきました。
https://github.com/elehobica/pico_battery_op

今回は一旦ここまでで終了して次回は外部追加回路とサンプルプログラムの内容について説明します。
Raspberry Pi Picoのバッテリー動作環境 その2

自己紹介

自分の写真
電子工作&プログラミング、オーディオ・音楽

注目の投稿

Raspberry Pi Pico Wで電波時計を合わせる (JJY標準電波エミュレータ)

Raspberry Pi Pico Wのアプリケーションとして 最少の周辺部品で電波時計むけJJYエミュレータ(時刻合わせ用)を製作しました。 ※2023年6月6日: ソースコード修正の内容を反映させました。 時刻合わせ風景 概要 電波時計は電波が届くところで使...

QooQ