test2017-1-13

Dependencies:   AT24C1024 DMX-STM32 mbed

Revision:
4:c3f3fdde7eee
Parent:
3:dd2305e50390
Child:
5:fd097a259856
--- a/main.cpp	Thu Mar 02 09:03:40 2017 +0000
+++ b/main.cpp	Fri Mar 24 13:00:34 2017 +0000
@@ -3,6 +3,8 @@
 #include "AccelStepper.h"
 #include "DMX.h"
 
+Ticker to;
+
 Timer t;
 DigitalOut dmxEnable(D8);   //基本L(レシーブ)に固定します
 DMX dmx(PA_9, PA_10);
@@ -17,7 +19,7 @@
 DigitalOut stepper1Enable(D2);
 DigitalOut stepper1MS1(D11);
 DigitalOut stepper1MS2(D12);
-DigitalIn stepper1MS3(A4);
+DigitalOut stepper1MS3(A4);
 
 //モーター2 CN2とCN3を使用
 DigitalOut stepper2Enable(D3);
@@ -40,8 +42,8 @@
 unsigned long dmxInHighBit, dmxInLowBit;
 unsigned long HighBit, LowBit;
 
-bool manipulateMode1 = true; //0:手動 1:自動
-bool manipulateMode2 = true; //0:手動 1:自動
+bool manipulateMode1 = false; //0:手動 1:自動
+bool manipulateMode2 = false; //0:手動 1:自動
 
 
 //モーター1のパラメーター DMXチャンネルリスト チャンネル数:12個
@@ -78,6 +80,23 @@
 #define DMX_ParmSetMode2_H CH_Origin + 28
 #define DMX_ParmSetMode2_L CH_Origin + 29
 
+//モーターの回転方向 TMCは1  DRVは-1に設定すること
+//未実装(実装予定)
+
+//ステップ数の調整用の係数
+float StepAdj1 = 1;
+float StepAdj2 = 1;
+
+//ステップ数設定 1:DRV full, 2:DRV 1/2, 3:DRV 1/4, 4:DRV 1/8, 5:DRV 1/16, 6:DRV 1/32, 7:TMC StealthChop µ16
+#define StepSize1 3
+#define StepSize2 4
+
+
+void calc()
+{
+    stepper1.newSpeed();
+}
+
 //map
 long map(long x, long in_min, long in_max, long out_min, long out_max)
 {
@@ -109,74 +128,116 @@
     }
 }
 
-void silence()
+
+//モーター1のみの往復テスト
+void testMove1()
 {
-    DigitalIn stepper1MS1(D11);
-    DigitalIn stepper1MS2(D12);
-
-    DigitalIn stepper2MS1(A5);
-    DigitalIn stepper2MS2(A6);
-}
+    //initなしの場合
+    stepper1.setCurrentPosition(0);
+    stepper1.setMaxSpeed(4000 / StepAdj1);
+    stepper1.setAcceleration(20000 / StepAdj1);
 
-void run()
-{
-    DigitalOut stepper1MS1(D11);
-    DigitalOut stepper1MS2(D12);
-    stepper1MS1 = 1;
-    stepper1MS2 = 1;
-
-    DigitalOut stepper2MS1(A5);
-    DigitalOut stepper2MS2(A6);
-    stepper2MS1 = 1;
-    stepper2MS2 = 1;
+    stepper1.setMaxSpeed(180000);
+    while(1) {
+        stepper1.moveTo(3200);
+        //stepper1.moveTo(800 / StepAdj1);
+        while(stepper1.distanceToGo() != 0) {
+            stepper1.run();
+        }
+        wait(0.5);
+        //stepper1.moveTo(0 / StepAdj1);
+        stepper1.moveTo(0);
+        while(stepper1.distanceToGo() != 0) {
+            stepper1.run();
+        }
+        wait(0.5);
+    }
 }
 
 
