shotaのマイクロマウス研修17 回路設計⑤:ESP32ソフト書き込み基板と間違い


こんにちは、shotaです。
社員研修として、オリジナルマウスを製作しています。

[前回の記事]ではモータドライバとエンコーダについて書きました。
今回は

  • マウス基板のその他モジュール(モーションセンサ・インジケータ・ソフト書き込み)
  • ソフト書き込み基板の回路
  • LiPoバッテリー充電回路
  • 回路の間違い
  • について書きます。

    マウス基板のその他モジュールについてはサラッと流して、ソフト書き込み基板をメインに説明します。


    マウス基板

    その他モジュール ブロック図

    ブロック図はこのようになりました。

    点線から左側は外部回路で、ソフト書き込み基板があります。
    点線から右側が内部回路で、左からソフト書き込みコネクタ・ESP32・モーショントラッキングセンサ(6軸加速度・ジャイロ)・LED x2があります。

    ソフト書き込みコネクタには、データの送受信をするTx/Rxと、書き込み時にESP32のモードを切り替えるBOOT/ENを接続します。
    モーショントラッキングセンサとESP32はSPI通信でやり取りします。インジケータ回路にはLEDを2つ用意します。

    モーショントラッキング回路については、回路流用元の[HM-StarterKit]と同じ構成です。
    ESP32特有の部分は、ソフト書き込みに使う信号(Tx/Rx/BOOT/EN)です。

    それでは、それぞれの回路図について説明します。


    モーショントラッキング回路

    回路図はこのようになりました。


    この回路は、[ICM-20648データシート]の推奨回路と一致しています。

    インジケータ回路

    回路図はこのようになりました。


    ESP32のI/Oピンで、LEDの点灯させます。

    ソフト書き込み回路

    回路図はこのようになりました。

    回路図と言ってもコネクタがあるだけです。
    ソフト書き込み必要な信号(Tx/Rx/BOOT/EN)とGNDを接続しています。


    ソフト書き込み基板

    続いて、ソフト書き込み基板について説明します。
    ソフト書き込み基板も回路流用元の[HM-StarterKit]と同じ構成ですが、一部ESP32特有の回路があります。

    回路ブロック図はこのようになりました。

    ソフト書き込み基板には、ソフト書き込みと、バッテリ充電の2つの機能があります。

    左側の外部回路にはPCとバッテリが、右側の外部回路にはマウス(ロボット)があります。
    内部回路左上のUSB Micro-BコネクタはPCと接続されます。USBの信号は、真ん中のIC(FT232RL)でシリアル信号に変換され、外部のマウスに送られます。

    変換ICからはDTR/RTSも出力され、この信号を用いてBOOTとENをON/OFFし、ソフトを自動で書き込みます。また、手動でBOOT/ENをON/OFFできるようにタクトスイッチも接続されています。

    内部回路左下がバッテリ充電ブロックで、USBの電源(VBUS)を用いて、外部のバッテリを充電します。

    それでは、それぞれの回路図について説明します。


    USB-Serial変換回路

    回路図はこのようになりました。
    USB-シリアル変換は[FT232-RLのデータシート]の推奨回路を参考にしました。
    また、自動ソフト書き込み部分については、[ESP32-Devkit-V4の回路図]流用しました(ここ重要)


    まず、Micro-Bコネクタから必要な信号を取り出します。IDは使用しません。


    USBの信号をシリアル変換IC(FT232RL)へ接続します。ICからは、LEDに接続するTXLED/RXLEDと、シリアル通信のTXD/RXDとDTR/RTSが出力されます。大事なことなのでもう一度、DTR/RTSが出力されます。


    続いて、ソフト書き込み用のスイッチ回路です。
    左側は手動ソフト書き込み用のスイッチ回路で、それぞれBOOTとENに接続しています。BOOTとENは、マウス基板側でプルアップされています。
    ESP32ではソフト書き込み時に、プルアップされたBOOTとENをON/OFFしなければなりません。

    そもそもBOOTとENの役割は何なんだ?ということで、[ESP-IDF Programming Guide]を見てみましょう。

      EN: Reset button.
      Boot: Download button. Holding down Boot and then pressing EN initiates Firmware Download mode for downloading firmware through the serial port.

      https://docs.espressif.com/projects/esp-idf/en/latest/get-started/get-started-devkitc.html#functional-description

      翻訳
      EN: リセットボタン。(このボタンを押すと、実行中のプログラムがリセットされます。)
      Boot: ダウンロードボタン。Bootボタンを押しながらENを押すと、シリアルポート経由したファームウェアダウンロードモードになります。

    これでENとBOOTの役割がわかりました。ただ、ソフト書き込み時にENとBootをポチポチ押せば良いのですが、流石に手間がかかります。そこで、回路図右側のようなDTRとRTSを用いたスイッチ回路を用意します。
    この回路の動作する仕組みについて、こちらの記事([ESP8266にDTRとRTSで自動書き込みをする – プログラミングな日々])に詳しく書かれているので参考にしてみてください。


    最後に、ICから出力された信号をそれぞれ、LEDとコネクタに接続します。ESP32-Devkitを流用して、TXDとRXDの信号にダンピング抵抗を挟んでいます。今は0オームですが、通信がうまくできない場合は抵抗値を変更してみます。

    バッテリ充電回路

    バッテリ充電回路はこのようになりました。


    この回路もHM-StarterKitと同じ構成です。充電ICである[LTC4054L-4.2のデータシート]の推奨回路も参考にしています。

    データシートによると、PROG端子に接続された抵抗(Rprog, 回路図のR16)で充電電流(Ichg)を変更できるようです。
    計算式は、Ichg = 150V / Rprogです。今は10kΩの抵抗を接続しているので充電電流は15mAとなります。
    仮に150mAhのバッテリを充電すると、0から満充電までの時間は10時間になります。(とても長い)
    ※実際は、容量が0になるまで放電することはありませんが、それでも充電に時間はかかります

    「じゃあ充電電流を150mAにして1時間で満充電にしよう、いや、1500mAにして0.1時間にしたほうが、いやもっと大きく・・・」
    と、妄想が膨らみますがさすがに充電電流1.5Aは大きすぎます。(多分)
    充電電流を何Aに設定すれば良いのか分からないので調べました。

    Li-Poのお話

    参考資料はお馴染みの[マイクロマウスではじめよう ロボットプログラミング入門]です。この本の2.3章にバッテリーの説明が書かれています。

      電池から取り出せる電荷の総量(クーロン)(容量)があり、容量に対する放電電流値の相対的な比率をCレート(Capacity rate)といいます。
      1Cの場合、定電流放電して、ちょうど1時間で放電終了となる電流値のことをいいます。
      1000mAhの電池の場合、1Cの放電は1000mAの放電を表します。

      充電は、専用の充電器で充電してください。1Cで充電するのが良いでしょう。

      マイクロマウスではじめよう ロボットプログラミング入門 13~14ページより、一部抜粋

    つまり、容量150mAhのバッテリーであれば、1Cの放電は150mA、2Cの放電は300mA、0.5Cの放電は75mAとなります。
    HM-StarterKitの充電基板では、充電電流が15mA、つまり0.1Cに設定されています。電池のことを考えて、ゆっくりと充電してあげてたんですね。設計者の優しさが垣間見れます。

    ・・・いや、やっぱり充電に10時間もかけてられません!!!本に習って1Cで充電します!
    まだバッテリーの選定が終わってないので、150mAhのバッテリーを使う場合は150mA、300mAhのバッテリーを使う場合は300mAとなるように回路の抵抗値R16を変更します。

    回路の間違い

    もう気づいてるかもしれませんが、このソフト書き込み基板の回路図には間違いが2箇所ありました。
    実はこの記事を書いてる時点で、もう基板が出来上がっており、動作確認をしてたのですが・・・ソフトが書き込めませんでした。

    その原因がこちらです。

    間違い1:DTRとRTSを逆にしている
    どうやって気づいたか?:回路図を眺めて発見

    間違い2:シリアルのTxとRxをクロスしていない
    どうやって気づいたか?:改めて[ESP32-Devkit-V4の回路図]を見なおして発見

    間違い2については、流用元の回路図では正しくクロスされていました・・・回路図チェックが甘かったですね。

    幸い、ソフト書き込み基板とマウス基板をつなぐケーブルをクロスしたら、ソフトを書き込めたので良かったです。

    次回の内容

    次回は、ESP32周りの回路と、ピンアサインについて書きます。


    Posted in DCマウス研修, ブログ, 研修