2021/12/15 よりサイトリニューアルしました

ESP32でDCモーターのPWM制御をM5Stack core2のスライダーで操作してみる(micropython)

DCモーター PWM

 

前回、M5Stack core2のスライダーからESP32のLEDをPWM制御してみました。↓

 

今回はLEDをDCモーターに変えて、一本のスライダーで正転、後転する仕組みをPWMを使って作成します。

前回作成したスライダーの左側、縦の方を使います。中央が停止、上にスライドで正転、下にスライドで後転するようにします。

※右側のスライダーはステアリングに使用するので、とりあえず今回はなにもせず保留。

 

 

初めに

概要

前回同様、M5StackをクライアントとしてUDPでESP32に接続させます。スライダーの値をESP32が受け取って、値に応じた動作をさせます。

M5Stack core2(クライアント側、コントローラー) ⇒ UDP ⇒ ESP32(サーバー側)、DCモーター駆動

 

構成

・M5Stack core2

・ESP32

・DCモーター、DCモータードライバ

・ブレッドボード、ジャンパーピン

  

 

余談

ESP32でDCモーターを駆動するにあたり、モーター駆動時のみピンポイントで下記エラーが頻繁に発生いたしました。

”Guru Meditation Error: Core 1 panic’ed (LoadProhibited). Exception was unhandled.”

メモリ不足とか電力不足等で発生するみたいですが、どちらも思い当たる節がなく。。

丸1日悩みましたが、結果、ESP32のファームウェアを違うものにインストールし直した所改善しました。↓

変更前 esp32-20220117-v1.18 .bin

変更後 esp32-ota-20220320-unstable-v1.18-221-g94a9b5066.bin

ESP-WROOM-32D DevKitC-32Dという基板を使用していますが、ESP32のファームウェアが無数にあり、はっきりいってどれが正解か分かりません。。↑のも正解かはわかりません。。

とりあえず上記エラーが発生した場合は、一度ファームウェアの変更を考えてみるのもいいと思います。

 

 

プログラム

クライアント側、M5Stack core2(micropython)

先頭のWIFI接続は割愛します。

スライダーのレンジに-1023~1023を指定していますが、これはPWMのデューティサイクルの値になります。

デューティサイクルは 0 (全オフ)と 1023 (全オン)の間であり、512 は 50% のデューティとなります。この最小値/最大値を超える値は切り捨てられます。

マイナスを付けているのは、ESP32側で正転か後転かの判別を付けるためです。

 

サーバー側、M5Stack core2(micropython)

PWMの周波数は5Khzとし、2つの出力ピンでPWMのインスタンスを作成します。

ループ処理ではスライダーの値を随時受け取り、デューティー比に応じてP1,P2の出力電圧が変動します。

左右のスライダーを識別するためにA,Bの文字列を数値に先頭に付けていますので、if文の初めで一度先頭文字を削除していますが、マイナス符号(後転)の場合はもう一度先頭文字を削除する必要があります。

プラス=正転、マイナス=後転、数値100~-100は停止、としています。

 

 

完成

こんな感じで制御できます。↓

次回は右側のスライダーでサーボモーターを制御させてみたいと思います。

 

 

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です