Unipolar stepper motor operation library

Dependents:   LAB04_Oppgave1 test_stepper Stepper_Motor_Demo StepperMotorUni_Hello ... more

Unipolar stepper motor library

This library generates pulses on 4 digital output pins of the mbed. The pulses are generated by mbed's ticker function.

The mbed pins cannot drive the stepper motor directly. So it requires driver stage for the motor. The circuit may be like following diagram.
The driver stage should be chosen by requirement for the stepper motor.

/media/uploads/okano/unipolar-steppermotor-sample.png


The mbed generates pulses on 4 output pins for external driver stage.
This library can generate 3 types of pulses.

1 phase drive (wave drive) /media/uploads/okano/1phase_drive.gif

2 phase drive /media/uploads/okano/2phase_drive.gif

1-2 phase (half step) drive /media/uploads/okano/halfstep_drive.gif

Components pages

Components pages are available for bipolar and unipolar motor libraries

A bipolar stepper motor driving pulse generator

A unipolar stepper motor driving pulse generator

Revision:
5:93f9ce526f38
Parent:
4:6909efe4c8ac
Child:
6:007d0570ba4f
diff -r 6909efe4c8ac -r 93f9ce526f38 StepperMotorUni.cpp
--- a/StepperMotorUni.cpp	Wed Apr 22 03:24:21 2015 +0000
+++ b/StepperMotorUni.cpp	Mon Apr 27 01:16:51 2015 +0000
@@ -2,8 +2,8 @@
  *
  *  @class   StepperMotorUni
  *  @author  Tedd OKANO
- *  @version 1.1.1
- *  @date    22-Apr-2015
+ *  @version 1.1.2
+ *  @date    27-Apr-2015
  *
  *  Copyright: 2010, 2014, 2015 Tedd OKANO
  *  Released under the Apache 2 license License
@@ -38,6 +38,7 @@
  *  version 1.0.1 (14-Apr-2015) //  API document correction
  *  version 1.1   (21-Apr-2015) //  ramp control function enabled
  *  version 1.1.1 (22-Apr-2015) //  fixed: find_home_position compatibility with ramp control feature
+ *  version 1.1.2 (27-Apr-2015) //  fixed: init_done behavior 
  */
 
 #include "mbed.h"
@@ -50,6 +51,7 @@
     PinName out_D,
     PinName position_detect
 ) :
+    init_done( false ),
     motor_out( out_A, out_B, out_C, out_D ),
     position_detect_pin( position_detect ),
     rot_mode( SHORTEST ),
@@ -59,7 +61,6 @@
     pos_offset( 0 ),
     target_pos( 0 ),
     max_pps( MAX_PPS ),
-    init_done( false ),
     pause( false ),
     power_ctrl( false ),
     ramp_init_speed_rate( 1.0 ),
@@ -118,6 +119,8 @@
     else
         direction   = 1;
 
+    init_done   = false;
+
     if ( prev_rot == NO_WRAPAROUND ) {
 
         for ( int i = 0; i < (max_pos >> 1); i++ ) {