Added ST_INTERFACES library.

Dependencies:   ST_INTERFACES

Fork of X_NUCLEO_IHM06A1 by ST

Committer:
Davidroid
Date:
Thu Sep 29 10:00:17 2016 +0000
Revision:
3:3cc66577af9b
Parent:
2:2ba230b24f25
Added ST_INTERFACES library.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
nucleosam 0:0ccd34c56c66 1 /**
nucleosam 0:0ccd34c56c66 2 ******************************************************************************
nucleosam 0:0ccd34c56c66 3 * @file stspin220_class.h
nucleosam 0:0ccd34c56c66 4 * @author IPC Rennes
nucleosam 0:0ccd34c56c66 5 * @version V1.0.0
nucleosam 2:2ba230b24f25 6 * @date July 27th, 2016
nucleosam 0:0ccd34c56c66 7 * @brief This file contains the class of a STSPIN220 Motor Control component.
nucleosam 0:0ccd34c56c66 8 * @note (C) COPYRIGHT 2016 STMicroelectronics
nucleosam 0:0ccd34c56c66 9 ******************************************************************************
nucleosam 0:0ccd34c56c66 10 * @attention
nucleosam 0:0ccd34c56c66 11 *
nucleosam 0:0ccd34c56c66 12 * <h2><center>&copy; COPYRIGHT(c) 2016 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 recursive inclusion -------------------------------------*/
nucleosam 0:0ccd34c56c66 41
nucleosam 0:0ccd34c56c66 42 #ifndef __STSPIN220_CLASS_H
nucleosam 0:0ccd34c56c66 43 #define __STSPIN220_CLASS_H
nucleosam 0:0ccd34c56c66 44
nucleosam 0:0ccd34c56c66 45
nucleosam 0:0ccd34c56c66 46 /* Includes ------------------------------------------------------------------*/
nucleosam 0:0ccd34c56c66 47
nucleosam 0:0ccd34c56c66 48 /* ACTION 1 ------------------------------------------------------------------*
nucleosam 0:0ccd34c56c66 49 * Include here platform specific header files. *
nucleosam 0:0ccd34c56c66 50 *----------------------------------------------------------------------------*/
nucleosam 0:0ccd34c56c66 51 #include "mbed.h"
nucleosam 0:0ccd34c56c66 52
nucleosam 0:0ccd34c56c66 53 /* ACTION 2 ------------------------------------------------------------------*
nucleosam 0:0ccd34c56c66 54 * Include here component specific header files. *
nucleosam 0:0ccd34c56c66 55 *----------------------------------------------------------------------------*/
nucleosam 0:0ccd34c56c66 56 #include "stspin220.h"
nucleosam 0:0ccd34c56c66 57 /* ACTION 3 ------------------------------------------------------------------*
nucleosam 0:0ccd34c56c66 58 * Include here interface specific header files. *
nucleosam 0:0ccd34c56c66 59 * *
nucleosam 0:0ccd34c56c66 60 * Example: *
Davidroid 3:3cc66577af9b 61 * #include "HumiditySensor.h" *
Davidroid 3:3cc66577af9b 62 * #include "TemperatureSensor.h" *
nucleosam 0:0ccd34c56c66 63 *----------------------------------------------------------------------------*/
Davidroid 3:3cc66577af9b 64 #include "StepperMotor.h"
nucleosam 0:0ccd34c56c66 65
nucleosam 0:0ccd34c56c66 66
nucleosam 0:0ccd34c56c66 67 /* Classes -------------------------------------------------------------------*/
nucleosam 0:0ccd34c56c66 68
nucleosam 0:0ccd34c56c66 69 /**
nucleosam 0:0ccd34c56c66 70 * @brief Class representing a STSPIN220 component.
nucleosam 0:0ccd34c56c66 71 */
nucleosam 0:0ccd34c56c66 72 class STSPIN220 : public StepperMotor
nucleosam 0:0ccd34c56c66 73 {
nucleosam 0:0ccd34c56c66 74 public:
nucleosam 0:0ccd34c56c66 75 /*** Constructor and Destructor Methods ***/
nucleosam 0:0ccd34c56c66 76 /**
nucleosam 0:0ccd34c56c66 77 * @brief Constructor.
nucleosam 0:0ccd34c56c66 78 * @param fault_and_enable_pin pin name of the EN\FAULT pin of the component.
nucleosam 0:0ccd34c56c66 79 * @param stby_reset_pin pin name of the STBY\RESET pin of the component.
nucleosam 0:0ccd34c56c66 80 * @param direction_mode4_pin pin name of the MODE4\DIR pin of the component.
nucleosam 0:0ccd34c56c66 81 * @param mode1_pin pin name of the MODE1 pin of the component.
nucleosam 0:0ccd34c56c66 82 * @param mode2_pin pin name of the MODE2 pin of the component.
nucleosam 0:0ccd34c56c66 83 * @param stck_mode3_pin pin name of the MODE3\STCK pin of the component.
nucleosam 0:0ccd34c56c66 84 * @param pwm_ref_pin pin name of the PWM connected to the REF pin of the component.
nucleosam 0:0ccd34c56c66 85 * @param Monitor_pin pin name for the step clock handler duration Monitoring.
nucleosam 0:0ccd34c56c66 86 */
nucleosam 0:0ccd34c56c66 87 STSPIN220(PinName fault_and_enable_pin,
nucleosam 0:0ccd34c56c66 88 PinName stby_reset_pin,
nucleosam 0:0ccd34c56c66 89 PinName direction_mode4_pin,
nucleosam 0:0ccd34c56c66 90 PinName mode1_pin,
nucleosam 0:0ccd34c56c66 91 PinName mode2_pin,
nucleosam 0:0ccd34c56c66 92 PinName stck_mode3_pin,
nucleosam 0:0ccd34c56c66 93 PinName pwm_ref_pin,
nucleosam 0:0ccd34c56c66 94 PinName monitor_pin = NC) : StepperMotor(),
nucleosam 0:0ccd34c56c66 95 fault_and_enable(fault_and_enable_pin),
nucleosam 0:0ccd34c56c66 96 stby_reset(stby_reset_pin),
nucleosam 0:0ccd34c56c66 97 direction_mode4(direction_mode4_pin),
nucleosam 0:0ccd34c56c66 98 mode1(mode1_pin),
nucleosam 0:0ccd34c56c66 99 mode2(mode2_pin),
nucleosam 0:0ccd34c56c66 100 stck_mode3(stck_mode3_pin),
nucleosam 0:0ccd34c56c66 101 pwm_ref(pwm_ref_pin),
nucleosam 0:0ccd34c56c66 102 monitor(monitor_pin)
nucleosam 0:0ccd34c56c66 103 {
nucleosam 0:0ccd34c56c66 104 /* Checking stackability. */
nucleosam 0:0ccd34c56c66 105 if (numberOfDevices!=0)
nucleosam 0:0ccd34c56c66 106 error("Instantiation of the STSPIN220 component failed: it can't be stacked on itself.\r\n");
nucleosam 0:0ccd34c56c66 107
nucleosam 0:0ccd34c56c66 108 /* ACTION 4 ----------------------------------------------------------*
nucleosam 0:0ccd34c56c66 109 * Initialize here the component's member variables, one variable per *
nucleosam 0:0ccd34c56c66 110 * line. *
nucleosam 0:0ccd34c56c66 111 * *
nucleosam 0:0ccd34c56c66 112 * Example: *
nucleosam 0:0ccd34c56c66 113 * measure = 0; *
nucleosam 0:0ccd34c56c66 114 * instance_id = number_of_instances++; *
nucleosam 0:0ccd34c56c66 115 *--------------------------------------------------------------------*/
nucleosam 0:0ccd34c56c66 116 errorHandlerCallback = 0;
nucleosam 0:0ccd34c56c66 117 memset(&devicePrm, 0, sizeof(devicePrm));
nucleosam 0:0ccd34c56c66 118 deviceInstance = numberOfDevices++;
nucleosam 0:0ccd34c56c66 119
nucleosam 0:0ccd34c56c66 120 fault_and_enable_pinName = fault_and_enable_pin;
nucleosam 0:0ccd34c56c66 121 }
nucleosam 0:0ccd34c56c66 122
nucleosam 0:0ccd34c56c66 123 /**
nucleosam 0:0ccd34c56c66 124 * @brief Destructor.
nucleosam 0:0ccd34c56c66 125 */
nucleosam 0:0ccd34c56c66 126 virtual ~STSPIN220(void) {}
nucleosam 0:0ccd34c56c66 127
nucleosam 0:0ccd34c56c66 128
nucleosam 0:0ccd34c56c66 129 /*** Public Component Related Methods ***/
nucleosam 0:0ccd34c56c66 130
nucleosam 0:0ccd34c56c66 131 /* ACTION 5 --------------------------------------------------------------*
nucleosam 0:0ccd34c56c66 132 * Implement here the component's public methods, as wrappers of the C *
nucleosam 0:0ccd34c56c66 133 * component's functions. *
nucleosam 0:0ccd34c56c66 134 * They should be: *
nucleosam 0:0ccd34c56c66 135 * + Methods with the same name of the C component's virtual table's *
nucleosam 0:0ccd34c56c66 136 * functions (1); *
nucleosam 0:0ccd34c56c66 137 * + Methods with the same name of the C component's extended virtual *
nucleosam 0:0ccd34c56c66 138 * table's functions, if any (2). *
nucleosam 0:0ccd34c56c66 139 * *
nucleosam 0:0ccd34c56c66 140 * Example: *
nucleosam 0:0ccd34c56c66 141 * virtual int GetValue(float *pData) //(1) *
nucleosam 0:0ccd34c56c66 142 * { *
nucleosam 0:0ccd34c56c66 143 * return COMPONENT_GetValue(float *pfData); *
nucleosam 0:0ccd34c56c66 144 * } *
nucleosam 0:0ccd34c56c66 145 * *
nucleosam 0:0ccd34c56c66 146 * virtual int EnableFeature(void) //(2) *
nucleosam 0:0ccd34c56c66 147 * { *
nucleosam 0:0ccd34c56c66 148 * return COMPONENT_EnableFeature(); *
nucleosam 0:0ccd34c56c66 149 * } *
nucleosam 0:0ccd34c56c66 150 *------------------------------------------------------------------------*/
nucleosam 0:0ccd34c56c66 151
nucleosam 0:0ccd34c56c66 152 /**
nucleosam 0:0ccd34c56c66 153 * @brief Public functions inherited from the Component Class
nucleosam 0:0ccd34c56c66 154 */
nucleosam 0:0ccd34c56c66 155
nucleosam 0:0ccd34c56c66 156 /**
nucleosam 0:0ccd34c56c66 157 * @brief Initialize the component.
nucleosam 0:0ccd34c56c66 158 * @param init Pointer to device specific initalization structure.
nucleosam 0:0ccd34c56c66 159 * @retval "0" in case of success, an error code otherwise.
nucleosam 0:0ccd34c56c66 160 */
nucleosam 0:0ccd34c56c66 161 virtual int Init(void *init = NULL)
nucleosam 0:0ccd34c56c66 162 {
nucleosam 0:0ccd34c56c66 163 return (int) Stspin220_Init((void *) init);
nucleosam 0:0ccd34c56c66 164 }
nucleosam 0:0ccd34c56c66 165
nucleosam 0:0ccd34c56c66 166 /**
nucleosam 0:0ccd34c56c66 167 * @brief Getting the ID of the component.
nucleosam 0:0ccd34c56c66 168 * @param id Pointer to an allocated variable to store the ID into.
nucleosam 0:0ccd34c56c66 169 * @retval "0" in case of success, an error code otherwise.
nucleosam 0:0ccd34c56c66 170 */
nucleosam 0:0ccd34c56c66 171 virtual int ReadID(uint8_t *id = NULL)
nucleosam 0:0ccd34c56c66 172 {
nucleosam 0:0ccd34c56c66 173 return (int) Stspin220_ReadID((uint8_t *) id);
nucleosam 0:0ccd34c56c66 174 }
nucleosam 0:0ccd34c56c66 175
nucleosam 0:0ccd34c56c66 176 /**
nucleosam 0:0ccd34c56c66 177 * @brief Public functions inherited from the StepperMotor Class
nucleosam 0:0ccd34c56c66 178 */
nucleosam 0:0ccd34c56c66 179
nucleosam 0:0ccd34c56c66 180 /**
nucleosam 0:0ccd34c56c66 181 * @brief Getting the value of the motor state .
nucleosam 0:0ccd34c56c66 182 * @param None.
nucleosam 0:0ccd34c56c66 183 * @retval The motor state accoring to motorState_t in motor.h
nucleosam 0:0ccd34c56c66 184 */
nucleosam 0:0ccd34c56c66 185 virtual unsigned int GetStatus(void)
nucleosam 0:0ccd34c56c66 186 {
nucleosam 0:0ccd34c56c66 187 return (unsigned int) Stspin220_GetDeviceState();
nucleosam 0:0ccd34c56c66 188 }
nucleosam 0:0ccd34c56c66 189
nucleosam 0:0ccd34c56c66 190 /**
nucleosam 0:0ccd34c56c66 191 * @brief Getting the position.
nucleosam 0:0ccd34c56c66 192 * @param None.
nucleosam 0:0ccd34c56c66 193 * @retval The position.
nucleosam 0:0ccd34c56c66 194 */
nucleosam 0:0ccd34c56c66 195 virtual signed int GetPosition(void)
nucleosam 0:0ccd34c56c66 196 {
nucleosam 0:0ccd34c56c66 197 return (signed int)Stspin220_GetPosition();
nucleosam 0:0ccd34c56c66 198 }
nucleosam 0:0ccd34c56c66 199
nucleosam 0:0ccd34c56c66 200 /**
nucleosam 0:0ccd34c56c66 201 * @brief Getting the marked position.
nucleosam 0:0ccd34c56c66 202 * @param None.
nucleosam 0:0ccd34c56c66 203 * @retval The marked position.
nucleosam 0:0ccd34c56c66 204 */
nucleosam 0:0ccd34c56c66 205 virtual signed int GetMark(void)
nucleosam 0:0ccd34c56c66 206 {
nucleosam 0:0ccd34c56c66 207 return (signed int)Stspin220_GetMark();
nucleosam 0:0ccd34c56c66 208 }
nucleosam 0:0ccd34c56c66 209
nucleosam 0:0ccd34c56c66 210 /**
nucleosam 0:0ccd34c56c66 211 * @brief Getting the current speed in pps.
nucleosam 0:0ccd34c56c66 212 * @param None.
nucleosam 0:0ccd34c56c66 213 * @retval The current speed in pps.
nucleosam 0:0ccd34c56c66 214 */
nucleosam 0:0ccd34c56c66 215 virtual unsigned int GetSpeed(void)
nucleosam 0:0ccd34c56c66 216 {
nucleosam 0:0ccd34c56c66 217 return (unsigned int)Stspin220_GetCurrentSpeed();
nucleosam 0:0ccd34c56c66 218 }
nucleosam 0:0ccd34c56c66 219
nucleosam 0:0ccd34c56c66 220 /**
nucleosam 0:0ccd34c56c66 221 * @brief Getting the maximum speed in pps.
nucleosam 0:0ccd34c56c66 222 * @param None.
nucleosam 0:0ccd34c56c66 223 * @retval The maximum speed in pps.
nucleosam 0:0ccd34c56c66 224 */
nucleosam 0:0ccd34c56c66 225 virtual unsigned int GetMaxSpeed(void)
nucleosam 0:0ccd34c56c66 226 {
nucleosam 0:0ccd34c56c66 227 return (unsigned int)Stspin220_GetMaxSpeed();
nucleosam 0:0ccd34c56c66 228 }
nucleosam 0:0ccd34c56c66 229
nucleosam 0:0ccd34c56c66 230 /**
nucleosam 0:0ccd34c56c66 231 * @brief Getting the minimum speed in pps.
nucleosam 0:0ccd34c56c66 232 * @param None.
nucleosam 0:0ccd34c56c66 233 * @retval The minimum speed in pps.
nucleosam 0:0ccd34c56c66 234 */
nucleosam 0:0ccd34c56c66 235 virtual unsigned int GetMinSpeed(void)
nucleosam 0:0ccd34c56c66 236 {
nucleosam 0:0ccd34c56c66 237 return (unsigned int)Stspin220_GetMinSpeed();
nucleosam 0:0ccd34c56c66 238 }
nucleosam 0:0ccd34c56c66 239
nucleosam 0:0ccd34c56c66 240 /**
nucleosam 0:0ccd34c56c66 241 * @brief Getting the acceleration in pps^2.
nucleosam 0:0ccd34c56c66 242 * @param None.
nucleosam 0:0ccd34c56c66 243 * @retval The acceleration in pps^2.
nucleosam 0:0ccd34c56c66 244 */
nucleosam 0:0ccd34c56c66 245 virtual unsigned int GetAcceleration(void)
nucleosam 0:0ccd34c56c66 246 {
nucleosam 0:0ccd34c56c66 247 return (unsigned int)Stspin220_GetAcceleration();
nucleosam 0:0ccd34c56c66 248 }
nucleosam 0:0ccd34c56c66 249
nucleosam 0:0ccd34c56c66 250 /**
nucleosam 0:0ccd34c56c66 251 * @brief Getting the deceleration in pps^2.
nucleosam 0:0ccd34c56c66 252 * @param None.
nucleosam 0:0ccd34c56c66 253 * @retval The deceleration in pps^2.
nucleosam 0:0ccd34c56c66 254 */
nucleosam 0:0ccd34c56c66 255 virtual unsigned int GetDeceleration(void)
nucleosam 0:0ccd34c56c66 256 {
nucleosam 0:0ccd34c56c66 257 return (unsigned int)Stspin220_GetDeceleration();
nucleosam 0:0ccd34c56c66 258 }
nucleosam 0:0ccd34c56c66 259
nucleosam 0:0ccd34c56c66 260 /**
nucleosam 0:0ccd34c56c66 261 * @brief Getting the direction of rotation.
nucleosam 0:0ccd34c56c66 262 * @param None.
nucleosam 0:0ccd34c56c66 263 * @retval The direction of rotation.
nucleosam 0:0ccd34c56c66 264 */
nucleosam 0:0ccd34c56c66 265 virtual direction_t GetDirection(void)
nucleosam 0:0ccd34c56c66 266 {
nucleosam 0:0ccd34c56c66 267 if (Stspin220_GetDirection()!=BACKWARD)
nucleosam 0:0ccd34c56c66 268 {
nucleosam 0:0ccd34c56c66 269 return FWD;
nucleosam 0:0ccd34c56c66 270 }
nucleosam 0:0ccd34c56c66 271 else
nucleosam 0:0ccd34c56c66 272 {
nucleosam 0:0ccd34c56c66 273 return BWD;
nucleosam 0:0ccd34c56c66 274 }
nucleosam 0:0ccd34c56c66 275 }
nucleosam 0:0ccd34c56c66 276
nucleosam 0:0ccd34c56c66 277 /**
nucleosam 0:0ccd34c56c66 278 * @brief Setting the current position to be the home position.
nucleosam 0:0ccd34c56c66 279 * @param None.
nucleosam 0:0ccd34c56c66 280 * @retval None.
nucleosam 0:0ccd34c56c66 281 */
nucleosam 0:0ccd34c56c66 282 virtual void SetHome(void)
nucleosam 0:0ccd34c56c66 283 {
nucleosam 0:0ccd34c56c66 284 Stspin220_SetHome();
nucleosam 0:0ccd34c56c66 285 }
nucleosam 0:0ccd34c56c66 286
nucleosam 0:0ccd34c56c66 287 /**
nucleosam 0:0ccd34c56c66 288 * @brief Setting the current position to be the marked position.
nucleosam 0:0ccd34c56c66 289 * @param None.
nucleosam 0:0ccd34c56c66 290 * @retval None.
nucleosam 0:0ccd34c56c66 291 */
nucleosam 0:0ccd34c56c66 292 virtual void SetMark(void)
nucleosam 0:0ccd34c56c66 293 {
nucleosam 0:0ccd34c56c66 294 Stspin220_SetMark();
nucleosam 0:0ccd34c56c66 295 }
nucleosam 0:0ccd34c56c66 296
nucleosam 0:0ccd34c56c66 297 /**
nucleosam 0:0ccd34c56c66 298 * @brief Setting the maximum speed in pps.
nucleosam 0:0ccd34c56c66 299 * @param speed The maximum speed in pps.
nucleosam 0:0ccd34c56c66 300 * @retval "true" in case of success, "false" otherwise.
nucleosam 0:0ccd34c56c66 301 */
nucleosam 0:0ccd34c56c66 302 virtual bool SetMaxSpeed(unsigned int speed)
nucleosam 0:0ccd34c56c66 303 {
nucleosam 0:0ccd34c56c66 304 if (speed <= 0xFFFF)
nucleosam 0:0ccd34c56c66 305 {
nucleosam 0:0ccd34c56c66 306 return Stspin220_SetMaxSpeed((uint16_t) speed);
nucleosam 0:0ccd34c56c66 307 }
nucleosam 0:0ccd34c56c66 308 else
nucleosam 0:0ccd34c56c66 309 {
nucleosam 0:0ccd34c56c66 310 return false;
nucleosam 0:0ccd34c56c66 311 }
nucleosam 0:0ccd34c56c66 312 }
nucleosam 0:0ccd34c56c66 313
nucleosam 0:0ccd34c56c66 314 /**
nucleosam 0:0ccd34c56c66 315 * @brief Setting the minimum speed in pps.
nucleosam 0:0ccd34c56c66 316 * @param speed The minimum speed in pps.
nucleosam 0:0ccd34c56c66 317 * @retval "true" in case of success, "false" otherwise.
nucleosam 0:0ccd34c56c66 318 */
nucleosam 0:0ccd34c56c66 319 virtual bool SetMinSpeed(unsigned int speed)
nucleosam 0:0ccd34c56c66 320 {
nucleosam 0:0ccd34c56c66 321 if (speed <= 0xFFFF)
nucleosam 0:0ccd34c56c66 322 {
nucleosam 0:0ccd34c56c66 323 return Stspin220_SetMinSpeed((uint16_t) speed);
nucleosam 0:0ccd34c56c66 324 }
nucleosam 0:0ccd34c56c66 325 else
nucleosam 0:0ccd34c56c66 326 {
nucleosam 0:0ccd34c56c66 327 return false;
nucleosam 0:0ccd34c56c66 328 }
nucleosam 0:0ccd34c56c66 329 }
nucleosam 0:0ccd34c56c66 330
nucleosam 0:0ccd34c56c66 331 /**
nucleosam 0:0ccd34c56c66 332 * @brief Setting the acceleration in pps^2.
nucleosam 0:0ccd34c56c66 333 * @param acceleration The acceleration in pps/s^2.
nucleosam 0:0ccd34c56c66 334 * @retval "true" in case of success, "false" otherwise.
nucleosam 0:0ccd34c56c66 335 */
nucleosam 0:0ccd34c56c66 336 virtual bool SetAcceleration(unsigned int acceleration)
nucleosam 0:0ccd34c56c66 337 {
nucleosam 0:0ccd34c56c66 338 if (acceleration <= 0xFFFF)
nucleosam 0:0ccd34c56c66 339 {
nucleosam 0:0ccd34c56c66 340 return Stspin220_SetAcceleration((uint16_t) acceleration);
nucleosam 0:0ccd34c56c66 341 }
nucleosam 0:0ccd34c56c66 342 else
nucleosam 0:0ccd34c56c66 343 {
nucleosam 0:0ccd34c56c66 344 return false;
nucleosam 0:0ccd34c56c66 345 }
nucleosam 0:0ccd34c56c66 346 }
nucleosam 0:0ccd34c56c66 347
nucleosam 0:0ccd34c56c66 348 /**
nucleosam 0:0ccd34c56c66 349 * @brief Setting the deceleration in pps^2.
nucleosam 0:0ccd34c56c66 350 * @param deceleration The deceleration in pps^2.
nucleosam 0:0ccd34c56c66 351 * @retval "true" in case of success, "false" otherwise.
nucleosam 0:0ccd34c56c66 352 */
nucleosam 0:0ccd34c56c66 353 virtual bool SetDeceleration(unsigned int deceleration)
nucleosam 0:0ccd34c56c66 354 {
nucleosam 0:0ccd34c56c66 355 if (deceleration <= 0xFFFF)
nucleosam 0:0ccd34c56c66 356 {
nucleosam 0:0ccd34c56c66 357 return Stspin220_SetDeceleration((uint16_t) deceleration);
nucleosam 0:0ccd34c56c66 358 }
nucleosam 0:0ccd34c56c66 359 else
nucleosam 0:0ccd34c56c66 360 {
nucleosam 0:0ccd34c56c66 361 return false;
nucleosam 0:0ccd34c56c66 362 }
nucleosam 0:0ccd34c56c66 363 }
nucleosam 0:0ccd34c56c66 364
nucleosam 0:0ccd34c56c66 365 /**
nucleosam 0:0ccd34c56c66 366 * @brief Setting the Step Mode.
nucleosam 0:0ccd34c56c66 367 * @param step_mode The Step Mode.
nucleosam 0:0ccd34c56c66 368 * @retval "true" in case of success, "false" otherwise.
nucleosam 0:0ccd34c56c66 369 * @note step_mode can be one of the following:
nucleosam 0:0ccd34c56c66 370 * + STEP_MODE_FULL
nucleosam 0:0ccd34c56c66 371 * + STEP_MODE_WAVE
nucleosam 0:0ccd34c56c66 372 * + STEP_MODE_HALF
nucleosam 0:0ccd34c56c66 373 * + STEP_MODE_1_4
nucleosam 0:0ccd34c56c66 374 * + STEP_MODE_1_8
nucleosam 0:0ccd34c56c66 375 * + STEP_MODE_1_16
nucleosam 0:0ccd34c56c66 376 */
nucleosam 0:0ccd34c56c66 377 virtual bool SetStepMode(step_mode_t step_mode)
nucleosam 0:0ccd34c56c66 378 {
nucleosam 0:0ccd34c56c66 379 return Stspin220_SetStepMode((motorStepMode_t) step_mode);
nucleosam 0:0ccd34c56c66 380 }
nucleosam 0:0ccd34c56c66 381
nucleosam 0:0ccd34c56c66 382 /**
nucleosam 0:0ccd34c56c66 383 * @brief Going to a specified position.
nucleosam 0:0ccd34c56c66 384 * @param position The desired position.
nucleosam 0:0ccd34c56c66 385 * @retval None.
nucleosam 0:0ccd34c56c66 386 */
nucleosam 0:0ccd34c56c66 387 virtual void GoTo(signed int position)
nucleosam 0:0ccd34c56c66 388 {
nucleosam 0:0ccd34c56c66 389 Stspin220_GoTo((int32_t)position);
nucleosam 0:0ccd34c56c66 390 }
nucleosam 0:0ccd34c56c66 391
nucleosam 0:0ccd34c56c66 392 /**
nucleosam 0:0ccd34c56c66 393 * @brief Going to the home position.
nucleosam 0:0ccd34c56c66 394 * @param None.
nucleosam 0:0ccd34c56c66 395 * @retval None.
nucleosam 0:0ccd34c56c66 396 */
nucleosam 0:0ccd34c56c66 397 virtual void GoHome(void)
nucleosam 0:0ccd34c56c66 398 {
nucleosam 0:0ccd34c56c66 399 Stspin220_GoHome();
nucleosam 0:0ccd34c56c66 400 }
nucleosam 0:0ccd34c56c66 401
nucleosam 0:0ccd34c56c66 402 /**
nucleosam 0:0ccd34c56c66 403 * @brief Going to the marked position.
nucleosam 0:0ccd34c56c66 404 * @param None.
nucleosam 0:0ccd34c56c66 405 * @retval None.
nucleosam 0:0ccd34c56c66 406 */
nucleosam 0:0ccd34c56c66 407 virtual void GoMark(void)
nucleosam 0:0ccd34c56c66 408 {
nucleosam 0:0ccd34c56c66 409 Stspin220_GoMark();
nucleosam 0:0ccd34c56c66 410 }
nucleosam 0:0ccd34c56c66 411
nucleosam 0:0ccd34c56c66 412 /**
nucleosam 0:0ccd34c56c66 413 * @brief Running the motor towards a specified direction.
nucleosam 0:0ccd34c56c66 414 * @param direction The direction of rotation.
nucleosam 0:0ccd34c56c66 415 * @retval None.
nucleosam 0:0ccd34c56c66 416 */
nucleosam 0:0ccd34c56c66 417 virtual void Run(direction_t direction)
nucleosam 0:0ccd34c56c66 418 {
nucleosam 0:0ccd34c56c66 419 Stspin220_Run((motorDir_t) (direction == StepperMotor::FWD ? FORWARD : BACKWARD));
nucleosam 0:0ccd34c56c66 420 }
nucleosam 0:0ccd34c56c66 421
nucleosam 0:0ccd34c56c66 422 /**
nucleosam 0:0ccd34c56c66 423 * @brief Moving the motor towards a specified direction for a certain number of steps.
nucleosam 0:0ccd34c56c66 424 * @param direction The direction of rotation.
nucleosam 0:0ccd34c56c66 425 * @param steps The desired number of steps.
nucleosam 0:0ccd34c56c66 426 * @retval None.
nucleosam 0:0ccd34c56c66 427 */
nucleosam 0:0ccd34c56c66 428 virtual void Move(direction_t direction, unsigned int steps)
nucleosam 0:0ccd34c56c66 429 {
nucleosam 0:0ccd34c56c66 430 Stspin220_Move((motorDir_t) (direction == StepperMotor::FWD ? FORWARD : BACKWARD), (uint32_t)steps);
nucleosam 0:0ccd34c56c66 431 }
nucleosam 0:0ccd34c56c66 432
nucleosam 0:0ccd34c56c66 433 /**
nucleosam 0:0ccd34c56c66 434 * @brief Stopping the motor through an immediate deceleration up to zero speed.
nucleosam 0:0ccd34c56c66 435 * @param None.
nucleosam 0:0ccd34c56c66 436 * @retval None.
nucleosam 0:0ccd34c56c66 437 */
nucleosam 0:0ccd34c56c66 438 virtual void SoftStop(void)
nucleosam 0:0ccd34c56c66 439 {
nucleosam 0:0ccd34c56c66 440 Stspin220_SoftStop();
nucleosam 0:0ccd34c56c66 441 }
nucleosam 0:0ccd34c56c66 442
nucleosam 0:0ccd34c56c66 443 /**
nucleosam 0:0ccd34c56c66 444 * @brief Stopping the motor through an immediate infinite deceleration.
nucleosam 0:0ccd34c56c66 445 * @param None.
nucleosam 0:0ccd34c56c66 446 * @retval None.
nucleosam 0:0ccd34c56c66 447 */
nucleosam 0:0ccd34c56c66 448 virtual void HardStop(void)
nucleosam 0:0ccd34c56c66 449 {
nucleosam 0:0ccd34c56c66 450 Stspin220_HardStop();
nucleosam 0:0ccd34c56c66 451 }
nucleosam 0:0ccd34c56c66 452
nucleosam 0:0ccd34c56c66 453 /**
nucleosam 0:0ccd34c56c66 454 * @brief Disabling the power bridge after performing a deceleration to zero.
nucleosam 0:0ccd34c56c66 455 * @param None.
nucleosam 0:0ccd34c56c66 456 * @retval None.
nucleosam 0:0ccd34c56c66 457 */
nucleosam 0:0ccd34c56c66 458 virtual void SoftHiZ(void)
nucleosam 0:0ccd34c56c66 459 {
nucleosam 0:0ccd34c56c66 460 Stspin220_SetStopMode(HIZ_MODE);
nucleosam 0:0ccd34c56c66 461 Stspin220_SoftStop();
nucleosam 0:0ccd34c56c66 462 }
nucleosam 0:0ccd34c56c66 463
nucleosam 0:0ccd34c56c66 464 /**
nucleosam 0:0ccd34c56c66 465 * @brief Disabling the power bridge immediately.
nucleosam 0:0ccd34c56c66 466 * @param None.
nucleosam 0:0ccd34c56c66 467 * @retval None.
nucleosam 0:0ccd34c56c66 468 */
nucleosam 0:0ccd34c56c66 469 virtual void HardHiZ(void)
nucleosam 0:0ccd34c56c66 470 {
nucleosam 0:0ccd34c56c66 471 Stspin220_HardHiZ();
nucleosam 0:0ccd34c56c66 472 }
nucleosam 0:0ccd34c56c66 473
nucleosam 0:0ccd34c56c66 474 /**
nucleosam 0:0ccd34c56c66 475 * @brief Waiting while the motor is active.
nucleosam 0:0ccd34c56c66 476 * @param None.
nucleosam 0:0ccd34c56c66 477 * @retval None.
nucleosam 0:0ccd34c56c66 478 */
nucleosam 0:0ccd34c56c66 479 virtual void WaitWhileActive(void)
nucleosam 0:0ccd34c56c66 480 {
nucleosam 0:0ccd34c56c66 481 Stspin220_WaitWhileActive();
nucleosam 0:0ccd34c56c66 482 }
nucleosam 0:0ccd34c56c66 483
nucleosam 0:0ccd34c56c66 484 /**
nucleosam 0:0ccd34c56c66 485 * @brief Public functions NOT inherited
nucleosam 0:0ccd34c56c66 486 */
nucleosam 0:0ccd34c56c66 487
nucleosam 0:0ccd34c56c66 488 /**
nucleosam 0:0ccd34c56c66 489 * @brief Attaching an error handler.
nucleosam 0:0ccd34c56c66 490 * @param fptr An error handler.
nucleosam 0:0ccd34c56c66 491 * @retval None.
nucleosam 0:0ccd34c56c66 492 */
nucleosam 0:0ccd34c56c66 493 virtual void AttachErrorHandler(void (*fptr)(uint16_t error))
nucleosam 0:0ccd34c56c66 494 {
nucleosam 0:0ccd34c56c66 495 Stspin220_AttachErrorHandler((void (*)(uint16_t error)) fptr);
nucleosam 0:0ccd34c56c66 496 }
nucleosam 0:0ccd34c56c66 497
nucleosam 0:0ccd34c56c66 498 /**
nucleosam 0:0ccd34c56c66 499 * @brief Checks if the device is disabled or/and has an alarm flag set
nucleosam 0:0ccd34c56c66 500 * by reading the EN FAULT pin position.
nucleosam 0:0ccd34c56c66 501 * @param None.
nucleosam 0:0ccd34c56c66 502 * @retval One if the EN FAULT pin is low (the device is disabled or/and
nucleosam 0:0ccd34c56c66 503 * has an alarm flag set), otherwise zero.
nucleosam 0:0ccd34c56c66 504 */
nucleosam 0:0ccd34c56c66 505 virtual unsigned int CheckStatusHw(void)
nucleosam 0:0ccd34c56c66 506 {
nucleosam 0:0ccd34c56c66 507 if (!fault_and_enable.read()) return 0x01;
nucleosam 0:0ccd34c56c66 508 else return 0x00;
nucleosam 0:0ccd34c56c66 509 }
nucleosam 0:0ccd34c56c66 510
nucleosam 0:0ccd34c56c66 511 /**
nucleosam 0:0ccd34c56c66 512 * @brief Disabling the device.
nucleosam 0:0ccd34c56c66 513 * @param None.
nucleosam 0:0ccd34c56c66 514 * @retval None.
nucleosam 0:0ccd34c56c66 515 */
nucleosam 0:0ccd34c56c66 516 virtual void Disable(void)
nucleosam 0:0ccd34c56c66 517 {
nucleosam 0:0ccd34c56c66 518 Stspin220_Disable();
nucleosam 0:0ccd34c56c66 519 }
nucleosam 0:0ccd34c56c66 520
nucleosam 0:0ccd34c56c66 521 /**
nucleosam 0:0ccd34c56c66 522 * @brief Enabling the device.
nucleosam 0:0ccd34c56c66 523 * @param None.
nucleosam 0:0ccd34c56c66 524 * @retval None.
nucleosam 0:0ccd34c56c66 525 */
nucleosam 0:0ccd34c56c66 526 virtual void Enable(void)
nucleosam 0:0ccd34c56c66 527 {
nucleosam 0:0ccd34c56c66 528 Stspin220_Enable();
nucleosam 0:0ccd34c56c66 529 }
nucleosam 0:0ccd34c56c66 530
nucleosam 0:0ccd34c56c66 531 /**
nucleosam 0:0ccd34c56c66 532 * @brief Exit STSPIN220 device from standby (low power consumption) by
nucleosam 0:0ccd34c56c66 533 * setting STBY\RESET pin to high level and changing the motion state to
nucleosam 0:0ccd34c56c66 534 * INACTIVE.
nucleosam 0:0ccd34c56c66 535 * @param None.
nucleosam 0:0ccd34c56c66 536 * @retval None.
nucleosam 0:0ccd34c56c66 537 */
nucleosam 0:0ccd34c56c66 538 virtual void ExitDeviceFromStandby(void)
nucleosam 0:0ccd34c56c66 539 {
nucleosam 0:0ccd34c56c66 540 Stspin220_ExitDeviceFromStandby();
nucleosam 0:0ccd34c56c66 541 }
nucleosam 0:0ccd34c56c66 542
nucleosam 0:0ccd34c56c66 543 /**
nucleosam 0:0ccd34c56c66 544 * @brief Set the frequency of the VREFA and VREFB PWM
nucleosam 0:0ccd34c56c66 545 * @param frequency in Hz
nucleosam 0:0ccd34c56c66 546 * @retval None.
nucleosam 0:0ccd34c56c66 547 */
nucleosam 0:0ccd34c56c66 548 virtual uint32_t GetFreqVrefPwm(void)
nucleosam 0:0ccd34c56c66 549 {
nucleosam 0:0ccd34c56c66 550 return Stspin220_VrefPwmGetFreq();
nucleosam 0:0ccd34c56c66 551 }
nucleosam 0:0ccd34c56c66 552
nucleosam 0:0ccd34c56c66 553 /**
nucleosam 0:0ccd34c56c66 554 * @brief Getting the version of the firmware.
nucleosam 0:0ccd34c56c66 555 * @param None.
nucleosam 0:0ccd34c56c66 556 * @retval The version of the firmware.
nucleosam 0:0ccd34c56c66 557 */
nucleosam 0:0ccd34c56c66 558 virtual unsigned int GetFwVersion(void)
nucleosam 0:0ccd34c56c66 559 {
nucleosam 0:0ccd34c56c66 560 return (unsigned int) Stspin220_GetFwVersion();
nucleosam 0:0ccd34c56c66 561 }
nucleosam 0:0ccd34c56c66 562
nucleosam 0:0ccd34c56c66 563 /**
nucleosam 0:0ccd34c56c66 564 * @brief Getting the motor step mode.
nucleosam 0:0ccd34c56c66 565 * @param None.
nucleosam 0:0ccd34c56c66 566 * @retval The motor step mode.
nucleosam 0:0ccd34c56c66 567 */
nucleosam 0:0ccd34c56c66 568 virtual step_mode_t GetStepMode(void)
nucleosam 0:0ccd34c56c66 569 {
nucleosam 0:0ccd34c56c66 570 return (step_mode_t) Stspin220_GetStepMode();
nucleosam 0:0ccd34c56c66 571 }
nucleosam 0:0ccd34c56c66 572
nucleosam 0:0ccd34c56c66 573 /**
nucleosam 0:0ccd34c56c66 574 * @brief Getting the motor stop mode.
nucleosam 0:0ccd34c56c66 575 * @param None.
nucleosam 0:0ccd34c56c66 576 * @retval The motor stop mode.
nucleosam 0:0ccd34c56c66 577 */
nucleosam 0:0ccd34c56c66 578 virtual motorStopMode_t GetStopMode(void)
nucleosam 0:0ccd34c56c66 579 {
nucleosam 0:0ccd34c56c66 580 return Stspin220_GetStopMode();
nucleosam 0:0ccd34c56c66 581 }
nucleosam 0:0ccd34c56c66 582
nucleosam 0:0ccd34c56c66 583 /**
nucleosam 0:0ccd34c56c66 584 * @brief Get the motor torque.
nucleosam 0:0ccd34c56c66 585 * @param torqueMode Torque mode as specified in enum motorTorqueMode_t
nucleosam 0:0ccd34c56c66 586 * @retval the torqueValue in % (from 0 to 100)
nucleosam 0:0ccd34c56c66 587 */
nucleosam 0:0ccd34c56c66 588 virtual uint8_t GetTorque(motorTorqueMode_t torqueMode)
nucleosam 0:0ccd34c56c66 589 {
nucleosam 0:0ccd34c56c66 590 return Stspin220_GetTorque(torqueMode);
nucleosam 0:0ccd34c56c66 591 }
nucleosam 0:0ccd34c56c66 592
nucleosam 0:0ccd34c56c66 593 /**
nucleosam 0:0ccd34c56c66 594 * @brief Get the torque boost feature status.
nucleosam 0:0ccd34c56c66 595 * @param None.
nucleosam 0:0ccd34c56c66 596 * @retval true if enabled, false if disabled
nucleosam 0:0ccd34c56c66 597 */
nucleosam 0:0ccd34c56c66 598 virtual bool GetTorqueBoostEnable(void)
nucleosam 0:0ccd34c56c66 599 {
nucleosam 0:0ccd34c56c66 600 return Stspin220_GetTorqueBoostEnable();
nucleosam 0:0ccd34c56c66 601 }
nucleosam 0:0ccd34c56c66 602
nucleosam 0:0ccd34c56c66 603 /**
nucleosam 0:0ccd34c56c66 604 * @brief Get the torque boost threshold
nucleosam 0:0ccd34c56c66 605 * @retval The torque boost threshold above which the step mode is
nucleosam 0:0ccd34c56c66 606 * changed to full step
nucleosam 0:0ccd34c56c66 607 */
nucleosam 0:0ccd34c56c66 608 virtual uint16_t GetTorqueBoostThreshold(void)
nucleosam 0:0ccd34c56c66 609 {
nucleosam 0:0ccd34c56c66 610 return Stspin220_GetTorqueBoostThreshold();
nucleosam 0:0ccd34c56c66 611 }
nucleosam 0:0ccd34c56c66 612
nucleosam 0:0ccd34c56c66 613 /**
nucleosam 0:0ccd34c56c66 614 * @brief Going to a specified position with a specificied direction.
nucleosam 0:0ccd34c56c66 615 * @param direction The desired direction.
nucleosam 0:0ccd34c56c66 616 * @param position The desired position.
nucleosam 0:0ccd34c56c66 617 * @retval None.
nucleosam 0:0ccd34c56c66 618 */
nucleosam 0:0ccd34c56c66 619 virtual void GoTo(direction_t direction, signed int position)
nucleosam 0:0ccd34c56c66 620 {
nucleosam 0:0ccd34c56c66 621 Stspin220_GoToDir((motorDir_t) (direction == StepperMotor::FWD ? FORWARD : BACKWARD),(int32_t)position);
nucleosam 0:0ccd34c56c66 622 }
nucleosam 0:0ccd34c56c66 623
nucleosam 0:0ccd34c56c66 624 /**
nucleosam 0:0ccd34c56c66 625 * @brief Put STSPIN220 device in standby (low power consumption) by
nucleosam 0:0ccd34c56c66 626 * setting STBY\RESET pin to low level and changing the motion state to
nucleosam 0:0ccd34c56c66 627 * STANDBY.
nucleosam 0:0ccd34c56c66 628 * @param None.
nucleosam 0:0ccd34c56c66 629 * @retval None.
nucleosam 0:0ccd34c56c66 630 */
nucleosam 0:0ccd34c56c66 631 virtual void PutDeviceInStandby(void)
nucleosam 0:0ccd34c56c66 632 {
nucleosam 0:0ccd34c56c66 633 Stspin220_PutDeviceInStandby();
nucleosam 0:0ccd34c56c66 634 }
nucleosam 0:0ccd34c56c66 635
nucleosam 0:0ccd34c56c66 636 /**
nucleosam 0:0ccd34c56c66 637 * @brief Release the STSPIN220 reset (Reset pin set to high level).
nucleosam 0:0ccd34c56c66 638 * @param None.
nucleosam 0:0ccd34c56c66 639 * @retval None.
nucleosam 0:0ccd34c56c66 640 */
nucleosam 0:0ccd34c56c66 641 virtual void ReleaseReset(void)
nucleosam 0:0ccd34c56c66 642 {
nucleosam 0:0ccd34c56c66 643 Stspin220_Board_ReleaseReset();
nucleosam 0:0ccd34c56c66 644 }
nucleosam 0:0ccd34c56c66 645
nucleosam 0:0ccd34c56c66 646 /**
nucleosam 0:0ccd34c56c66 647 * @brief Reset the STSPIN220 (Reset pin set to low level).
nucleosam 0:0ccd34c56c66 648 * @param None.
nucleosam 0:0ccd34c56c66 649 * @retval None.
nucleosam 0:0ccd34c56c66 650 */
nucleosam 0:0ccd34c56c66 651 virtual void Reset(void)
nucleosam 0:0ccd34c56c66 652 {
nucleosam 0:0ccd34c56c66 653 Stspin220_Board_Reset();
nucleosam 0:0ccd34c56c66 654 }
nucleosam 0:0ccd34c56c66 655
nucleosam 0:0ccd34c56c66 656 /**
nucleosam 0:0ccd34c56c66 657 * @brief Set the motor direction.
nucleosam 0:0ccd34c56c66 658 * @param direction The desired direction.
nucleosam 0:0ccd34c56c66 659 * @retval None.
nucleosam 0:0ccd34c56c66 660 */
nucleosam 0:0ccd34c56c66 661 virtual void SetDirection(direction_t direction)
nucleosam 0:0ccd34c56c66 662 {
nucleosam 0:0ccd34c56c66 663 Stspin220_SetDirection((motorDir_t) (direction == StepperMotor::FWD ? FORWARD : BACKWARD));
nucleosam 0:0ccd34c56c66 664 }
nucleosam 0:0ccd34c56c66 665
nucleosam 0:0ccd34c56c66 666 /**
nucleosam 0:0ccd34c56c66 667 * @brief Set the frequency of the PWM for REF pin
nucleosam 0:0ccd34c56c66 668 * @param frequency in Hz
nucleosam 0:0ccd34c56c66 669 * @retval None.
nucleosam 0:0ccd34c56c66 670 */
nucleosam 0:0ccd34c56c66 671 virtual void SetFreqVrefPwm(uint32_t frequency)
nucleosam 0:0ccd34c56c66 672 {
nucleosam 0:0ccd34c56c66 673 Stspin220_VrefPwmSetFreq(frequency);
nucleosam 0:0ccd34c56c66 674 }
nucleosam 0:0ccd34c56c66 675
nucleosam 0:0ccd34c56c66 676 /**
nucleosam 0:0ccd34c56c66 677 * @brief Set the motor stop mode.
nucleosam 0:0ccd34c56c66 678 * @param stopMode The desired stop mode (HOLD_MODE, HIZ_MODE or
nucleosam 0:0ccd34c56c66 679 * STANDBY_MODE).
nucleosam 0:0ccd34c56c66 680 * @retval None.
nucleosam 0:0ccd34c56c66 681 */
nucleosam 0:0ccd34c56c66 682 virtual void SetStopMode(motorStopMode_t stopMode)
nucleosam 0:0ccd34c56c66 683 {
nucleosam 0:0ccd34c56c66 684 Stspin220_SetStopMode(stopMode);
nucleosam 0:0ccd34c56c66 685 }
nucleosam 0:0ccd34c56c66 686
nucleosam 0:0ccd34c56c66 687 /**
nucleosam 0:0ccd34c56c66 688 * @brief Set the motor torque.
nucleosam 0:0ccd34c56c66 689 * @param torqueMode Torque mode as specified in enum motorTorqueMode_t
nucleosam 0:0ccd34c56c66 690 * @param torqueValue in % (from 0 to 100)
nucleosam 0:0ccd34c56c66 691 * @retval None.
nucleosam 0:0ccd34c56c66 692 */
nucleosam 0:0ccd34c56c66 693 virtual void SetTorque(motorTorqueMode_t torqueMode, uint8_t torqueValue)
nucleosam 0:0ccd34c56c66 694 {
nucleosam 0:0ccd34c56c66 695 Stspin220_SetTorque(torqueMode, torqueValue);
nucleosam 0:0ccd34c56c66 696 }
nucleosam 0:0ccd34c56c66 697
nucleosam 0:0ccd34c56c66 698 /**
nucleosam 0:0ccd34c56c66 699 * @brief Enable or disable the motor torque boost feature.
nucleosam 0:0ccd34c56c66 700 * @param enable enable true to enable torque boost, false to disable
nucleosam 0:0ccd34c56c66 701 * @retval None.
nucleosam 0:0ccd34c56c66 702 */
nucleosam 0:0ccd34c56c66 703 virtual void SetTorqueBoostEnable(bool enable)
nucleosam 0:0ccd34c56c66 704 {
nucleosam 0:0ccd34c56c66 705 Stspin220_SetTorqueBoostEnable(enable);
nucleosam 0:0ccd34c56c66 706 }
nucleosam 0:0ccd34c56c66 707
nucleosam 0:0ccd34c56c66 708 /**
nucleosam 0:0ccd34c56c66 709 * @brief Set the torque boost threshold
nucleosam 0:0ccd34c56c66 710 * @param[in] speedThreshold speed threshold above which the step mode is
nucleosam 0:0ccd34c56c66 711 * changed to full step
nucleosam 0:0ccd34c56c66 712 * @retval None.
nucleosam 0:0ccd34c56c66 713 */
nucleosam 0:0ccd34c56c66 714 virtual void SetTorqueBoostThreshold(uint16_t speedThreshold)
nucleosam 0:0ccd34c56c66 715 {
nucleosam 0:0ccd34c56c66 716 Stspin220_SetTorqueBoostThreshold(speedThreshold);
nucleosam 0:0ccd34c56c66 717 }
nucleosam 0:0ccd34c56c66 718
nucleosam 0:0ccd34c56c66 719 /*** Public Interrupt Related Methods ***/
nucleosam 0:0ccd34c56c66 720
nucleosam 0:0ccd34c56c66 721 /* ACTION 6 --------------------------------------------------------------*
nucleosam 0:0ccd34c56c66 722 * Implement here interrupt related methods, if any. *
nucleosam 0:0ccd34c56c66 723 * Note that interrupt handling is platform dependent, e.g.: *
nucleosam 0:0ccd34c56c66 724 * + mbed: *
nucleosam 0:0ccd34c56c66 725 * InterruptIn feature_irq(pin); //Interrupt object. *
nucleosam 0:0ccd34c56c66 726 * feature_irq.rise(callback); //Attach a callback. *
nucleosam 0:0ccd34c56c66 727 * feature_irq.mode(PullNone); //Set interrupt mode. *
nucleosam 0:0ccd34c56c66 728 * feature_irq.enable_irq(); //Enable interrupt. *
nucleosam 0:0ccd34c56c66 729 * feature_irq.disable_irq(); //Disable interrupt. *
nucleosam 0:0ccd34c56c66 730 * + Arduino: *
nucleosam 0:0ccd34c56c66 731 * attachInterrupt(pin, callback, RISING); //Attach a callback. *
nucleosam 0:0ccd34c56c66 732 * detachInterrupt(pin); //Detach a callback. *
nucleosam 0:0ccd34c56c66 733 * *
nucleosam 0:0ccd34c56c66 734 * Example (mbed): *
nucleosam 0:0ccd34c56c66 735 * void AttachFeatureIRQ(void (*fptr) (void)) *
nucleosam 0:0ccd34c56c66 736 * { *
nucleosam 0:0ccd34c56c66 737 * feature_irq.rise(fptr); *
nucleosam 0:0ccd34c56c66 738 * } *
nucleosam 0:0ccd34c56c66 739 * *
nucleosam 0:0ccd34c56c66 740 * void EnableFeatureIRQ(void) *
nucleosam 0:0ccd34c56c66 741 * { *
nucleosam 0:0ccd34c56c66 742 * feature_irq.enable_irq(); *
nucleosam 0:0ccd34c56c66 743 * } *
nucleosam 0:0ccd34c56c66 744 * *
nucleosam 0:0ccd34c56c66 745 * void DisableFeatureIRQ(void) *
nucleosam 0:0ccd34c56c66 746 * { *
nucleosam 0:0ccd34c56c66 747 * feature_irq.disable_irq(); *
nucleosam 0:0ccd34c56c66 748 * } *
nucleosam 0:0ccd34c56c66 749 *------------------------------------------------------------------------*/
nucleosam 0:0ccd34c56c66 750 /**
nucleosam 0:0ccd34c56c66 751 * @brief Attaching an interrupt handler to the FLAG interrupt.
nucleosam 0:0ccd34c56c66 752 * @param fptr An interrupt handler.
nucleosam 0:0ccd34c56c66 753 * @retval None.
nucleosam 0:0ccd34c56c66 754 */
nucleosam 0:0ccd34c56c66 755
nucleosam 0:0ccd34c56c66 756 void AttachFlagIRQ(void (*fptr)(void))
nucleosam 0:0ccd34c56c66 757 {
nucleosam 0:0ccd34c56c66 758 fault_and_enable_irqFunctionPointer = &(*fptr);
nucleosam 0:0ccd34c56c66 759 fault_and_enable.fall(fptr);
nucleosam 0:0ccd34c56c66 760 fault_and_enable.mode(PullDown);
nucleosam 0:0ccd34c56c66 761 wait_ms(1);
nucleosam 0:0ccd34c56c66 762 }
nucleosam 0:0ccd34c56c66 763
nucleosam 0:0ccd34c56c66 764 /**
nucleosam 0:0ccd34c56c66 765 * @brief Enabling the FLAG interrupt handling.
nucleosam 0:0ccd34c56c66 766 * @param None.
nucleosam 0:0ccd34c56c66 767 * @retval None.
nucleosam 0:0ccd34c56c66 768 */
nucleosam 0:0ccd34c56c66 769 void EnableFlagIRQ(void)
nucleosam 0:0ccd34c56c66 770 {
nucleosam 0:0ccd34c56c66 771 fault_and_enable.enable_irq();
nucleosam 0:0ccd34c56c66 772 }
nucleosam 0:0ccd34c56c66 773
nucleosam 0:0ccd34c56c66 774 protected:
nucleosam 0:0ccd34c56c66 775
nucleosam 0:0ccd34c56c66 776 /*** Protected Component Related Methods ***/
nucleosam 0:0ccd34c56c66 777
nucleosam 0:0ccd34c56c66 778 /* ACTION 7 --------------------------------------------------------------*
nucleosam 0:0ccd34c56c66 779 * Declare here the component's specific methods. *
nucleosam 0:0ccd34c56c66 780 * They should be: *
nucleosam 0:0ccd34c56c66 781 * + Methods with the same name of the C component's virtual table's *
nucleosam 0:0ccd34c56c66 782 * functions (1); *
nucleosam 0:0ccd34c56c66 783 * + Methods with the same name of the C component's extended virtual *
nucleosam 0:0ccd34c56c66 784 * table's functions, if any (2); *
nucleosam 0:0ccd34c56c66 785 * + Helper methods, if any, like functions declared in the component's *
nucleosam 0:0ccd34c56c66 786 * source files but not pointed by the component's virtual table (3). *
nucleosam 0:0ccd34c56c66 787 * *
nucleosam 0:0ccd34c56c66 788 * Example: *
nucleosam 0:0ccd34c56c66 789 * Status_t COMPONENT_GetValue(float *f); //(1) *
nucleosam 0:0ccd34c56c66 790 * Status_t COMPONENT_EnableFeature(void); //(2) *
nucleosam 0:0ccd34c56c66 791 * Status_t COMPONENT_ComputeAverage(void); //(3) *
nucleosam 0:0ccd34c56c66 792 *------------------------------------------------------------------------*/
nucleosam 0:0ccd34c56c66 793 Status_t Stspin220_Init(void *init);
nucleosam 0:0ccd34c56c66 794 Status_t Stspin220_ReadID(uint8_t *id);
nucleosam 0:0ccd34c56c66 795 void Stspin220_AttachErrorHandler(void (*callback)(uint16_t error));
nucleosam 0:0ccd34c56c66 796 void Stspin220_ApplyTorque(motorTorqueMode_t torqueMode);
nucleosam 0:0ccd34c56c66 797 void Stspin220_Disable(void);
nucleosam 0:0ccd34c56c66 798 void Stspin220_ErrorHandler(uint16_t error);
nucleosam 0:0ccd34c56c66 799 void Stspin220_Enable(void);
nucleosam 0:0ccd34c56c66 800 void Stspin220_ExitDeviceFromStandby(void);
nucleosam 0:0ccd34c56c66 801 uint16_t Stspin220_GetAcceleration(void);
nucleosam 0:0ccd34c56c66 802 uint16_t Stspin220_GetCurrentSpeed(void);
nucleosam 0:0ccd34c56c66 803 uint16_t Stspin220_GetDeceleration(void);
nucleosam 0:0ccd34c56c66 804 motorState_t Stspin220_GetDeviceState(void);
nucleosam 0:0ccd34c56c66 805 motorDir_t Stspin220_GetDirection(void);
nucleosam 0:0ccd34c56c66 806 uint32_t Stspin220_GetFwVersion(void);
nucleosam 0:0ccd34c56c66 807 int32_t Stspin220_GetMark(void);
nucleosam 0:0ccd34c56c66 808 uint16_t Stspin220_GetMaxSpeed(void);
nucleosam 0:0ccd34c56c66 809 uint16_t Stspin220_GetMinSpeed(void);
nucleosam 0:0ccd34c56c66 810 int32_t Stspin220_GetPosition(void);
nucleosam 0:0ccd34c56c66 811 motorStepMode_t Stspin220_GetStepMode(void);
nucleosam 0:0ccd34c56c66 812 motorStopMode_t Stspin220_GetStopMode(void);
nucleosam 0:0ccd34c56c66 813 uint8_t Stspin220_GetTorque(motorTorqueMode_t torqueMode);
nucleosam 0:0ccd34c56c66 814 bool Stspin220_GetTorqueBoostEnable(void);
nucleosam 0:0ccd34c56c66 815 uint16_t Stspin220_GetTorqueBoostThreshold(void);
nucleosam 0:0ccd34c56c66 816 void Stspin220_GoHome(void);
nucleosam 0:0ccd34c56c66 817 void Stspin220_GoMark(void);
nucleosam 0:0ccd34c56c66 818 void Stspin220_GoTo(int32_t targetPosition);
nucleosam 0:0ccd34c56c66 819 void Stspin220_GoToDir(motorDir_t direction, int32_t targetPosition);
nucleosam 0:0ccd34c56c66 820 void Stspin220_HardHiZ(void);
nucleosam 0:0ccd34c56c66 821 void Stspin220_HardStop(void);
nucleosam 0:0ccd34c56c66 822 void Stspin220_Move(motorDir_t direction, uint32_t stepCount);
nucleosam 0:0ccd34c56c66 823 void Stspin220_PutDeviceInStandby(void);
nucleosam 0:0ccd34c56c66 824 void Stspin220_Run(motorDir_t direction);
nucleosam 0:0ccd34c56c66 825 bool Stspin220_SetAcceleration(uint16_t newAcc);
nucleosam 0:0ccd34c56c66 826 bool Stspin220_SetDeceleration(uint16_t newDec);
nucleosam 0:0ccd34c56c66 827 void Stspin220_SetDirection(motorDir_t direction);
nucleosam 0:0ccd34c56c66 828 void Stspin220_SetHome(void);
nucleosam 0:0ccd34c56c66 829 void Stspin220_SetMark(void);
nucleosam 0:0ccd34c56c66 830 bool Stspin220_SetMaxSpeed(uint16_t volatile newSpeed);
nucleosam 0:0ccd34c56c66 831 bool Stspin220_SetMinSpeed(uint16_t volatile newSpeed);
nucleosam 0:0ccd34c56c66 832 bool Stspin220_SetStepMode(motorStepMode_t stepMode);
nucleosam 0:0ccd34c56c66 833 void Stspin220_SetStopMode(motorStopMode_t stopMode);
nucleosam 0:0ccd34c56c66 834 bool Stspin220_SoftStop(void);
nucleosam 0:0ccd34c56c66 835 void Stspin220_SetTorque(motorTorqueMode_t torqueMode, uint8_t torqueValue);
nucleosam 0:0ccd34c56c66 836 void Stspin220_SetTorqueBoostEnable(bool enable);
nucleosam 0:0ccd34c56c66 837 void Stspin220_SetTorqueBoostThreshold(uint16_t speedThreshold);
nucleosam 0:0ccd34c56c66 838 uint32_t Stspin220_VrefPwmGetFreq(void);
nucleosam 0:0ccd34c56c66 839 void Stspin220_VrefPwmSetFreq(uint32_t newFreq);
nucleosam 0:0ccd34c56c66 840 void Stspin220_WaitWhileActive(void);
nucleosam 0:0ccd34c56c66 841
nucleosam 0:0ccd34c56c66 842 /*** Functions intended to be used only internally ***/
nucleosam 0:0ccd34c56c66 843 void Stspin220_ApplySpeed(uint16_t newSpeed);
nucleosam 0:0ccd34c56c66 844 void Stspin220_ComputeSpeedProfile(uint32_t nbSteps);
nucleosam 0:0ccd34c56c66 845 void Stspin220_SetDeviceParamsToGivenValues(Stspin220_Init_t* pInitDevicePrm);
nucleosam 0:0ccd34c56c66 846 void Stspin220_SetDeviceParamsOtherValues(void);
nucleosam 0:0ccd34c56c66 847 void Stspin220_SetDeviceParamsToPredefinedValues(void);
nucleosam 0:0ccd34c56c66 848 bool Stspin220_SetStepModeWithoutReset(motorStepMode_t stepMode);
nucleosam 0:0ccd34c56c66 849 void Stspin220_StartMovement(void);
nucleosam 0:0ccd34c56c66 850 void Stspin220_StepClockHandler(void);
nucleosam 0:0ccd34c56c66 851
nucleosam 0:0ccd34c56c66 852 /*** Component's I/O Methods ***/
nucleosam 0:0ccd34c56c66 853
nucleosam 0:0ccd34c56c66 854 /* ACTION 8 --------------------------------------------------------------*
nucleosam 0:0ccd34c56c66 855 * Implement here other I/O methods beyond those already implemented *
nucleosam 0:0ccd34c56c66 856 * above, which are declared extern within the component's header file. *
nucleosam 0:0ccd34c56c66 857 *------------------------------------------------------------------------*/
nucleosam 0:0ccd34c56c66 858 /**
nucleosam 0:0ccd34c56c66 859 * @brief Making the CPU wait.
nucleosam 0:0ccd34c56c66 860 * @param None.
nucleosam 0:0ccd34c56c66 861 * @retval None.
nucleosam 0:0ccd34c56c66 862 */
nucleosam 0:0ccd34c56c66 863 void Stspin220_Board_Delay(uint32_t delay)
nucleosam 0:0ccd34c56c66 864 {
nucleosam 0:0ccd34c56c66 865 wait_ms(delay);
nucleosam 0:0ccd34c56c66 866 }
nucleosam 0:0ccd34c56c66 867
nucleosam 0:0ccd34c56c66 868 /**
nucleosam 0:0ccd34c56c66 869 * @brief Disable the power bridges (leave the output bridges HiZ).
nucleosam 0:0ccd34c56c66 870 * @param None.
nucleosam 0:0ccd34c56c66 871 * @retval None.
nucleosam 0:0ccd34c56c66 872 */
nucleosam 0:0ccd34c56c66 873 void Stspin220_Board_Disable(void)
nucleosam 0:0ccd34c56c66 874 {
nucleosam 0:0ccd34c56c66 875 fault_and_enable.disable_irq();
nucleosam 0:0ccd34c56c66 876 DigitalOut fault_and_enable(fault_and_enable_pinName);
nucleosam 0:0ccd34c56c66 877 fault_and_enable.write(0);
nucleosam 0:0ccd34c56c66 878 }
nucleosam 0:0ccd34c56c66 879
nucleosam 0:0ccd34c56c66 880 /**
nucleosam 0:0ccd34c56c66 881 * @brief Disabling interrupts.
nucleosam 0:0ccd34c56c66 882 * @param None.
nucleosam 0:0ccd34c56c66 883 * @retval None.
nucleosam 0:0ccd34c56c66 884 */
nucleosam 0:0ccd34c56c66 885 void Stspin220_Board_DisableIrq(void)
nucleosam 0:0ccd34c56c66 886 {
nucleosam 0:0ccd34c56c66 887 __disable_irq();
nucleosam 0:0ccd34c56c66 888 }
nucleosam 0:0ccd34c56c66 889
nucleosam 0:0ccd34c56c66 890 /**
nucleosam 0:0ccd34c56c66 891 * @brief Enable the power bridges (leave the output bridges HiZ).
nucleosam 0:0ccd34c56c66 892 * @param None.
nucleosam 0:0ccd34c56c66 893 * @retval None.
nucleosam 0:0ccd34c56c66 894 */
nucleosam 0:0ccd34c56c66 895 void Stspin220_Board_Enable(void)
nucleosam 0:0ccd34c56c66 896 {
nucleosam 0:0ccd34c56c66 897 DigitalOut fault_and_enable_do(fault_and_enable_pinName);
nucleosam 0:0ccd34c56c66 898 fault_and_enable_do.write(1);
nucleosam 0:0ccd34c56c66 899 fault_and_enable.fall(fault_and_enable_irqFunctionPointer);
nucleosam 0:0ccd34c56c66 900 fault_and_enable.mode(PullUp);
nucleosam 0:0ccd34c56c66 901 wait_ms(1);
nucleosam 0:0ccd34c56c66 902 fault_and_enable.enable_irq();
nucleosam 0:0ccd34c56c66 903 }
nucleosam 0:0ccd34c56c66 904
nucleosam 0:0ccd34c56c66 905 /**
nucleosam 0:0ccd34c56c66 906 * @brief Enabling interrupts.
nucleosam 0:0ccd34c56c66 907 * @param None.
nucleosam 0:0ccd34c56c66 908 * @retval None.
nucleosam 0:0ccd34c56c66 909 */
nucleosam 0:0ccd34c56c66 910 void Stspin220_Board_EnableIrq(void)
nucleosam 0:0ccd34c56c66 911 {
nucleosam 0:0ccd34c56c66 912 __enable_irq();
nucleosam 0:0ccd34c56c66 913 }
nucleosam 0:0ccd34c56c66 914
nucleosam 0:0ccd34c56c66 915 /**
nucleosam 0:0ccd34c56c66 916 * @brief Set the duty cycle of the PwmOut used for the REF
nucleosam 0:0ccd34c56c66 917 * reference voltage generation and actually start the pwm if the duty cycle
nucleosam 0:0ccd34c56c66 918 * is not zero.
nucleosam 0:0ccd34c56c66 919 * @param[in] dutyCycle 0 - 100%
nucleosam 0:0ccd34c56c66 920 * @retval None
nucleosam 0:0ccd34c56c66 921 */
nucleosam 0:0ccd34c56c66 922 void Stspin220_Board_PwmRefSetDutyCycle(uint8_t dutyCycle)
nucleosam 0:0ccd34c56c66 923 {
nucleosam 0:0ccd34c56c66 924 pwm_ref.write(((float)(100-dutyCycle))/100);
nucleosam 0:0ccd34c56c66 925 }
nucleosam 0:0ccd34c56c66 926
nucleosam 0:0ccd34c56c66 927 /**
nucleosam 0:0ccd34c56c66 928 * @brief Set the frequency of the PwmOut used for the REF
nucleosam 0:0ccd34c56c66 929 * reference voltage generation.
nucleosam 0:0ccd34c56c66 930 * @param[in] newFreq in Hz.
nucleosam 0:0ccd34c56c66 931 * @retval None.
nucleosam 0:0ccd34c56c66 932 */
nucleosam 0:0ccd34c56c66 933 void Stspin220_Board_PwmRefSetFreq(uint32_t newFreq)
nucleosam 0:0ccd34c56c66 934 {
nucleosam 0:0ccd34c56c66 935 pwm_ref.period_us(1000000.0f/newFreq);
nucleosam 0:0ccd34c56c66 936 }
nucleosam 0:0ccd34c56c66 937
nucleosam 0:0ccd34c56c66 938 /**
nucleosam 0:0ccd34c56c66 939 * @brief Start the PwmOut for the REF pin.
nucleosam 0:0ccd34c56c66 940 * @param[in] frequency frequency of the PwmOut used to generate the REF
nucleosam 0:0ccd34c56c66 941 * reference voltage for the bridges.
nucleosam 0:0ccd34c56c66 942 * @param[in] torqueMode Torque mode as specified in enum motorTorqueMode_t
nucleosam 0:0ccd34c56c66 943 * @retval None.
nucleosam 0:0ccd34c56c66 944 */
nucleosam 0:0ccd34c56c66 945 void Stspin220_Board_PwmRefStart(uint32_t frequency, motorTorqueMode_t torqueMode)
nucleosam 0:0ccd34c56c66 946 {
nucleosam 0:0ccd34c56c66 947 /* Setting the period of the PwmOut. */
nucleosam 0:0ccd34c56c66 948 pwm_ref.period_us(1000000.0f/frequency);
nucleosam 0:0ccd34c56c66 949 /* Setting the duty cycle and actually starting the of the PwmOut. */
nucleosam 0:0ccd34c56c66 950 Stspin220_ApplyTorque(torqueMode);
nucleosam 0:0ccd34c56c66 951 wait_ms(5*PWM_FILTER_TIME_CONSTANT);
nucleosam 0:0ccd34c56c66 952 }
nucleosam 0:0ccd34c56c66 953
nucleosam 0:0ccd34c56c66 954 /**
nucleosam 0:0ccd34c56c66 955 * @brief Exit the device from standby reset mode.
nucleosam 0:0ccd34c56c66 956 * @param None.
nucleosam 0:0ccd34c56c66 957 * @retval None.
nucleosam 0:0ccd34c56c66 958 */
nucleosam 0:0ccd34c56c66 959 void Stspin220_Board_ReleaseReset(void)
nucleosam 0:0ccd34c56c66 960 {
nucleosam 0:0ccd34c56c66 961 stby_reset = 1;
nucleosam 0:0ccd34c56c66 962 }
nucleosam 0:0ccd34c56c66 963
nucleosam 0:0ccd34c56c66 964 /**
nucleosam 0:0ccd34c56c66 965 * @brief Put the device in standby reset mode.
nucleosam 0:0ccd34c56c66 966 * @param None.
nucleosam 0:0ccd34c56c66 967 * @retval None.
nucleosam 0:0ccd34c56c66 968 */
nucleosam 0:0ccd34c56c66 969 void Stspin220_Board_Reset(void)
nucleosam 0:0ccd34c56c66 970 {
nucleosam 0:0ccd34c56c66 971 stby_reset = 0;
nucleosam 0:0ccd34c56c66 972 }
nucleosam 0:0ccd34c56c66 973
nucleosam 0:0ccd34c56c66 974 /**
nucleosam 0:0ccd34c56c66 975 * @brief Set the DIR\MODE4 pin.
nucleosam 0:0ccd34c56c66 976 * @param dir motor direction FORWARD or BACKWARD.
nucleosam 0:0ccd34c56c66 977 * @retval None.
nucleosam 0:0ccd34c56c66 978 */
nucleosam 0:0ccd34c56c66 979 void Stspin220_Board_SetDirectionGpio(motorDir_t dir)
nucleosam 0:0ccd34c56c66 980 {
nucleosam 0:0ccd34c56c66 981 if (dir==BACKWARD) direction_mode4 = 0;
nucleosam 0:0ccd34c56c66 982 else direction_mode4 = 1;
nucleosam 0:0ccd34c56c66 983 }
nucleosam 0:0ccd34c56c66 984
nucleosam 0:0ccd34c56c66 985 /**
nucleosam 0:0ccd34c56c66 986 * @brief Select Full Step mode
nucleosam 0:0ccd34c56c66 987 * @param None.
nucleosam 0:0ccd34c56c66 988 * @retval None
nucleosam 0:0ccd34c56c66 989 */
nucleosam 0:0ccd34c56c66 990 void Stspin220_Board_SetFullStep(void)
nucleosam 0:0ccd34c56c66 991 {
nucleosam 0:0ccd34c56c66 992 mode1 = 0;
nucleosam 0:0ccd34c56c66 993 mode2 = 0;
nucleosam 0:0ccd34c56c66 994 }
nucleosam 0:0ccd34c56c66 995
nucleosam 0:0ccd34c56c66 996 /**
nucleosam 0:0ccd34c56c66 997 * @brief Select the STSPIN220 mode1, mode2, mode3 and mode4 pins levels.
nucleosam 0:0ccd34c56c66 998 * @param[in] modePin1Level level of the mode1 gpio (0 low, 1+ high)
nucleosam 0:0ccd34c56c66 999 * @param[in] modePin2Level level of the mode2 gpio (0 low, 1+ high)
nucleosam 0:0ccd34c56c66 1000 * @param[in] modePin3Level level of the mode3 gpio (0 low, 1+ high)
nucleosam 0:0ccd34c56c66 1001 * @param[in] modePin4Level level of the mode4 gpio (0 low, 1+ high)
nucleosam 0:0ccd34c56c66 1002 * @retval 1
nucleosam 0:0ccd34c56c66 1003 */
nucleosam 0:0ccd34c56c66 1004 uint8_t Stspin220_Board_SetModePins(uint8_t modePin1Level,\
nucleosam 0:0ccd34c56c66 1005 uint8_t modePin2Level,\
nucleosam 0:0ccd34c56c66 1006 uint8_t modePin3Level,\
nucleosam 0:0ccd34c56c66 1007 uint8_t modePin4Level)
nucleosam 0:0ccd34c56c66 1008 {
nucleosam 0:0ccd34c56c66 1009 mode1 = modePin1Level;
nucleosam 0:0ccd34c56c66 1010 mode2 = modePin2Level;
nucleosam 0:0ccd34c56c66 1011 stck_mode3 = modePin3Level;
nucleosam 0:0ccd34c56c66 1012 direction_mode4 = modePin4Level;
nucleosam 0:0ccd34c56c66 1013 return 1;
nucleosam 0:0ccd34c56c66 1014 }
nucleosam 0:0ccd34c56c66 1015
nucleosam 0:0ccd34c56c66 1016 /**
nucleosam 0:0ccd34c56c66 1017 * @brief Reset the STCK\MODE3 pin.
nucleosam 0:0ccd34c56c66 1018 * @param None.
nucleosam 0:0ccd34c56c66 1019 * @retval None.
nucleosam 0:0ccd34c56c66 1020 */
nucleosam 0:0ccd34c56c66 1021 void Stspin220_Board_StckMode3_Reset(void)
nucleosam 0:0ccd34c56c66 1022 {
nucleosam 0:0ccd34c56c66 1023 stck_mode3 = 0;
nucleosam 0:0ccd34c56c66 1024 }
nucleosam 0:0ccd34c56c66 1025
nucleosam 0:0ccd34c56c66 1026 /**
nucleosam 0:0ccd34c56c66 1027 * @brief Set the STCK\MODE3 pin.
nucleosam 0:0ccd34c56c66 1028 * @param None.
nucleosam 0:0ccd34c56c66 1029 * @retval None.
nucleosam 0:0ccd34c56c66 1030 */
nucleosam 0:0ccd34c56c66 1031 void Stspin220_Board_StckMode3_Set(void)
nucleosam 0:0ccd34c56c66 1032 {
nucleosam 0:0ccd34c56c66 1033 stck_mode3 = 1;
nucleosam 0:0ccd34c56c66 1034 }
nucleosam 0:0ccd34c56c66 1035
nucleosam 0:0ccd34c56c66 1036 /**
nucleosam 0:0ccd34c56c66 1037 * @brief Initialises the step clock pin level
nucleosam 0:0ccd34c56c66 1038 * @param None.
nucleosam 0:0ccd34c56c66 1039 * @retval None
nucleosam 0:0ccd34c56c66 1040 */
nucleosam 0:0ccd34c56c66 1041 void Stspin220_Board_TimStckInit(bool check)
nucleosam 0:0ccd34c56c66 1042 {
nucleosam 0:0ccd34c56c66 1043 if (monitor.is_connected()) monitor = 0;
nucleosam 0:0ccd34c56c66 1044 if (check==false) stck_mode3 = 0;
nucleosam 0:0ccd34c56c66 1045 else if (stck_mode3==1) Stspin220_ErrorHandler(STSPIN220_ERROR_STEP_CLOCK);
nucleosam 0:0ccd34c56c66 1046 }
nucleosam 0:0ccd34c56c66 1047
nucleosam 0:0ccd34c56c66 1048 /**
nucleosam 0:0ccd34c56c66 1049 * @brief Setting the Stck Timeout delay
nucleosam 0:0ccd34c56c66 1050 * and attaching a callback function to it.
nucleosam 0:0ccd34c56c66 1051 * @param frequency The frequency corresponding to the delay.
nucleosam 0:0ccd34c56c66 1052 * @retval None.
nucleosam 0:0ccd34c56c66 1053 */
nucleosam 0:0ccd34c56c66 1054 void Stspin220_Board_TimStckSetFreq(uint16_t newFreq)
nucleosam 0:0ccd34c56c66 1055 {
nucleosam 0:0ccd34c56c66 1056 /* Computing the delay of the Timeout. */
nucleosam 0:0ccd34c56c66 1057 float delay_us = (1000000.0f / 2 )/ newFreq;
nucleosam 0:0ccd34c56c66 1058
nucleosam 0:0ccd34c56c66 1059 /* Attaching a function which updates */
nucleosam 0:0ccd34c56c66 1060 /* the state machine after the elapsed period_us time. */
nucleosam 0:0ccd34c56c66 1061 tim_stck.attach_us(this, &STSPIN220::Stspin220_StepClockHandler, delay_us);
nucleosam 0:0ccd34c56c66 1062 }
nucleosam 0:0ccd34c56c66 1063
nucleosam 0:0ccd34c56c66 1064 void Stspin220_Board_Monitor_Set(void)
nucleosam 0:0ccd34c56c66 1065 {
nucleosam 0:0ccd34c56c66 1066 if (monitor.is_connected()) monitor = 1;
nucleosam 0:0ccd34c56c66 1067 }
nucleosam 0:0ccd34c56c66 1068
nucleosam 0:0ccd34c56c66 1069 void Stspin220_Board_Monitor_Reset(void)
nucleosam 0:0ccd34c56c66 1070 {
nucleosam 0:0ccd34c56c66 1071 if (monitor.is_connected()) monitor = 0;
nucleosam 0:0ccd34c56c66 1072 }
nucleosam 0:0ccd34c56c66 1073
nucleosam 0:0ccd34c56c66 1074 /**
nucleosam 0:0ccd34c56c66 1075 * @brief Stopping the Timeout.
nucleosam 0:0ccd34c56c66 1076 * @param None.
nucleosam 0:0ccd34c56c66 1077 * @retval None.
nucleosam 0:0ccd34c56c66 1078 */
nucleosam 0:0ccd34c56c66 1079 uint8_t Stspin220_Board_TimStckStop(volatile uint8_t *pToggleOdd)
nucleosam 0:0ccd34c56c66 1080 {
nucleosam 0:0ccd34c56c66 1081 __disable_irq();
nucleosam 0:0ccd34c56c66 1082 if (*pToggleOdd == 1)
nucleosam 0:0ccd34c56c66 1083 {
nucleosam 0:0ccd34c56c66 1084 __enable_irq();
nucleosam 0:0ccd34c56c66 1085 return 1;
nucleosam 0:0ccd34c56c66 1086 }
nucleosam 0:0ccd34c56c66 1087 if (stck_mode3 != 0)
nucleosam 0:0ccd34c56c66 1088 {
nucleosam 0:0ccd34c56c66 1089 __enable_irq();
nucleosam 0:0ccd34c56c66 1090 return 0;
nucleosam 0:0ccd34c56c66 1091 }
nucleosam 0:0ccd34c56c66 1092 tim_stck.detach();
nucleosam 1:0c33082063bc 1093 __enable_irq();
nucleosam 0:0ccd34c56c66 1094 return 1;
nucleosam 0:0ccd34c56c66 1095 }
nucleosam 0:0ccd34c56c66 1096
nucleosam 0:0ccd34c56c66 1097 /**
nucleosam 0:0ccd34c56c66 1098 * @brief Unselect Full Step mode
nucleosam 0:0ccd34c56c66 1099 * @param None.
nucleosam 0:0ccd34c56c66 1100 * @retval None
nucleosam 0:0ccd34c56c66 1101 */
nucleosam 0:0ccd34c56c66 1102 void Stspin220_Board_UnsetFullStep(void)
nucleosam 0:0ccd34c56c66 1103 {
nucleosam 0:0ccd34c56c66 1104 mode1 = 1;
nucleosam 0:0ccd34c56c66 1105 }
nucleosam 0:0ccd34c56c66 1106
nucleosam 0:0ccd34c56c66 1107 protected:
nucleosam 0:0ccd34c56c66 1108
nucleosam 0:0ccd34c56c66 1109 /*** Component's Instance Variables ***/
nucleosam 0:0ccd34c56c66 1110
nucleosam 0:0ccd34c56c66 1111 /* ACTION 9 --------------------------------------------------------------*
nucleosam 0:0ccd34c56c66 1112 * Declare here interrupt related variables, if needed. *
nucleosam 0:0ccd34c56c66 1113 * Note that interrupt handling is platform dependent, see *
nucleosam 0:0ccd34c56c66 1114 * "Interrupt Related Methods" above. *
nucleosam 0:0ccd34c56c66 1115 * *
nucleosam 0:0ccd34c56c66 1116 * Example: *
nucleosam 0:0ccd34c56c66 1117 * + mbed: *
nucleosam 0:0ccd34c56c66 1118 * InterruptIn feature_irq; *
nucleosam 0:0ccd34c56c66 1119 *------------------------------------------------------------------------*/
nucleosam 0:0ccd34c56c66 1120 /* Fault Interrupt and chip enable. */
nucleosam 0:0ccd34c56c66 1121 InterruptIn fault_and_enable;
nucleosam 0:0ccd34c56c66 1122
nucleosam 0:0ccd34c56c66 1123 /* Interrupt to toggle the MODE3\STCK pin */
nucleosam 0:0ccd34c56c66 1124 Timeout tim_stck;
nucleosam 0:0ccd34c56c66 1125
nucleosam 0:0ccd34c56c66 1126 /* ACTION 10 -------------------------------------------------------------*
nucleosam 0:0ccd34c56c66 1127 * Declare here other pin related variables, if needed. *
nucleosam 0:0ccd34c56c66 1128 * *
nucleosam 0:0ccd34c56c66 1129 * Example: *
nucleosam 0:0ccd34c56c66 1130 * + mbed: *
nucleosam 0:0ccd34c56c66 1131 * DigitalOut standby_reset; *
nucleosam 0:0ccd34c56c66 1132 *------------------------------------------------------------------------*/
nucleosam 0:0ccd34c56c66 1133 /* STBY\RESET pin. */
nucleosam 0:0ccd34c56c66 1134 DigitalOut stby_reset;
nucleosam 0:0ccd34c56c66 1135 /* MODE4\DIR pin. */
nucleosam 0:0ccd34c56c66 1136 DigitalOut direction_mode4;
nucleosam 0:0ccd34c56c66 1137 /* MODE1 pin */
nucleosam 0:0ccd34c56c66 1138 DigitalOut mode1;
nucleosam 0:0ccd34c56c66 1139 /* MODE2 pin */
nucleosam 0:0ccd34c56c66 1140 DigitalOut mode2;
nucleosam 0:0ccd34c56c66 1141 /* MODE3\STCK pin. */
nucleosam 0:0ccd34c56c66 1142 DigitalOut stck_mode3;
nucleosam 0:0ccd34c56c66 1143
nucleosam 0:0ccd34c56c66 1144 /* Pulse Width Modulation pin for REF pin */
nucleosam 0:0ccd34c56c66 1145 PwmOut pwm_ref;
nucleosam 0:0ccd34c56c66 1146
nucleosam 0:0ccd34c56c66 1147 /* Monitoring of step clock handler duration */
nucleosam 0:0ccd34c56c66 1148 DigitalOut monitor;
nucleosam 0:0ccd34c56c66 1149
nucleosam 0:0ccd34c56c66 1150 /* fault and enable pin */
nucleosam 0:0ccd34c56c66 1151 PinName fault_and_enable_pinName;
nucleosam 0:0ccd34c56c66 1152
nucleosam 0:0ccd34c56c66 1153 /* ACTION 11 -------------------------------------------------------------*
nucleosam 0:0ccd34c56c66 1154 * Declare here communication related variables, if needed. *
nucleosam 0:0ccd34c56c66 1155 * *
nucleosam 0:0ccd34c56c66 1156 * Example: *
nucleosam 0:0ccd34c56c66 1157 * + mbed: *
nucleosam 0:0ccd34c56c66 1158 * DigitalOut ssel; *
nucleosam 0:0ccd34c56c66 1159 * DevSPI &dev_spi; *
nucleosam 0:0ccd34c56c66 1160 *------------------------------------------------------------------------*/
nucleosam 0:0ccd34c56c66 1161 /* Configuration. */
nucleosam 0:0ccd34c56c66 1162
nucleosam 0:0ccd34c56c66 1163 /* IO Device. */
nucleosam 0:0ccd34c56c66 1164
nucleosam 0:0ccd34c56c66 1165 /* ACTION 12 -------------------------------------------------------------*
nucleosam 0:0ccd34c56c66 1166 * Declare here identity related variables, if needed. *
nucleosam 0:0ccd34c56c66 1167 * Note that there should be only a unique identifier for each component, *
nucleosam 0:0ccd34c56c66 1168 * which should be the "who_am_i" parameter. *
nucleosam 0:0ccd34c56c66 1169 *------------------------------------------------------------------------*/
nucleosam 0:0ccd34c56c66 1170 /* Identity */
nucleosam 0:0ccd34c56c66 1171 uint8_t who_am_i;
nucleosam 0:0ccd34c56c66 1172
nucleosam 0:0ccd34c56c66 1173 /* ACTION 13 -------------------------------------------------------------*
nucleosam 0:0ccd34c56c66 1174 * Declare here the component's static and non-static data, one variable *
nucleosam 0:0ccd34c56c66 1175 * per line. *
nucleosam 0:0ccd34c56c66 1176 * *
nucleosam 0:0ccd34c56c66 1177 * Example: *
nucleosam 0:0ccd34c56c66 1178 * float measure; *
nucleosam 0:0ccd34c56c66 1179 * int instance_id; *
nucleosam 0:0ccd34c56c66 1180 * static int number_of_instances; *
nucleosam 0:0ccd34c56c66 1181 *------------------------------------------------------------------------*/
nucleosam 0:0ccd34c56c66 1182 /* Data. */
nucleosam 0:0ccd34c56c66 1183 void (*fault_and_enable_irqFunctionPointer)(void);
nucleosam 0:0ccd34c56c66 1184 void (*errorHandlerCallback)(uint16_t error);
nucleosam 0:0ccd34c56c66 1185 deviceParams_t devicePrm;
nucleosam 0:0ccd34c56c66 1186 uint8_t deviceInstance;
nucleosam 0:0ccd34c56c66 1187 volatile uint8_t toggleOdd;
nucleosam 0:0ccd34c56c66 1188
nucleosam 0:0ccd34c56c66 1189 /* Static data. */
nucleosam 0:0ccd34c56c66 1190 static uint8_t numberOfDevices;
nucleosam 0:0ccd34c56c66 1191
nucleosam 0:0ccd34c56c66 1192 public:
nucleosam 0:0ccd34c56c66 1193
nucleosam 0:0ccd34c56c66 1194 /* Static data. */
nucleosam 0:0ccd34c56c66 1195
nucleosam 0:0ccd34c56c66 1196 };
nucleosam 0:0ccd34c56c66 1197
nucleosam 0:0ccd34c56c66 1198 #endif // __STSPIN220_CLASS_H
nucleosam 0:0ccd34c56c66 1199
nucleosam 0:0ccd34c56c66 1200 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/