This is a library that drives a stepper motor with given parameters for speed and direction.

Dependents:   RaceTimer

About

This is a stepper motor library that is based on the sMotor library by Samuel Matildes (sam.naeec@gmail.com). It was designed to drive specifically a 5718m-05e-05 stepper motor in conjunction with an L293NE quad h-bridge chip. I am not responsible for any damage caused due to the execution of this program on your hardware as I can only confirm that it works for the above specified model. High torque mode is currently not complete.

mMotor.cpp

Committer:
mdu7078
Date:
2013-05-13
Revision:
1:6e0a307d0f9b
Parent:
0:acf5b8fc382b

File content as of revision 1:6e0a307d0f9b:

/* * * * * * * * * * * * * * * * * * * * * * * * * * *
 * This is a stepper motor library for testing       *
 * 4 step stepper motors.  The speed of stepping is  *
 * variable as well as the amount of steps.          *
 * ------------------------------------------------- *
 * This library is based on the sMotor library by    *
 * Samuel Matildes (sam.naeec@gmail.com).            *
 * ------------------------------------------------- *
 *                                                   *
 * Created by: Michael Dushkoff (mad1841@rit.edu)    *
 * * * * * * * * * * * * * * * * * * * * * * * * * * */

#include "mbed.h"
#include "mMotor.h"

int motorSpeed; // Steper speed

mMotor::mMotor(PinName M0, PinName M1, PinName M2, PinName M3) : _M0(M0), _M1(M1), _M2(M2), _M3(M3) { // Defenition of motor pins
    _M0=0;
    _M1=0;
    _M2=0;
    _M3=0;
}


void mMotor::counterclockwise() { // rotate the motor 1 step anticlockwise 
    for (int i = 0; i < 4; i++) {
        switch (i) { // activate the ports A0, A2, A3, A3 in a binary sequence for steps
            case 0: {
                _M0=0;
                _M1=0;
                _M2=0;
                _M3=1;
            }
            break;
            case 1: {
                _M0=0;
                _M1=0;
                _M2=1;
                _M3=0;
            }
            break;
            case 2: {
                _M0=0;
                _M1=1;
                _M2=0;
                _M3=0;
            }
            break;
            case 3: {
                _M0=1;
                _M1=0;
                _M2=0;
                _M3=0;
            }
            break;
        }

        wait_us(motorSpeed); // wait time defines the speed 
    }
    _M0 = 0;
    _M1 = 0;
    _M2 = 0;
    _M3 = 0;
}

void mMotor::clockwise() { // rotate the motor 1 step clockwise 
    for (int i = 0; i < 4; i++) {
        switch (i) { // activate the ports A0, A2, A3, A3 in a binary sequence for steps
            case 0: {
                _M0=1;
                _M1=0;
                _M2=0;
                _M3=0;
            }
            break;
            case 1: {
                _M0=0;
                _M1=1;
                _M2=0;
                _M3=0;
            }
            break;
            case 2: {
                _M0=0;
                _M1=0;
                _M2=1;
                _M3=0;
            }
            break;
            case 3: {
                _M0=0;
                _M1=0;
                _M2=0;
                _M3=1;
            }
            break;
        }

        wait_us(motorSpeed); // wait time defines the speed 
    }
    _M0 = 0;
    _M1 = 0;
    _M2 = 0;
    _M3 = 1;
}

void mMotor::ht_clockwise() { // rotate the motor 1 step clockwise 
    for (int i = 0; i < 4; i++) {
        switch (i) { // activate the ports A0, A2, A3, A3 in a binary sequence for steps
            case 0: {
                _M0=1;
                _M1=0;
                _M2=0;
                _M3=0;
            }
            break;
            case 1: {
                _M0=0;
                _M1=1;
                _M2=0;
                _M3=0;
            }
            break;
            case 2: {
                _M0=0;
                _M1=0;
                _M2=1;
                _M3=0;
            }
            break;
            case 3: {
                _M0=0;
                _M1=0;
                _M2=0;
                _M3=1;
            }
            break;
        }

        wait_us(motorSpeed); // wait time defines the speed 
    }
}

void mMotor::ht_counterclockwise() { // rotate the motor 1 step anticlockwise 
    for (int i = 0; i < 4; i++) {
        switch (i) { // activate the ports A0, A2, A3, A3 in a binary sequence for steps
            case 0: {
                _M0=0;
                _M1=0;
                _M2=0;
                _M3=1;
            }
            break;
            case 1: {
                _M0=0;
                _M1=0;
                _M2=1;
                _M3=0;
            }
            break;
            case 2: {
                _M0=0;
                _M1=1;
                _M2=0;
                _M3=0;
            }
            break;
            case 3: {
                _M0=1;
                _M1=0;
                _M2=0;
                _M3=0;
            }
            break;
        }

        wait_us(motorSpeed); // wait time defines the speed 
    }
}


void mMotor::step(int num_steps, int direction, int speed) {// steper function: number of steps, direction (0- right, 1- left), speed (default 1200)
    int count=0; // initalize step count
    motorSpeed=speed; //set motor speed
    if (direction==0) // turn clockwise
        do {
            clockwise();
            count++;
        } while (count<num_steps); // turn number of steps applied 
    else if (direction==1)// turn anticlockwise
        do {
            counterclockwise();
            count++;
        } while (count<num_steps);// turn number of steps applied 

}

void mMotor::ht_step(int num_steps, int direction, int speed) {// steper function: number of steps, direction (0- right, 1- left), speed (default 1200)
    int count=0; // initalize step count
    motorSpeed=speed; //set motor speed
    if (direction==0) // turn clockwise
        do {
            ht_clockwise();
            count++;
        } while (count<num_steps); // turn number of steps applied 
    else if (direction==1)// turn anticlockwise
        do {
            ht_counterclockwise();
            count++;
        } while (count<num_steps);// turn number of steps applied 

}