ステッピングモーターの解説とArduino制御
ステッピングモーターは一般的なミニ四駆などに使われているDCモーターとは異なりパルス信号を加えることで細かな制御が可能なモーターです。しかし、エンコーダーを持ち合わせていないのでモーターの現在位置を把握するには外部センサが必要になります(プログラム上でパルスをカウントを行いソフト的に位置を保持することは可能です)。
今回はこのステッピングモーターについて掘り下げていこうと思います。
結線の種類
ステッピングモーターには巻き線の巻き方に2種類あり、電流の方向が一方方向のユニポーラ型と双方向に電流が流れるバイポーラ型があります。
バイポーラ型
バイポーラ型は4線のみのシンプルな配線になります。しかし、駆動電流の方向を制御する必要があるために駆動回路は複雑になります。しかし、巻き線を効率よく利用できるのでユニポーラ型よりトルクが出ます。また、ユニポーラに比べてON/OFFの逆起電圧を低く抑えられるので部品の耐圧を低くできるのがメリットです。
ユニポーラ型
配線はパルス制御の4線+Comで5線または6線になります。ComはシンクタイプではVccです。各信号線に対する電流の方向は常に一方通行なのでパルスの制御が容易にできます。しかし、バイポーラ接続に比べて巻き線の使用率が半分になるのでトルクは出ません。
励磁方法
巻き線の励磁(巻き線に電流を流して磁束を出すこと)方法は主に3パターンあります。
- 1相励磁(フルステップ)
- 2相励磁(フルステップ)
- 1-2相励磁(ハーフステップ)
1相励磁、2相励磁はフルステップ、1-2相励磁はハーフステップとも呼ばれます。
これらの違いは1ステップの励磁でのステップ角であり、ハーフステップはフルステップの1/2のステップ角になります。
1相励磁
2相ユニポーラでの1相励磁方式のタイムチャートになります。制御はとても簡単で1相毎にパルスを与えるだけです。
消費電力が低く駆動することが出来ますがトルクはが小さく振動が発生しやすくなります。Arduino標準ライブラリであるStepper.hはこのフルステップ駆動になります。
2相励磁
1相励磁に比べて1ステップで2倍の電流を流すために消費電力は2倍になります。そのためにトルクは1相励磁に比べて大きく、次の相とパルスを半分被りながら駆動するために動きも滑らかになり振動も少なくなります。
1-2相励磁
1相励磁と2相励磁を交互に行う方法です。フルステップに比べて半分のステップ角となり、より滑らかに駆動することが可能となります。しかし、トルクについては2相励磁に比べて弱くなります。
動作確認
文章だけでは伝わりにくいと思いますので実際に動かしてみたいと思います。
- ステッピングモーター 28BYJ-48
- モータードライバ ULN2003
- 制御 Arduino
今回使用するのはユニポーラの5Vステッピングモーター(ステップ角:5.625°)で内部に減速ギア(1/64)が入っているので実質のステップ角は約0.0879°で4096ステップで一回転します(ハーフステップ基準)。
ドライバにはULN2003を使用します。上記のステッピングモータを購入すると標準的についてきます。これは単純にNPNの2段ダーリントン回路が7個入っているICになります。増幅率は最小で1000のようです。
制御はおなじみのArduinoを使用します。動作確認のためにライブラリは使用せずにコードを描いていきますね
【結線】
*可能であれば外部電源を使用しましょう(Arduino内部5Vでも動きますが200mA以上流れます)
1相励磁(フルステップ)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
const uint8_t A=8; const uint8_t B=9; const uint8_t C=10; const uint8_t D=11; void setup() { pinMode(A, OUTPUT); pinMode(B, OUTPUT); pinMode(C, OUTPUT); pinMode(D, OUTPUT); } void loop() { //360° 2048ステップ。 for(int i=0;i<512;i++){ digitalWrite(A, HIGH);digitalWrite(B, LOW);digitalWrite(C, LOW);digitalWrite(D, LOW); delay(5); digitalWrite(A, LOW);digitalWrite(B, HIGH);digitalWrite(C, LOW);digitalWrite(D, LOW); delay(5); digitalWrite(A, LOW);digitalWrite(B, LOW);digitalWrite(C, HIGH);digitalWrite(D, LOW); delay(5); digitalWrite(A, LOW);digitalWrite(B, LOW);digitalWrite(C, LOW);digitalWrite(D, HIGH); delay(5); } delay(3000); } |
1相励磁では1サイクル4ステップなので4×512で2048ステップとなります。なお、delay(5)を短くするとスピードを上げることが出来ます。
1-2相励磁(ハーフステップ)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
const uint8_t E=8; const uint8_t F=9; const uint8_t G=10; const uint8_t H=11; void setup() { pinMode(E, OUTPUT); pinMode(F, OUTPUT); pinMode(G, OUTPUT); pinMode(H, OUTPUT); } void loop(){ //360° 4096ステップ。 for(int i=0;i<512;i++){ digitalWrite(E, HIGH);digitalWrite(F, LOW);digitalWrite(G, LOW);digitalWrite(H, LOW); delay(2); digitalWrite(E, HIGH);digitalWrite(F, HIGH);digitalWrite(G, LOW);digitalWrite(H, LOW); delay(2); digitalWrite(E, LOW);digitalWrite(F, HIGH);digitalWrite(G, LOW);digitalWrite(H, LOW); delay(2); digitalWrite(E, LOW);digitalWrite(F, HIGH);digitalWrite(G, HIGH);digitalWrite(H, LOW); delay(2); digitalWrite(E, LOW);digitalWrite(F, LOW);digitalWrite(G, HIGH);digitalWrite(H, LOW); delay(2); digitalWrite(E, LOW);digitalWrite(F, LOW);digitalWrite(G, HIGH);digitalWrite(H, HIGH); delay(2); digitalWrite(E, LOW);digitalWrite(F, LOW);digitalWrite(G, LOW);digitalWrite(H, HIGH); delay(2); digitalWrite(E, HIGH);digitalWrite(F, LOW);digitalWrite(G, LOW);digitalWrite(H, HIGH); delay(2); } delay(3000); } |
1-2相励磁では1サイクルが8ステップなので8×512で4096ステップとなります。
コメント