方言を話すおしゃべり猫型ロボット『ミーア』をリリースしました(こちらをクリック)

【ESP32】リポバッテリー駆動もできる自作基板の電子回路

この記事は約11分で読めます。

現在、方言を話すおしゃべり猫型ロボット「ミーア」を開発中。

ミーア
おしゃべり猫型ロボット「ミーア」は、100以上の種類の豊かな表情で、悲しみや喜びを共有します。様々な性格(皮肉・おせっかい・ロマンチスト・天然)や方言(大阪弁・博多弁・鹿児島弁・広島弁)も話してくれます。ミーアとの暮らしで、毎日の生活をもっ...

現在のミーアのESP32自作基板回路はこちら。

USB TypeCから給電できるようにしているが、逆に言えば、ESP32を絶えずUSBに接続していないと動作しない。

なので、今回、リポバッテリーからの駆動もできるようにリポ回路を追加したいと思う。リポ電池はこちらを使用。

LP552036:定格電圧が3.7Vで、標準容量(=最大容量):360mAh

Lipo電池について

Lipo電池の特性

Lipo電池の特性と条件は以下

  • 定格電圧が3.7Vで、フル充電時には約4.2Vまで充電される(今回使用するLipoは4.28Vまで)。3.0V以上であれば充電開始できる。
  • 4.2V以上の電圧が入ると壊れてしまう。
  • 放電時には電圧が下がり、安全な放電限界は、一般的には3.0Vから3.2Vの範囲。3.0V以下になると壊れてしまう
  • 過充電や過放電を防ぐために保護回路が必要。

Lipo充電回路:MCP73831チップを使用

MCP73831の電源電圧は、3.75~6Vの定電圧電源を使用する。USB端子のVBUS(5V)電源からの充電も行える。

データシートにある充電回路はこちら

データシートはこちら

今回使用する端子に関する説明記述は下記

充電電流:基本は1C充電。1C以下ならOK

リポバッテリーは1C充電するのが基本。1C充電とは、バッテリーの容量と同じ電流で充電することを指す。例えば、1000mAhのバッテリーなら1Aの充電電流で充電する。今回の場合は360mAhのバッテリーなので360mAの充電電流で充電する。

なぜ1C充電が基本なのか?

  • リポバッテリーは正確な充電と放電が必要であり、特に過充電や過放電を避ける必要がある。過大な充電電流や急速充電は、バッテリーに対して過度な熱を発生させ、過熱や発火のリスクを高める可能性があるため。なので、1C充電は、バッテリーを安全に充電するための基本的なガイドラインの1つ。
  • ただし、1C未満で行うことは問題ない。実際、電池の寿命を延ばすために、より遅い充電速度(例えば0.5Cや0.2Cなど)を使用することが推奨される場合が多い。これにより、電池へのストレスが少なくなり、長期的なパフォーマンスが向上することがある。デメリットは充電時間が長くなること。

今回は、1C充電の充電速度と最大充電電流が、360mAhで同じであるため、この充電電流速度は超えないように回路設計する必要がある。

充電電流はPROGで調整する

充電電流速度は、MCP73831チップのPROG端子に接続する抵抗によって調節できる。

MCP73831の充電電流は15mAから最大500mAまで対応している。

充電電流は抵抗と反比例になっており、IREG(充電電流:mA) = 1000V / Rprog(kΩ)の式で表される。

今回は、最大充電電流速度が360mAhなので、Rprog > 1000/360 = 2.77…kΩが条件となる。

今回はRprog=3kΩにしてみた。DatasheetにはProgに要求される抵抗誤差に関する記載は特になかったが、バッテリーで一般的に求められる±1%を使用。

リポバッテリーのピッチ間隔が2mmだったので、接続するコネクタは下記を選択

作成した回路はこちら

充電ステータスをLEDで可視化

今回は、充電ステータスを可視化したいため、充電状態を示すSTATピンを用いる。

行われている時は[Charge]ランプ(赤色LED)が点灯し、充電完了時には[Ready]ランプ(緑色LED)が点灯するように設計。

STATピンは充電状態を示すLEDに接続されており、リポバッテリーが接続されUSB端子からの充電が行われている時はSTATピンが低電圧(0V近い値)になり、LED2(赤色)が点灯する。充電が完了すると、STATピンが高電圧になり、LED4(緑色)がが点灯する。