+void testMove2()
+{
+    stepper1.setMaxSpeed(10000 / StepAdj1);
+    stepper2.setMaxSpeed(10000 / StepAdj2);
+
+    stepper1.setMaxSpeed(180000);
+
+    while(1) {
+        stepper1.moveTo(20000 / StepAdj1);
+        stepper2.moveTo(20000 / StepAdj2);
+        while(stepper1.distanceToGo() != 0) {
+            stepper1.run();
+            //    stepper2.run();
+        }
+        //while(stepper2.distanceToGo() != 0) {
+//            stepper2.run();
+//        }
+
+        stepper1.moveTo(500 / StepAdj1);
+        //stepper2.moveTo(500 / StepAdj2);
+        while(stepper1.distanceToGo() != 0) {
+            stepper1.run();
+            //    stepper2.run();
+        }
+        while(stepper2.distanceToGo() != 0) {
+            //    stepper2.run();
+            stepper1.run();
+        }
+    }
+}
+
 void init1()
 {
-    stepper1.setMaxSpeed(2000);
-    stepper1.setAcceleration(20000);
-    stepper1.moveTo(-30000);
+    stepper1.setCurrentPosition(-1);
+    stepper1.setMaxSpeed(4000 / StepAdj1);
+    stepper1.setAcceleration(20000 / StepAdj1);
+    stepper1.moveTo(-30000 / StepAdj1);
 
     while(stepper1.currentPosition() != 0) {
         stepper1.run();
         checkSW();
     }
-    stepper1.moveTo(500);
-    while(stepper1.distanceToGo() != 0) {
-        stepper1.run();
-    }
-
-    stepper1.setMaxSpeed(4500);
-
-    while(1) {
-        stepper1.moveTo(20000);                                                                                                                 
-        while(stepper1.distanceToGo() != 0) {
-            stepper1.run();
-            
-        }
-        stepper1.moveTo(500);
-        while(stepper1.distanceToGo() != 0) {
-            stepper1.run();
-        }
-    }
-
+    stepper1.moveTo(500 / StepAdj1);
+    while(stepper1.distanceToGo() != 0) stepper1.run();
 }
 
 void init2()
 {
-
-    stepper2.setMaxSpeed(4000);
-    stepper2.setAcceleration(20000);
-    stepper2.moveTo(-20000);
+    stepper2.setCurrentPosition(-1);
+    stepper2.setMaxSpeed(4000 / StepAdj2);
+    stepper2.setAcceleration(20000 / StepAdj2);
+    stepper2.moveTo(-30000 / StepAdj2);
 
     while(stepper2.currentPosition() != 0) {
         stepper2.run();
         checkSW();
     }
-    stepper2.moveTo(500);
-    while(stepper2.distanceToGo() != 0) {
-        stepper2.run();
+    stepper2.moveTo(500 / StepAdj2);
+    while(stepper2.distanceToGo() != 0) stepper2.run();
+}
+
+void initBoth()
+{
+    stepper1.setCurrentPosition(-1);
+    stepper1.setMaxSpeed(4000 / StepAdj1);
+    stepper1.setAcceleration(20000 / StepAdj1);
+    stepper1.moveTo(-30000 / StepAdj1);
+
+    stepper2.setCurrentPosition(-1);
+    stepper2.setMaxSpeed(4000 / StepAdj2);
+    stepper2.setAcceleration(20000 / StepAdj2);
+    stepper2.moveTo(-30000 / StepAdj2);
+
+    while((stepper1.distanceToGo() != 0)||(stepper2.distanceToGo() != 0)) {
+        if (stepper1.distanceToGo() != 0) stepper1.run();
+        if (stepper2.distanceToGo() != 0) stepper2.run();
+        checkSW();
+    }
+    stepper1.moveTo(500 / StepAdj1);
+    stepper2.moveTo(500 / StepAdj2);
+    while((stepper1.distanceToGo() != 0)||(stepper2.distanceToGo() != 0)) {
+        if (stepper1.distanceToGo() != 0) stepper1.run();
+        if (stepper2.distanceToGo() != 0) stepper2.run();
     }
 }
 
@@ -381,46 +442,147 @@
     } else;
 }
 
