/* ステッピングモーターのドライブテスト、1−2相励磁 * バイポーラ方式のモーターを駆動 * 2015/7/12 ラジオペンチ  * http://radiopench.blog96.fc2.com/blog-entry-578.html */ #define coilAp 3 // coil A + へ接続 #define coilAn 9 // coil A - #define coilBp 10 // coil B + #define coilBn 11 // coil B - unsigned int pos = 32000; // 回転位置記録用変数 int t = 125; // パルスレート設定 単位:ms void setup() { pinMode(coilAp, OUTPUT); pinMode(coilAn, OUTPUT); pinMode(coilBp, OUTPUT); pinMode(coilBn, OUTPUT); } void loop() { for(int i=0; i<40; i++){ cwP(); // CW方向へ1パルス } delay(500); for(int i=0; i<40; i++){ ccwP(); // CCW方向へ1パルス } delay(500); } void cwP() { // CW方向へ1パルス pos++; PMdrive(pos); } void ccwP() { // CCW方向へ1パルス pos--; PMdrive(pos); } void PMdrive(unsigned int n) { // 指定状態にコイルを励磁 int phase; phase = n % 8; // 位相を求め switch (phase) { // 相当する状態に通電 case 0: digitalWrite(coilAp, HIGH); // A+ digitalWrite(coilAn, LOW); digitalWrite(coilBp, LOW); digitalWrite(coilBn, LOW); break; case 1: digitalWrite(coilAp, HIGH); // A+ digitalWrite(coilAn, LOW); digitalWrite(coilBp, HIGH); // B+ digitalWrite(coilBn, LOW); break; case 2: digitalWrite(coilAp, LOW); digitalWrite(coilAn, LOW); digitalWrite(coilBp, HIGH); // B+ digitalWrite(coilBn, LOW); break; case 3: digitalWrite(coilAp, LOW); digitalWrite(coilAn, HIGH); // A- digitalWrite(coilBp, HIGH); // B+ digitalWrite(coilBn, LOW); break; case 4: digitalWrite(coilAp, LOW); digitalWrite(coilAn, HIGH); // A- digitalWrite(coilBp, LOW); digitalWrite(coilBn, LOW); break; case 5: digitalWrite(coilAp, LOW); digitalWrite(coilAn, HIGH); // A- digitalWrite(coilBp, LOW); digitalWrite(coilBn, HIGH); // B- break; case 6: digitalWrite(coilAp, LOW); digitalWrite(coilAn, LOW); digitalWrite(coilBp, LOW); digitalWrite(coilBn, HIGH); // B- break; case 7: digitalWrite(coilAp, HIGH); // A+ digitalWrite(coilAn, LOW); digitalWrite(coilBp, LOW); digitalWrite(coilBn, HIGH); // B- break; } delay(t); // 指定時間待つ }