test2017-1-13

Dependencies:   AT24C1024 DMX-STM32 mbed

Committer:
tomo370
Date:
Fri Mar 24 13:00:34 2017 +0000
Revision:
4:c3f3fdde7eee
Parent:
3:dd2305e50390
Child:
5:fd097a259856
???????

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tomo370 0:d94213e24c2e 1 #include "mbed.h"
tomo370 0:d94213e24c2e 2 #include "AT24C1024.h"
tomo370 0:d94213e24c2e 3 #include "AccelStepper.h"
tomo370 0:d94213e24c2e 4 #include "DMX.h"
tomo370 0:d94213e24c2e 5
tomo370 4:c3f3fdde7eee 6 Ticker to;
tomo370 4:c3f3fdde7eee 7
tomo370 0:d94213e24c2e 8 Timer t;
tomo370 1:cf2f5992241c 9 DigitalOut dmxEnable(D8); //基本L(レシーブ)に固定します
tomo370 0:d94213e24c2e 10 DMX dmx(PA_9, PA_10);
tomo370 0:d94213e24c2e 11
tomo370 1:cf2f5992241c 12 I2C i2c(D4, D5); // SDA, SCL
tomo370 1:cf2f5992241c 13 AT24C1024 at24c1024(i2c); // Atmel 1Mbit EE-PROM
tomo370 0:d94213e24c2e 14
tomo370 1:cf2f5992241c 15 AccelStepper stepper1(1, D9, D6); // step, direction
tomo370 1:cf2f5992241c 16 AccelStepper stepper2(1, D10, D7); // step, direction
tomo370 1:cf2f5992241c 17
tomo370 1:cf2f5992241c 18 //モーター1 CN0とCN1を使用
tomo370 0:d94213e24c2e 19 DigitalOut stepper1Enable(D2);
tomo370 0:d94213e24c2e 20 DigitalOut stepper1MS1(D11);
tomo370 0:d94213e24c2e 21 DigitalOut stepper1MS2(D12);
tomo370 4:c3f3fdde7eee 22 DigitalOut stepper1MS3(A4);
tomo370 0:d94213e24c2e 23
tomo370 1:cf2f5992241c 24 //モーター2 CN2とCN3を使用
tomo370 0:d94213e24c2e 25 DigitalOut stepper2Enable(D3);
tomo370 0:d94213e24c2e 26 DigitalOut stepper2MS1(A5);
tomo370 0:d94213e24c2e 27 DigitalOut stepper2MS2(A6);
tomo370 0:d94213e24c2e 28 DigitalOut stepper2MS3(A7);
tomo370 0:d94213e24c2e 29
tomo370 1:cf2f5992241c 30 DigitalIn EndSW1(A0); //CN4 //3端子エンドスイッチ1 予備
tomo370 1:cf2f5992241c 31 DigitalIn EndSW2(A1); //CN5 //3端子エンドスイッチ2 予備
tomo370 1:cf2f5992241c 32 DigitalIn EndSW3(A2); //CN6 //2端子エンドスイッチ1 モーター1用にする
tomo370 1:cf2f5992241c 33 DigitalIn EndSW4(A3); //CN7 //2端子エンドスイッチ2 モーター2用にする
tomo370 1:cf2f5992241c 34
tomo370 1:cf2f5992241c 35 DigitalOut myLED(LED3); //動作確認用LED
tomo370 1:cf2f5992241c 36
tomo370 1:cf2f5992241c 37 unsigned long position1, position2; //モーター1の設定位置
tomo370 1:cf2f5992241c 38 unsigned long max1, max2;
tomo370 1:cf2f5992241c 39 unsigned long speed1, speed2;
tomo370 1:cf2f5992241c 40 unsigned long Acceleration1, Acceleration2;
tomo370 1:cf2f5992241c 41 unsigned long param1, param2;
tomo370 1:cf2f5992241c 42 unsigned long dmxInHighBit, dmxInLowBit;
tomo370 2:198becff12f4 43 unsigned long HighBit, LowBit;
tomo370 1:cf2f5992241c 44
tomo370 4:c3f3fdde7eee 45 bool manipulateMode1 = false; //0:手動 1:自動
tomo370 4:c3f3fdde7eee 46 bool manipulateMode2 = false; //0:手動 1:自動
tomo370 1:cf2f5992241c 47
tomo370 1:cf2f5992241c 48
tomo370 1:cf2f5992241c 49 //モーター1のパラメーター DMXチャンネルリスト チャンネル数:12個
tomo370 1:cf2f5992241c 50 #define CH_Origin 0
tomo370 0:d94213e24c2e 51
tomo370 1:cf2f5992241c 52 #define DMX_Position1_H CH_Origin //モーター1制御用のDMX信号の始まりの値
tomo370 1:cf2f5992241c 53 #define DMX_Position1_L CH_Origin + 1
tomo370 1:cf2f5992241c 54 #define DMX_Speed1_H CH_Origin + 2
tomo370 1:cf2f5992241c 55 #define DMX_Speed1_L CH_Origin + 3
tomo370 1:cf2f5992241c 56 #define DMX_Acceleration1_H CH_Origin + 4
tomo370 1:cf2f5992241c 57 #define DMX_Acceleration1_L CH_Origin + 5
tomo370 1:cf2f5992241c 58 #define DMX_Max1_H CH_Origin + 6
tomo370 1:cf2f5992241c 59 #define DMX_Max1_L CH_Origin + 7
tomo370 1:cf2f5992241c 60 #define DMX_Offset1_H CH_Origin + 8
tomo370 1:cf2f5992241c 61 #define DMX_Offset1_L CH_Origin + 9
tomo370 1:cf2f5992241c 62 #define DMX_SaveValue1_H CH_Origin + 10
tomo370 1:cf2f5992241c 63 #define DMX_SaveValue1_L CH_Origin + 11
tomo370 1:cf2f5992241c 64 #define DMX_ParmSetMode1_H CH_Origin + 12
tomo370 1:cf2f5992241c 65 #define DMX_ParmSetMode1_L CH_Origin + 13
tomo370 0:d94213e24c2e 66
tomo370 1:cf2f5992241c 67 //モーター2のパラメーター DMXチャンネルリスト チャンネル数:12個
tomo370 1:cf2f5992241c 68 #define DMX_Position2_H CH_Origin + 16
tomo370 1:cf2f5992241c 69 #define DMX_Position2_L CH_Origin + 17
tomo370 1:cf2f5992241c 70 #define DMX_Speed2_H CH_Origin + 18
tomo370 1:cf2f5992241c 71 #define DMX_Speed2_L CH_Origin + 19
tomo370 1:cf2f5992241c 72 #define DMX_Acceleration2_H CH_Origin + 20
tomo370 1:cf2f5992241c 73 #define DMX_Acceleration2_L CH_Origin + 21
tomo370 1:cf2f5992241c 74 #define DMX_Max2_H CH_Origin + 22
tomo370 1:cf2f5992241c 75 #define DMX_Max2_L CH_Origin + 23
tomo370 1:cf2f5992241c 76 #define DMX_Offset2_H CH_Origin + 24
tomo370 1:cf2f5992241c 77 #define DMX_Offset2_L CH_Origin + 25
tomo370 1:cf2f5992241c 78 #define DMX_SaveValue2_H CH_Origin + 26
tomo370 1:cf2f5992241c 79 #define DMX_SaveValue2_L CH_Origin + 27
tomo370 1:cf2f5992241c 80 #define DMX_ParmSetMode2_H CH_Origin + 28
tomo370 1:cf2f5992241c 81 #define DMX_ParmSetMode2_L CH_Origin + 29
tomo370 1:cf2f5992241c 82
tomo370 4:c3f3fdde7eee 83 //モーターの回転方向 TMCは1 DRVは-1に設定すること
tomo370 4:c3f3fdde7eee 84 //未実装(実装予定)
tomo370 4:c3f3fdde7eee 85
tomo370 4:c3f3fdde7eee 86 //ステップ数の調整用の係数
tomo370 4:c3f3fdde7eee 87 float StepAdj1 = 1;
tomo370 4:c3f3fdde7eee 88 float StepAdj2 = 1;
tomo370 4:c3f3fdde7eee 89
tomo370 4:c3f3fdde7eee 90 //ステップ数設定 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
tomo370 4:c3f3fdde7eee 91 #define StepSize1 3
tomo370 4:c3f3fdde7eee 92 #define StepSize2 4
tomo370 4:c3f3fdde7eee 93
tomo370 4:c3f3fdde7eee 94
tomo370 4:c3f3fdde7eee 95 void calc()
tomo370 4:c3f3fdde7eee 96 {
tomo370 4:c3f3fdde7eee 97 stepper1.newSpeed();
tomo370 4:c3f3fdde7eee 98 }
tomo370 4:c3f3fdde7eee 99
tomo370 1:cf2f5992241c 100 //map
tomo370 0:d94213e24c2e 101 long map(long x, long in_min, long in_max, long out_min, long out_max)
tomo370 0:d94213e24c2e 102 {
tomo370 0:d94213e24c2e 103 return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
tomo370 0:d94213e24c2e 104 }
tomo370 0:d94213e24c2e 105
tomo370 1:cf2f5992241c 106 void blink()
tomo370 1:cf2f5992241c 107 {
tomo370 1:cf2f5992241c 108 for(int i=0; i<5; i++) {
tomo370 1:cf2f5992241c 109 myLED=0;
tomo370 1:cf2f5992241c 110 wait_ms(60);
tomo370 1:cf2f5992241c 111 myLED=1;
tomo370 1:cf2f5992241c 112 wait_ms(60);
tomo370 1:cf2f5992241c 113 }
tomo370 1:cf2f5992241c 114 }
tomo370 1:cf2f5992241c 115
tomo370 0:d94213e24c2e 116 void checkSW()
tomo370 0:d94213e24c2e 117 {
tomo370 1:cf2f5992241c 118 //モーター1用エンドスイッチのチェック
tomo370 2:198becff12f4 119 if(EndSW3.read() == 1) {
tomo370 0:d94213e24c2e 120 stepper1.stop();
tomo370 0:d94213e24c2e 121 stepper1.setCurrentPosition(0);
tomo370 0:d94213e24c2e 122 }
tomo370 1:cf2f5992241c 123
tomo370 1:cf2f5992241c 124 //モーター2用エンドスイッチのチェック
tomo370 2:198becff12f4 125 if(EndSW4.read() == 1) {
tomo370 1:cf2f5992241c 126 stepper2.stop();
tomo370 1:cf2f5992241c 127 stepper2.setCurrentPosition(0);
tomo370 1:cf2f5992241c 128 }
tomo370 0:d94213e24c2e 129 }
tomo370 0:d94213e24c2e 130
tomo370 4:c3f3fdde7eee 131
tomo370 4:c3f3fdde7eee 132 //モーター1のみの往復テスト
tomo370 4:c3f3fdde7eee 133 void testMove1()
tomo370 0:d94213e24c2e 134 {
tomo370 4:c3f3fdde7eee 135 //initなしの場合
tomo370 4:c3f3fdde7eee 136 stepper1.setCurrentPosition(0);
tomo370 4:c3f3fdde7eee 137 stepper1.setMaxSpeed(4000 / StepAdj1);
tomo370 4:c3f3fdde7eee 138 stepper1.setAcceleration(20000 / StepAdj1);
tomo370 0:d94213e24c2e 139
tomo370 4:c3f3fdde7eee 140 stepper1.setMaxSpeed(180000);
tomo370 4:c3f3fdde7eee 141 while(1) {
tomo370 4:c3f3fdde7eee 142 stepper1.moveTo(3200);
tomo370 4:c3f3fdde7eee 143 //stepper1.moveTo(800 / StepAdj1);
tomo370 4:c3f3fdde7eee 144 while(stepper1.distanceToGo() != 0) {
tomo370 4:c3f3fdde7eee 145 stepper1.run();
tomo370 4:c3f3fdde7eee 146 }
tomo370 4:c3f3fdde7eee 147 wait(0.5);
tomo370 4:c3f3fdde7eee 148 //stepper1.moveTo(0 / StepAdj1);
tomo370 4:c3f3fdde7eee 149 stepper1.moveTo(0);
tomo370 4:c3f3fdde7eee 150 while(stepper1.distanceToGo() != 0) {
tomo370 4:c3f3fdde7eee 151 stepper1.run();
tomo370 4:c3f3fdde7eee 152 }
tomo370 4:c3f3fdde7eee 153 wait(0.5);
tomo370 4:c3f3fdde7eee 154 }
tomo370 0:d94213e24c2e 155 }
tomo370 0:d94213e24c2e 156
tomo370 3:dd2305e50390 157
tomo370 4:c3f3fdde7eee 158 void testMove2()
tomo370 4:c3f3fdde7eee 159 {
tomo370 4:c3f3fdde7eee 160 stepper1.setMaxSpeed(10000 / StepAdj1);
tomo370 4:c3f3fdde7eee 161 stepper2.setMaxSpeed(10000 / StepAdj2);
tomo370 4:c3f3fdde7eee 162
tomo370 4:c3f3fdde7eee 163 stepper1.setMaxSpeed(180000);
tomo370 4:c3f3fdde7eee 164
tomo370 4:c3f3fdde7eee 165 while(1) {
tomo370 4:c3f3fdde7eee 166 stepper1.moveTo(20000 / StepAdj1);
tomo370 4:c3f3fdde7eee 167 stepper2.moveTo(20000 / StepAdj2);
tomo370 4:c3f3fdde7eee 168 while(stepper1.distanceToGo() != 0) {
tomo370 4:c3f3fdde7eee 169 stepper1.run();
tomo370 4:c3f3fdde7eee 170 // stepper2.run();
tomo370 4:c3f3fdde7eee 171 }
tomo370 4:c3f3fdde7eee 172 //while(stepper2.distanceToGo() != 0) {
tomo370 4:c3f3fdde7eee 173 // stepper2.run();
tomo370 4:c3f3fdde7eee 174 // }
tomo370 4:c3f3fdde7eee 175
tomo370 4:c3f3fdde7eee 176 stepper1.moveTo(500 / StepAdj1);
tomo370 4:c3f3fdde7eee 177 //stepper2.moveTo(500 / StepAdj2);
tomo370 4:c3f3fdde7eee 178 while(stepper1.distanceToGo() != 0) {
tomo370 4:c3f3fdde7eee 179 stepper1.run();
tomo370 4:c3f3fdde7eee 180 // stepper2.run();
tomo370 4:c3f3fdde7eee 181 }
tomo370 4:c3f3fdde7eee 182 while(stepper2.distanceToGo() != 0) {
tomo370 4:c3f3fdde7eee 183 // stepper2.run();
tomo370 4:c3f3fdde7eee 184 stepper1.run();
tomo370 4:c3f3fdde7eee 185 }
tomo370 4:c3f3fdde7eee 186 }
tomo370 4:c3f3fdde7eee 187 }
tomo370 4:c3f3fdde7eee 188
tomo370 3:dd2305e50390 189 void init1()
tomo370 0:d94213e24c2e 190 {
tomo370 4:c3f3fdde7eee 191 stepper1.setCurrentPosition(-1);
tomo370 4:c3f3fdde7eee 192 stepper1.setMaxSpeed(4000 / StepAdj1);
tomo370 4:c3f3fdde7eee 193 stepper1.setAcceleration(20000 / StepAdj1);
tomo370 4:c3f3fdde7eee 194 stepper1.moveTo(-30000 / StepAdj1);
tomo370 0:d94213e24c2e 195
tomo370 0:d94213e24c2e 196 while(stepper1.currentPosition() != 0) {
tomo370 0:d94213e24c2e 197 stepper1.run();
tomo370 0:d94213e24c2e 198 checkSW();
tomo370 0:d94213e24c2e 199 }
tomo370 4:c3f3fdde7eee 200 stepper1.moveTo(500 / StepAdj1);
tomo370 4:c3f3fdde7eee 201 while(stepper1.distanceToGo() != 0) stepper1.run();
tomo370 3:dd2305e50390 202 }
tomo370 3:dd2305e50390 203
tomo370 3:dd2305e50390 204 void init2()
tomo370 3:dd2305e50390 205 {
tomo370 4:c3f3fdde7eee 206 stepper2.setCurrentPosition(-1);
tomo370 4:c3f3fdde7eee 207 stepper2.setMaxSpeed(4000 / StepAdj2);
tomo370 4:c3f3fdde7eee 208 stepper2.setAcceleration(20000 / StepAdj2);
tomo370 4:c3f3fdde7eee 209 stepper2.moveTo(-30000 / StepAdj2);
tomo370 1:cf2f5992241c 210
tomo370 1:cf2f5992241c 211 while(stepper2.currentPosition() != 0) {
tomo370 1:cf2f5992241c 212 stepper2.run();
tomo370 1:cf2f5992241c 213 checkSW();
tomo370 1:cf2f5992241c 214 }
tomo370 4:c3f3fdde7eee 215 stepper2.moveTo(500 / StepAdj2);
tomo370 4:c3f3fdde7eee 216 while(stepper2.distanceToGo() != 0) stepper2.run();
tomo370 4:c3f3fdde7eee 217 }
tomo370 4:c3f3fdde7eee 218
tomo370 4:c3f3fdde7eee 219 void initBoth()
tomo370 4:c3f3fdde7eee 220 {
tomo370 4:c3f3fdde7eee 221 stepper1.setCurrentPosition(-1);
tomo370 4:c3f3fdde7eee 222 stepper1.setMaxSpeed(4000 / StepAdj1);
tomo370 4:c3f3fdde7eee 223 stepper1.setAcceleration(20000 / StepAdj1);
tomo370 4:c3f3fdde7eee 224 stepper1.moveTo(-30000 / StepAdj1);
tomo370 4:c3f3fdde7eee 225
tomo370 4:c3f3fdde7eee 226 stepper2.setCurrentPosition(-1);
tomo370 4:c3f3fdde7eee 227 stepper2.setMaxSpeed(4000 / StepAdj2);
tomo370 4:c3f3fdde7eee 228 stepper2.setAcceleration(20000 / StepAdj2);
tomo370 4:c3f3fdde7eee 229 stepper2.moveTo(-30000 / StepAdj2);
tomo370 4:c3f3fdde7eee 230
tomo370 4:c3f3fdde7eee 231 while((stepper1.distanceToGo() != 0)||(stepper2.distanceToGo() != 0)) {
tomo370 4:c3f3fdde7eee 232 if (stepper1.distanceToGo() != 0) stepper1.run();
tomo370 4:c3f3fdde7eee 233 if (stepper2.distanceToGo() != 0) stepper2.run();
tomo370 4:c3f3fdde7eee 234 checkSW();
tomo370 4:c3f3fdde7eee 235 }
tomo370 4:c3f3fdde7eee 236 stepper1.moveTo(500 / StepAdj1);
tomo370 4:c3f3fdde7eee 237 stepper2.moveTo(500 / StepAdj2);
tomo370 4:c3f3fdde7eee 238 while((stepper1.distanceToGo() != 0)||(stepper2.distanceToGo() != 0)) {
tomo370 4:c3f3fdde7eee 239 if (stepper1.distanceToGo() != 0) stepper1.run();
tomo370 4:c3f3fdde7eee 240 if (stepper2.distanceToGo() != 0) stepper2.run();
tomo370 1:cf2f5992241c 241 }
tomo370 1:cf2f5992241c 242 }
tomo370 1:cf2f5992241c 243
tomo370 3:dd2305e50390 244
tomo370 1:cf2f5992241c 245 void checkSafeBreak()
tomo370 1:cf2f5992241c 246 {
tomo370 2:198becff12f4 247 if(EndSW3.read() == 1) {
tomo370 1:cf2f5992241c 248 stepper1.stop();
tomo370 1:cf2f5992241c 249 while(1) {
tomo370 1:cf2f5992241c 250 blink();
tomo370 1:cf2f5992241c 251 }
tomo370 1:cf2f5992241c 252 }
tomo370 1:cf2f5992241c 253
tomo370 1:cf2f5992241c 254 //モーター2用エンドスイッチのチェック
tomo370 2:198becff12f4 255 if(EndSW4.read() == 1) {
tomo370 1:cf2f5992241c 256 stepper2.stop();
tomo370 1:cf2f5992241c 257 while(1) {
tomo370 1:cf2f5992241c 258 blink();
tomo370 1:cf2f5992241c 259 }
tomo370 1:cf2f5992241c 260 }
tomo370 1:cf2f5992241c 261 }
tomo370 1:cf2f5992241c 262
tomo370 1:cf2f5992241c 263 //モーター1のパラメータ保存
tomo370 1:cf2f5992241c 264 void paramStore1()
tomo370 1:cf2f5992241c 265 {
tomo370 1:cf2f5992241c 266 //速度
tomo370 2:198becff12f4 267 uint8_t dt = dmx.get(DMX_Speed1_H);
tomo370 2:198becff12f4 268 at24c1024.write(DMX_Speed1_H, dt);
tomo370 2:198becff12f4 269 wait_ms(2);
tomo370 2:198becff12f4 270 dt = dmx.get(DMX_Speed1_L);
tomo370 2:198becff12f4 271 at24c1024.write(DMX_Speed1_L, dt);
tomo370 1:cf2f5992241c 272 wait_ms(2);
tomo370 1:cf2f5992241c 273
tomo370 1:cf2f5992241c 274 //加速度
tomo370 1:cf2f5992241c 275 dt = dmx.get(DMX_Acceleration1_H);
tomo370 1:cf2f5992241c 276 at24c1024.write(DMX_Acceleration1_H, dt);
tomo370 2:198becff12f4 277 wait_ms(2);
tomo370 1:cf2f5992241c 278 dt = dmx.get(DMX_Acceleration1_L);
tomo370 1:cf2f5992241c 279 at24c1024.write(DMX_Acceleration1_L, dt);
tomo370 2:198becff12f4 280 wait_ms(2);
tomo370 1:cf2f5992241c 281
tomo370 1:cf2f5992241c 282 //最大値
tomo370 1:cf2f5992241c 283 dt = dmx.get(DMX_Max1_H);
tomo370 1:cf2f5992241c 284 at24c1024.write(DMX_Max1_H, dt);
tomo370 2:198becff12f4 285 wait_ms(2);
tomo370 1:cf2f5992241c 286 dt = dmx.get(DMX_Max1_L);
tomo370 1:cf2f5992241c 287 at24c1024.write(DMX_Max1_L, dt);
tomo370 1:cf2f5992241c 288
tomo370 1:cf2f5992241c 289 wait_ms(5);
tomo370 1:cf2f5992241c 290 }
tomo370 1:cf2f5992241c 291
tomo370 2:198becff12f4 292 //モーター2のパラメータ保存
tomo370 2:198becff12f4 293 void paramStore2()
tomo370 2:198becff12f4 294 {
tomo370 2:198becff12f4 295 //速度
tomo370 2:198becff12f4 296 uint8_t dt = dmx.get(DMX_Speed2_H);
tomo370 2:198becff12f4 297 at24c1024.write(DMX_Speed2_H, dt);
tomo370 2:198becff12f4 298 wait_ms(2);
tomo370 2:198becff12f4 299 dt = dmx.get(DMX_Speed2_L);
tomo370 2:198becff12f4 300 at24c1024.write(DMX_Speed2_L, dt);
tomo370 2:198becff12f4 301 wait_ms(2);
tomo370 2:198becff12f4 302
tomo370 2:198becff12f4 303 //加速度
tomo370 2:198becff12f4 304 dt = dmx.get(DMX_Acceleration2_H);
tomo370 2:198becff12f4 305 at24c1024.write(DMX_Acceleration2_H, dt);
tomo370 2:198becff12f4 306 wait_ms(2);
tomo370 2:198becff12f4 307 dt = dmx.get(DMX_Acceleration2_L);
tomo370 2:198becff12f4 308 at24c1024.write(DMX_Acceleration2_L, dt);
tomo370 2:198becff12f4 309 wait_ms(2);
tomo370 2:198becff12f4 310
tomo370 2:198becff12f4 311 //最大値
tomo370 2:198becff12f4 312 dt = dmx.get(DMX_Max2_H);
tomo370 2:198becff12f4 313 at24c1024.write(DMX_Max2_H, dt);
tomo370 2:198becff12f4 314 wait_ms(2);
tomo370 2:198becff12f4 315 dt = dmx.get(DMX_Max2_L);
tomo370 2:198becff12f4 316 at24c1024.write(DMX_Max2_L, dt);
tomo370 2:198becff12f4 317
tomo370 2:198becff12f4 318 wait_ms(2);
tomo370 2:198becff12f4 319 }
tomo370 2:198becff12f4 320
tomo370 2:198becff12f4 321
tomo370 1:cf2f5992241c 322 //速度・加速度・最大値・オフセットの値をスライダーから取得
tomo370 1:cf2f5992241c 323 void captureSliderValue()
tomo370 1:cf2f5992241c 324 {
tomo370 1:cf2f5992241c 325 dmxInHighBit = dmx.get(DMX_Speed1_H);
tomo370 1:cf2f5992241c 326 dmxInLowBit = dmx.get(DMX_Speed1_L);
tomo370 1:cf2f5992241c 327 dmxInHighBit = dmxInHighBit << 8;
tomo370 1:cf2f5992241c 328 speed1 = (long)(dmxInHighBit + dmxInLowBit);
tomo370 1:cf2f5992241c 329
tomo370 1:cf2f5992241c 330 dmxInHighBit = dmx.get(DMX_Speed2_H);
tomo370 1:cf2f5992241c 331 dmxInLowBit = dmx.get(DMX_Speed2_L);
tomo370 1:cf2f5992241c 332 dmxInHighBit = dmxInHighBit << 8;
tomo370 1:cf2f5992241c 333 speed2 = (long)(dmxInHighBit + dmxInLowBit);
tomo370 1:cf2f5992241c 334
tomo370 1:cf2f5992241c 335 dmxInHighBit = dmx.get(DMX_Acceleration1_H);
tomo370 1:cf2f5992241c 336 dmxInLowBit = dmx.get(DMX_Acceleration1_L);
tomo370 1:cf2f5992241c 337 dmxInHighBit = dmxInHighBit << 8;
tomo370 1:cf2f5992241c 338 Acceleration1 = (long)(dmxInHighBit + dmxInLowBit);
tomo370 1:cf2f5992241c 339
tomo370 1:cf2f5992241c 340 dmxInHighBit = dmx.get(DMX_Acceleration2_H);
tomo370 1:cf2f5992241c 341 dmxInLowBit = dmx.get(DMX_Acceleration2_L);
tomo370 1:cf2f5992241c 342 dmxInHighBit = dmxInHighBit << 8;
tomo370 1:cf2f5992241c 343 Acceleration2 = (long)(dmxInHighBit + dmxInLowBit);
tomo370 1:cf2f5992241c 344
tomo370 1:cf2f5992241c 345 dmxInHighBit = dmx.get(DMX_Max1_H);
tomo370 1:cf2f5992241c 346 dmxInLowBit = dmx.get(DMX_Max1_L);
tomo370 1:cf2f5992241c 347 dmxInHighBit = dmxInHighBit << 8;
tomo370 1:cf2f5992241c 348 max1 = (long)(dmxInHighBit + dmxInLowBit);
tomo370 1:cf2f5992241c 349
tomo370 1:cf2f5992241c 350 dmxInHighBit = dmx.get(DMX_Max2_H);
tomo370 1:cf2f5992241c 351 dmxInLowBit = dmx.get(DMX_Max2_L);
tomo370 1:cf2f5992241c 352 dmxInHighBit = dmxInHighBit << 8;
tomo370 1:cf2f5992241c 353 max2 = (long)(dmxInHighBit + dmxInLowBit);
tomo370 1:cf2f5992241c 354 }
tomo370 0:d94213e24c2e 355
tomo370 0:d94213e24c2e 356
tomo370 1:cf2f5992241c 357 //モーター1の 速度・加速度・オフセットの値をEEPROMから取得
tomo370 1:cf2f5992241c 358 void readROMValue1()
tomo370 1:cf2f5992241c 359 {
tomo370 1:cf2f5992241c 360 //速度
tomo370 2:198becff12f4 361 HighBit = at24c1024.read(DMX_Speed1_H);
tomo370 2:198becff12f4 362 LowBit = at24c1024.read(DMX_Speed1_L);
tomo370 1:cf2f5992241c 363 HighBit = HighBit << 8;
tomo370 2:198becff12f4 364 speed1 = (long)(HighBit + LowBit);
tomo370 1:cf2f5992241c 365
tomo370 1:cf2f5992241c 366 //加速度
tomo370 1:cf2f5992241c 367 HighBit = at24c1024.read(DMX_Acceleration1_H);
tomo370 1:cf2f5992241c 368 LowBit = at24c1024.read(DMX_Acceleration1_L);
tomo370 1:cf2f5992241c 369 HighBit = HighBit << 8;
tomo370 2:198becff12f4 370 Acceleration1 = (long)(HighBit + LowBit);
tomo370 1:cf2f5992241c 371
tomo370 1:cf2f5992241c 372 //最大値
tomo370 1:cf2f5992241c 373 HighBit = at24c1024.read(DMX_Max1_H);
tomo370 1:cf2f5992241c 374 LowBit = at24c1024.read(DMX_Max1_L);
tomo370 1:cf2f5992241c 375 HighBit = HighBit << 8;
tomo370 2:198becff12f4 376 max1 = (long)(HighBit + LowBit);
tomo370 1:cf2f5992241c 377 }
tomo370 1:cf2f5992241c 378
tomo370 1:cf2f5992241c 379
tomo370 1:cf2f5992241c 380 //モーター2の 速度・加速度・オフセットの値をEEPROMから取得
tomo370 1:cf2f5992241c 381 void readROMValue2()
tomo370 1:cf2f5992241c 382 {
tomo370 2:198becff12f4 383 //速度
tomo370 2:198becff12f4 384 HighBit = at24c1024.read(DMX_Speed2_H);
tomo370 2:198becff12f4 385 LowBit = at24c1024.read(DMX_Speed2_L);
tomo370 2:198becff12f4 386 HighBit = HighBit << 8;
tomo370 2:198becff12f4 387 speed2 = (long)(HighBit + LowBit);
tomo370 2:198becff12f4 388
tomo370 2:198becff12f4 389 //加速度
tomo370 2:198becff12f4 390 HighBit = at24c1024.read(DMX_Acceleration2_H);
tomo370 2:198becff12f4 391 LowBit = at24c1024.read(DMX_Acceleration2_L);
tomo370 2:198becff12f4 392 HighBit = HighBit << 8;
tomo370 2:198becff12f4 393 Acceleration2 = (long)(HighBit + LowBit);
tomo370 2:198becff12f4 394
tomo370 2:198becff12f4 395 //最大値
tomo370 2:198becff12f4 396 HighBit = at24c1024.read(DMX_Max2_H);
tomo370 2:198becff12f4 397 LowBit = at24c1024.read(DMX_Max2_L);
tomo370 2:198becff12f4 398 HighBit = HighBit << 8;
tomo370 2:198becff12f4 399 max2 = (long)(HighBit + LowBit);
tomo370 0:d94213e24c2e 400 }
tomo370 0:d94213e24c2e 401
tomo370 0:d94213e24c2e 402
tomo370 1:cf2f5992241c 403 //操作モード切り替えボタンのチェック
tomo370 1:cf2f5992241c 404 void checkManipulateButton()
tomo370 1:cf2f5992241c 405 {
tomo370 1:cf2f5992241c 406 dmxInHighBit = dmx.get(DMX_ParmSetMode1_H);
tomo370 1:cf2f5992241c 407 dmxInLowBit = dmx.get(DMX_ParmSetMode1_L);
tomo370 1:cf2f5992241c 408 if(dmxInHighBit == 102 && dmxInLowBit == 255) {
tomo370 1:cf2f5992241c 409 manipulateMode1 = !manipulateMode1;
tomo370 1:cf2f5992241c 410 blink();
tomo370 1:cf2f5992241c 411 }
tomo370 1:cf2f5992241c 412
tomo370 1:cf2f5992241c 413 dmxInHighBit = dmx.get(DMX_ParmSetMode2_H);
tomo370 1:cf2f5992241c 414 dmxInLowBit = dmx.get(DMX_ParmSetMode2_L);
tomo370 1:cf2f5992241c 415 if(dmxInHighBit == 102 && dmxInLowBit == 255) {
tomo370 1:cf2f5992241c 416 manipulateMode2 = !manipulateMode2;
tomo370 1:cf2f5992241c 417 blink();
tomo370 1:cf2f5992241c 418 }
tomo370 1:cf2f5992241c 419 }
tomo370 1:cf2f5992241c 420
tomo370 1:cf2f5992241c 421 //書き込みボタンのチェック
tomo370 1:cf2f5992241c 422 void checkWriteButton()
tomo370 1:cf2f5992241c 423 {
tomo370 1:cf2f5992241c 424 dmxInHighBit = dmx.get(DMX_SaveValue1_H);
tomo370 1:cf2f5992241c 425 dmxInLowBit = dmx.get(DMX_SaveValue1_L);
tomo370 1:cf2f5992241c 426 dmxInHighBit = dmxInHighBit << 8;
tomo370 1:cf2f5992241c 427 param1 = (long)(dmxInHighBit + dmxInLowBit);
tomo370 1:cf2f5992241c 428
tomo370 1:cf2f5992241c 429 dmxInHighBit = dmx.get(DMX_SaveValue2_H);
tomo370 1:cf2f5992241c 430 dmxInLowBit = dmx.get(DMX_SaveValue2_L);
tomo370 1:cf2f5992241c 431 dmxInHighBit = dmxInHighBit << 8;
tomo370 1:cf2f5992241c 432 param2 = (long)(dmxInHighBit + dmxInLowBit);
tomo370 1:cf2f5992241c 433
tomo370 1:cf2f5992241c 434 if(param1 == 24932) {
tomo370 1:cf2f5992241c 435 paramStore1();
tomo370 1:cf2f5992241c 436 blink();
tomo370 1:cf2f5992241c 437 } else;
tomo370 1:cf2f5992241c 438
tomo370 1:cf2f5992241c 439 if(param2 == 24932) {
tomo370 2:198becff12f4 440 paramStore2();
tomo370 2:198becff12f4 441 blink();
tomo370 1:cf2f5992241c 442 } else;
tomo370 1:cf2f5992241c 443 }
tomo370 1:cf2f5992241c 444
tomo370 4:c3f3fdde7eee 445 //モータードライバの設定
tomo370 4:c3f3fdde7eee 446 void conf1()
tomo370 4:c3f3fdde7eee 447 {
tomo370 4:c3f3fdde7eee 448 switch (StepSize1) {
tomo370 4:c3f3fdde7eee 449 case 1: //DRV8825 full steps
tomo370 4:c3f3fdde7eee 450 stepper1MS1 = 0;
tomo370 4:c3f3fdde7eee 451 stepper1MS2 = 0;
tomo370 4:c3f3fdde7eee 452 stepper1MS3 = 0;
tomo370 4:c3f3fdde7eee 453 StepAdj1 = 16;
tomo370 4:c3f3fdde7eee 454 break;
tomo370 4:c3f3fdde7eee 455
tomo370 4:c3f3fdde7eee 456 case 2: //DRV8825 1/2 steps
tomo370 4:c3f3fdde7eee 457 stepper1MS1 = 1;
tomo370 4:c3f3fdde7eee 458 stepper1MS2 = 0;
tomo370 4:c3f3fdde7eee 459 stepper1MS3 = 0;
tomo370 4:c3f3fdde7eee 460 StepAdj1 = 8;
tomo370 4:c3f3fdde7eee 461 break;
tomo370 4:c3f3fdde7eee 462
tomo370 4:c3f3fdde7eee 463 case 3: //DRV8825 1/4 steps
tomo370 4:c3f3fdde7eee 464 stepper1MS1 = 0;
tomo370 4:c3f3fdde7eee 465 stepper1MS2 = 1;
tomo370 4:c3f3fdde7eee 466 stepper1MS3 = 0;
tomo370 4:c3f3fdde7eee 467 StepAdj1 = 4;
tomo370 4:c3f3fdde7eee 468 break;
tomo370 4:c3f3fdde7eee 469
tomo370 4:c3f3fdde7eee 470 case 4: //DRV8825 1/8 steps
tomo370 4:c3f3fdde7eee 471 stepper1MS1 = 1;
tomo370 4:c3f3fdde7eee 472 stepper1MS2 = 1;
tomo370 4:c3f3fdde7eee 473 stepper1MS3 = 0;
tomo370 4:c3f3fdde7eee 474 StepAdj1 = 2;
tomo370 4:c3f3fdde7eee 475 break;
tomo370 4:c3f3fdde7eee 476
tomo370 4:c3f3fdde7eee 477 case 5: //DRV8825 1/16 steps
tomo370 4:c3f3fdde7eee 478 stepper1MS1 = 0;
tomo370 4:c3f3fdde7eee 479 stepper1MS2 = 0;
tomo370 4:c3f3fdde7eee 480 stepper1MS3 = 1;
tomo370 4:c3f3fdde7eee 481 StepAdj1 = 1;
tomo370 4:c3f3fdde7eee 482 break;
tomo370 4:c3f3fdde7eee 483
tomo370 4:c3f3fdde7eee 484 case 6: //DRV8825 1/32 steps
tomo370 4:c3f3fdde7eee 485 stepper1MS1 = 1;
tomo370 4:c3f3fdde7eee 486 stepper1MS2 = 1;
tomo370 4:c3f3fdde7eee 487 stepper1MS3 = 1;
tomo370 4:c3f3fdde7eee 488 StepAdj1 = 0.5;
tomo370 4:c3f3fdde7eee 489 break;
tomo370 4:c3f3fdde7eee 490
tomo370 4:c3f3fdde7eee 491 case 7: //TMC StealthChop µ16 steps
tomo370 4:c3f3fdde7eee 492 DigitalIn stepper1MS1(D11);
tomo370 4:c3f3fdde7eee 493 DigitalIn stepper1MS2(D12);
tomo370 4:c3f3fdde7eee 494 StepAdj1 = 1;
tomo370 4:c3f3fdde7eee 495 break;
tomo370 4:c3f3fdde7eee 496 }
tomo370 4:c3f3fdde7eee 497 stepper1Enable = 0;
tomo370 4:c3f3fdde7eee 498 }
tomo370 4:c3f3fdde7eee 499
tomo370 4:c3f3fdde7eee 500 void conf2()
tomo370 4:c3f3fdde7eee 501 {
tomo370 4:c3f3fdde7eee 502 switch (StepSize2) {
tomo370 4:c3f3fdde7eee 503 case 1: //DRV8825 full steps
tomo370 4:c3f3fdde7eee 504 stepper2MS1 = 0;
tomo370 4:c3f3fdde7eee 505 stepper2MS2 = 0;
tomo370 4:c3f3fdde7eee 506 stepper2MS3 = 0;
tomo370 4:c3f3fdde7eee 507 StepAdj2 = 16;
tomo370 4:c3f3fdde7eee 508 break;
tomo370 4:c3f3fdde7eee 509
tomo370 4:c3f3fdde7eee 510 case 2: //DRV8825 1/2 steps
tomo370 4:c3f3fdde7eee 511 stepper2MS1 = 1;
tomo370 4:c3f3fdde7eee 512 stepper2MS2 = 0;
tomo370 4:c3f3fdde7eee 513 stepper2MS3 = 0;
tomo370 4:c3f3fdde7eee 514 StepAdj2 = 8;
tomo370 4:c3f3fdde7eee 515 break;
tomo370 4:c3f3fdde7eee 516
tomo370 4:c3f3fdde7eee 517 case 3: //DRV8825 1/4 steps
tomo370 4:c3f3fdde7eee 518 stepper2MS1 = 0;
tomo370 4:c3f3fdde7eee 519 stepper2MS2 = 1;
tomo370 4:c3f3fdde7eee 520 stepper2MS3 = 0;
tomo370 4:c3f3fdde7eee 521 StepAdj2 = 4;
tomo370 4:c3f3fdde7eee 522 break;
tomo370 4:c3f3fdde7eee 523
tomo370 4:c3f3fdde7eee 524 case 4: //DRV8825 1/8 steps
tomo370 4:c3f3fdde7eee 525 stepper2MS1 = 1;
tomo370 4:c3f3fdde7eee 526 stepper2MS2 = 1;
tomo370 4:c3f3fdde7eee 527 stepper2MS3 = 0;
tomo370 4:c3f3fdde7eee 528 StepAdj2 = 2;
tomo370 4:c3f3fdde7eee 529 break;
tomo370 4:c3f3fdde7eee 530
tomo370 4:c3f3fdde7eee 531 case 5: //DRV8825 1/16 steps
tomo370 4:c3f3fdde7eee 532 stepper2MS1 = 0;
tomo370 4:c3f3fdde7eee 533 stepper2MS2 = 0;
tomo370 4:c3f3fdde7eee 534 stepper2MS3 = 1;
tomo370 4:c3f3fdde7eee 535 StepAdj2 = 1;
tomo370 4:c3f3fdde7eee 536 break;
tomo370 4:c3f3fdde7eee 537
tomo370 4:c3f3fdde7eee 538 case 6: //DRV8825 1/32 steps
tomo370 4:c3f3fdde7eee 539 stepper2MS1 = 1;
tomo370 4:c3f3fdde7eee 540 stepper2MS2 = 1;
tomo370 4:c3f3fdde7eee 541 stepper2MS3 = 1;
tomo370 4:c3f3fdde7eee 542 StepAdj2 = 0.5;
tomo370 4:c3f3fdde7eee 543 break;
tomo370 4:c3f3fdde7eee 544
tomo370 4:c3f3fdde7eee 545 case 7: //TMC StealthChop µ16 steps
tomo370 4:c3f3fdde7eee 546 DigitalIn stepper2MS1(D11);
tomo370 4:c3f3fdde7eee 547 DigitalIn stepper2MS2(D12);
tomo370 4:c3f3fdde7eee 548 StepAdj2 = 1;
tomo370 4:c3f3fdde7eee 549 break;
tomo370 4:c3f3fdde7eee 550 }
tomo370 4:c3f3fdde7eee 551 stepper2Enable = 0;
tomo370 4:c3f3fdde7eee 552 }
tomo370 4:c3f3fdde7eee 553
tomo370 1:cf2f5992241c 554
tomo370 0:d94213e24c2e 555 int main()
tomo370 0:d94213e24c2e 556 {
tomo370 4:c3f3fdde7eee 557
tomo370 4:c3f3fdde7eee 558 dmxEnable = 0; //0:receiver 1:sender
tomo370 0:d94213e24c2e 559
tomo370 4:c3f3fdde7eee 560 conf1(); //motor1 config ドライバの設定
tomo370 4:c3f3fdde7eee 561 conf2(); //motor2 config
tomo370 1:cf2f5992241c 562
tomo370 0:d94213e24c2e 563 t.start();
tomo370 4:c3f3fdde7eee 564 // to.attach(&calc, 0.001);
tomo370 0:d94213e24c2e 565
tomo370 0:d94213e24c2e 566 stepper1.setCurrentPosition(-1);
tomo370 1:cf2f5992241c 567 stepper2.setCurrentPosition(-1);
tomo370 0:d94213e24c2e 568
tomo370 4:c3f3fdde7eee 569 //モーターの初期化シーケンス
tomo370 4:c3f3fdde7eee 570 // init1();
tomo370 3:dd2305e50390 571 // init2();
tomo370 4:c3f3fdde7eee 572 // initBoth();
tomo370 0:d94213e24c2e 573
tomo370 4:c3f3fdde7eee 574 //往復運動を繰り返すテストシーケンス(無限ループ)
tomo370 4:c3f3fdde7eee 575 testMove1();
tomo370 1:cf2f5992241c 576
tomo370 1:cf2f5992241c 577 myLED =1;
tomo370 1:cf2f5992241c 578
tomo370 2:198becff12f4 579 readROMValue1();
tomo370 2:198becff12f4 580 readROMValue2();
tomo370 0:d94213e24c2e 581
tomo370 4:c3f3fdde7eee 582 stepper1.setMaxSpeed(10000 / StepAdj1);
tomo370 4:c3f3fdde7eee 583 stepper2.setMaxSpeed(10000 / StepAdj2);
tomo370 4:c3f3fdde7eee 584
tomo370 0:d94213e24c2e 585 while(1) {
tomo370 1:cf2f5992241c 586 //操作モード切り替えボタンのチェック
tomo370 1:cf2f5992241c 587 checkManipulateButton();
tomo370 1:cf2f5992241c 588
tomo370 1:cf2f5992241c 589 //書き込みボタンチェック
tomo370 1:cf2f5992241c 590 checkWriteButton();
tomo370 0:d94213e24c2e 591
tomo370 1:cf2f5992241c 592 //モーター1の目標位置をスライダーから取得
tomo370 1:cf2f5992241c 593 dmxInHighBit = dmx.get(DMX_Position1_H);
tomo370 1:cf2f5992241c 594 dmxInLowBit = dmx.get(DMX_Position1_L);
tomo370 1:cf2f5992241c 595 dmxInHighBit = dmxInHighBit << 8;
tomo370 1:cf2f5992241c 596 position1 = (long)(dmxInHighBit + dmxInLowBit);
tomo370 0:d94213e24c2e 597
tomo370 1:cf2f5992241c 598 //モーター1の目標位置をスライダーから取得
tomo370 1:cf2f5992241c 599 dmxInHighBit = dmx.get(DMX_Position2_H);
tomo370 1:cf2f5992241c 600 dmxInLowBit = dmx.get(DMX_Position2_L);
tomo370 1:cf2f5992241c 601 dmxInHighBit = dmxInHighBit << 8;
tomo370 1:cf2f5992241c 602 position2 = (long)(dmxInHighBit + dmxInLowBit);
tomo370 0:d94213e24c2e 603
tomo370 1:cf2f5992241c 604 //手動モードの場合、現在のスライダーの値を取得、パラメーターを設定
tomo370 2:198becff12f4 605 if(manipulateMode1 == false) {
tomo370 1:cf2f5992241c 606 captureSliderValue();
tomo370 2:198becff12f4 607 myLED = 0;
tomo370 1:cf2f5992241c 608 }
tomo370 0:d94213e24c2e 609
tomo370 1:cf2f5992241c 610 //自動モードの場合、EEPROMから値を取得、パラメーターを設定
tomo370 1:cf2f5992241c 611 else {
tomo370 2:198becff12f4 612 myLED = 1;
tomo370 1:cf2f5992241c 613 }
tomo370 0:d94213e24c2e 614
tomo370 2:198becff12f4 615 //手動モードの場合、現在のスライダーの値を取得、パラメーターを設定
tomo370 2:198becff12f4 616 if(manipulateMode2 == false) {
tomo370 2:198becff12f4 617 captureSliderValue();
tomo370 2:198becff12f4 618 myLED = 0;
tomo370 2:198becff12f4 619 }
tomo370 2:198becff12f4 620
tomo370 2:198becff12f4 621 //自動モードの場合、EEPROMから値を取得、パラメータを設定
tomo370 2:198becff12f4 622 else {
tomo370 2:198becff12f4 623 myLED = 1;
tomo370 2:198becff12f4 624 }
tomo370 1:cf2f5992241c 625
tomo370 1:cf2f5992241c 626 position1 = map(position1, 0, 0xFFFF, 0, max1);
tomo370 1:cf2f5992241c 627 stepper1.setMaxSpeed(speed1);
tomo370 1:cf2f5992241c 628 stepper1.setAcceleration(Acceleration1);
tomo370 1:cf2f5992241c 629
tomo370 2:198becff12f4 630 position2 = map(position2, 0, 0xFFFF, 0, max2);
tomo370 2:198becff12f4 631 stepper2.setMaxSpeed(speed2);
tomo370 2:198becff12f4 632 stepper2.setAcceleration(Acceleration2);
tomo370 1:cf2f5992241c 633
tomo370 1:cf2f5992241c 634 stepper1.moveTo(position1);
tomo370 2:198becff12f4 635 stepper2.moveTo(position2);
tomo370 1:cf2f5992241c 636
tomo370 4:c3f3fdde7eee 637
tomo370 1:cf2f5992241c 638 checkSafeBreak();
tomo370 4:c3f3fdde7eee 639 stepper1.newSpeed();
tomo370 4:c3f3fdde7eee 640
tomo370 4:c3f3fdde7eee 641 //モーター1の走行
tomo370 4:c3f3fdde7eee 642 if(stepper1.distanceToGo() != 0) stepper1.run();
tomo370 4:c3f3fdde7eee 643 //モーター2の走行(停止中)
tomo370 4:c3f3fdde7eee 644 // if(stepper2.distanceToGo() != 0) stepper2.run();
tomo370 4:c3f3fdde7eee 645
tomo370 1:cf2f5992241c 646 }
tomo370 1:cf2f5992241c 647 }