+//モータードライバの設定
+void conf1()
+{
+    switch (StepSize1) {
+        case 1: //DRV8825 full steps
+            stepper1MS1 = 0;
+            stepper1MS2 = 0;
+            stepper1MS3 = 0;
+            StepAdj1 = 16;
+            break;
+
+        case 2: //DRV8825 1/2 steps
+            stepper1MS1 = 1;
+            stepper1MS2 = 0;
+            stepper1MS3 = 0;
+            StepAdj1 = 8;
+            break;
+
+        case 3: //DRV8825 1/4 steps
+            stepper1MS1 = 0;
+            stepper1MS2 = 1;
+            stepper1MS3 = 0;
+            StepAdj1 = 4;
+            break;
+
+        case 4: //DRV8825 1/8 steps
+            stepper1MS1 = 1;
+            stepper1MS2 = 1;
+            stepper1MS3 = 0;
+            StepAdj1 = 2;
+            break;
+
+        case 5: //DRV8825 1/16 steps
+            stepper1MS1 = 0;
+            stepper1MS2 = 0;
+            stepper1MS3 = 1;
+            StepAdj1 = 1;
+            break;
+
+        case 6: //DRV8825 1/32 steps
+            stepper1MS1 = 1;
+            stepper1MS2 = 1;
+            stepper1MS3 = 1;
+            StepAdj1 = 0.5;
+            break;
+
+        case 7: //TMC StealthChop µ16 steps
+            DigitalIn stepper1MS1(D11);
+            DigitalIn stepper1MS2(D12);
+            StepAdj1 = 1;
+            break;
+    }
+    stepper1Enable = 0;
+}
+
+void conf2()
+{
+    switch (StepSize2) {
+        case 1: //DRV8825 full steps
+            stepper2MS1 = 0;
+            stepper2MS2 = 0;
+            stepper2MS3 = 0;
+            StepAdj2 = 16;
+            break;
+
+        case 2: //DRV8825 1/2 steps
+            stepper2MS1 = 1;
+            stepper2MS2 = 0;
+            stepper2MS3 = 0;
+            StepAdj2 = 8;
+            break;
+
+        case 3: //DRV8825 1/4 steps
+            stepper2MS1 = 0;
+            stepper2MS2 = 1;
+            stepper2MS3 = 0;
+            StepAdj2 = 4;
+            break;
+
+        case 4: //DRV8825 1/8 steps
+            stepper2MS1 = 1;
+            stepper2MS2 = 1;
+            stepper2MS3 = 0;
+            StepAdj2 = 2;
+            break;
+
+        case 5: //DRV8825 1/16 steps
+            stepper2MS1 = 0;
+            stepper2MS2 = 0;
+            stepper2MS3 = 1;
+            StepAdj2 = 1;
+            break;
+
+        case 6: //DRV8825 1/32 steps
+            stepper2MS1 = 1;
+            stepper2MS2 = 1;
+            stepper2MS3 = 1;
+            StepAdj2 = 0.5;
+            break;
+
+        case 7: //TMC StealthChop µ16 steps
+            DigitalIn stepper2MS1(D11);
+            DigitalIn stepper2MS2(D12);
+            StepAdj2 = 1;
+            break;
+    }
+    stepper2Enable = 0;
+}
+
 
 int main()
 {
-    //モーター1と2のコンフィギュレーション
-    stepper1MS1 = 1;
-    stepper1MS2 = 1;
-    stepper1Enable = 0;
+
+    dmxEnable = 0;  //0:receiver 1:sender
 
-    stepper2MS1 = 1;
-    stepper2MS2 = 1;
-    stepper2Enable = 0;
+    conf1();    //motor1 config     ドライバの設定
+    conf2();    //motor2 config
 
     t.start();
-
-    dmxEnable = 0;  //0:receiver 1:sender
+//    to.attach(&calc, 0.001);
 
     stepper1.setCurrentPosition(-1);
     stepper2.setCurrentPosition(-1);
 
-    silence();
-    init1();
+//モーターの初期化シーケンス
+//    init1();
 //    init2();
-
+//    initBoth();
 
-    stepper1.setMaxSpeed(25000);
-    stepper1.setAcceleration(30000);
-    stepper1.setCurrentPosition(0);
-
-    stepper2.setMaxSpeed(25000);
-    stepper2.setAcceleration(30000);
-    stepper2.setCurrentPosition(0);
+//往復運動を繰り返すテストシーケンス(無限ループ)
+    testMove1();
 
     myLED =1;
 
-
     readROMValue1();
     readROMValue2();
 
+    stepper1.setMaxSpeed(10000 / StepAdj1);
+    stepper2.setMaxSpeed(10000 / StepAdj2);
+
     while(1) {
-
         //操作モード切り替えボタンのチェック
         checkManipulateButton();
 
@@ -439,7 +601,6 @@
         dmxInHighBit = dmxInHighBit << 8;
         position2 = (long)(dmxInHighBit + dmxInLowBit);
 
-
         //手動モードの場合、現在のスライダーの値を取得、パラメーターを設定
         if(manipulateMode1 == false) {
             captureSliderValue();
@@ -449,7 +610,6 @@
         //自動モードの場合、EEPROMから値を取得、パラメーターを設定
         else {
             myLED = 1;
-
         }
 
         //手動モードの場合、現在のスライダーの値を取得、パラメーターを設定
@@ -474,8 +634,14 @@
         stepper1.moveTo(position1);
         stepper2.moveTo(position2);
 
+
         checkSafeBreak();
-        stepper1.run();
-        stepper2.run();
+        stepper1.newSpeed();
+
+//モーター1の走行
+        if(stepper1.distanceToGo() != 0) stepper1.run();
+//モーター2の走行(停止中)
+//        if(stepper2.distanceToGo() != 0) stepper2.run();
+
     }
 }
\ No newline at end of file