Ene1-GPも終わりもうそろそろ一年が終わりそうな今日この頃、来年の大会のためにもブラシレスモーターの制御を始めることにしました。うちのサークルで使っているモーターは、ブラシレスモーター でかつセンサーがついているので、今回はそれと同じ構造のモーターをAmazonで買い回してみました。
全然関係ないんですが、fritzing有料化しました? ダウンロードページのデザインが変わっていて、無料ダウンロードのリンクがみつからないんですよね。何か知っている方がいたら教えてください。
今回使ったモーターはこういうやつです。
実際に買ったやつは在庫がないらしく検索ではヒットしなかったですが、こんな感じのやつでした。
システムの概略としてはこんな感じです。

いつものvvvfを使い、その制御にブラシレスモーター からのセンサー入力を利用する方法をとっています。
追加された回路はこんな感じです。

モーターのセンサーの取り扱い回路とセンサーの値で決まるステップ表示用のLEDを増やしただけです。
今回もプログラムは特筆すべきところがないのでコメントだけつけて最後に書いておきます。
実際に回してみるとこんな感じです。
まあほどほどにいい感じじゃないでしょうか? ただ問題があって、ブラシレスモーターはやたらと電流が流れるのでブレッドボードが溶けました。
//ステップの切り替えタイミングを計算
//VVVFを駆動
全然関係ないんですが、fritzing有料化しました? ダウンロードページのデザインが変わっていて、無料ダウンロードのリンクがみつからないんですよね。何か知っている方がいたら教えてください。
今回使ったモーターはこういうやつです。
実際に買ったやつは在庫がないらしく検索ではヒットしなかったですが、こんな感じのやつでした。
システムの概略としてはこんな感じです。

いつものvvvfを使い、その制御にブラシレスモーター からのセンサー入力を利用する方法をとっています。
追加された回路はこんな感じです。

モーターのセンサーの取り扱い回路とセンサーの値で決まるステップ表示用のLEDを増やしただけです。
今回もプログラムは特筆すべきところがないのでコメントだけつけて最後に書いておきます。
実際に回してみるとこんな感じです。
ちさと@chisao_62
定常運転はいい感じ https://t.co/CcacA4rGat
2019/12/05 10:51:36
まあほどほどにいい感じじゃないでしょうか? ただ問題があって、ブラシレスモーターはやたらと電流が流れるのでブレッドボードが溶けました。
まあ高校生の時に先生の前でVVVFを動かしてブレッドボードを溶かしたこともあるし問題ないです。ただ、このままで良いわけでもないのできちんと基板を作ろうと思います。それではまた今度。ちさと@chisao_62
めっちゃブレボ溶けたけど刺し直したらちゃんと動いたからヨシ! https://t.co/NkE4ayBAY9
2019/11/30 16:37:26
見る価値があるか怪しいプログラムです。一応少しだけコメントをつけておきます。
#define thre 200
#define thre 200
int nstep;
int bstep;
unsigned long timeset;
int delaytime;
void setup() {
Serial.begin(9600);
//各出力ピンのモードを出力に設定
pinMode(2, OUTPUT);//インダクタ接続
pinMode(3, OUTPUT);//
pinMode(4, OUTPUT);//
}
void loop() {
//センサーの値を見てステップを判断
//センサーの値を見てステップを判断
Serial.println(delaytime);
if (analogRead(0) > thre) {
if (analogRead(1) > thre) {
if (analogRead(2) > thre) {
nstep = 1;
}
else {
nstep = 2;
}
}
else {
if (analogRead(2) > thre) {
nstep = 3;
}
else {
nstep = 4;
}
}
}
else {
if (analogRead(1) > thre) {
if (analogRead(2) > thre) {
nstep = 5;
}
else {
nstep = 6;
}
}
else {
if (analogRead(2) > thre) {
nstep = 7;
}
else {
nstep = 8;
}
}
}
//現在のステップを表示
//現在のステップを表示
switch (nstep) {
case 4:
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
break;
case 2:
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, LOW);
break;
case 6:
digitalWrite(2, LOW);
digitalWrite(3, HIGH);
digitalWrite(4, LOW);
break;
case 5:
digitalWrite(2, LOW);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
break;
case 7:
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, HIGH);
break;
case 3:
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
digitalWrite(4, HIGH);
break;
case 1:
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
break;
case 8:
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
break;
}
//ステップの切り替えタイミングを計算
if (nstep != bstep) {
delaytime=(millis()-timeset)/5;
timeset = millis();
}
//VVVFを駆動
if ((millis() - timeset) > delaytime) {
switch (nstep) {
case 4:
analogWrite(9, 250);
analogWrite(10, 250);
analogWrite(11, 0);
break;
case 2:
analogWrite( 9, 0);
analogWrite(10, 250);
analogWrite(11, 0);
break;
case 6:
analogWrite( 9, 0);
analogWrite(10, 250);
analogWrite(11, 250);
break;
case 5:
analogWrite( 9, 0);
analogWrite(10, 0);
analogWrite(11, 250);
break;
case 7:
analogWrite(9, 250);
analogWrite(10, 0);
analogWrite(11, 250);
break;
case 3:
analogWrite(9, 250);
analogWrite(10, 0);
analogWrite(11, 0);
break;
case 1:
break;
case 8:
break;
}
}
bstep = nstep;
}
/*センサーの値とステップの関係
HHH 1
HHL 2
HLH 3
HLL 4
LHH 5
LHL 6
LLH 7
LLL 8
*/
/*ステップの流れる順番
4 2 6 5 7 3
*/