Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
AsyncStepper.hpp@0:26fa30c35f74, 2018-07-12 (annotated)
- 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?
| User | Revision | Line number | New 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 |