Arduinoでステッピングモータ(バイポーラ)を回転させてみました。最終的には複数のステッピングモータを各々で制御することが目標なのですが、まずは勉強を兼ねて、一つのステッピングモータを回転してみます。
概要
今回はArduinoUNOとA4988の組み合わで行ってみます。
L6470はこちら
>>ArduinoとL6470でステッピングモーターを回転
▼ステッピングモータ▼
▼A4988モータドライバ▼
A4988ドライバですがいろいろ出回っているみたいで・・、A4988を入手したと思っていたのですが印字がHR4988となってました。大差ないかと思って調べてたら、A4988はマイクロステップが16分割まで設定できるようですが、HR4988は128分割ステップまで設定できるよう??・・・。
情報も海外サイトが多くていまいちよくわかりません。
▼HR4988 マイクロステップ分解能▼
こんな感じで見る場所で扱ってる情報がまちまちで、、、何が正なのかよくわかりません。きっちり読み込めばわかるのかもしれませんが、実際に確認した方が早そうなので試しに回転させてみます。
arduinoとの結線
結線はこんな感じで、基本はA4988と同じようにしてます。モータの操作はArduino12ピンからHIGH、LOWで回転方向の指示。13ピンからパルス信号送信すれば回転します。ドライバ使うと簡単です・・。
あとMS1~MS2のHIGH LOW組合せででマイクロステップの分解能を決められるのですが、先ほど記載したように何が正なのかよくわかりません。
電流調整は付いている半固定抵抗で行います。よく見かける式は電流=Vref×2.5となってますが、どうも正確には電流=Vref/(8×Rc)のよう??。
私の入手したドライバモジュールには抵抗0.1Ωが実装されていたので電流=Vref×1.25となるように調整が必要そうです。よく見かけるのは0.05Ωの抵抗が実装されてるのかな??。よくわかりません。
回転確認
▼スケッチ(ソース)▼
void loop() { DIR = 1 - DIR; digitalWrite(12, DIR); for (i = 0; i < 200 * 2; i++) { digitalWrite(13, HIGH); delay(1); digitalWrite(13, LOW); delay(1); } delay(1000); }
とりあえずdelay使ってパルス信号生成してます。保有しているステッピングモータが1ステップ:1.8°回転なので、200回パルス送信で1回転です。ここでは2回転分のパルス生成をおよそ500Hzで発生させてます。その後、1秒のインターバルを入れて回転方向逆にして、、と繰り返してます。で試したところちゃんと1秒のインターバル毎に2回転しました。
あとマイクロステップの分解能を確認するためにパルス送信の回数を変えるのとMS1~MS2のHIGH LOW組合せを少しずつ変えて、ちょうど1回転する所をそれぞれ探してみました。
▼HR4988マイクロステップ分解能▼
結果、こんな感じでした。何かあやしさが残るのですがこの組合せで狙った角度に回転してますので、とりあえずいいのかな・・。1/32、1/64.1/128ステップは無かったです・・。いまのところ原因不明。
次に、パルス信号周波数の上限値を探ってみました。データシート?見るとHIGH、LOWのmin時間は1μ秒となっているので最大500kHz?になるのかな。
が実際試したところ回転する範囲は、~1600Hz程度でした。ただ脱調を目視で確認しただけで、オシロとかできちっと確認したわけではないのでかなりアバウトな値かと思います。
A4988はとりあえず回転させるだけならパルス信号送るだけなので簡単ですね。マイコンに他のこともさせたいですし、複数のモータ制御や複雑なことするとなるとTIMER使った方がよさそうな感じです。
少し高価ですが、できればL6470モータドライバも試してみたいですね。
コメント