充電中はSTATピンが低いため、LED4には十分な電圧差が生じず、そのため点灯しない。一般的な緑色のLEDの場合、フォワード電圧(順方向電圧:ダイオードが導通し始めて電流が流れるのに必要な最小限の電圧)は約2.0Vから2.2Vの範囲のため。

ESP32への電源供給をどうするか?

電圧レギュレーターをAMS1117からME6217シリーズに切り替え

今までは、USBに繋いで5V電源供給を行い、AMS1117を電圧レギュレーターとして用いてESP32に給電していた。

ESP32は一般的に3.3Vで動作するマイクロコントローラであり、AMS1117を使って5V USB電源から3.3Vの電源供給をする場合、通常は問題ない。USB電源は5Vを供給するため、AMS1117を介して3.3Vに降圧する際に十分なマージンがあるため。

AMS1117のドロップアウト電圧は典型的には1.1V、最大で1.3Vもある。

しかし、今回は5V USB電源からだけではなく、充電されたLipoバッテリーから給電することも考えないといけない。

リポバッテリーは、満充電しても4.2V近くであり、AMS1117を使ってリポバッテリーを接続したら、電圧のドロップアウトが1.1V~1.3Vもあり、ESP32の動作電圧(3.3V)を軽く下回ってしまい、ESP32が動作しなくなる。

この問題を解決するために、より低いドロップアウト電圧を持つレギュレータを使用する必要がある。というわけで、下記検索条件でLCSCサイトで開始。

  1. 出力電圧 (Output Voltage): “3.3V” – ESP32は3.3Vで動作するため
  2. ドロップアウト電圧 (Dropout Voltage):”0.3V” – LiPoバッテリーの電圧が3.7V近くになってもESP32が動作するためには、0.4Vよりも低いことが望ましい。今回は0.3Vでフィルター
  3. 最大出力電流 (Maximum Output Current): “500mA以上” – ESP32はWi-FiやBluetoothの通信時に最大で500mAの電流を消費することがあるため、これをカバーできる出力電流のLDOが必要。今回、Wi-FIもBluetoothも使う。

下記はオプションとして。もし可能なら

  1. 静止電流 (Quiescent Current): “100µA以下” – ESP32がアイドル状態や低電力モードにある時の消費電流を減らすためにも、静止電流が低いLDOが望ましい。
  2. 熱性能 (Thermal Performance): 良好 – ESP32は大きな電流を引き出すことがあるため、過熱を防ぐために良好な熱性能を持つLDO。

10000件の電圧レギュレーター候補から11件にまで絞り込めた。

一番上のME6217シリーズが、在庫も一番あり、安価なのでこちらのLCSC番号(C427692)がSMT対応しているかどうか、EasyEDAのライブラリで確認。

自分は基本的に表面実装はJLCPCBに依頼しているので、この検索結果にSMT対応しているかのフィルタリング機能がほしい。もしかして知らないだけで、できるのか?

というわけで、下記のように今までのAMS1117回路からME6217回路に切り替えた。

ME6217のデータシートはこちら

今回選択したME6217レギュレーターが5端子のもので、CE(Chip Enable)ピンがついていたが、今回はレギュレーターの動作をON/OFFする必要はないので、VINに接続して、常時ON状態にしておく。

ちなみに、datasheetでは、レギュレーター発進防止のために、VIN(入力)とVOUT(出力)の両方に対して、それぞれ4.7μF以上のCapcitorを接続することが推奨されている。

PMOSFETを用いて、自動切り替え回路を実装

USB給電がある場合はUSBから、USB給電がない場合はリポバッテリーから電源を取るような自動切り替え機能を持つ回路を設計する必要がある。

今回は、PMOFSETを用いてUSB電源とリポ電源の自動切り替えを行う。

  • ドレイン(D):VBAT(リポ電源)
  • ゲート(G):USB電源と接続
  • ソース(S):VINにつながる

USB電源が接続されている時:PMOSFET OFF

  • ソース (S): USBの+5Vが供給される。これがPMOSFETのソース端子に直接接続される
  • ゲート (G): USB電源が接続されているため、ゲートも+5V。
  • ドレイン (D): PMOSFETはソースとゲート間の電圧差がほとんどないため(両方とも5V)、オフになる。ドレインにはバッテリー電圧は供給されない。

