Morgane Vallée / Mbed 2 deprecated StepperMotor

Dependencies:   mbed

Committer:
aeris
Date:
Tue Jul 20 14:21:22 2010 +0000
Revision:
0:31704dbffee1

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
aeris 0:31704dbffee1 1 #include "mbed.h"
aeris 0:31704dbffee1 2
aeris 0:31704dbffee1 3 //motor spec
aeris 0:31704dbffee1 4 #define STEP_SIZE 1.8
aeris 0:31704dbffee1 5 #define MAX_SPEED 50
aeris 0:31704dbffee1 6
aeris 0:31704dbffee1 7 //algo
aeris 0:31704dbffee1 8 #define SPEED_STEP 5
aeris 0:31704dbffee1 9
aeris 0:31704dbffee1 10 DigitalOut motor_a1(p30);
aeris 0:31704dbffee1 11 DigitalOut motor_a2(p29);
aeris 0:31704dbffee1 12 DigitalOut motor_b1(p28);
aeris 0:31704dbffee1 13 DigitalOut motor_b2(p27);
aeris 0:31704dbffee1 14 InterruptIn bp_up(p22);
aeris 0:31704dbffee1 15 InterruptIn bp_dw(p21);
aeris 0:31704dbffee1 16
aeris 0:31704dbffee1 17 float speed = SPEED_STEP;
aeris 0:31704dbffee1 18
aeris 0:31704dbffee1 19 void SpeedUp() {
aeris 0:31704dbffee1 20 if (speed < MAX_SPEED)
aeris 0:31704dbffee1 21 speed += SPEED_STEP;
aeris 0:31704dbffee1 22 }
aeris 0:31704dbffee1 23
aeris 0:31704dbffee1 24 void SpeedDw() {
aeris 0:31704dbffee1 25 if (speed > (-1 * MAX_SPEED))
aeris 0:31704dbffee1 26 speed -= SPEED_STEP;
aeris 0:31704dbffee1 27 }
aeris 0:31704dbffee1 28
aeris 0:31704dbffee1 29 int main() {
aeris 0:31704dbffee1 30 unsigned char pos = 0;
aeris 0:31704dbffee1 31 unsigned char cycle[8][4] = {
aeris 0:31704dbffee1 32 {1, 0, 0, 0},
aeris 0:31704dbffee1 33 {1, 0, 1, 0},
aeris 0:31704dbffee1 34 {0, 0, 1, 0},
aeris 0:31704dbffee1 35 {0, 1, 1, 0},
aeris 0:31704dbffee1 36 {0, 1, 0, 0},
aeris 0:31704dbffee1 37 {0, 1, 0, 1},
aeris 0:31704dbffee1 38 {0, 0, 0, 1},
aeris 0:31704dbffee1 39 {1, 0, 0, 1}
aeris 0:31704dbffee1 40 };
aeris 0:31704dbffee1 41
aeris 0:31704dbffee1 42 bp_up.rise(&SpeedUp);
aeris 0:31704dbffee1 43 bp_dw.rise(&SpeedDw);
aeris 0:31704dbffee1 44
aeris 0:31704dbffee1 45 while (1) {
aeris 0:31704dbffee1 46 motor_a1 = cycle[pos][0];
aeris 0:31704dbffee1 47 motor_a2 = cycle[pos][1];
aeris 0:31704dbffee1 48 motor_b1 = cycle[pos][2];
aeris 0:31704dbffee1 49 motor_b2 = cycle[pos][3];
aeris 0:31704dbffee1 50
aeris 0:31704dbffee1 51 if (speed != 0) {
aeris 0:31704dbffee1 52 if (speed > 0) {
aeris 0:31704dbffee1 53 if (pos == 7)
aeris 0:31704dbffee1 54 pos = 0;
aeris 0:31704dbffee1 55 else
aeris 0:31704dbffee1 56 pos++;
aeris 0:31704dbffee1 57 }
aeris 0:31704dbffee1 58 else {
aeris 0:31704dbffee1 59 if (pos == 0)
aeris 0:31704dbffee1 60 pos = 7;
aeris 0:31704dbffee1 61 else
aeris 0:31704dbffee1 62 pos--;
aeris 0:31704dbffee1 63 }
aeris 0:31704dbffee1 64
aeris 0:31704dbffee1 65 wait((60.0 * STEP_SIZE) / (360.0 * 8.0 * abs(speed)));
aeris 0:31704dbffee1 66 } else {
aeris 0:31704dbffee1 67
aeris 0:31704dbffee1 68 }
aeris 0:31704dbffee1 69 }
aeris 0:31704dbffee1 70
aeris 0:31704dbffee1 71 return 1;
aeris 0:31704dbffee1 72 }