
Very simple operation samples of unipolar stepper motor. This code has been made to help beginners to learn the stepper motor. The history of the code shows the how to generate pulses from very basic level.
Revision 11:436e74a3ec7a, committed 2014-01-11
- Comitter:
- okano
- Date:
- Sat Jan 11 02:37:00 2014 +0000
- Parent:
- 10:f00d0b8775d4
- Commit message:
- version 8 : motor control by function
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Sat Jan 11 02:20:23 2014 +0000 +++ b/main.cpp Sat Jan 11 02:37:00 2014 +0000 @@ -1,38 +1,36 @@ // stepper motor operation sample (learn it step by step). // showing how to control a unipolar stepper motor by mbed digital output ports. // -// version 7 : speed setting by variable +// version 8 : motor control by function #include "mbed.h" BusOut motor_out( p26, p25, p24, p23 ); -#define INTERVAL 0.01 +#define CW 0 // CLOCKWISE +#define CCW 1 // COUNTERCLOCKWISE -// 1-phase drive pattern -// char pattern[] = { 1, 2, 4, 8 }; - -// 2-phase drive pattern -char pattern[] = { 0x3, 0x6, 0xC, 0x9 }; +void rotate( int steps, float speed, char direction ); int main() { - float speed = 100; // pulse-per-second (pps) - while(1) { - - // pulse orser : "p26 -> p25 -> p24 -> p23" for 4*90(=360) steps - - for ( int i = 0; i < 360; i++ ) { - motor_out = pattern[ i % 4 ]; - wait( 1.0 / speed ); - } - - // pulse orser : "p23 -> p24 -> p25 -> p26" for 4*90(=360) steps - - for ( int i = 0; i < 360; i++ ) { - motor_out = pattern[ 3 - (i % 4) ]; - wait( 1.0 / speed ); - } + rotate( 20, 50, CW ); + rotate( 20, 50, CCW ); + rotate( 40, 100, CW ); + rotate( 40, 100, CCW ); } } + +void rotate( int steps, float speed, char direction ) +{ + static char pattern[] = { 0x3, 0x6, 0xC, 0x9 }; + static int state = 0; + + for ( int i = 0; i < steps; i++ ) { + motor_out = pattern[ state & 0x3 ]; + state += direction ? -1 : 1; + wait( 1.0 / speed ); + } +} +