test2017-1-13
Dependencies: AT24C1024 DMX-STM32 mbed
Diff: main.cpp
- Revision:
- 5:fd097a259856
- Parent:
- 4:c3f3fdde7eee
- Child:
- 6:2a9e0228f81d
--- a/main.cpp Fri Mar 24 13:00:34 2017 +0000 +++ b/main.cpp Mon Apr 03 09:12:33 2017 +0000 @@ -3,7 +3,11 @@ #include "AccelStepper.h" #include "DMX.h" -Ticker to; +//モータ制御基板の通し番号を設定してください 初期設定は1です +#define BoardNumber 1 + + +//Ticker to; Timer t; DigitalOut dmxEnable(D8); //基本L(レシーブ)に固定します @@ -46,8 +50,8 @@ bool manipulateMode2 = false; //0:手動 1:自動 -//モーター1のパラメーター DMXチャンネルリスト チャンネル数:12個 -#define CH_Origin 0 +//モーター1のパラメーター DMXチャンネルリスト チャンネル数:16個 +#define CH_Origin BoardNumber * 32 - 32 #define DMX_Position1_H CH_Origin //モーター1制御用のDMX信号の始まりの値 #define DMX_Position1_L CH_Origin + 1 @@ -63,8 +67,10 @@ #define DMX_SaveValue1_L CH_Origin + 11 #define DMX_ParmSetMode1_H CH_Origin + 12 #define DMX_ParmSetMode1_L CH_Origin + 13 +#define DMX_Initialize1_H CH_Origin + 14 +#define DMX_Initialize1_L CH_Origin + 15 -//モーター2のパラメーター DMXチャンネルリスト チャンネル数:12個 +//モーター2のパラメーター DMXチャンネルリスト チャンネル数:16個 #define DMX_Position2_H CH_Origin + 16 #define DMX_Position2_L CH_Origin + 17 #define DMX_Speed2_H CH_Origin + 18 @@ -79,6 +85,8 @@ #define DMX_SaveValue2_L CH_Origin + 27 #define DMX_ParmSetMode2_H CH_Origin + 28 #define DMX_ParmSetMode2_L CH_Origin + 29 +#define DMX_Initialize2_H CH_Origin + 30 +#define DMX_Initialize2_L CH_Origin + 31 //モーターの回転方向 TMCは1 DRVは-1に設定すること //未実装(実装予定) @@ -92,6 +100,7 @@ #define StepSize2 4 +//未実装 void calc() { stepper1.newSpeed(); @@ -116,13 +125,13 @@ void checkSW() { //モーター1用エンドスイッチのチェック - if(EndSW3.read() == 1) { + if(EndSW1.read() == 0) { stepper1.stop(); stepper1.setCurrentPosition(0); } //モーター2用エンドスイッチのチェック - if(EndSW4.read() == 1) { + if(EndSW2.read() == 0) { stepper2.stop(); stepper2.setCurrentPosition(0); } @@ -155,6 +164,7 @@ } +//モーター2個同時の往復テスト void testMove2() { stepper1.setMaxSpeed(10000 / StepAdj1); @@ -167,25 +177,59 @@ stepper2.moveTo(20000 / StepAdj2); while(stepper1.distanceToGo() != 0) { stepper1.run(); - // stepper2.run(); + stepper2.run(); } - //while(stepper2.distanceToGo() != 0) { -// stepper2.run(); -// } + while(stepper2.distanceToGo() != 0) { + stepper1.run(); + stepper2.run(); + } stepper1.moveTo(500 / StepAdj1); - //stepper2.moveTo(500 / StepAdj2); + stepper2.moveTo(500 / StepAdj2); while(stepper1.distanceToGo() != 0) { stepper1.run(); - // stepper2.run(); + stepper2.run(); } while(stepper2.distanceToGo() != 0) { - // stepper2.run(); + stepper2.run(); stepper1.run(); } } } +void interuptInit1() +{ + stepper1.setCurrentPosition(-1); + stepper1.setMaxSpeed(4000 / StepAdj1); + stepper1.setAcceleration(20000 / StepAdj1); + + //原点復帰動作 + stepper1.moveTo(-30000 / StepAdj1); + while(stepper1.currentPosition() != 0) { + stepper1.run(); + checkSW(); + } + //初期位置へ移動 + //something +} + +void interuptInit2() +{ + stepper2.setCurrentPosition(-1); + stepper2.setMaxSpeed(4000 / StepAdj2); + stepper2.setAcceleration(20000 / StepAdj2); + + //原点復帰動作 + stepper2.moveTo(-30000 / StepAdj2); + while(stepper2.currentPosition() != 0) { + stepper2.run(); + checkSW(); + } + //初期位置へ移動 + //something +} + + void init1() { stepper1.setCurrentPosition(-1); @@ -197,8 +241,8 @@ stepper1.run(); checkSW(); } - stepper1.moveTo(500 / StepAdj1); - while(stepper1.distanceToGo() != 0) stepper1.run(); +// stepper1.moveTo(500 / StepAdj1); +// while(stepper1.distanceToGo() != 0) stepper1.run(); } void init2() @@ -212,8 +256,8 @@ stepper2.run(); checkSW(); } - stepper2.moveTo(500 / StepAdj2); - while(stepper2.distanceToGo() != 0) stepper2.run(); +// stepper2.moveTo(500 / StepAdj2); +// while(stepper2.distanceToGo() != 0) stepper2.run(); } void initBoth() @@ -244,7 +288,8 @@ void checkSafeBreak() { - if(EndSW3.read() == 1) { + //モーター1用エンドスイッチのチェック + if(EndSW1.read() == 1) { stepper1.stop(); while(1) { blink(); @@ -252,7 +297,7 @@ } //モーター2用エンドスイッチのチェック - if(EndSW4.read() == 1) { + if(EndSW2.read() == 1) { stepper2.stop(); while(1) { blink(); @@ -260,6 +305,7 @@ } } + //モーター1のパラメータ保存 void paramStore1() { @@ -442,6 +488,28 @@ } else; } +//原点復帰命令のチェック +void checkInitCommand1() +{ + dmxInHighBit = dmx.get(DMX_Initialize1_H); + dmxInLowBit = dmx.get(DMX_Initialize1_L); + + if(dmxInHighBit == 75 && dmxInLowBit == 255) { + interuptInit1(); + } +} + +void checkInitCommand2() +{ + dmxInHighBit = dmx.get(DMX_Initialize2_H); + dmxInLowBit = dmx.get(DMX_Initialize2_L); + + if(dmxInHighBit == 75 && dmxInLowBit == 255) { + interuptInit2(); + } +} + + //モータードライバの設定 void conf1() { @@ -554,6 +622,7 @@ int main() { + wait(1); dmxEnable = 0; //0:receiver 1:sender @@ -567,20 +636,20 @@ stepper2.setCurrentPosition(-1); //モーターの初期化シーケンス -// init1(); + init1(); // init2(); // initBoth(); //往復運動を繰り返すテストシーケンス(無限ループ) - testMove1(); +// testMove1(); myLED =1; readROMValue1(); - readROMValue2(); +// readROMValue2(); stepper1.setMaxSpeed(10000 / StepAdj1); - stepper2.setMaxSpeed(10000 / StepAdj2); +// stepper2.setMaxSpeed(10000 / StepAdj2); while(1) { //操作モード切り替えボタンのチェック @@ -595,11 +664,11 @@ dmxInHighBit = dmxInHighBit << 8; position1 = (long)(dmxInHighBit + dmxInLowBit); - //モーター1の目標位置をスライダーから取得 - dmxInHighBit = dmx.get(DMX_Position2_H); - dmxInLowBit = dmx.get(DMX_Position2_L); - dmxInHighBit = dmxInHighBit << 8; - position2 = (long)(dmxInHighBit + dmxInLowBit); + //モーター2の目標位置をスライダーから取得(停止中) +// dmxInHighBit = dmx.get(DMX_Position2_H); +// dmxInLowBit = dmx.get(DMX_Position2_L); +// dmxInHighBit = dmxInHighBit << 8; +// position2 = (long)(dmxInHighBit + dmxInLowBit); //手動モードの場合、現在のスライダーの値を取得、パラメーターを設定 if(manipulateMode1 == false) { @@ -623,25 +692,38 @@ myLED = 1; } + + //モーター1のパラメーター設定 position1 = map(position1, 0, 0xFFFF, 0, max1); stepper1.setMaxSpeed(speed1); stepper1.setAcceleration(Acceleration1); - position2 = map(position2, 0, 0xFFFF, 0, max2); - stepper2.setMaxSpeed(speed2); - stepper2.setAcceleration(Acceleration2); + + //モーター2のパラメーター設定(停止中) + //position2 = map(position2, 0, 0xFFFF, 0, max2); + //stepper2.setMaxSpeed(speed2); + //stepper2.setAcceleration(Acceleration2); + + //モーター1の目標位置設定 stepper1.moveTo(position1); - stepper2.moveTo(position2); + + //モーター2の目標位置設定(停止中) + //stepper2.moveTo(position2); - checkSafeBreak(); - stepper1.newSpeed(); + //安全エンドスイッチの監視(停止中) + //checkSafeBreak(); + + //モーター1への原点復帰命令のチェック + checkInitCommand1(); -//モーター1の走行 + //モーター2への原点復帰命令のチェック(停止中) + //checkInitCommand2(); + + //モーター1の走行 if(stepper1.distanceToGo() != 0) stepper1.run(); -//モーター2の走行(停止中) -// if(stepper2.distanceToGo() != 0) stepper2.run(); - + //モーター2の走行(停止中) + //if(stepper2.distanceToGo() != 0) stepper2.run(); } } \ No newline at end of file