arduinoステッピングモーターシールド 2軸版

arduinoステッピングモーターシールド2軸版の作り方

シールドの仕様:
 ・モーターを2台ドライブ可能
 ・ドライバーIC 東芝 TB6560AHQ
 ・最大電流    1.5A/相(ドライバーの能力は3.5Aですが基板のパターンが細く限界まで電流を流せません)
 ・モーター電圧  5V~24V
 ・モーター種類  バイポーラステッピングモーター(モーターから4本電線が出ているタイプ)
 ・駆動方式    2相、1-2相、2W1-2相マイクロステップ、4W1-2相マイクロステップ
 ・arduinoおよび蛇の目基板で使用可能


2012-07-19

モーターを制御している所。この写真のarduinoは互換機です

R0015042.jpg

*****************************************
 使い方
*****************************************

・各ピンの機能については表を参照

・各軸の区別
  -端子名のシルク印刷に .がついているほうがIC2の制御端子
  -IC1用の部品
    電流制限抵抗 B相用 R3、R4
    電流制限抵抗 A相用 R5、R6
    ディップスイッチ S1
    LED1,LED2
  -IC2用の部品
    電流制限抵抗 B相用 R11、R12
    電流制限抵抗 A相用 R13、R14
    ディップスイッチ S2
    LED3,LED4

・DCジャックVM
  モーター電源を接続するためのもの
  arduinoから供給されロジック電源以外にモーター用の電源が必要
  定格は5~24V
  ステッピングモーターは12もしくは24Vで使うことが多い

・モーター用端子
  A+:モーターのA相につなぐ
  A-:   同上
  B+:モーターのB相につなぐ
  B-:   同上
 ステッピングモーターには2つのコイルが入っていてそれぞれA相、B相と呼ばれる
 A+とA-、B+とB-はコイルなのでテスターで計測すると低い抵抗値になる
 A相とB相は絶縁されているのでテスターで両相間の抵抗値を計測すると∞Ωになる
 A+とA-を入れ変えるとモーターは逆転する。B相も同様。逆転するだけなのでどちらが+でどちらが-か気にする必要は無い

・ディップスイッチ
  M1、M2でモーターの駆動モードを変更する
   M1=OFF,M2=OFF 2相
   M1=ON, M2=OFF 1-2相
   M1=ON, M2=ON  2W1-2相マイクロステップ
   M1=OFF,M2=ON  4W1-2相マイクロステップ
  DCY1,DCY2でモーターに流す電流の制御モードを変更する
   通常両方ともOFFにする
   オシロスコープがないと設定すべき最適値はわからない
   詳しくはデータシートを参照

・RESETスイッチ
  arduinoのリセットスイッチをシールド上に増設した物

・タクトスイッチSW2、SW3
  特にモータードライバーとは関係の無い回路

・LED
   MO:電源ONで点灯。モーターが回ると点滅
   PROTECT:モータードライバー過熱時に点灯
   LED5:arduinoのD13ポートのLEDを増設した物

R0015046.jpg

基板裏面。基板裏面にジャンパー線を配線していますが、表面に配線した方が楽です。見やすくするために裏面に配線しています。キットに付属の電線は青一色です。

R0015047.jpg

・赤丸の部品は取付向きがあります。
・黄色丸側の部品の足が長くなっています。向きが分かり難い電子部品はプラス側の足が長くなっています。黄色丸がプラスです。

「1」と書いてある物は電流制限抵抗です。
キットには電流制限用の1Ωの抵抗が12本入っています。
モーターの各相と抵抗の関係は以下の通りです。
 -IC1
   電流制限抵抗 B相用 R3、R4(R3,R4は並列接続されています 以下同様です)
   電流制限抵抗 A相用 R5、R6
 -IC2
   電流制限抵抗 B相用 R11、R12
   電流制限抵抗 A相用 R13、R14
各相に流す電流の計算式は
 電流[A]=0.5×取り付ける1Ω抵抗の本数
となります

例)
 IC1で制御するモーターの電流を1.5Aにしたい場合は
  1.5[A]=0.5×3本
 となり各相3本の1オーム抵抗を取り付けます
 結果は
  R3に2本、R4に1本
  R5に2本、R6に1本
 です。R3に1本、R4に2本という組み合わせでもかまいません。
モーターの各相それぞれ2本しか取り付ける場所がありませんが、取付穴はかなり大きくなっているので複数本の抵抗を取り付け可能です。
電流は1.5A/相以下になるようにして下さい。ICの定格はA相、B相それぞれ3.5Aですがプリント基板のパターンが細いので最大電流を流し続けるとパターンが発熱してしまいます。

もっと細かく電流を設定したいときは別途抵抗を購入して下さい。厳密な計算式は
 電流[A]=0.5[V]/電流制限抵抗値[Ω]/取り付ける抵抗の本数
です。これは同じ抵抗値のものを複数本使う場合です。

電流はトルクを変更することでも変更出来ます。トルクはソフトで設定可能です。

arduinoSS2brd.PNG

取り付ける抵抗の本数とモーターに流す電流の対応表

arss2.png

回路図

arduinoSS2sch.PNG

部品表

partslistaSS2.png

ステッピングモーターシールド 各ピンの機能

