
市販のESCを使用せずマイコン(Arduino/RaspberryPiなど)からブラシレスモーターを駆動してみます。
概要
前回、矩形波による回転制御まで実施しました。今回は正弦波駆動でブラシレスモーターの回転制御を実施してみます。


矩形波でブラシレスモーターを回転制御(正転・逆転・速度制御)
市販のESCを使用せずマイコン(Arduino/RaspberryPiなど)からブラシレスモーターを駆動してみます。概要 前回、Arduono + 矩形波駆動でBLDCモーターを単純に回転させてみました。今回はもう少しプログラムを修正して矩...
矩形波駆動と正弦波駆動
矩形波駆動
矩形波駆動から少しおさらい。

順番にスイッチを切り替えてコイルの通電方向を制御してモーターを回転させます。矩形波駆動の場合はスイッチは単純なON/OFFで制御。

3つのスイッチのON/OFFタイミングを1/3ずつずらしてON/OFF制御することでモーターを回転させます。
▼矩形波駆動▼

▼矩形波駆動▼

矩形波でブラシレスモーターを回転させてみる
市販のESCを使用せずマイコン(Arduino/RaspberryPiなど)からブラシレスモーターを駆動してみます。概要 BLDCモーターをマイコンなどから駆動するときには、RCやドローンなどで使用している市販のESC(Electronic...
正弦波駆動
対して正弦波駆動はスイッチのON/OFFではなく、正弦波状にコイルに電圧を加えることで回転させます。矩形波に比べ低振動、低騒音での駆動が可能とのこと。

矩形波同様に3分の1ごと(120度ごと)にずらして電圧を変化させます。このグラフは単純にSIN関数値を表示させているだけですが、実際はI/OピンからPWM出力のON/OFFタイミング/デューティ比を制御して疑似的な正弦波電圧を作り出します。
▼疑似正弦波の作り方▼

▼疑似正弦波の作り方▼

Arduinoで疑似正弦波の作り方
概要 Arduinoで正弦波を作ります。UNOでは本当のアナログ出力(DAC)はできないのでPWM出力とSIN関数を使用して疑似正弦波を出力してみます。 PWM出力(青)のデューティ比を変化させて正弦波/SIN(赤)となるように疑似的に出力...
実際にマイコン(Arduino/Pico)で正弦波を作ってモーターを駆動してみます。
回路

回路は矩形波駆動の時と同様。マイコンからのピン電流では直接駆動できないのでハーフブリッジ回路を経由します。いいかどうかわかりませんがハーフブリッジ3回路分はDRV8835を2つ使って代用してます。
プログラム
11/13/15ピンから3分の1ずつずらした正弦波を出力してます。
//ブラシレスモーターを正弦波駆動
//imo Lab.
//https://garchiving.com
#include "SerialBT.h"
int8_t dir;
int16_t deg;
int16_t degStep = 1;
int32_t currentTime, loopTimer, serialTimer, bluetoothTimer;
uint32_t interval;
float freq;
void setup() {
Serial.begin(115200);
SerialBT.begin(115200);
pinMode(11, OUTPUT);
pinMode(13, OUTPUT);
pinMode(15, OUTPUT);
}
void loop() {
currentTime = micros();
freq == 0 ? interval = 1000000 : interval = 1000000.0 / (freq * (360 / degStep));
if (currentTime - loopTimer > interval) {
loopTimer = currentTime;
float val1 = 0.5 + 0.5 * sin(deg * PI / 180.0);
float val2 = 0.5 + 0.5 * sin((deg + 120) * PI / 180.0);
float val3 = 0.5 + 0.5 * sin((deg + 240) * PI / 180.0);
deg == 360 - degStep ? deg = 0 : deg += dir * degStep;
analogWrite(11, val1 * 255);
analogWrite(13, val2 * 255);
analogWrite(15, val3 * 255);
}
if (currentTime - bluetoothTimer > 10000) {
bluetoothTimer = currentTime;
bluetoothSPP();
}
}
PCから正弦波の分解能/周波数、回転方向の情報を受信してモーター制御してます。
テスト回転

PWM周波数がデフォルト490Hzではコイル鳴きがひどかったので20kHzまで周波数を上げてテストしてます。矩形波駆動に比べると振動/騒音が随分抑えらえてかなり静音になりました。低速でもわりとスムーズ。
センサレスで単純に回転制御させるだけであれば市販ESC経由せずとも思いのほか簡単に実現できました。フィードバック制御とかまだまだかなり奥が深い分野ではありますが個人的使う分にはこの程度の制御でも今のところは十分。自前でブラシレスモーターが駆動できると工作の幅が広がりそうです。
コメント