こんにちは、shotaです。
社員研修として、オリジナルマウスの製作しています。
[前回の記事]では物体検出センサ回路(壁センサ)について書きました。
今回はモータドライバ・エンコーダ回路について書きます。
モータドライバ・エンコーダ回路 ブロック図
モータドライバ・エンコーダ回路のブロック図はこのようになりました。
ブロック図中央のモータドライバは、ESP32から送られてくる正転・逆転や回転速度(PWM Duty)の信号を、モータ出力電圧に変換します。ブロック図下のエンコーダは、マウスのホイールに取り付けられた磁石の磁気を読み取り、ホイールの角度を出力します。
モータにはMK06-4.5を使用します。[アールティWebショップ]から購入できます。
この構成は、回路流用元の[HM-StarterKit]とほぼ同じですが、エンコーダのMA700が新規設計非推奨だったため、後継機のMA702に変更しています。
モーダドライバ回路図
回路図はこのようになりました。
モータドライバ回路は、モータドライブIC [DRV883のデータシート]に書かれている参考回路とほぼ一致します。それとは別に、モータ電流を滑らかにするためにインダクタ(L1, L2)を追加しています。
マイクロマウスで使うモータは小さいため、電気的時定数が小さい傾向が有ります。その場合、PWM入力に対して電流が反応しやすくなるため、電流スパイクが発生しやすくなります。この電流によりモータが発熱したり、制御が不安定になるという問題が有ります。
インダクタを追加した理由は、モータ電流を滑らかにし、モータの発熱と制御の不安定さを抑えるためです。
参考:[パルス出力ステージ(PWM)とチョークコイル – マクソンアカデミー]
ESP32と接続するピンは、PH(正転・逆転の切り替え)、EN(モータ出力制御(PWM))、SLEEPの3つです。PHとENは、右・左モータで独立しています。SLEEPは右・左共通です。
ESP32のピンアサインについては後ほどまとめて記事にしますが、ここでESP32のPWM機能について簡単に触れておきます。
ESP32 MCPWM機能について
ESP32でモータ制御をする場合、MCPWM機能を使います。MCPWMはMotor Control Pulse Width Modulator (MCPWM)の略です。まさに、モータ制御のための機能ですね。
MCPWM機能の全容は[ESP32のTechnical Reference Manual]を参考にしてください。MCPWMのAPIは[こちら]のページに書かれています。また、サンプルコードが[GitHub]に公開されているので、先にコードを読んだほうが機能を理解しやすいかもしれません。
ここでは、APIのドキュメントからMCPWMの機能をざっくりとまとめてみます。
※ここに提示している画像は[ESP-IDF Programming Guide]内のものを使用しています
- MCPWMユニットは2つあり、それぞれのユニットが3つのペア(A, B)の出力をもつ
- ブラシ付きモータや、ブラシレスモータが回せるように設計されている
- PWMだけでなく、High / Lowも出力できる。
- 今回で言うと、正転・逆転を切り替えるPHピンへの入力に使用します
- [mcpwm_set_signal_high(), mcpwm_set_signal_low()]
- PWM0とPWM1とで同期出力できる
- PWM信号が同期できると、左右モータの制御がズレなくて良いですね。
- https://docs.espressif.com/projects/esp-idf/en/latest/api-reference/peripherals/mcpwm.html#adjust
ということで、ESP32でのモータ制御は問題なさそう(むしろAPIが整えられてて簡単そう)ということがわかりました。
エンコーダ回路図
エンコーダ回路は、エンコーダIC [MA702のデータシート]に書かれている参考回路とほぼ一致します。
ESP32とは、SPI通信でやり取りします。ESP32でSPI通信をするやり方は、[ESP32でMPU9250とSPI通信する]の記事にまとめらています。
次回の内容
次回は、残りのモーショントラッキング・インジケータ・ソフト書き込み回路について書きます。