Library to run 4-wire half stepper in asynchronous mode

Dependents:   Lift_arm_control

Async_4pin_Stepper.h

Committer:
krogedal
Date:
2021-06-03
Revision:
0:252d645cfc5d
Child:
1:359b46cdaf19

File content as of revision 0:252d645cfc5d:

#ifndef ASYNC_4PIN_STEPPER_H
#define ASYNC_4PIN_STEPPER_H

/* Asynchronous Stepper with 4-pin output
 *
 * Written by Simon Krogedal
 * 31/05/2021
 * Team 9 4th Year project
 * 
 * for NUCLEO-F401RE
 * 
 * Version 0.1
 *
 */
 
#include "mbed.h"

class Async_4pin_Stepper {
    
    private:
    
        Ticker ticker;
        BusOut output;
        
        int     currentPos;
        int     targetPos;
        int     speed_;
        double  stepInterval;
        double  SPR;
        bool    running;
        
        void    step(int step); // Do a single step, called by step once funcs
        void    stepCB();       // Callback function for stepper
        
    protected:
        
        void stepOnceCW();      // Single step CW
        void stepOnceCCW();     // Single step CCW
        
    public:
    
        typedef enum  {
            CW,         // Clockwise
            CCW         // Counter-clockwise
        } Dir;
    
        // Constructor takes 4 pins and a steps/rev in float presicion
        Async_4pin_Stepper( PinName StepperPin1,
                            PinName StepperPin2,
                            PinName StepperPin3,
                            PinName StepperPin4,
                            float   StepsPerRev = 4075.7728);
                            
                            
        void setZeroPos();                      // Set current position as 0
        void setTarget(int target);             // set target
        void goToTarget();                      // Move towards given target
//        void run(float speed, Dir dir);   // Run at a given speed in step/s
        void setSpeed(int speed);               // Set speed
        int getSpeed();                         // Returns speed
        int getPos();                           // Returns current position
        int getTarget();                        // Returns target position
        int distanceToGo();                     // Returns steps left to target
        void relax();                           // Close all gates, reducing current but losing holding torque
        bool isRunning();                       // Is the motor running?
        void stop();

};

#endif