7
8

More than 3 years have passed since last update.

DCモーターをM5StackでPWM制御してみた

Last updated at Posted at 2020-11-09

ちょっとずつ電子工作に慣れてきたので、おとこのロマン、モーターの制御に手を出してみました。

モーターはギヤ付きの"タミヤ4速ウォームギヤボックスHE"を買いました。
72008_1.jpg

とりあえず動かしてみた

モーターにM5Stackの3.3V電源を与えただけ。当然動きますが、これだけだと速度制御はできないですね。

モーターの速度を変えるには

モーターの速度を変えるには入力電圧を変えれば良いそうで、電圧を低くすれば回転は遅くなるし、電圧を高くすれば速くなる。
ググったところ、M5Stackから出力電圧を変えるのは簡単にはできなさそうです。
そこでPWM制御というやり方があるそうです。
詳細は以下リンク先を参照ください。
https://monoist.atmarkit.co.jp/mn/articles/0706/06/news132.html

大まかにいうと、電圧の入力を高速でON/OFF切り替えて速度を変えるというもの。
周期内でのONの時間が長ければモーターの回転が速くなるし、OFFの時間が長ければ逆に遅くなる、というもの。
M5StackでPWM制御するやり方はネット上でそこそこあったので、これを試してみます。

モーターの回転の向きを変えるには

PWM制御を試す前に、モーターの回転の向きを変えるにはどうすればいいのでしょうか。答えは簡単で、電流の向きを変えるだけです。
ただ、手動で配線を変えるのは簡単ですが、M5Stack単体で電流の向きを変えるのはできないようなので、これまたググってみたところ、モータードライバーなるものを使えば簡単とのこと。
早速買ってみました。
https://www.switch-science.com/catalog/5522/
43430017-25d3-49dc-bec9-dc475b9219bb.jpg
2台までモーター制御できて、テストボタンがついていて、簡単にモーターの接続、操作、回転方向のテストできる、という初心者向けのもの。

PWM制御でモーターを遅くしてみた

モータードライバーをM5Stackに繋げて、PWM制御でモーターの回転速度を落としてみました。

ソースコードです。

#include <M5Stack.h>

const double PWM_Hz = 2000;   // PWM周波数
const uint8_t PWM_level = 8; // PWM分解能 16bit(1~256)
const uint8_t PWM_CH = 1;  // チャンネル

void setup() {
  M5.begin();
  M5.Power.begin();

  pinMode(26, OUTPUT); 

  // チャンネルと周波数の分解能を設定
  ledcSetup(PWM_CH, PWM_Hz, PWM_level);
  // モータのピンとチャンネルの設定
  ledcAttachPin(26, PWM_CH);
}

void loop() {
  M5.update();

  if (M5.BtnA.wasPressed())
  {
    // デューティー比0.25(64/256)でPWM制御
    ledcWrite(PWM_CH,64);
  }
  else if (M5.BtnC.wasPressed())
  {
    // ストップ
    ledcWrite(PWM_CH,0);
  }

  delay(10); 
}

PWM周波数を変えてみた

PWM周波数を変えるとどうなるのか試してみました。

const double PWM_Hz = 20;   // PWM周波数

見た感じ、速度はあんまり変わってませんが、明らかにカクついています。小刻みに震えてちょっとうるさいです。

まとめ

モータードライバーとPWM制御でモーターの向きと速度を変えることができました。
次ははモーターで具体的な何かしらを作ってみたいと思います。

7
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
8