「Arduinoの基礎 - ステッピングモータ」の版間の差分

提供:MochiuWiki - SUSE, Electronic Circuit, PCB
ナビゲーションに移動 検索に移動
(ページの作成:「== 概要 == ここでは、2相4ワイヤの小さなステッピングモータを、Arduinoから制御する方法について記載する。<br> <br> 一般的なモ…」)
 
編集の要約なし
1行目: 1行目:
== 概要 ==
== 概要 ==
ここでは、2相4ワイヤの小さなステッピングモータを、Arduinoから制御する方法について記載する。<br>
ここでは、2相4ワイヤの小さなステッピングモータとを、Arduinoから制御する方法について記載する。<br>
<br>
<br>
一般的なモータは連続回転するのを期待する時に使用するが、ステッピングモータは特定の角度だけ回って止まるような動作をしたい場合に使用する。<br>
一般的なモータは連続回転するのを期待する時に使用するが、ステッピングモータは特定の角度だけ回って止まるような動作をしたい場合に使用する。<br>
6行目: 6行目:
<br><br>
<br><br>


== ステッピングモータの使用 ==
== ステッピングモータ(バイポーラ)の使用 ==
ここで使用する小さなステッピングモータは、1ステップで18[度]回転するモータで、20ステップで1回転する。<br>
ここで使用する小さなステッピングモータは、1ステップで18[度]回転するモータで、20ステップで1回転する。<br>
また、使用するステッピングモータの種類は、バイポーラステッピングモータといい、内部にコイルが2つあり、その極性を切り替えることでモータの回転角を操作する。<br>
また、使用するステッピングモータの種類は、バイポーラステッピングモータといい、内部にコイルが2つあり、その極性を切り替えることでモータの回転角を操作する。<br>
23行目: 23行目:
<br>
<br>
Arduinoのサンプルコードを以下に記述する。<br>
Arduinoのサンプルコードを以下に記述する。<br>
Arduinoの<code>Stepper</code>ライブラリが使用できる。<br>
<br>
<br>
<code>Stepper</code>クラスの<code>setSpeed</code>メソッドでモータの回転速度をRPMで指定する。<br>
<code>Stepper</code>クラスの<code>setSpeed</code>メソッドでモータの回転速度をRPMで指定する。<br>
48行目: 49行目:
     stepper.step(-10);
     stepper.step(-10);
     delay(1000);   
     delay(1000);   
}
</source>
<br><br>
== ステッピングモータ(ユニポーラ)の使用 ==
このセクションでは、ユニポーラ型のステッピングモータである28BYJ-48を使用する。<br>
<br>
ここでは、ステッピングモータドライバICとしてULN2003搭載ドライバボードを使用している。<br>
このドライバボードの詳細が確認できなかったので少し曖昧な点がある。<br>
そのため、実験的なスタンスで見ること。<br>
<br>
ステッピングモータ28BYJ-48のデータシートは下図の通りである。<br>
モータの出力軸は5[mm]径である。<br>
[[ファイル:Arduino 28BYJ-48 ULN2003 1.png|フレームなし|中央]]
<br>
また、配線図は下図の通りである。<br>
ここでは、ULN2003搭載ドライバボードの電源電圧に9[V]電池を使用しているが、5[V]の方がよい可能性がある)<br>
[[ファイル:Arduino 28BYJ-48 ULN2003 2.png|フレームなし|中央]]
<br>
Arudinoのサンプルコードを以下に記述する。<br>
Arduinoの<code>Stepper</code>ライブラリが使用できる。<br>
<br>
ここでは、電動スライダとしては使用している。28BYJ-48は、内部で1/64のギア比があるため、小さいながらもトルクがあって使いやすい。<br>
[[ファイル:Arduino 28BYJ-48 ULN2003 3.png|フレームなし|中央]]
<source lang="c++">
#include <Stepper.h>
const int number_of_steps = 32;
const int steps_output_rev = 32 * 64; // 2048
const int CW = 1;
const int CCW = -1;
Stepper stepper(number_of_steps, 8, 10, 9, 11);
void setup()
{
    stepper.setSpeed(300);
}
void loop()
{
    int steps;
    steps = get_step_by_rev(CW, 1);
    stepper.step(steps);
    delay(3000);
    steps = get_step_by_rev(CCW, 1);
    stepper.step(steps);
    delay(3000); 
}
int get_step_by_rev(int dir, float rev)
{
    return dir * (steps_output_rev * rev); 
  }
  }
  </source>
  </source>

