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.
Components/ST_INTERFACES/Actuators/StepperMotor.h@0:293607457a02, 2020-10-16 (annotated)
- Committer:
- charlesmn
- Date:
- Fri Oct 16 15:04:28 2020 +0000
- Revision:
- 0:293607457a02
Change typo in name
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| charlesmn | 0:293607457a02 | 1 | /** |
| charlesmn | 0:293607457a02 | 2 | ****************************************************************************** |
| charlesmn | 0:293607457a02 | 3 | * @file StepperMotor.h |
| charlesmn | 0:293607457a02 | 4 | * @author Davide Aliprandi, STMicroelectronics |
| charlesmn | 0:293607457a02 | 5 | * @version V1.1.0 |
| charlesmn | 0:293607457a02 | 6 | * @date April 6th, 2016 |
| charlesmn | 0:293607457a02 | 7 | * @brief This file contains the abstract class describing the interface of a |
| charlesmn | 0:293607457a02 | 8 | * stepper-motor component. |
| charlesmn | 0:293607457a02 | 9 | ****************************************************************************** |
| charlesmn | 0:293607457a02 | 10 | * @attention |
| charlesmn | 0:293607457a02 | 11 | * |
| charlesmn | 0:293607457a02 | 12 | * <h2><center>© COPYRIGHT(c) 2015 STMicroelectronics</center></h2> |
| charlesmn | 0:293607457a02 | 13 | * |
| charlesmn | 0:293607457a02 | 14 | * Redistribution and use in source and binary forms, with or without modification, |
| charlesmn | 0:293607457a02 | 15 | * are permitted provided that the following conditions are met: |
| charlesmn | 0:293607457a02 | 16 | * 1. Redistributions of source code must retain the above copyright notice, |
| charlesmn | 0:293607457a02 | 17 | * this list of conditions and the following disclaimer. |
| charlesmn | 0:293607457a02 | 18 | * 2. Redistributions in binary form must reproduce the above copyright notice, |
| charlesmn | 0:293607457a02 | 19 | * this list of conditions and the following disclaimer in the documentation |
| charlesmn | 0:293607457a02 | 20 | * and/or other materials provided with the distribution. |
| charlesmn | 0:293607457a02 | 21 | * 3. Neither the name of STMicroelectronics nor the names of its contributors |
| charlesmn | 0:293607457a02 | 22 | * may be used to endorse or promote products derived from this software |
| charlesmn | 0:293607457a02 | 23 | * without specific prior written permission. |
| charlesmn | 0:293607457a02 | 24 | * |
| charlesmn | 0:293607457a02 | 25 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
| charlesmn | 0:293607457a02 | 26 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| charlesmn | 0:293607457a02 | 27 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
| charlesmn | 0:293607457a02 | 28 | * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE |
| charlesmn | 0:293607457a02 | 29 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
| charlesmn | 0:293607457a02 | 30 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR |
| charlesmn | 0:293607457a02 | 31 | * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER |
| charlesmn | 0:293607457a02 | 32 | * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, |
| charlesmn | 0:293607457a02 | 33 | * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| charlesmn | 0:293607457a02 | 34 | * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| charlesmn | 0:293607457a02 | 35 | * |
| charlesmn | 0:293607457a02 | 36 | ****************************************************************************** |
| charlesmn | 0:293607457a02 | 37 | */ |
| charlesmn | 0:293607457a02 | 38 | |
| charlesmn | 0:293607457a02 | 39 | |
| charlesmn | 0:293607457a02 | 40 | /* Define to prevent from recursive inclusion --------------------------------*/ |
| charlesmn | 0:293607457a02 | 41 | |
| charlesmn | 0:293607457a02 | 42 | #ifndef __STEPPERMOTOR_CLASS_H |
| charlesmn | 0:293607457a02 | 43 | #define __STEPPERMOTOR_CLASS_H |
| charlesmn | 0:293607457a02 | 44 | |
| charlesmn | 0:293607457a02 | 45 | |
| charlesmn | 0:293607457a02 | 46 | /* Includes ------------------------------------------------------------------*/ |
| charlesmn | 0:293607457a02 | 47 | |
| charlesmn | 0:293607457a02 | 48 | #include <Component.h> |
| charlesmn | 0:293607457a02 | 49 | |
| charlesmn | 0:293607457a02 | 50 | |
| charlesmn | 0:293607457a02 | 51 | /* Classes ------------------------------------------------------------------*/ |
| charlesmn | 0:293607457a02 | 52 | |
| charlesmn | 0:293607457a02 | 53 | /** |
| charlesmn | 0:293607457a02 | 54 | * An abstract class for StepperMotor components. |
| charlesmn | 0:293607457a02 | 55 | */ |
| charlesmn | 0:293607457a02 | 56 | class StepperMotor : public Component { |
| charlesmn | 0:293607457a02 | 57 | public: |
| charlesmn | 0:293607457a02 | 58 | |
| charlesmn | 0:293607457a02 | 59 | /** |
| charlesmn | 0:293607457a02 | 60 | * @brief Rotation modes. |
| charlesmn | 0:293607457a02 | 61 | */ |
| charlesmn | 0:293607457a02 | 62 | typedef enum { |
| charlesmn | 0:293607457a02 | 63 | BWD = 0, /* Backward. */ |
| charlesmn | 0:293607457a02 | 64 | FWD = 1 /* Forward. */ |
| charlesmn | 0:293607457a02 | 65 | } direction_t; |
| charlesmn | 0:293607457a02 | 66 | |
| charlesmn | 0:293607457a02 | 67 | /** |
| charlesmn | 0:293607457a02 | 68 | * @brief Step modes. |
| charlesmn | 0:293607457a02 | 69 | */ |
| charlesmn | 0:293607457a02 | 70 | typedef enum { |
| charlesmn | 0:293607457a02 | 71 | STEP_MODE_FULL = 0, /* Full-step. */ |
| charlesmn | 0:293607457a02 | 72 | STEP_MODE_HALF, /* Half-step. */ |
| charlesmn | 0:293607457a02 | 73 | STEP_MODE_1_4, /* 1/4 microstep. */ |
| charlesmn | 0:293607457a02 | 74 | STEP_MODE_1_8, /* 1/8 microstep. */ |
| charlesmn | 0:293607457a02 | 75 | STEP_MODE_1_16, /* 1/16 microstep. */ |
| charlesmn | 0:293607457a02 | 76 | STEP_MODE_1_32, /* 1/32 microstep. */ |
| charlesmn | 0:293607457a02 | 77 | STEP_MODE_1_64, /* 1/64 microstep. */ |
| charlesmn | 0:293607457a02 | 78 | STEP_MODE_1_128, /* 1/128 microstep. */ |
| charlesmn | 0:293607457a02 | 79 | STEP_MODE_1_256, /* 1/256 microstep. */ |
| charlesmn | 0:293607457a02 | 80 | STEP_MODE_UNKNOWN, /* Unknown. */ |
| charlesmn | 0:293607457a02 | 81 | STEP_MODE_WAVE /* Full-step one-phase-on. */ |
| charlesmn | 0:293607457a02 | 82 | } step_mode_t; |
| charlesmn | 0:293607457a02 | 83 | |
| charlesmn | 0:293607457a02 | 84 | /** |
| charlesmn | 0:293607457a02 | 85 | * @brief Getting the status. |
| charlesmn | 0:293607457a02 | 86 | * @param None. |
| charlesmn | 0:293607457a02 | 87 | * @retval The status. |
| charlesmn | 0:293607457a02 | 88 | */ |
| charlesmn | 0:293607457a02 | 89 | virtual unsigned int get_status(void) = 0; |
| charlesmn | 0:293607457a02 | 90 | |
| charlesmn | 0:293607457a02 | 91 | /** |
| charlesmn | 0:293607457a02 | 92 | * @brief Getting the position. |
| charlesmn | 0:293607457a02 | 93 | * @param None. |
| charlesmn | 0:293607457a02 | 94 | * @retval The position. |
| charlesmn | 0:293607457a02 | 95 | */ |
| charlesmn | 0:293607457a02 | 96 | virtual signed int get_position(void) = 0; |
| charlesmn | 0:293607457a02 | 97 | |
| charlesmn | 0:293607457a02 | 98 | /** |
| charlesmn | 0:293607457a02 | 99 | * @brief Getting the marked position. |
| charlesmn | 0:293607457a02 | 100 | * @param None. |
| charlesmn | 0:293607457a02 | 101 | * @retval The marked position. |
| charlesmn | 0:293607457a02 | 102 | */ |
| charlesmn | 0:293607457a02 | 103 | virtual signed int get_mark(void) = 0; |
| charlesmn | 0:293607457a02 | 104 | |
| charlesmn | 0:293607457a02 | 105 | /** |
| charlesmn | 0:293607457a02 | 106 | * @brief Getting the current speed in pps. |
| charlesmn | 0:293607457a02 | 107 | * @param None. |
| charlesmn | 0:293607457a02 | 108 | * @retval The current speed in pps. |
| charlesmn | 0:293607457a02 | 109 | */ |
| charlesmn | 0:293607457a02 | 110 | virtual unsigned int get_speed(void) = 0; |
| charlesmn | 0:293607457a02 | 111 | |
| charlesmn | 0:293607457a02 | 112 | /** |
| charlesmn | 0:293607457a02 | 113 | * @brief Getting the maximum speed in pps. |
| charlesmn | 0:293607457a02 | 114 | * @param None. |
| charlesmn | 0:293607457a02 | 115 | * @retval The maximum speed in pps. |
| charlesmn | 0:293607457a02 | 116 | */ |
| charlesmn | 0:293607457a02 | 117 | virtual unsigned int get_max_speed(void) = 0; |
| charlesmn | 0:293607457a02 | 118 | |
| charlesmn | 0:293607457a02 | 119 | /** |
| charlesmn | 0:293607457a02 | 120 | * @brief Getting the minimum speed in pps. |
| charlesmn | 0:293607457a02 | 121 | * @param None. |
| charlesmn | 0:293607457a02 | 122 | * @retval The minimum speed in pps. |
| charlesmn | 0:293607457a02 | 123 | */ |
| charlesmn | 0:293607457a02 | 124 | virtual unsigned int get_min_speed(void) = 0; |
| charlesmn | 0:293607457a02 | 125 | |
| charlesmn | 0:293607457a02 | 126 | /** |
| charlesmn | 0:293607457a02 | 127 | * @brief Getting the acceleration in pps^2. |
| charlesmn | 0:293607457a02 | 128 | * @param None. |
| charlesmn | 0:293607457a02 | 129 | * @retval The acceleration in pps^2. |
| charlesmn | 0:293607457a02 | 130 | */ |
| charlesmn | 0:293607457a02 | 131 | virtual unsigned int get_acceleration(void) = 0; |
| charlesmn | 0:293607457a02 | 132 | |
| charlesmn | 0:293607457a02 | 133 | /** |
| charlesmn | 0:293607457a02 | 134 | * @brief Getting the deceleration in pps^2. |
| charlesmn | 0:293607457a02 | 135 | * @param None. |
| charlesmn | 0:293607457a02 | 136 | * @retval The deceleration in pps^2. |
| charlesmn | 0:293607457a02 | 137 | */ |
| charlesmn | 0:293607457a02 | 138 | virtual unsigned int get_deceleration(void) = 0; |
| charlesmn | 0:293607457a02 | 139 | |
| charlesmn | 0:293607457a02 | 140 | /** |
| charlesmn | 0:293607457a02 | 141 | * @brief Getting the direction of rotation. |
| charlesmn | 0:293607457a02 | 142 | * @param None. |
| charlesmn | 0:293607457a02 | 143 | * @retval The direction of rotation. |
| charlesmn | 0:293607457a02 | 144 | */ |
| charlesmn | 0:293607457a02 | 145 | virtual direction_t get_direction(void) = 0; |
| charlesmn | 0:293607457a02 | 146 | |
| charlesmn | 0:293607457a02 | 147 | /** |
| charlesmn | 0:293607457a02 | 148 | * @brief Setting the current position to be the home position. |
| charlesmn | 0:293607457a02 | 149 | * @param None. |
| charlesmn | 0:293607457a02 | 150 | * @retval None. |
| charlesmn | 0:293607457a02 | 151 | */ |
| charlesmn | 0:293607457a02 | 152 | virtual void set_home(void) = 0; |
| charlesmn | 0:293607457a02 | 153 | |
| charlesmn | 0:293607457a02 | 154 | /** |
| charlesmn | 0:293607457a02 | 155 | * @brief Setting the current position to be the marked position. |
| charlesmn | 0:293607457a02 | 156 | * @param None. |
| charlesmn | 0:293607457a02 | 157 | * @retval None. |
| charlesmn | 0:293607457a02 | 158 | */ |
| charlesmn | 0:293607457a02 | 159 | virtual void set_mark(void) = 0; |
| charlesmn | 0:293607457a02 | 160 | |
| charlesmn | 0:293607457a02 | 161 | /** |
| charlesmn | 0:293607457a02 | 162 | * @brief Setting the maximum speed in pps. |
| charlesmn | 0:293607457a02 | 163 | * @param speed The maximum speed in pps. |
| charlesmn | 0:293607457a02 | 164 | * @retval "true" in case of success, "false" otherwise. |
| charlesmn | 0:293607457a02 | 165 | */ |
| charlesmn | 0:293607457a02 | 166 | virtual bool set_max_speed(unsigned int speed) = 0; |
| charlesmn | 0:293607457a02 | 167 | |
| charlesmn | 0:293607457a02 | 168 | /** |
| charlesmn | 0:293607457a02 | 169 | * @brief Setting the minimum speed in pps. |
| charlesmn | 0:293607457a02 | 170 | * @param speed The minimum speed in pps. |
| charlesmn | 0:293607457a02 | 171 | * @retval "true" in case of success, "false" otherwise. |
| charlesmn | 0:293607457a02 | 172 | */ |
| charlesmn | 0:293607457a02 | 173 | virtual bool set_min_speed(unsigned int speed) = 0; |
| charlesmn | 0:293607457a02 | 174 | |
| charlesmn | 0:293607457a02 | 175 | /** |
| charlesmn | 0:293607457a02 | 176 | * @brief Setting the acceleration in pps^2. |
| charlesmn | 0:293607457a02 | 177 | * @param acceleration The acceleration in pps^2. |
| charlesmn | 0:293607457a02 | 178 | * @retval "true" in case of success, "false" otherwise. |
| charlesmn | 0:293607457a02 | 179 | */ |
| charlesmn | 0:293607457a02 | 180 | virtual bool set_acceleration(unsigned int acceleration) = 0; |
| charlesmn | 0:293607457a02 | 181 | |
| charlesmn | 0:293607457a02 | 182 | /** |
| charlesmn | 0:293607457a02 | 183 | * @brief Setting the deceleration in pps^2. |
| charlesmn | 0:293607457a02 | 184 | * @param deceleration The deceleration in pps^2. |
| charlesmn | 0:293607457a02 | 185 | * @retval "true" in case of success, "false" otherwise. |
| charlesmn | 0:293607457a02 | 186 | */ |
| charlesmn | 0:293607457a02 | 187 | virtual bool set_deceleration(unsigned int deceleration) = 0; |
| charlesmn | 0:293607457a02 | 188 | |
| charlesmn | 0:293607457a02 | 189 | /** |
| charlesmn | 0:293607457a02 | 190 | * @brief Setting the Step Mode. |
| charlesmn | 0:293607457a02 | 191 | * @param step_mode The Step Mode. |
| charlesmn | 0:293607457a02 | 192 | * @retval "true" in case of success, "false" otherwise. |
| charlesmn | 0:293607457a02 | 193 | */ |
| charlesmn | 0:293607457a02 | 194 | virtual bool set_step_mode(step_mode_t step_mode) = 0; |
| charlesmn | 0:293607457a02 | 195 | |
| charlesmn | 0:293607457a02 | 196 | /** |
| charlesmn | 0:293607457a02 | 197 | * @brief Going to a specified position. |
| charlesmn | 0:293607457a02 | 198 | * @param position The desired position. |
| charlesmn | 0:293607457a02 | 199 | * @retval None. |
| charlesmn | 0:293607457a02 | 200 | */ |
| charlesmn | 0:293607457a02 | 201 | virtual void go_to(signed int position) = 0; |
| charlesmn | 0:293607457a02 | 202 | |
| charlesmn | 0:293607457a02 | 203 | /** |
| charlesmn | 0:293607457a02 | 204 | * @brief Going to the home position. |
| charlesmn | 0:293607457a02 | 205 | * @param None. |
| charlesmn | 0:293607457a02 | 206 | * @retval None. |
| charlesmn | 0:293607457a02 | 207 | */ |
| charlesmn | 0:293607457a02 | 208 | virtual void go_home(void) = 0; |
| charlesmn | 0:293607457a02 | 209 | |
| charlesmn | 0:293607457a02 | 210 | /** |
| charlesmn | 0:293607457a02 | 211 | * @brief Going to the marked position. |
| charlesmn | 0:293607457a02 | 212 | * @param None. |
| charlesmn | 0:293607457a02 | 213 | * @retval None. |
| charlesmn | 0:293607457a02 | 214 | */ |
| charlesmn | 0:293607457a02 | 215 | virtual void go_mark(void) = 0; |
| charlesmn | 0:293607457a02 | 216 | |
| charlesmn | 0:293607457a02 | 217 | /** |
| charlesmn | 0:293607457a02 | 218 | * @brief Running the motor towards a specified direction. |
| charlesmn | 0:293607457a02 | 219 | * @param direction The direction of rotation. |
| charlesmn | 0:293607457a02 | 220 | * @retval None. |
| charlesmn | 0:293607457a02 | 221 | */ |
| charlesmn | 0:293607457a02 | 222 | virtual void run(direction_t direction) = 0; |
| charlesmn | 0:293607457a02 | 223 | |
| charlesmn | 0:293607457a02 | 224 | /** |
| charlesmn | 0:293607457a02 | 225 | * @brief Moving the motor towards a specified direction for a certain number of steps. |
| charlesmn | 0:293607457a02 | 226 | * @param direction The direction of rotation. |
| charlesmn | 0:293607457a02 | 227 | * @param steps The desired number of steps. |
| charlesmn | 0:293607457a02 | 228 | * @retval None. |
| charlesmn | 0:293607457a02 | 229 | */ |
| charlesmn | 0:293607457a02 | 230 | virtual void move(direction_t direction, unsigned int steps) = 0; |
| charlesmn | 0:293607457a02 | 231 | |
| charlesmn | 0:293607457a02 | 232 | /** |
| charlesmn | 0:293607457a02 | 233 | * @brief Stopping the motor through an immediate deceleration up to zero speed. |
| charlesmn | 0:293607457a02 | 234 | * @param None. |
| charlesmn | 0:293607457a02 | 235 | * @retval None. |
| charlesmn | 0:293607457a02 | 236 | */ |
| charlesmn | 0:293607457a02 | 237 | virtual void soft_stop(void) = 0; |
| charlesmn | 0:293607457a02 | 238 | |
| charlesmn | 0:293607457a02 | 239 | /** |
| charlesmn | 0:293607457a02 | 240 | * @brief Stopping the motor through an immediate infinite deceleration. |
| charlesmn | 0:293607457a02 | 241 | * @param None. |
| charlesmn | 0:293607457a02 | 242 | * @retval None. |
| charlesmn | 0:293607457a02 | 243 | */ |
| charlesmn | 0:293607457a02 | 244 | virtual void hard_stop(void) = 0; |
| charlesmn | 0:293607457a02 | 245 | |
| charlesmn | 0:293607457a02 | 246 | /** |
| charlesmn | 0:293607457a02 | 247 | * @brief Disabling the power bridge after performing a deceleration to zero. |
| charlesmn | 0:293607457a02 | 248 | * @param None. |
| charlesmn | 0:293607457a02 | 249 | * @retval None. |
| charlesmn | 0:293607457a02 | 250 | */ |
| charlesmn | 0:293607457a02 | 251 | virtual void soft_hiz(void) = 0; |
| charlesmn | 0:293607457a02 | 252 | |
| charlesmn | 0:293607457a02 | 253 | /** |
| charlesmn | 0:293607457a02 | 254 | * @brief Disabling the power bridge immediately. |
| charlesmn | 0:293607457a02 | 255 | * @param None. |
| charlesmn | 0:293607457a02 | 256 | * @retval None. |
| charlesmn | 0:293607457a02 | 257 | */ |
| charlesmn | 0:293607457a02 | 258 | virtual void hard_hiz(void) = 0; |
| charlesmn | 0:293607457a02 | 259 | |
| charlesmn | 0:293607457a02 | 260 | /** |
| charlesmn | 0:293607457a02 | 261 | * @brief Waiting while the motor is active. |
| charlesmn | 0:293607457a02 | 262 | * @param None. |
| charlesmn | 0:293607457a02 | 263 | * @retval None. |
| charlesmn | 0:293607457a02 | 264 | */ |
| charlesmn | 0:293607457a02 | 265 | virtual void wait_while_active(void) = 0; |
| charlesmn | 0:293607457a02 | 266 | |
| charlesmn | 0:293607457a02 | 267 | /** |
| charlesmn | 0:293607457a02 | 268 | * @brief Destructor. |
| charlesmn | 0:293607457a02 | 269 | */ |
| charlesmn | 0:293607457a02 | 270 | virtual ~StepperMotor() {}; |
| charlesmn | 0:293607457a02 | 271 | }; |
| charlesmn | 0:293607457a02 | 272 | |
| charlesmn | 0:293607457a02 | 273 | #endif /* __STEPPERMOTOR_CLASS_H */ |
| charlesmn | 0:293607457a02 | 274 | |
| charlesmn | 0:293607457a02 | 275 | /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ |