Library to handle the X-NUCLEO-IHM06A1 Motor Control Expansion Board based on the STSPIN220 component.

Dependencies:   ST_INTERFACES

Dependents:   HelloWorld_IHM06A1

Fork of X-NUCLEO-IHM06A1 by ST Expansion SW Team

Motor Control Library

Library to handle the X-NUCLEO-IHM06A1 Motor Control Expansion Board based on the STSPIN220 component.

It features the:

  • Read and write of the device parameters; GPIO, PWM and IRQ configuration; microstepping, direction position, speed, acceleration, deceleration and torque controls
  • Automatic full-step switch management; high impedance or hold stop mode selection; enable and standby management
  • Fault interrupts handling (over current, short-circuit and over temperature)
  • Command locking until the device completes movement

The API allows to easily:

  • perform various positioning, moves and stops
  • get/set or monitor the motor positions
  • set the home position and mark another position
  • get/set the minimum and maximum speed
  • get the current speed
  • get/set the acceleration and deceleration
  • get/set the stop mode (hold, hiz or standby)
  • get/set the torque
  • get/set the torque boost
  • get/set the step mode (up to 1/256)

Platform compatibility

Compatible platforms have been tested with the configurations provided by the HelloWorld_IHM06A1 example.

Committer:
nucleosam
Date:
Thu May 26 15:44:53 2016 +0000
Revision:
0:0ccd34c56c66
Initial version.

Who changed what in which revision?

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