こんにちは、shotaです。
社員研修として、オリジナルマウスを製作しています。
[前回の記事]ではモータドライバとエンコーダについて書きました。
今回は
について書きます。
マウス基板のその他モジュールについてはサラッと流して、ソフト書き込み基板をメインに説明します。
マウス基板
その他モジュール ブロック図
ブロック図はこのようになりました。
点線から左側は外部回路で、ソフト書き込み基板があります。
点線から右側が内部回路で、左からソフト書き込みコネクタ・ESP32・モーショントラッキングセンサ(6軸加速度・ジャイロ)・LED x2があります。
ソフト書き込みコネクタには、データの送受信をするTx/Rxと、書き込み時にESP32のモードを切り替えるBOOT/ENを接続します。
モーショントラッキングセンサとESP32はSPI通信でやり取りします。インジケータ回路にはLEDを2つ用意します。
モーショントラッキング回路については、回路流用元の[HM-StarterKit]と同じ構成です。
ESP32特有の部分は、ソフト書き込みに使う信号(Tx/Rx/BOOT/EN)です。
それでは、それぞれの回路図について説明します。
モーショントラッキング回路
回路図はこのようになりました。
この回路は、[ICM-20648データシート]の推奨回路と一致しています。
インジケータ回路
回路図はこのようになりました。
ソフト書き込み回路
回路図はこのようになりました。
回路図と言ってもコネクタがあるだけです。
ソフト書き込み必要な信号(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周りの回路と、ピンアサインについて書きます。