Antonio Maiorquim / Joystick_S_Controller

Dependencies:   ST_INTERFACES X_NUCLEO_COMMON

Fork of X_NUCLEO_IHM01A1 by ST

Committer:
Davidroid
Date:
Fri Apr 08 12:47:39 2016 +0000
Revision:
26:fd83fecf1ef5
Parent:
25:1c3146315f16
+ Some comments updated.

Who changed what in which revision?

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