pin.PNG
サンプルスケッチ
0001  /*---------------------------------------------------------------*/
0002 /* arduino stepper motor shield 2 axis Ver1.00 */
0003 /*---------------------------------------------------------------*/
0004 #define MOTOR1_CLK 5 // D5
0005 #define MOTOR1_RESET 3 // D3
0006 #define MOTOR1_ENABLE 4 // D4
0007 #define MOTOR1_CWCCW 19 // A5
0008 #define MOTOR1_TQ1 6 // D6
0009 #define MOTOR1_TQ2 7 // D7
0010
0011 #define MOTOR2_CLK 10 // D10
0012 #define MOTOR2_RESET 8 // D8
0013 #define MOTOR2_ENABLE 9 // D9
0014 #define MOTOR2_CWCCW 2 // D2
0015 #define MOTOR2_TQ1 11 // D11
0016 #define MOTOR2_TQ2 12 // D12
0017
0018 #define CCW HIGH
0019 #define CW LOW
0020
0021 void tb6560_stop()
0022 {
0023 digitalWrite( MOTOR1_RESET, LOW );
0024 digitalWrite( MOTOR1_ENABLE, LOW );
0025
0026 digitalWrite( MOTOR2_RESET, LOW );
0027 digitalWrite( MOTOR2_ENABLE, LOW );
0028 }
0029
0030 void tb6560_start()
0031 {
0032 digitalWrite( MOTOR1_RESET, HIGH );
0033 digitalWrite( MOTOR1_ENABLE, HIGH );
0034
0035 digitalWrite( MOTOR2_RESET, HIGH );
0036 digitalWrite( MOTOR2_ENABLE, HIGH );
0037 }
0038
0039 void setup()
0040 {
0041 pinMode(MOTOR1_CLK, OUTPUT);
0042 pinMode(MOTOR1_RESET, OUTPUT);
0043 pinMode(MOTOR1_ENABLE, OUTPUT);
0044 pinMode(MOTOR1_CWCCW, OUTPUT);
0045 pinMode(MOTOR1_TQ1, OUTPUT);
0046 pinMode(MOTOR1_TQ2, OUTPUT);
0047
0048 pinMode(MOTOR2_CLK, OUTPUT);
0049 pinMode(MOTOR2_RESET, OUTPUT);
0050 pinMode(MOTOR2_ENABLE, OUTPUT);
0051 pinMode(MOTOR2_CWCCW, OUTPUT);
0052 pinMode(MOTOR2_TQ1, OUTPUT);
0053 pinMode(MOTOR2_TQ2, OUTPUT);
0054
0055 digitalWrite(MOTOR1_TQ1, LOW ); // torque = 100%
0056 digitalWrite(MOTOR1_TQ2, LOW ); // torque = 100%
0057
0058 digitalWrite(MOTOR2_TQ1, LOW ); // torque = 100%
0059 digitalWrite(MOTOR2_TQ2, LOW ); // torque = 100%
0060 }
0061
0062 void loop()
0063 {
0064 int i;
0065
0066 tb6560_start(); // power on
0067 digitalWrite(MOTOR1_CWCCW, CW);
0068 for( i = 0; i < 400 ; i++ ) {
0069 digitalWrite(MOTOR1_CLK, HIGH);
0070 delay(1);
0071 digitalWrite(MOTOR1_CLK, LOW );
0072 delay(4);
0073 }
0074 tb6560_stop(); // power off
0075
0076 delay(1000);
0077
0078 tb6560_start(); // power on
0079 digitalWrite(MOTOR1_CWCCW, CCW);
0080 for( i = 0; i < 400 ; i++ ) {
0081 digitalWrite(MOTOR1_CLK, HIGH);
0082 delay(1);
0083 digitalWrite(MOTOR1_CLK, LOW );
0084 delay(9);
0085 }
0086 tb6560_stop(); // power off
0087
0088 delay(1000);
0089
0090 tb6560_start(); // power on
0091 digitalWrite(MOTOR2_CWCCW, CW);
0092 for( i = 0; i < 400 ; i++ ) {
0093 digitalWrite(MOTOR2_CLK, HIGH);
0094 delay(1);
0095 digitalWrite(MOTOR2_CLK, LOW );
0096 delay(4);
0097 }
0098 tb6560_stop(); // power off
0099
0100 delay(1000);
0101
0102 tb6560_start(); // power on
0103 digitalWrite(MOTOR2_CWCCW, CCW);
0104 for( i = 0; i < 400 ; i++ ) {
0105 digitalWrite(MOTOR2_CLK, HIGH);
0106 delay(1);
0107 digitalWrite(MOTOR2_CLK, LOW );
0108 delay(9);
0109 }
0110 tb6560_stop(); // power off
0111
0112 delay(1000);
0113 }
行番号
解説
21-28行目
RESとENをLowにするとモーターに流す電流がゼロになります。両方のモーターの電流を切っていますが。普通はばらばらに制御すべき物です。
30-37行目
モーターを回すときはRESとENをHighにします。
62-113行目
正転、逆転を永久に繰り返しています
EAGLEファイル&サンプルスケッチ
ファイル ファイルタイプ 添付ファイルの解説
TB6560arduino3.zip EAGLE EAGLE V4.15 回路図&基板レイアウト
arduinstepper2ino.zip OTHER サンプルスケッチ 上の物と同じ
AutoGuiderRev2.zip OTHER サンプルスケッチ 赤道儀のプログラム 無駄なコードがあるので読みにくい