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.

Dependencies:   mbed

Files at this revision

API Documentation at this revision

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 );
+    }
+}
+