noka @willow-micro / AsyncStepper
Committer:
babylonica
Date:
Thu Jul 12 01:27:04 2018 +0000
Revision:
0:26fa30c35f74
Child:
1:0f8209567b7d
First commit.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
babylonica 0:26fa30c35f74 1 // -*- coding:utf-8-unix -*-
babylonica 0:26fa30c35f74 2 /*!
babylonica 0:26fa30c35f74 3 @file AsyncStepper.hpp
babylonica 0:26fa30c35f74 4
babylonica 0:26fa30c35f74 5 @brief Drive a stepper motor using A4988 with asynchronous.
babylonica 0:26fa30c35f74 6
babylonica 0:26fa30c35f74 7 @author T.Kawamura
babylonica 0:26fa30c35f74 8 @version 1.0
babylonica 0:26fa30c35f74 9 @date 2018-07-12 T.Kawamura Written for C++/mbed.
babylonica 0:26fa30c35f74 10 @see
babylonica 0:26fa30c35f74 11 Copyright (C) 2018 Takuma Kawamura.
babylonica 0:26fa30c35f74 12 Released under the MIT license.
babylonica 0:26fa30c35f74 13 http://opensource.org/licenses/mit-license.php
babylonica 0:26fa30c35f74 14 */
babylonica 0:26fa30c35f74 15 #ifndef ASYNCSTEPPER_H
babylonica 0:26fa30c35f74 16 #define ASYNCSTEPPER_H
babylonica 0:26fa30c35f74 17
babylonica 0:26fa30c35f74 18 #include "mbed.h"
babylonica 0:26fa30c35f74 19
babylonica 0:26fa30c35f74 20 using namespace std;
babylonica 0:26fa30c35f74 21
babylonica 0:26fa30c35f74 22 enum stepMode_e {
babylonica 0:26fa30c35f74 23 FULL, HALF, QUARTER, EIGHTH, SIXTEENTH
babylonica 0:26fa30c35f74 24 };
babylonica 0:26fa30c35f74 25 enum direction_e {
babylonica 0:26fa30c35f74 26 NEGATIVE, POSITIVE
babylonica 0:26fa30c35f74 27 };
babylonica 0:26fa30c35f74 28 enum stopMode_e {
babylonica 0:26fa30c35f74 29 FREE, LOCKED
babylonica 0:26fa30c35f74 30 };
babylonica 0:26fa30c35f74 31
babylonica 0:26fa30c35f74 32 /*!
babylonica 0:26fa30c35f74 33 @class AsyncStepper
babylonica 0:26fa30c35f74 34 @brief Drive a stepper motor using A4988 with asynchronous
babylonica 0:26fa30c35f74 35 */
babylonica 0:26fa30c35f74 36 class AsyncStepper{
babylonica 0:26fa30c35f74 37 private:
babylonica 0:26fa30c35f74 38 Ticker *ticker;
babylonica 0:26fa30c35f74 39 DigitalOut *enableOut;
babylonica 0:26fa30c35f74 40 DigitalOut *dirOut;
babylonica 0:26fa30c35f74 41 DigitalOut *stepOut;
babylonica 0:26fa30c35f74 42 BusOut *stepModeBus;
babylonica 0:26fa30c35f74 43
babylonica 0:26fa30c35f74 44 stepMode_e stepMode;
babylonica 0:26fa30c35f74 45 PinName ms1Pin;
babylonica 0:26fa30c35f74 46 PinName ms2Pin;
babylonica 0:26fa30c35f74 47 PinName ms3Pin;
babylonica 0:26fa30c35f74 48 uint32_t oneRotationFullSteps;
babylonica 0:26fa30c35f74 49 stopMode_e stopMode;
babylonica 0:26fa30c35f74 50 uint32_t oneRotationSteps;
babylonica 0:26fa30c35f74 51 uint64_t pulseWidth_us;
babylonica 0:26fa30c35f74 52 uint32_t halfPulseCount;
babylonica 0:26fa30c35f74 53 uint32_t currentMaxStepCount;
babylonica 0:26fa30c35f74 54 bool stopPulseOut;
babylonica 0:26fa30c35f74 55
babylonica 0:26fa30c35f74 56 void ISR_PULSEOUT( void );
babylonica 0:26fa30c35f74 57
babylonica 0:26fa30c35f74 58 public:
babylonica 0:26fa30c35f74 59 /*!
babylonica 0:26fa30c35f74 60 @brief Create a new AsyncStepper port.
babylonica 0:26fa30c35f74 61
babylonica 0:26fa30c35f74 62 @param enablePin A4988 Enable pin
babylonica 0:26fa30c35f74 63 @param stepPin A4988 Step pin
babylonica 0:26fa30c35f74 64 @param dirPin A4988 Direction pin
babylonica 0:26fa30c35f74 65 @param rpm RPM
babylonica 0:26fa30c35f74 66 @param stepMode Division ratio
babylonica 0:26fa30c35f74 67 @param ms1Pin A4988 MS1
babylonica 0:26fa30c35f74 68 @param ms2Pin A4988 MS2
babylonica 0:26fa30c35f74 69 @param ms3Pin A4988 MS1
babylonica 0:26fa30c35f74 70 @param oneRotationFullSteps Steps per rotation of your stepper motor
babylonica 0:26fa30c35f74 71 @param stopMode Enable/Disable holding torque
babylonica 0:26fa30c35f74 72 */
babylonica 0:26fa30c35f74 73 AsyncStepper( PinName enablePin, PinName stepPin, PinName dirPin, uint32_t rpm, stepMode_e stepMode=FULL, PinName ms1Pin=NC, PinName ms2Pin=NC, PinName ms3Pin=NC, uint32_t oneRotationFullSteps=200, stopMode_e stopMode=FREE );
babylonica 0:26fa30c35f74 74
babylonica 0:26fa30c35f74 75 /*!
babylonica 0:26fa30c35f74 76 @brief Destrutor of AsyncStepper
babylonica 0:26fa30c35f74 77 */
babylonica 0:26fa30c35f74 78 virtual ~AsyncStepper();
babylonica 0:26fa30c35f74 79
babylonica 0:26fa30c35f74 80 /*!
babylonica 0:26fa30c35f74 81 @brief Set RPM of the stepper motor
babylonica 0:26fa30c35f74 82 @param rpm
babylonica 0:26fa30c35f74 83 */
babylonica 0:26fa30c35f74 84 virtual void SetRPM( uint32_t rpm );
babylonica 0:26fa30c35f74 85
babylonica 0:26fa30c35f74 86 /*!
babylonica 0:26fa30c35f74 87 @brief Set division ratio of the stepper motor
babylonica 0:26fa30c35f74 88 @param stepMode division ratio
babylonica 0:26fa30c35f74 89 */
babylonica 0:26fa30c35f74 90 virtual void SetStepMode( stepMode_e stepMode );
babylonica 0:26fa30c35f74 91
babylonica 0:26fa30c35f74 92 /*!
babylonica 0:26fa30c35f74 93 @brief Apply the current to the stepper motor
babylonica 0:26fa30c35f74 94 */
babylonica 0:26fa30c35f74 95 virtual void Enable( void );
babylonica 0:26fa30c35f74 96
babylonica 0:26fa30c35f74 97 /*!
babylonica 0:26fa30c35f74 98 @brief Stop the current to the stepper motor
babylonica 0:26fa30c35f74 99 */
babylonica 0:26fa30c35f74 100 virtual void Disable( void );
babylonica 0:26fa30c35f74 101
babylonica 0:26fa30c35f74 102 /*!
babylonica 0:26fa30c35f74 103 @brief Check the stepper motor stopping
babylonica 0:26fa30c35f74 104
babylonica 0:26fa30c35f74 105 @retval true Yes (Stopping)
babylonica 0:26fa30c35f74 106 @retval false No
babylonica 0:26fa30c35f74 107 */
babylonica 0:26fa30c35f74 108 virtual bool IsStopping( void );
babylonica 0:26fa30c35f74 109
babylonica 0:26fa30c35f74 110 /*!
babylonica 0:26fa30c35f74 111 @brief Rotate the stepper motor
babylonica 0:26fa30c35f74 112
babylonica 0:26fa30c35f74 113 @param direction POSITIVE or NEGATIVE
babylonica 0:26fa30c35f74 114 @param steps Steps of rotation
babylonica 0:26fa30c35f74 115 */
babylonica 0:26fa30c35f74 116 virtual void Rotate( direction_e direction, uint32_t steps );
babylonica 0:26fa30c35f74 117 };
babylonica 0:26fa30c35f74 118
babylonica 0:26fa30c35f74 119
babylonica 0:26fa30c35f74 120 #endif