USB電源が接続されていない時:PMOSFET ON

  • ソース (S): バッテリー電圧V_BAT(例えば、満充電時で4.2V、通常は3.7V)が供給される。
  • ゲート (G): USB電源がない場合、R4はゲートをGND(0V)に引き下げる。
  • ドレイン (D): USB電源がない場合は、ゲートはGNDになるため、ソースとゲート間に十分な電圧差が生じ、PMOSFETはオンになる。バッテリー電圧がドレインを通ってレギュレータのVINに供給される。

PMOSFETの動作原理は下記に記載。

実際に、どのP-MOSFETを選択すれば良いかに関して、LCSCで推奨型番の記載がある。

MOSFETs Selection Recommendation - Electronic Components Distributor - LCSC Electronics
When selecting MOSFETs, we recommend the following brands: UMW, WINSOK, VBsemi, SPS (Sourcechips), and Slkor.

逆電流保護としてショットキーバリアダイオード(SBD)を使用。

USB給電からリポバッテリー給電への自動切り替えが発生する場合、例えばUSB電源が切れた時、PMOSFET(Q1)がオンになってリポバッテリーからの給電を開始する。この時、バッテリーからの電流がレギュレータ(U7)を通じてUSB側に流れることを防ぐためにSBDを使用。USB端子は他の電源と接続されることがあり、その場合にリポバッテリーからUSB経由で外部に電流が流出するのを防ぐため。

全体の回路構成として、下記のAdafruit industriesのも参考にした。

完成!

今回の最終的な回路図はこちら。抜け漏れないかが心配だが。

外部電源(+5V)とUSBコネクタのVBUSの間に、過電圧保護としてTVSダイオードを、過電流保護としてヒューズを入れたが、これであってるかな?

次は、回路図をもとに基板発注して動作検証。

回路図から作成した基板がこちら。
サイズは、高さ38mm×幅58mm。

USB書き込み基板の差し込み口と、USB Type-Cコネクタを基板手前に配置
目の描画に関するLCDディスプレイを基板奥側に配置
リポ充電のコネクタを基板右側手前に配置
あと、今回は、電圧レギュレーター発振防止のために、10μFのコンデンサをできるだけレギュレーターの近くに配置した。またビアを2.2mmにして3箇所設置し、M2ネジ(2mm)で取り付けできるようにした。

JLCPCBからの基板到着を待つ。

リポ充電回路検証

リポ充電のコネクタが差し込めない?

1週間後に基板到着。早速Lipo充電回路検証しようと思い、Lipoのコネクタを差し込もうとしたところ、あれ?差し込めない。。。

ピッチ間隔は2mmであっているのだが、コネクタの形状が合わない。調べたところ

リポ電池のコネクタであるJST PHR-2は、PHシリーズに分類される。一方で、今回基板発注したJST B02B-PASK-1はPAシリーズに分類される。
JSTのPAシリーズとPHシリーズのコネクタは、ともにWire-to-board接続用のコネクタシリーズで、2.0mmピッチ間隔だが、各々異なるアプリケーション目的に使用され、形状も異なるとのこと。なので、今回は基板側にもPAシリーズではなく、PHシリーズのオス型を配置する必要があった。知らなかった。。。

というわけで今回は、無理やり基板上の、リポコネクタ部分をニッパーで切って、結合させた

LCSCのWire To Board / Wire To Wire Connectorで、検索条件として「Reference Series」という項目があり、ここでシリーズを選択できる。今回は間違えないようにPHを指定。

こちらを指定。形状的にもこちらだと、結合できそう。

リポ充電回路検証

気を取り直して、ESP32コード書き込み回路を繋げて、書き込み開始。
こちらは、前回、RXとTXの向きを逆にしてしまい、直接結合で書き込みできなかったが、今回は成功。図だと写っていないが、書き込み側のTXだけではなく、RX側も光っていた(ラベリングは逆にして間違えている。)一歩ずつ進んでいる感じが嬉しい。

書き込み終了した後に、書き込みの基板は取り外し、USB TypeC経由でLipo電池が給電されるかを検証。赤LEDのみが点灯しているので、Lipo充電中であることを表しており、良さそう。充電完了状態を示す緑LED点灯に切り替わるまでしばらく待つ。

20分くらい?で充電完了し、緑LED点灯に切り替わった。

そして、USB TypeCコネクタを取り外すと、、、、無事動いた!!

コメント

タイトルとURLをコピーしました