2014.10.07
私たちはSparkfun Easydriver v.4.4を200 ステップ 12V Mercury SM-42BYG011-25 2 フェーズ ステッピングモーターを用いてテストしてみた。Easydriverは Brian Schmalzによってデザインされ、Allegro A3967マイクロステッピングドライバー上に構築されたものである。これらボードの配線の仕方にはたくさんのチュートリアルがあるが、ここにはマイクロコントローラーを用いて行われるべきシンセシス(合成)がある。
私たちはArduino Uno boardと同等のコントローラーを使用した。このステッピングモーターは0.23 N.Mのホールディングトルクを持つ。このテストの間に、私たちはトルクの効率とステップの増大に興味を持ったため、ノイズの管理を考える必要はあまりなかった。Easydriverは デフォルトでは200ステップモーター、解像度1600へと導く8マイクロステッピングモードに設定されている。ではこのデフォルトの状態でのトルクはどうだろうか?それは0.045 N.M/incrementationとなり、フルパワー時の20%と同様である。ドライバーはそれ以上のマイクロステッピングには対応できないし、また、危険でもある。従って、”マグネティックバックラッシュ”のために、正確さは失われる。注)これまでにこういったバックラッシュは私たちは経験したことが無く、さらに高い電流によってトルクを高めることは可能である。
これはmicromo.comによるトルク分解と解像度と図表である:
これは私たちが書いたデフォルトのコンフィグ8マイクロステップである。
注)ここではDIR, STEPとGNDピンのみが必要である。 1 ステップのコードは以下のようになる:
int DIRE_PIN = 2; int STEP_PIN = 3; void setup() { pinMode(DIRE_PIN, OUTPUT); pinMode(STEP_PIN, OUTPUT); } void loop() { digitalWrite(DIRE_PIN, HIGH); // We turn CCW digitalWrite(STEP_PIN, LOW); delayMicroseconds(200); digitalWrite(STEP_PIN, HIGH); delayMicroseconds(400); }
ローテーション速度はコントローラーボードとモーター数による。マイクロコントローラー上のCPUの過負荷を避けるため、インストラクション(動作命令)とインストラクションの間に遅延(Delay)を挿入することが勧められる。私たちの経験から、600マイクロセカンド以下にすることは200フルステップモーターの500rpmを意味するため、危険である。さらに、Arduinoボード上ではやはりCPUの過負荷によるブロッキングやノイズを避けるために、この遅延を増加することが推奨される。インターネット上にあるいくつかのチュートリアルは別の方法で減速を実行している: High/Lowのインストラクションの後にのみ、遅延を使用しているのである。低速から高速へのシグナルはステップのトリガーになるということを知ると、LowーHighー遅延の機能でステップのインストラクションを実行できると言うことが理解できるようになる。高速のステッパードライバーのみを使用すると、どれが最先端であるかわかるが、私たちはこれからもそれぞれのEasydriverのクリエーターやりかたにならい、各インストラクションの後で平等にディスパッチすることになるだろう。
私たちの使用しているArduino controllerはLowとHighの間に遅延が無いとモーターがロックされてしまう。低速の減速は危険である。
ここで私たちは1, 2, 4, 8解像度の選択に満足しており、どのようにしてEasydriverが意図された解像度にするのかを見てみたい。これは私たちのワイアリングの写真である:
そしてこれがそれぞれの解像度のAllegroマイクロセットアップである:
必要なのは、ワイヤーMS1 and MS2をarduinoのデジタルアウトプットにピンし、以下のvalueをセットアップすることである:
Full step: | MS1=LOW, | MS2=LOW |
1/2 step: | MS1=HIGH, | MS2=LOW |
1/4 step: | MS1=LOW, | MS2=HIGH |
1/8 step: | MS1=HIGH, | MS2=HIGH |
SLEEPピンは必要だろうか?このピンはモーターの電源と励磁最大静止トルクの電源を切る。これを使う必要があるのは、不使用時に熱を持つのを防ぐためだけである。この私たちのミニマルなコードはフルステップ、ノンストップのローテーションのためのものである:
int DIRE_PIN = 2; int STEP_PIN = 3; int MS1_PIN = 12; int MS2_PIN = 13; void setup() { pinMode(DIRE_PIN, OUTPUT); pinMode(STEP_PIN, OUTPUT); pinMode(MS1_PIN, OUTPUT); pinMode(MS2_PIN, OUTPUT); } void loop() { digitalWrite(MS1_PIN, LOW); digitalWrite(MS2_PIN, LOW); digitalWrite(DIRE_PIN, HIGH); // We turn CCW digitalWrite(STEP_PIN, LOW); delayMicroseconds(200); digitalWrite(STEP_PIN, HIGH); delayMicroseconds(400); }