Library to handle the X_NUCLEO_IHM02A1 Motor Control Expansion Board based on the L6470 component.

Dependencies:   X_NUCLEO_COMMON ST_INTERFACES

Dependents:   HelloWorld_IHM02A1 ConcorsoFinal HelloWorld_IHM02A1_mbedOS HelloWorld_IHM02A1-Serialinterpreter ... more

Fork of X_NUCLEO_IHM02A1 by ST Expansion SW Team

Motor Control Library

Introduction

Library to handle the X-NUCLEO-IHM02A1 Motor Control Expansion Board based on the the L6470 component.

Daisy-Chain Configuration

The two L6470 components mounted on this board are connected in daisy-chain configuration. This board can be stacked up to four times so that the eight L6470 components will be connected two-by-two in daisy-chain configuration.

Concerning the SSEL pin of the SPI communication, each expansion board must be in one of the following configuration:

  • SB_23 resistor connected only: SSEL on pin A2;
  • SB_7 resistor connected only: SSEL on pin D2;
  • SB_8 resistor connected only: SSEL on pin D10;
  • SB_9 resistor connected only: SSEL on pin D5.

Arduino Connector Compatibility Warning

X-NUCLEO-IHM02A1 is Arduino compatible with one exception: instead of using D13 pin to drive the SPI clock, it uses D3 pin, hence the default configuration for this library is with the SPI clock on D3 pin.

To be fully Arduino compatible the following patch is required:

  • to remove the SB34 resistor;
  • to solder the SB12 resistor.

Alternatively, you can route the Nucleo board’s D13 pin directly to the expansion board’s D3 pin with a wire. In case you patch your expansion board or route the pin, the SPI clock will be driven on D13 pin rather than on D3 pin, and you have also to initialize the sclk PinName variable with D13 rather than D3. This patch is known to be required, for example, on the following boards: NUCLEO-F103RB, NUCLEO-F302RB, NUCLEO-F411RE, and NUCLEO-F429ZI.

If you use D13 pin for the SPI clock, please be aware that on STM32 Nucleo boards you may not drive the LED, otherwise you will get a conflict: the LED on STM32 Nucleo boards is connected to the D13 pin.

Example Applications

Committer:
Davidroid
Date:
Thu Apr 07 16:55:51 2016 +0000
Revision:
17:4b3dc908724f
Parent:
12:a942d51c488b
Child:
18:ddf3d5dc8137
+ StepperMotor interface updated: step-modes added, getter/setter methods for parameters removed.

Who changed what in which revision?

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