ちょっとずつ電子工作に慣れてきたので、おとこのロマン、モーターの制御に手を出してみました。
モーターはギヤ付きの"タミヤ4速ウォームギヤボックスHE"を買いました。
とりあえず動かしてみた
モーターにM5Stackの3.3V電源を与えただけ。当然動きますが、これだけだと速度制御はできないですね。
PWM制御なし pic.twitter.com/ybUpKeEdca
— なまやつはし (@5xssUFaTa9UqFJx) November 9, 2020
モーターの速度を変えるには
モーターの速度を変えるには入力電圧を変えれば良いそうで、電圧を低くすれば回転は遅くなるし、電圧を高くすれば速くなる。
ググったところ、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/
2台までモーター制御できて、テストボタンがついていて、簡単にモーターの接続、操作、回転方向のテストできる、という初心者向けのもの。
PWM制御でモーターを遅くしてみた
モータードライバーをM5Stackに繋げて、PWM制御でモーターの回転速度を落としてみました。
周波数2000hz デューティー比0.25 pic.twitter.com/fjCHO5Qpe4
— なまやつはし (@5xssUFaTa9UqFJx) November 9, 2020
ソースコードです。
#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周波数
周波数20hz デューティー比0.25 pic.twitter.com/3Q7sDLy9aE
— なまやつはし (@5xssUFaTa9UqFJx) November 9, 2020
見た感じ、速度はあんまり変わってませんが、明らかにカクついています。小刻みに震えてちょっとうるさいです。
まとめ
モータードライバーとPWM制御でモーターの向きと速度を変えることができました。
次ははモーターで具体的な何かしらを作ってみたいと思います。