2020年8月7日 (金) 19:32時点における版

概要

ここでは、2相4ワイヤの小さなステッピングモータとを、Arduinoから制御する方法について記載する。

一般的なモータは連続回転するのを期待する時に使用するが、ステッピングモータは特定の角度だけ回って止まるような動作をしたい場合に使用する。
制御単位となるのはステップで、それぞれのステッピングモータ毎に1ステップでどのくらいの角度で回転するか決まっている。


ステッピングモータ(バイポーラ)の使用

ここで使用する小さなステッピングモータは、1ステップで18[度]回転するモータで、20ステップで1回転する。
また、使用するステッピングモータの種類は、バイポーラステッピングモータといい、内部にコイルが2つあり、その極性を切り替えることでモータの回転角を操作する。

ステッピングモータドライバIC(トランスレータ)として、L293Dを使用する。
L293DはデュアルHブリッジICであり、以下のように接続する。
1 in、2 in、3 in、4 inと記載した箇所は、Arduinoに接続する。

Arduino SteppingMotor L293D 1.png


また、L293Dはインターナルのフライバックダイオードを内蔵している。
他のステッピングモータドライバICを使用する場合(SN754410等)は、フライバックダイオードを付ける必要がある。

ブレッドボードに接続した様子は次の通り。
ここで使用するステッピングモータは、下図のようなペア(1 inと2 inまたは3 inと4 in)とする。

Arduino SteppingMotor L293D 2.png


Arduinoのサンプルコードを以下に記述する。
ArduinoのStepperライブラリが使用できる。

StepperクラスのsetSpeedメソッドでモータの回転速度をRPMで指定する。
RPMは1分間に回転する回転数である。例えば、60[rpm]なら1分間に60回転、すなわち、1秒で1回転する。
サンプルコードでは、180[rpm]を指定している。

stepメソッドでは、現在の位置から回転するステップ数を指定する。負の値を指定すると逆回転になる。
なお、stepメソッドは同期関数で、操作が終了するまでブロックする。したがって、モータが回転している際は他の動作が止まる。(割り込み制御は可能)

 #include <Stepper.h>
 
 const int stepsPerRevolution = 20;
 Stepper stepper(stepsPerRevolution, 8, 9, 10, 11);
 
 void setup()
 {
    stepper.setSpeed(180);
 }
 
 void loop()
 {
    stepper.step(10);
    delay(1000);
 
    stepper.step(-10);
    delay(1000);  
 }



ステッピングモータ(ユニポーラ)の使用

このセクションでは、ユニポーラ型のステッピングモータである28BYJ-48を使用する。

ここでは、ステッピングモータドライバICとしてULN2003搭載ドライバボードを使用している。
このドライバボードの詳細が確認できなかったので少し曖昧な点がある。
そのため、実験的なスタンスで見ること。

ステッピングモータ28BYJ-48のデータシートは下図の通りである。
モータの出力軸は5[mm]径である。

Arduino 28BYJ-48 ULN2003 1.png


また、配線図は下図の通りである。
ここでは、ULN2003搭載ドライバボードの電源電圧に9[V]電池を使用しているが、5[V]の方がよい可能性がある)

Arduino 28BYJ-48 ULN2003 2.png


Arudinoのサンプルコードを以下に記述する。
ArduinoのStepperライブラリが使用できる。

ここでは、電動スライダとしては使用している。28BYJ-48は、内部で1/64のギア比があるため、小さいながらもトルクがあって使いやすい。

Arduino 28BYJ-48 ULN2003 3.png
 #include <Stepper.h>
 
 const int number_of_steps = 32;
 const int steps_output_rev = 32 * 64; // 2048
 const int CW = 1;
 const int CCW = -1;
 
 Stepper stepper(number_of_steps, 8, 10, 9, 11);
 
 void setup()
 {
    stepper.setSpeed(300);
 }
 
 void loop()
 {
    int steps;
 
    steps = get_step_by_rev(CW, 1);
    stepper.step(steps);
    delay(3000);
 
    steps = get_step_by_rev(CCW, 1);
    stepper.step(steps);
    delay(3000);  
 }
 
 int get_step_by_rev(int dir, float rev)
 {
    return dir * (steps_output_rev * rev);  
 }