思いつきdeものづくり

3Dプリンターで新しいものづくりを。

ステッピングモーター制御について【Arduinoでプログラミング】

 

 

どうも、オカラボです。

今回は前回に言った通り、ステッピングモーターを回す際のプログラミングを行います。

 

 

okayamalabo.hatenablog.com

 

 

簡単なものですが、以下がプログラム例です。

 

f:id:okayamalabo:20181208173815p:plain

 

DIRECTION用に4番ピンを、STEP用に3番ピンを用いています。

A4988のDIRECTIONはピンの状態(HIGHかLOWか)でモーターの回転方向が変わります。

ですので今回はHIGHにしています。また、回転速度を指定しているのはこの4行。

 

digitalWrite(3,HIGH);

delay(2);

digitalWrite(3,LOW);

delay(2);

 

プログラムは上から順に処理を行うので、この場合だと

3番ピンが2ms間HIGH⇒3番ピンが2ms間LOW 

という処理を延々と繰り返します。この一連の動作でパルスを生み出すわけですね。

 

また、A4988に1パルス与えるとモーターは1ステップ回ります

このプログラムでは1パルスを4msのサイクルで生み出すので、4msで1ステップです。

今回使用したステッピングモーター(NEMA17)は200ステップで1回転する仕様ですので、1回転する時間は

4[ms]×200=800[ms]=0.8[s]=75RPM ですね。

 

 もっと回転数を上げたい場合にはdelay関数でより小さな値を指定しましょう。

ですがdelay(1)以下の値を指定するときには、より小さな値を扱うことができるdelayMicroseconds()を用います。

この関数はdelay関数がm秒単位でのオーダーなのに対して、μ秒単位でのオーダーが可能です。

1000μ秒=1m秒ですので、自在に回転速度を指定することができますね。

例えば以下は、delayMicroseconds関数を用いて回転数を300RPMにしたプログラムです。

 

f:id:okayamalabo:20181208175623p:plain

 

ですがこのプログラムでモーターを動かすと、脱調します。

NEMA17はこの速度では脱調してまともに回りませんでした。

(1/16マイクロステップ駆動では485RPMまで確認していますが)

 

 

 

 

脱調とは、電磁石の極の変化にモーター自身が追い付けなくなる現状のことです。

この状態ではまともに回りませんし、振動も凄いです。

更にトルクもほぼ0になるのでいいことないですね・・・

 

私のNEMA17では大体、30RPM~250RPMが実用的な範囲でした。

(販売元には800RPMまでオッケーと言われましたが・・・)

これ以上は脱調を起こしやすいですし、これ以下では振動がすごいです。

 

f:id:okayamalabo:20181205222507j:plain

Quimatというメーカーから買いました

 

ちなみにですが、Arduinoにはステッピングモーター用のStepperライブラリが存在します。

じゃあそれ使えばいいじゃないか!と思うかもしれませんが、これはA4988にはつかえないんですよね。

Stepper stepper(3,4,5,6,7)みたいな感じで、ステッピングモーターに接続するピンを指定するのですが、A4988-Arduino間に信号線はDIRECTIONSTEPの二本しかありませんよね?

ですから、A4988を使う際にStepperライブラリを使うというのは厳しいかと思われます。

 

こんな感じですかね、配線を全部接続すると以下のような感じになります。

 

 

f:id:okayamalabo:20181205222451j:plain

白いのは新型ギアボックス

 

次回からは新型ギアボックスの製作記でも書きましょうかね。減速比は1:3なので中々使いやすいです。

 

 

okayamalabo.hatenablog.com