
概要

モーター変更
前回の回転テストではドローン用モーターを使用していたのですが少し扱いづらい感じでした。ちょっと調べてみると、ジンバル用モーターなど抵抗値が高めの方が扱い易そうな感じでしたのでモーターを変更することに。アリエクで随分安い物があったので購入。

届いたモーター。1個数百円という安さでした。ただハンダ付けされていたリード線がすぐに取れてしまったので付け直してます。おさらいを兼ねて、前回と同じ回路・プログラムで回転テストしてみます。

ハーフブリッジ3回路分はDRV8835 2つで代用。少し無理やりかもしれませんが動いているのでOK。
//2025/05/01 矩形波駆動テスト
//imo Lab.
//https://garchiving.com
void setup() {
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
}
void loop() {
motorDrive(1, 0, 1);
motorDrive(1, 0, 0);
motorDrive(1, 1, 0);
motorDrive(0, 1, 0);
motorDrive(0, 1, 1);
motorDrive(0, 0, 1);
}
void motorDrive(bool u, bool v, bool w) {
digitalWrite(2, u);
digitalWrite(3, v);
digitalWrite(4, w);
delay(10);
}
2/3/4ピンから一定間隔パルスを120度ずつ位相ずらして出力しているだけのスケッチです。
回転テスト

少し心配でしたが問題無く回転。ということでこのモーターを使用して回転制御(正転/逆転・速度)を行っていきます。
矩形波で正転・逆転・速度制御
ホイール作成
回転制御には関係無いのですが、モーターの見た目がシンプルで回転が分り難いのでホイールを作成しました。

さくっと3Dモデルして印刷。もう少しかっこいい感じのデザインにしたかったのですが無理でした。作図20分、印刷30分ほど。既製品ではなかなか見つからないこういったオーダーメード部品が1時間足らずで作れてしまうのは有難い。

モーターにねじ止めして完成。白いのは回転が分かり易くなるようにしている両面テープ。スポーク形状を少し工夫して回転を分かり易くしてみたつもりでしたが全くわかりませんでした。
ブレッドボード
回路は先ほどの回転テストと同様で変更無し。マイコンをArduino ⇒ Raspberry Pi PicoWに変更してます。なるべくブレッドボードに収めたかったのとBluetoothを使用したかったためです。

左の方に写ってる抵抗/コンデンサは今回は使用してません。
プログラム
回転方向、速度を制御するためスケッチは少し変更してます。信号は矩形波駆動のまま。
// 2025/05/01 矩形波によるモーター制御(正転/逆転/速度) // imo Lab. // https://garchiving.com #include "SerialBT.h" int8_t state = 0; int8_t dir; int32_t currentTime, serialTimer, bluetoothTimer, motorTimer; float freq = 3; uint32_t interval; void setup() { Serial.begin(115200); SerialBT.begin(115200); pinMode(11, OUTPUT); pinMode(13, OUTPUT); pinMode(15, OUTPUT); } void loop() { currentTime = micros(); freq == 0 ? state = 0 : interval = (1000000.0 / (freq * 6.0)); if (currentTime - motorTimer > interval) { motorTimer = currentTime; state += dir; if (state == 6) state = 0; if (state == -1) state = 5; if (state == 0) motorDrive(1, 0, 1); if (state == 1) motorDrive(1, 0, 0); if (state == 2) motorDrive(1, 1, 0); if (state == 3) motorDrive(0, 1, 0); if (state == 4) motorDrive(0, 1, 1); if (state == 5) motorDrive(0, 0, 1); } if (currentTime - bluetoothTimer > 10000) { bluetoothTimer = currentTime; bluetoothSPP(); } } void motorDrive(bool u, bool v, bool w) { digitalWrite(11, u); digitalWrite(13, v); digitalWrite(15, w); }
Bluetooth通信のところは割愛。PCから周波数freq( 0~100Hz)と回転方向dir( +1 or -1)の情報を受信してモーター制御してます。Picoでテストしてますが、Bluetoothの所を消せばUNOでも動くはずです。
回転制御テスト
単純に回転制御するだけなら思ったよりも簡単に実現できました。細かい制御が必要なければこれでも使えるかも。ただ全体的に振動も大きく低速回転ではアナログ時計の秒針みたいに脈打つ感じになってしまいます。
矩形波駆動でそれなりに制御はできたので次から正弦波駆動を行っていきたいと思います。
コメント