2012-07-19
モーターを制御している所。この写真のarduinoは互換機です
*****************************************
使い方
*****************************************
・各ピンの機能については表を参照
・各軸の区別
-端子名のシルク印刷に .がついているほうが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を増設した物
基板裏面。基板裏面にジャンパー線を配線していますが、表面に配線した方が楽です。見やすくするために裏面に配線しています。キットに付属の電線は青一色です。
・赤丸の部品は取付向きがあります。
・黄色丸側の部品の足が長くなっています。向きが分かり難い電子部品はプラス側の足が長くなっています。黄色丸がプラスです。
「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]/電流制限抵抗値[Ω]/取り付ける抵抗の本数
です。これは同じ抵抗値のものを複数本使う場合です。
電流はトルクを変更することでも変更出来ます。トルクはソフトで設定可能です。
取り付ける抵抗の本数とモーターに流す電流の対応表
回路図
部品表
ステッピングモーターシールド 各ピンの機能
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 }