ステッピングモーター制御プログラム
cw[4] = {0xC, 0x6, 0x3, 0x9} を記録しておきます。0xC, 0x6, 0x3, 0x9 の順に励磁パターンを送れば正回転、逆方向に送れば、逆回転します。loop()
で pt を増しながら digitalWriteA() をすれば正回転、減らしながらdigitalWriteA()すれば逆回転します。励磁パターンをチェックするため、シリアルモニターにパターンを送ります。
(pat & 0x8)>>3 で & は論理AND演算、>> は右シフト演算です。この場合、pat
& 0x8 で pat の右から第3bitを取り出し(一番右が第0)、右に3bitシフトします。
//STEPPING MOTOR Control
//DRIVER TD62064
//Motor SPG 20
//ユニポーラ、2相励磁
//モータ端子 AC,BC はセンタータップ
// A(白),B,AC(黒),BC(青),^A,^B(緑)
//ドライバ TD62064
//50V 1.5A
//i1:3 o2:2 i2:6 o2:7 i3:11 o3:9 i4:14 o4:16
//gnd:4,5,13,12 com:1,8(ダイオード)
//接続
//VBB:モータ用電源1.5V*3
//Ard.D2>Td.i1 Ard.D3>Td.i2 Ard.D4>Td.i3 Ard.D55>Td.i4
//Td.o1>SPG.A Td.o2>SPG.B Td.o3>SPG.^A Td.o4>SPG.^B
//SPG.AC>SPG.BC>SPG.COM>VCC
int SA=2;
int SB=3;
int NA=4;
int NB=5;
//励磁パターン
byte cw[4] = {0xC, 0x6, 0x3, 0x9};
int pt;
int dir;
int count;
void setup() {
// initialize the digital pin
pinMode(SA, OUTPUT);
pinMode(SB, OUTPUT);
pinMode(NA, OUTPUT);
pinMode(NB, OUTPUT);
digitalWrite(SA, LOW);
digitalWrite(SB, LOW);
digitalWrite(NA, LOW);
digitalWrite(NB, LOW);
pt=0;
dir=0;
count=0;
Serial.begin(9600);
}
void loop() {
digitalWriteA(cw[pt]); //
delay(8); //4以下だと回転しない
if(dir) pt++;
else pt--;//回転方向の制御
if(pt==4) pt=0; //
if(pt<0) pt=3;
count++;
if(count==600) {//反転
if(dir) dir=0;else dir=1;
count=0;
}
}
void digitalWriteA(byte pat){
Serial.print(pat,HEX);//チェック用
Serial.println();
//パターンとともに変更が必要
digitalWrite(NB,(pat & 0x1));//^B
digitalWrite(NA,(pat & 0x2)>>1);//^A
digitalWrite(SB,(pat & 0x4)>>2);//B
digitalWrite(SA,(pat & 0x8)>>3);//A
}
実行すると、モーターが回転し、600ステップ回転すると逆転します。