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

Dependencies:   ST_INTERFACES

Dependents:   HelloWorld_IHM06A1

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

Motor Control Library

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

It features the:

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

The API allows to easily:

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

Platform compatibility

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

Committer:
Davidroid
Date:
Fri Jul 28 13:28:00 2017 +0000
Revision:
5:fd1315beea32
Parent:
4:265c30b9112a
Aligning to ARM mbed coding style.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
davide.aliprandi@st.com 3:a132aa6d66e4 1 /**
davide.aliprandi@st.com 3:a132aa6d66e4 2 ******************************************************************************
Davidroid 4:265c30b9112a 3 * @file STSpin220.h
davide.aliprandi@st.com 3:a132aa6d66e4 4 * @author IPC Rennes
davide.aliprandi@st.com 3:a132aa6d66e4 5 * @version V1.0.0
davide.aliprandi@st.com 3:a132aa6d66e4 6 * @date July 27th, 2016
davide.aliprandi@st.com 3:a132aa6d66e4 7 * @brief This file contains the class of a STSpin220 Motor Control component.
davide.aliprandi@st.com 3:a132aa6d66e4 8 * @note (C) COPYRIGHT 2016 STMicroelectronics
davide.aliprandi@st.com 3:a132aa6d66e4 9 ******************************************************************************
davide.aliprandi@st.com 3:a132aa6d66e4 10 * @attention
davide.aliprandi@st.com 3:a132aa6d66e4 11 *
davide.aliprandi@st.com 3:a132aa6d66e4 12 * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>
davide.aliprandi@st.com 3:a132aa6d66e4 13 *
davide.aliprandi@st.com 3:a132aa6d66e4 14 * Redistribution and use in source and binary forms, with or without modification,
davide.aliprandi@st.com 3:a132aa6d66e4 15 * are permitted provided that the following conditions are met:
davide.aliprandi@st.com 3:a132aa6d66e4 16 * 1. Redistributions of source code must retain the above copyright notice,
davide.aliprandi@st.com 3:a132aa6d66e4 17 * this list of conditions and the following disclaimer.
davide.aliprandi@st.com 3:a132aa6d66e4 18 * 2. Redistributions in binary form must reproduce the above copyright notice,
davide.aliprandi@st.com 3:a132aa6d66e4 19 * this list of conditions and the following disclaimer in the documentation
davide.aliprandi@st.com 3:a132aa6d66e4 20 * and/or other materials provided with the distribution.
davide.aliprandi@st.com 3:a132aa6d66e4 21 * 3. Neither the name of STMicroelectronics nor the names of its contributors
davide.aliprandi@st.com 3:a132aa6d66e4 22 * may be used to endorse or promote products derived from this software
davide.aliprandi@st.com 3:a132aa6d66e4 23 * without specific prior written permission.
davide.aliprandi@st.com 3:a132aa6d66e4 24 *
davide.aliprandi@st.com 3:a132aa6d66e4 25 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
davide.aliprandi@st.com 3:a132aa6d66e4 26 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
davide.aliprandi@st.com 3:a132aa6d66e4 27 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
davide.aliprandi@st.com 3:a132aa6d66e4 28 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
davide.aliprandi@st.com 3:a132aa6d66e4 29 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
davide.aliprandi@st.com 3:a132aa6d66e4 30 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
davide.aliprandi@st.com 3:a132aa6d66e4 31 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
davide.aliprandi@st.com 3:a132aa6d66e4 32 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
davide.aliprandi@st.com 3:a132aa6d66e4 33 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
davide.aliprandi@st.com 3:a132aa6d66e4 34 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
davide.aliprandi@st.com 3:a132aa6d66e4 35 *
davide.aliprandi@st.com 3:a132aa6d66e4 36 ******************************************************************************
davide.aliprandi@st.com 3:a132aa6d66e4 37 */
davide.aliprandi@st.com 3:a132aa6d66e4 38
nucleosam 0:0ccd34c56c66 39
nucleosam 0:0ccd34c56c66 40 /* Define to prevent recursive inclusion -------------------------------------*/
nucleosam 0:0ccd34c56c66 41
davide.aliprandi@st.com 3:a132aa6d66e4 42 #ifndef __STSPIN220_CLASS_H
davide.aliprandi@st.com 3:a132aa6d66e4 43 #define __STSPIN220_CLASS_H
davide.aliprandi@st.com 3:a132aa6d66e4 44
nucleosam 0:0ccd34c56c66 45
nucleosam 0:0ccd34c56c66 46 /* Includes ------------------------------------------------------------------*/
nucleosam 0:0ccd34c56c66 47
davide.aliprandi@st.com 3:a132aa6d66e4 48 /* ACTION 1 ------------------------------------------------------------------*
davide.aliprandi@st.com 3:a132aa6d66e4 49 * Include here platform specific header files. *
davide.aliprandi@st.com 3:a132aa6d66e4 50 *----------------------------------------------------------------------------*/
davide.aliprandi@st.com 3:a132aa6d66e4 51 #include "mbed.h"
nucleosam 0:0ccd34c56c66 52
davide.aliprandi@st.com 3:a132aa6d66e4 53 /* ACTION 2 ------------------------------------------------------------------*
davide.aliprandi@st.com 3:a132aa6d66e4 54 * Include here component specific header files. *
davide.aliprandi@st.com 3:a132aa6d66e4 55 *----------------------------------------------------------------------------*/
Davidroid 4:265c30b9112a 56 #include "STSpin220_def.h"
davide.aliprandi@st.com 3:a132aa6d66e4 57 /* ACTION 3 ------------------------------------------------------------------*
davide.aliprandi@st.com 3:a132aa6d66e4 58 * Include here interface specific header files. *
davide.aliprandi@st.com 3:a132aa6d66e4 59 * *
davide.aliprandi@st.com 3:a132aa6d66e4 60 * Example: *
davide.aliprandi@st.com 3:a132aa6d66e4 61 * #include "HumiditySensor.h" *
davide.aliprandi@st.com 3:a132aa6d66e4 62 * #include "TemperatureSensor.h" *
davide.aliprandi@st.com 3:a132aa6d66e4 63 *----------------------------------------------------------------------------*/
davide.aliprandi@st.com 3:a132aa6d66e4 64 #include "StepperMotor.h"
nucleosam 0:0ccd34c56c66 65
nucleosam 0:0ccd34c56c66 66
davide.aliprandi@st.com 3:a132aa6d66e4 67 /* Classes -------------------------------------------------------------------*/
nucleosam 0:0ccd34c56c66 68
nucleosam 0:0ccd34c56c66 69 /**
davide.aliprandi@st.com 3:a132aa6d66e4 70 * @brief Class representing a STSpin220 component.
davide.aliprandi@st.com 3:a132aa6d66e4 71 */
davide.aliprandi@st.com 3:a132aa6d66e4 72 class STSpin220 : public StepperMotor
davide.aliprandi@st.com 3:a132aa6d66e4 73 {
davide.aliprandi@st.com 3:a132aa6d66e4 74 public:
davide.aliprandi@st.com 3:a132aa6d66e4 75 /*** Constructor and Destructor Methods ***/
davide.aliprandi@st.com 3:a132aa6d66e4 76 /**
davide.aliprandi@st.com 3:a132aa6d66e4 77 * @brief Constructor.
davide.aliprandi@st.com 3:a132aa6d66e4 78 * @param fault_and_enable_pin pin name of the EN\FAULT pin of the component.
davide.aliprandi@st.com 3:a132aa6d66e4 79 * @param stby_reset_pin pin name of the STBY\RESET pin of the component.
davide.aliprandi@st.com 3:a132aa6d66e4 80 * @param direction_mode4_pin pin name of the MODE4\DIR pin of the component.
davide.aliprandi@st.com 3:a132aa6d66e4 81 * @param mode1_pin pin name of the MODE1 pin of the component.
davide.aliprandi@st.com 3:a132aa6d66e4 82 * @param mode2_pin pin name of the MODE2 pin of the component.
davide.aliprandi@st.com 3:a132aa6d66e4 83 * @param stck_mode3_pin pin name of the MODE3\STCK pin of the component.
davide.aliprandi@st.com 3:a132aa6d66e4 84 * @param pwm_ref_pin pin name of the PWM connected to the REF pin of the component.
davide.aliprandi@st.com 3:a132aa6d66e4 85 * @param Monitor_pin pin name for the step clock handler duration Monitoring.
davide.aliprandi@st.com 3:a132aa6d66e4 86 */
davide.aliprandi@st.com 3:a132aa6d66e4 87 STSpin220(PinName fault_and_enable_pin,
davide.aliprandi@st.com 3:a132aa6d66e4 88 PinName stby_reset_pin,
davide.aliprandi@st.com 3:a132aa6d66e4 89 PinName direction_mode4_pin,
davide.aliprandi@st.com 3:a132aa6d66e4 90 PinName mode1_pin,
davide.aliprandi@st.com 3:a132aa6d66e4 91 PinName mode2_pin,
davide.aliprandi@st.com 3:a132aa6d66e4 92 PinName stck_mode3_pin,
davide.aliprandi@st.com 3:a132aa6d66e4 93 PinName pwm_ref_pin,
davide.aliprandi@st.com 3:a132aa6d66e4 94 PinName monitor_pin = NC) : StepperMotor(),
davide.aliprandi@st.com 3:a132aa6d66e4 95 fault_and_enable(fault_and_enable_pin),
davide.aliprandi@st.com 3:a132aa6d66e4 96 stby_reset(stby_reset_pin),
davide.aliprandi@st.com 3:a132aa6d66e4 97 direction_mode4(direction_mode4_pin),
davide.aliprandi@st.com 3:a132aa6d66e4 98 mode1(mode1_pin),
davide.aliprandi@st.com 3:a132aa6d66e4 99 mode2(mode2_pin),
davide.aliprandi@st.com 3:a132aa6d66e4 100 stck_mode3(stck_mode3_pin),
davide.aliprandi@st.com 3:a132aa6d66e4 101 pwm_ref(pwm_ref_pin),
davide.aliprandi@st.com 3:a132aa6d66e4 102 monitor(monitor_pin)
davide.aliprandi@st.com 3:a132aa6d66e4 103 {
davide.aliprandi@st.com 3:a132aa6d66e4 104 /* Checking stackability. */
davide.aliprandi@st.com 3:a132aa6d66e4 105 if (numberOfDevices!=0)
Davidroid 5:fd1315beea32 106 {
davide.aliprandi@st.com 3:a132aa6d66e4 107 error("Instantiation of the STSpin220 component failed: it can't be stacked on itself.\r\n");
Davidroid 5:fd1315beea32 108 }
davide.aliprandi@st.com 3:a132aa6d66e4 109
davide.aliprandi@st.com 3:a132aa6d66e4 110 /* ACTION 4 ----------------------------------------------------------*
davide.aliprandi@st.com 3:a132aa6d66e4 111 * Initialize here the component's member variables, one variable per *
davide.aliprandi@st.com 3:a132aa6d66e4 112 * line. *
davide.aliprandi@st.com 3:a132aa6d66e4 113 * *
davide.aliprandi@st.com 3:a132aa6d66e4 114 * Example: *
davide.aliprandi@st.com 3:a132aa6d66e4 115 * measure = 0; *
davide.aliprandi@st.com 3:a132aa6d66e4 116 * instance_id = number_of_instances++; *
davide.aliprandi@st.com 3:a132aa6d66e4 117 *--------------------------------------------------------------------*/
davide.aliprandi@st.com 3:a132aa6d66e4 118 errorHandlerCallback = 0;
davide.aliprandi@st.com 3:a132aa6d66e4 119 memset(&devicePrm, 0, sizeof(devicePrm));
davide.aliprandi@st.com 3:a132aa6d66e4 120 deviceInstance = numberOfDevices++;
davide.aliprandi@st.com 3:a132aa6d66e4 121
davide.aliprandi@st.com 3:a132aa6d66e4 122 fault_and_enable_pinName = fault_and_enable_pin;
davide.aliprandi@st.com 3:a132aa6d66e4 123 }
davide.aliprandi@st.com 3:a132aa6d66e4 124
davide.aliprandi@st.com 3:a132aa6d66e4 125 /**
davide.aliprandi@st.com 3:a132aa6d66e4 126 * @brief Destructor.
davide.aliprandi@st.com 3:a132aa6d66e4 127 */
davide.aliprandi@st.com 3:a132aa6d66e4 128 virtual ~STSpin220(void) {}
davide.aliprandi@st.com 3:a132aa6d66e4 129
davide.aliprandi@st.com 3:a132aa6d66e4 130
davide.aliprandi@st.com 3:a132aa6d66e4 131 /*** Public Component Related Methods ***/
davide.aliprandi@st.com 3:a132aa6d66e4 132
davide.aliprandi@st.com 3:a132aa6d66e4 133 /* ACTION 5 --------------------------------------------------------------*
davide.aliprandi@st.com 3:a132aa6d66e4 134 * Implement here the component's public methods, as wrappers of the C *
davide.aliprandi@st.com 3:a132aa6d66e4 135 * component's functions. *
davide.aliprandi@st.com 3:a132aa6d66e4 136 * They should be: *
davide.aliprandi@st.com 3:a132aa6d66e4 137 * + Methods with the same name of the C component's virtual table's *
davide.aliprandi@st.com 3:a132aa6d66e4 138 * functions (1); *
davide.aliprandi@st.com 3:a132aa6d66e4 139 * + Methods with the same name of the C component's extended virtual *
davide.aliprandi@st.com 3:a132aa6d66e4 140 * table's functions, if any (2). *
davide.aliprandi@st.com 3:a132aa6d66e4 141 * *
davide.aliprandi@st.com 3:a132aa6d66e4 142 * Example: *
Davidroid 4:265c30b9112a 143 * virtual int get_value(float *pData) //(1) *
davide.aliprandi@st.com 3:a132aa6d66e4 144 * { *
Davidroid 4:265c30b9112a 145 * return COMPONENT_get_value(float *pfData); *
davide.aliprandi@st.com 3:a132aa6d66e4 146 * } *
davide.aliprandi@st.com 3:a132aa6d66e4 147 * *
Davidroid 4:265c30b9112a 148 * virtual int enable_feature(void) //(2) *
davide.aliprandi@st.com 3:a132aa6d66e4 149 * { *
Davidroid 4:265c30b9112a 150 * return COMPONENT_enable_feature(); *
davide.aliprandi@st.com 3:a132aa6d66e4 151 * } *
davide.aliprandi@st.com 3:a132aa6d66e4 152 *------------------------------------------------------------------------*/
davide.aliprandi@st.com 3:a132aa6d66e4 153
davide.aliprandi@st.com 3:a132aa6d66e4 154 /**
davide.aliprandi@st.com 3:a132aa6d66e4 155 * @brief Public functions inherited from the Component Class
davide.aliprandi@st.com 3:a132aa6d66e4 156 */
davide.aliprandi@st.com 3:a132aa6d66e4 157
davide.aliprandi@st.com 3:a132aa6d66e4 158 /**
davide.aliprandi@st.com 3:a132aa6d66e4 159 * @brief Initialize the component.
davide.aliprandi@st.com 3:a132aa6d66e4 160 * @param init Pointer to device specific initalization structure.
davide.aliprandi@st.com 3:a132aa6d66e4 161 * @retval "0" in case of success, an error code otherwise.
davide.aliprandi@st.com 3:a132aa6d66e4 162 */
davide.aliprandi@st.com 3:a132aa6d66e4 163 virtual int init(void *init = NULL)
davide.aliprandi@st.com 3:a132aa6d66e4 164 {
Davidroid 4:265c30b9112a 165 return (int) STSpin220_Init((void *) init);
davide.aliprandi@st.com 3:a132aa6d66e4 166 }
davide.aliprandi@st.com 3:a132aa6d66e4 167
davide.aliprandi@st.com 3:a132aa6d66e4 168 /**
davide.aliprandi@st.com 3:a132aa6d66e4 169 * @brief Getting the ID of the component.
davide.aliprandi@st.com 3:a132aa6d66e4 170 * @param id Pointer to an allocated variable to store the ID into.
davide.aliprandi@st.com 3:a132aa6d66e4 171 * @retval "0" in case of success, an error code otherwise.
davide.aliprandi@st.com 3:a132aa6d66e4 172 */
davide.aliprandi@st.com 3:a132aa6d66e4 173 virtual int read_id(uint8_t *id = NULL)
davide.aliprandi@st.com 3:a132aa6d66e4 174 {
Davidroid 4:265c30b9112a 175 return (int) STSpin220_ReadID((uint8_t *) id);
davide.aliprandi@st.com 3:a132aa6d66e4 176 }
davide.aliprandi@st.com 3:a132aa6d66e4 177
davide.aliprandi@st.com 3:a132aa6d66e4 178 /**
davide.aliprandi@st.com 3:a132aa6d66e4 179 * @brief Public functions inherited from the StepperMotor Class
davide.aliprandi@st.com 3:a132aa6d66e4 180 */
davide.aliprandi@st.com 3:a132aa6d66e4 181
davide.aliprandi@st.com 3:a132aa6d66e4 182 /**
davide.aliprandi@st.com 3:a132aa6d66e4 183 * @brief Getting the value of the motor state .
davide.aliprandi@st.com 3:a132aa6d66e4 184 * @param None.
davide.aliprandi@st.com 3:a132aa6d66e4 185 * @retval The motor state accoring to motorState_t in motor.h
davide.aliprandi@st.com 3:a132aa6d66e4 186 */
davide.aliprandi@st.com 3:a132aa6d66e4 187 virtual unsigned int get_status(void)
davide.aliprandi@st.com 3:a132aa6d66e4 188 {
Davidroid 4:265c30b9112a 189 return (unsigned int) STSpin220_get_device_state();
davide.aliprandi@st.com 3:a132aa6d66e4 190 }
davide.aliprandi@st.com 3:a132aa6d66e4 191
davide.aliprandi@st.com 3:a132aa6d66e4 192 /**
davide.aliprandi@st.com 3:a132aa6d66e4 193 * @brief Getting the position.
davide.aliprandi@st.com 3:a132aa6d66e4 194 * @param None.
davide.aliprandi@st.com 3:a132aa6d66e4 195 * @retval The position.
davide.aliprandi@st.com 3:a132aa6d66e4 196 */
davide.aliprandi@st.com 3:a132aa6d66e4 197 virtual signed int get_position(void)
davide.aliprandi@st.com 3:a132aa6d66e4 198 {
Davidroid 4:265c30b9112a 199 return (signed int)STSpin220_GetPosition();
davide.aliprandi@st.com 3:a132aa6d66e4 200 }
davide.aliprandi@st.com 3:a132aa6d66e4 201
davide.aliprandi@st.com 3:a132aa6d66e4 202 /**
davide.aliprandi@st.com 3:a132aa6d66e4 203 * @brief Getting the marked position.
davide.aliprandi@st.com 3:a132aa6d66e4 204 * @param None.
davide.aliprandi@st.com 3:a132aa6d66e4 205 * @retval The marked position.
davide.aliprandi@st.com 3:a132aa6d66e4 206 */
davide.aliprandi@st.com 3:a132aa6d66e4 207 virtual signed int get_mark(void)
davide.aliprandi@st.com 3:a132aa6d66e4 208 {
Davidroid 4:265c30b9112a 209 return (signed int)STSpin220_GetMark();
davide.aliprandi@st.com 3:a132aa6d66e4 210 }
davide.aliprandi@st.com 3:a132aa6d66e4 211
davide.aliprandi@st.com 3:a132aa6d66e4 212 /**
davide.aliprandi@st.com 3:a132aa6d66e4 213 * @brief Getting the current speed in pps.
davide.aliprandi@st.com 3:a132aa6d66e4 214 * @param None.
davide.aliprandi@st.com 3:a132aa6d66e4 215 * @retval The current speed in pps.
davide.aliprandi@st.com 3:a132aa6d66e4 216 */
davide.aliprandi@st.com 3:a132aa6d66e4 217 virtual unsigned int get_speed(void)
davide.aliprandi@st.com 3:a132aa6d66e4 218 {
Davidroid 4:265c30b9112a 219 return (unsigned int)STSpin220_GetCurrentSpeed();
davide.aliprandi@st.com 3:a132aa6d66e4 220 }
davide.aliprandi@st.com 3:a132aa6d66e4 221
davide.aliprandi@st.com 3:a132aa6d66e4 222 /**
davide.aliprandi@st.com 3:a132aa6d66e4 223 * @brief Getting the maximum speed in pps.
davide.aliprandi@st.com 3:a132aa6d66e4 224 * @param None.
davide.aliprandi@st.com 3:a132aa6d66e4 225 * @retval The maximum speed in pps.
davide.aliprandi@st.com 3:a132aa6d66e4 226 */
davide.aliprandi@st.com 3:a132aa6d66e4 227 virtual unsigned int get_max_speed(void)
davide.aliprandi@st.com 3:a132aa6d66e4 228 {
Davidroid 4:265c30b9112a 229 return (unsigned int)STSpin220_GetMaxSpeed();
davide.aliprandi@st.com 3:a132aa6d66e4 230 }
davide.aliprandi@st.com 3:a132aa6d66e4 231
davide.aliprandi@st.com 3:a132aa6d66e4 232 /**
davide.aliprandi@st.com 3:a132aa6d66e4 233 * @brief Getting the minimum speed in pps.
davide.aliprandi@st.com 3:a132aa6d66e4 234 * @param None.
davide.aliprandi@st.com 3:a132aa6d66e4 235 * @retval The minimum speed in pps.
davide.aliprandi@st.com 3:a132aa6d66e4 236 */
davide.aliprandi@st.com 3:a132aa6d66e4 237 virtual unsigned int get_min_speed(void)
davide.aliprandi@st.com 3:a132aa6d66e4 238 {
Davidroid 4:265c30b9112a 239 return (unsigned int)STSpin220_GetMinSpeed();
davide.aliprandi@st.com 3:a132aa6d66e4 240 }
davide.aliprandi@st.com 3:a132aa6d66e4 241
davide.aliprandi@st.com 3:a132aa6d66e4 242 /**
davide.aliprandi@st.com 3:a132aa6d66e4 243 * @brief Getting the acceleration in pps^2.
davide.aliprandi@st.com 3:a132aa6d66e4 244 * @param None.
davide.aliprandi@st.com 3:a132aa6d66e4 245 * @retval The acceleration in pps^2.
davide.aliprandi@st.com 3:a132aa6d66e4 246 */
davide.aliprandi@st.com 3:a132aa6d66e4 247 virtual unsigned int get_acceleration(void)
davide.aliprandi@st.com 3:a132aa6d66e4 248 {
Davidroid 4:265c30b9112a 249 return (unsigned int)STSpin220_GetAcceleration();
davide.aliprandi@st.com 3:a132aa6d66e4 250 }
davide.aliprandi@st.com 3:a132aa6d66e4 251
davide.aliprandi@st.com 3:a132aa6d66e4 252 /**
davide.aliprandi@st.com 3:a132aa6d66e4 253 * @brief Getting the deceleration in pps^2.
davide.aliprandi@st.com 3:a132aa6d66e4 254 * @param None.
davide.aliprandi@st.com 3:a132aa6d66e4 255 * @retval The deceleration in pps^2.
davide.aliprandi@st.com 3:a132aa6d66e4 256 */
davide.aliprandi@st.com 3:a132aa6d66e4 257 virtual unsigned int get_deceleration(void)
davide.aliprandi@st.com 3:a132aa6d66e4 258 {
Davidroid 4:265c30b9112a 259 return (unsigned int)STSpin220_GetDeceleration();
davide.aliprandi@st.com 3:a132aa6d66e4 260 }
davide.aliprandi@st.com 3:a132aa6d66e4 261
davide.aliprandi@st.com 3:a132aa6d66e4 262 /**
davide.aliprandi@st.com 3:a132aa6d66e4 263 * @brief Getting the direction of rotation.
davide.aliprandi@st.com 3:a132aa6d66e4 264 * @param None.
davide.aliprandi@st.com 3:a132aa6d66e4 265 * @retval The direction of rotation.
davide.aliprandi@st.com 3:a132aa6d66e4 266 */
davide.aliprandi@st.com 3:a132aa6d66e4 267 virtual direction_t get_direction(void)
davide.aliprandi@st.com 3:a132aa6d66e4 268 {
Davidroid 4:265c30b9112a 269 if (STSpin220_GetDirection()!=BACKWARD)
davide.aliprandi@st.com 3:a132aa6d66e4 270 {
davide.aliprandi@st.com 3:a132aa6d66e4 271 return FWD;
davide.aliprandi@st.com 3:a132aa6d66e4 272 }
davide.aliprandi@st.com 3:a132aa6d66e4 273 else
davide.aliprandi@st.com 3:a132aa6d66e4 274 {
davide.aliprandi@st.com 3:a132aa6d66e4 275 return BWD;
davide.aliprandi@st.com 3:a132aa6d66e4 276 }
davide.aliprandi@st.com 3:a132aa6d66e4 277 }
davide.aliprandi@st.com 3:a132aa6d66e4 278
davide.aliprandi@st.com 3:a132aa6d66e4 279 /**
davide.aliprandi@st.com 3:a132aa6d66e4 280 * @brief Setting the current position to be the home position.
davide.aliprandi@st.com 3:a132aa6d66e4 281 * @param None.
davide.aliprandi@st.com 3:a132aa6d66e4 282 * @retval None.
davide.aliprandi@st.com 3:a132aa6d66e4 283 */
davide.aliprandi@st.com 3:a132aa6d66e4 284 virtual void set_home(void)
davide.aliprandi@st.com 3:a132aa6d66e4 285 {
Davidroid 4:265c30b9112a 286 STSpin220_SetHome();
davide.aliprandi@st.com 3:a132aa6d66e4 287 }
davide.aliprandi@st.com 3:a132aa6d66e4 288
davide.aliprandi@st.com 3:a132aa6d66e4 289 /**
davide.aliprandi@st.com 3:a132aa6d66e4 290 * @brief Setting the current position to be the marked position.
davide.aliprandi@st.com 3:a132aa6d66e4 291 * @param None.
davide.aliprandi@st.com 3:a132aa6d66e4 292 * @retval None.
davide.aliprandi@st.com 3:a132aa6d66e4 293 */
davide.aliprandi@st.com 3:a132aa6d66e4 294 virtual void set_mark(void)
davide.aliprandi@st.com 3:a132aa6d66e4 295 {
Davidroid 4:265c30b9112a 296 STSpin220_SetMark();
davide.aliprandi@st.com 3:a132aa6d66e4 297 }
davide.aliprandi@st.com 3:a132aa6d66e4 298
davide.aliprandi@st.com 3:a132aa6d66e4 299 /**
davide.aliprandi@st.com 3:a132aa6d66e4 300 * @brief Setting the maximum speed in pps.
davide.aliprandi@st.com 3:a132aa6d66e4 301 * @param speed The maximum speed in pps.
davide.aliprandi@st.com 3:a132aa6d66e4 302 * @retval "true" in case of success, "false" otherwise.
davide.aliprandi@st.com 3:a132aa6d66e4 303 */
davide.aliprandi@st.com 3:a132aa6d66e4 304 virtual bool set_max_speed(unsigned int speed)
davide.aliprandi@st.com 3:a132aa6d66e4 305 {
davide.aliprandi@st.com 3:a132aa6d66e4 306 if (speed <= 0xFFFF)
davide.aliprandi@st.com 3:a132aa6d66e4 307 {
Davidroid 4:265c30b9112a 308 return STSpin220_SetMaxSpeed((uint16_t) speed);
davide.aliprandi@st.com 3:a132aa6d66e4 309 }
davide.aliprandi@st.com 3:a132aa6d66e4 310 else
davide.aliprandi@st.com 3:a132aa6d66e4 311 {
davide.aliprandi@st.com 3:a132aa6d66e4 312 return false;
davide.aliprandi@st.com 3:a132aa6d66e4 313 }
davide.aliprandi@st.com 3:a132aa6d66e4 314 }
davide.aliprandi@st.com 3:a132aa6d66e4 315
davide.aliprandi@st.com 3:a132aa6d66e4 316 /**
davide.aliprandi@st.com 3:a132aa6d66e4 317 * @brief Setting the minimum speed in pps.
davide.aliprandi@st.com 3:a132aa6d66e4 318 * @param speed The minimum speed in pps.
davide.aliprandi@st.com 3:a132aa6d66e4 319 * @retval "true" in case of success, "false" otherwise.
davide.aliprandi@st.com 3:a132aa6d66e4 320 */
davide.aliprandi@st.com 3:a132aa6d66e4 321 virtual bool set_min_speed(unsigned int speed)
davide.aliprandi@st.com 3:a132aa6d66e4 322 {
davide.aliprandi@st.com 3:a132aa6d66e4 323 if (speed <= 0xFFFF)
davide.aliprandi@st.com 3:a132aa6d66e4 324 {
Davidroid 4:265c30b9112a 325 return STSpin220_SetMinSpeed((uint16_t) speed);
davide.aliprandi@st.com 3:a132aa6d66e4 326 }
davide.aliprandi@st.com 3:a132aa6d66e4 327 else
davide.aliprandi@st.com 3:a132aa6d66e4 328 {
davide.aliprandi@st.com 3:a132aa6d66e4 329 return false;
davide.aliprandi@st.com 3:a132aa6d66e4 330 }
davide.aliprandi@st.com 3:a132aa6d66e4 331 }
davide.aliprandi@st.com 3:a132aa6d66e4 332
davide.aliprandi@st.com 3:a132aa6d66e4 333 /**
davide.aliprandi@st.com 3:a132aa6d66e4 334 * @brief Setting the acceleration in pps^2.
davide.aliprandi@st.com 3:a132aa6d66e4 335 * @param acceleration The acceleration in pps/s^2.
davide.aliprandi@st.com 3:a132aa6d66e4 336 * @retval "true" in case of success, "false" otherwise.
davide.aliprandi@st.com 3:a132aa6d66e4 337 */
davide.aliprandi@st.com 3:a132aa6d66e4 338 virtual bool set_acceleration(unsigned int acceleration)
davide.aliprandi@st.com 3:a132aa6d66e4 339 {
davide.aliprandi@st.com 3:a132aa6d66e4 340 if (acceleration <= 0xFFFF)
davide.aliprandi@st.com 3:a132aa6d66e4 341 {
Davidroid 4:265c30b9112a 342 return STSpin220_SetAcceleration((uint16_t) acceleration);
davide.aliprandi@st.com 3:a132aa6d66e4 343 }
davide.aliprandi@st.com 3:a132aa6d66e4 344 else
davide.aliprandi@st.com 3:a132aa6d66e4 345 {
davide.aliprandi@st.com 3:a132aa6d66e4 346 return false;
davide.aliprandi@st.com 3:a132aa6d66e4 347 }
davide.aliprandi@st.com 3:a132aa6d66e4 348 }
nucleosam 0:0ccd34c56c66 349
davide.aliprandi@st.com 3:a132aa6d66e4 350 /**
davide.aliprandi@st.com 3:a132aa6d66e4 351 * @brief Setting the deceleration in pps^2.
davide.aliprandi@st.com 3:a132aa6d66e4 352 * @param deceleration The deceleration in pps^2.
davide.aliprandi@st.com 3:a132aa6d66e4 353 * @retval "true" in case of success, "false" otherwise.
davide.aliprandi@st.com 3:a132aa6d66e4 354 */
davide.aliprandi@st.com 3:a132aa6d66e4 355 virtual bool set_deceleration(unsigned int deceleration)
davide.aliprandi@st.com 3:a132aa6d66e4 356 {
davide.aliprandi@st.com 3:a132aa6d66e4 357 if (deceleration <= 0xFFFF)
davide.aliprandi@st.com 3:a132aa6d66e4 358 {
Davidroid 4:265c30b9112a 359 return STSpin220_SetDeceleration((uint16_t) deceleration);
davide.aliprandi@st.com 3:a132aa6d66e4 360 }
davide.aliprandi@st.com 3:a132aa6d66e4 361 else
davide.aliprandi@st.com 3:a132aa6d66e4 362 {
davide.aliprandi@st.com 3:a132aa6d66e4 363 return false;
davide.aliprandi@st.com 3:a132aa6d66e4 364 }
davide.aliprandi@st.com 3:a132aa6d66e4 365 }
davide.aliprandi@st.com 3:a132aa6d66e4 366
davide.aliprandi@st.com 3:a132aa6d66e4 367 /**
davide.aliprandi@st.com 3:a132aa6d66e4 368 * @brief Setting the Step Mode.
davide.aliprandi@st.com 3:a132aa6d66e4 369 * @param step_mode The Step Mode.
davide.aliprandi@st.com 3:a132aa6d66e4 370 * @retval "true" in case of success, "false" otherwise.
davide.aliprandi@st.com 3:a132aa6d66e4 371 * @note step_mode can be one of the following:
davide.aliprandi@st.com 3:a132aa6d66e4 372 * + STEP_MODE_FULL
davide.aliprandi@st.com 3:a132aa6d66e4 373 * + STEP_MODE_WAVE
davide.aliprandi@st.com 3:a132aa6d66e4 374 * + STEP_MODE_HALF
davide.aliprandi@st.com 3:a132aa6d66e4 375 * + STEP_MODE_1_4
davide.aliprandi@st.com 3:a132aa6d66e4 376 * + STEP_MODE_1_8
davide.aliprandi@st.com 3:a132aa6d66e4 377 * + STEP_MODE_1_16
davide.aliprandi@st.com 3:a132aa6d66e4 378 */
davide.aliprandi@st.com 3:a132aa6d66e4 379 virtual bool set_step_mode(step_mode_t step_mode)
davide.aliprandi@st.com 3:a132aa6d66e4 380 {
Davidroid 4:265c30b9112a 381 return STSpin220_SetStepMode((motorStepMode_t) step_mode);
davide.aliprandi@st.com 3:a132aa6d66e4 382 }
davide.aliprandi@st.com 3:a132aa6d66e4 383
davide.aliprandi@st.com 3:a132aa6d66e4 384 /**
davide.aliprandi@st.com 3:a132aa6d66e4 385 * @brief Going to a specified position.
davide.aliprandi@st.com 3:a132aa6d66e4 386 * @param position The desired position.
davide.aliprandi@st.com 3:a132aa6d66e4 387 * @retval None.
davide.aliprandi@st.com 3:a132aa6d66e4 388 */
davide.aliprandi@st.com 3:a132aa6d66e4 389 virtual void go_to(signed int position)
davide.aliprandi@st.com 3:a132aa6d66e4 390 {
Davidroid 4:265c30b9112a 391 STSpin220_GoTo((int32_t)position);
davide.aliprandi@st.com 3:a132aa6d66e4 392 }
davide.aliprandi@st.com 3:a132aa6d66e4 393
davide.aliprandi@st.com 3:a132aa6d66e4 394 /**
davide.aliprandi@st.com 3:a132aa6d66e4 395 * @brief Going to the home position.
davide.aliprandi@st.com 3:a132aa6d66e4 396 * @param None.
davide.aliprandi@st.com 3:a132aa6d66e4 397 * @retval None.
davide.aliprandi@st.com 3:a132aa6d66e4 398 */
davide.aliprandi@st.com 3:a132aa6d66e4 399 virtual void go_home(void)
davide.aliprandi@st.com 3:a132aa6d66e4 400 {
Davidroid 4:265c30b9112a 401 STSpin220_GoHome();
davide.aliprandi@st.com 3:a132aa6d66e4 402 }
davide.aliprandi@st.com 3:a132aa6d66e4 403
davide.aliprandi@st.com 3:a132aa6d66e4 404 /**
davide.aliprandi@st.com 3:a132aa6d66e4 405 * @brief Going to the marked position.
davide.aliprandi@st.com 3:a132aa6d66e4 406 * @param None.
davide.aliprandi@st.com 3:a132aa6d66e4 407 * @retval None.
davide.aliprandi@st.com 3:a132aa6d66e4 408 */
davide.aliprandi@st.com 3:a132aa6d66e4 409 virtual void go_mark(void)
davide.aliprandi@st.com 3:a132aa6d66e4 410 {
Davidroid 4:265c30b9112a 411 STSpin220_GoMark();
davide.aliprandi@st.com 3:a132aa6d66e4 412 }
davide.aliprandi@st.com 3:a132aa6d66e4 413
davide.aliprandi@st.com 3:a132aa6d66e4 414 /**
davide.aliprandi@st.com 3:a132aa6d66e4 415 * @brief Running the motor towards a specified direction.
davide.aliprandi@st.com 3:a132aa6d66e4 416 * @param direction The direction of rotation.
davide.aliprandi@st.com 3:a132aa6d66e4 417 * @retval None.
davide.aliprandi@st.com 3:a132aa6d66e4 418 */
davide.aliprandi@st.com 3:a132aa6d66e4 419 virtual void run(direction_t direction)
davide.aliprandi@st.com 3:a132aa6d66e4 420 {
Davidroid 4:265c30b9112a 421 STSpin220_Run((motorDir_t) (direction == StepperMotor::FWD ? FORWARD : BACKWARD));
davide.aliprandi@st.com 3:a132aa6d66e4 422 }
davide.aliprandi@st.com 3:a132aa6d66e4 423
davide.aliprandi@st.com 3:a132aa6d66e4 424 /**
davide.aliprandi@st.com 3:a132aa6d66e4 425 * @brief Moving the motor towards a specified direction for a certain number of steps.
davide.aliprandi@st.com 3:a132aa6d66e4 426 * @param direction The direction of rotation.
davide.aliprandi@st.com 3:a132aa6d66e4 427 * @param steps The desired number of steps.
davide.aliprandi@st.com 3:a132aa6d66e4 428 * @retval None.
davide.aliprandi@st.com 3:a132aa6d66e4 429 */
davide.aliprandi@st.com 3:a132aa6d66e4 430 virtual void move(direction_t direction, unsigned int steps)
davide.aliprandi@st.com 3:a132aa6d66e4 431 {
Davidroid 4:265c30b9112a 432 STSpin220_Move((motorDir_t) (direction == StepperMotor::FWD ? FORWARD : BACKWARD), (uint32_t)steps);
davide.aliprandi@st.com 3:a132aa6d66e4 433 }
davide.aliprandi@st.com 3:a132aa6d66e4 434
davide.aliprandi@st.com 3:a132aa6d66e4 435 /**
davide.aliprandi@st.com 3:a132aa6d66e4 436 * @brief Stopping the motor through an immediate deceleration up to zero speed.
davide.aliprandi@st.com 3:a132aa6d66e4 437 * @param None.
davide.aliprandi@st.com 3:a132aa6d66e4 438 * @retval None.
davide.aliprandi@st.com 3:a132aa6d66e4 439 */
davide.aliprandi@st.com 3:a132aa6d66e4 440 virtual void soft_stop(void)
davide.aliprandi@st.com 3:a132aa6d66e4 441 {
Davidroid 4:265c30b9112a 442 STSpin220_SoftStop();
davide.aliprandi@st.com 3:a132aa6d66e4 443 }
davide.aliprandi@st.com 3:a132aa6d66e4 444
davide.aliprandi@st.com 3:a132aa6d66e4 445 /**
davide.aliprandi@st.com 3:a132aa6d66e4 446 * @brief Stopping the motor through an immediate infinite deceleration.
davide.aliprandi@st.com 3:a132aa6d66e4 447 * @param None.
davide.aliprandi@st.com 3:a132aa6d66e4 448 * @retval None.
davide.aliprandi@st.com 3:a132aa6d66e4 449 */
davide.aliprandi@st.com 3:a132aa6d66e4 450 virtual void hard_stop(void)
davide.aliprandi@st.com 3:a132aa6d66e4 451 {
Davidroid 4:265c30b9112a 452 STSpin220_HardStop();
davide.aliprandi@st.com 3:a132aa6d66e4 453 }
davide.aliprandi@st.com 3:a132aa6d66e4 454
davide.aliprandi@st.com 3:a132aa6d66e4 455 /**
davide.aliprandi@st.com 3:a132aa6d66e4 456 * @brief Disabling the power bridge after performing a deceleration to zero.
davide.aliprandi@st.com 3:a132aa6d66e4 457 * @param None.
davide.aliprandi@st.com 3:a132aa6d66e4 458 * @retval None.
davide.aliprandi@st.com 3:a132aa6d66e4 459 */
davide.aliprandi@st.com 3:a132aa6d66e4 460 virtual void soft_hiz(void)
davide.aliprandi@st.com 3:a132aa6d66e4 461 {
Davidroid 4:265c30b9112a 462 STSpin220_SetStopMode(HIZ_MODE);
Davidroid 4:265c30b9112a 463 STSpin220_SoftStop();
davide.aliprandi@st.com 3:a132aa6d66e4 464 }
davide.aliprandi@st.com 3:a132aa6d66e4 465
davide.aliprandi@st.com 3:a132aa6d66e4 466 /**
davide.aliprandi@st.com 3:a132aa6d66e4 467 * @brief Disabling the power bridge immediately.
davide.aliprandi@st.com 3:a132aa6d66e4 468 * @param None.
davide.aliprandi@st.com 3:a132aa6d66e4 469 * @retval None.
davide.aliprandi@st.com 3:a132aa6d66e4 470 */
davide.aliprandi@st.com 3:a132aa6d66e4 471 virtual void hard_hiz(void)
davide.aliprandi@st.com 3:a132aa6d66e4 472 {
Davidroid 4:265c30b9112a 473 STSpin220_HardHiZ();
davide.aliprandi@st.com 3:a132aa6d66e4 474 }
davide.aliprandi@st.com 3:a132aa6d66e4 475
davide.aliprandi@st.com 3:a132aa6d66e4 476 /**
davide.aliprandi@st.com 3:a132aa6d66e4 477 * @brief Waiting while the motor is active.
davide.aliprandi@st.com 3:a132aa6d66e4 478 * @param None.
davide.aliprandi@st.com 3:a132aa6d66e4 479 * @retval None.
davide.aliprandi@st.com 3:a132aa6d66e4 480 */
davide.aliprandi@st.com 3:a132aa6d66e4 481 virtual void wait_while_active(void)
davide.aliprandi@st.com 3:a132aa6d66e4 482 {
Davidroid 4:265c30b9112a 483 STSpin220_WaitWhileActive();
davide.aliprandi@st.com 3:a132aa6d66e4 484 }
davide.aliprandi@st.com 3:a132aa6d66e4 485
davide.aliprandi@st.com 3:a132aa6d66e4 486 /**
davide.aliprandi@st.com 3:a132aa6d66e4 487 * @brief Public functions NOT inherited
davide.aliprandi@st.com 3:a132aa6d66e4 488 */
davide.aliprandi@st.com 3:a132aa6d66e4 489
davide.aliprandi@st.com 3:a132aa6d66e4 490 /**
davide.aliprandi@st.com 3:a132aa6d66e4 491 * @brief Attaching an error handler.
davide.aliprandi@st.com 3:a132aa6d66e4 492 * @param fptr An error handler.
davide.aliprandi@st.com 3:a132aa6d66e4 493 * @retval None.
davide.aliprandi@st.com 3:a132aa6d66e4 494 */
davide.aliprandi@st.com 3:a132aa6d66e4 495 virtual void attach_error_handler(void (*fptr)(uint16_t error))
davide.aliprandi@st.com 3:a132aa6d66e4 496 {
Davidroid 4:265c30b9112a 497 STSpin220_AttachErrorHandler((void (*)(uint16_t error)) fptr);
davide.aliprandi@st.com 3:a132aa6d66e4 498 }
davide.aliprandi@st.com 3:a132aa6d66e4 499
davide.aliprandi@st.com 3:a132aa6d66e4 500 /**
davide.aliprandi@st.com 3:a132aa6d66e4 501 * @brief Checks if the device is disabled or/and has an alarm flag set
davide.aliprandi@st.com 3:a132aa6d66e4 502 * by reading the EN FAULT pin position.
davide.aliprandi@st.com 3:a132aa6d66e4 503 * @param None.
davide.aliprandi@st.com 3:a132aa6d66e4 504 * @retval One if the EN FAULT pin is low (the device is disabled or/and
davide.aliprandi@st.com 3:a132aa6d66e4 505 * has an alarm flag set), otherwise zero.
davide.aliprandi@st.com 3:a132aa6d66e4 506 */
davide.aliprandi@st.com 3:a132aa6d66e4 507 virtual unsigned int check_status_hw(void)
davide.aliprandi@st.com 3:a132aa6d66e4 508 {
davide.aliprandi@st.com 3:a132aa6d66e4 509 if (!fault_and_enable.read()) return 0x01;
davide.aliprandi@st.com 3:a132aa6d66e4 510 else return 0x00;
davide.aliprandi@st.com 3:a132aa6d66e4 511 }
davide.aliprandi@st.com 3:a132aa6d66e4 512
davide.aliprandi@st.com 3:a132aa6d66e4 513 /**
davide.aliprandi@st.com 3:a132aa6d66e4 514 * @brief Disabling the device.
davide.aliprandi@st.com 3:a132aa6d66e4 515 * @param None.
davide.aliprandi@st.com 3:a132aa6d66e4 516 * @retval None.
davide.aliprandi@st.com 3:a132aa6d66e4 517 */
davide.aliprandi@st.com 3:a132aa6d66e4 518 virtual void disable(void)
davide.aliprandi@st.com 3:a132aa6d66e4 519 {
Davidroid 4:265c30b9112a 520 STSpin220_Disable();
davide.aliprandi@st.com 3:a132aa6d66e4 521 }
davide.aliprandi@st.com 3:a132aa6d66e4 522
davide.aliprandi@st.com 3:a132aa6d66e4 523 /**
davide.aliprandi@st.com 3:a132aa6d66e4 524 * @brief Enabling the device.
davide.aliprandi@st.com 3:a132aa6d66e4 525 * @param None.
davide.aliprandi@st.com 3:a132aa6d66e4 526 * @retval None.
davide.aliprandi@st.com 3:a132aa6d66e4 527 */
davide.aliprandi@st.com 3:a132aa6d66e4 528 virtual void enable(void)
davide.aliprandi@st.com 3:a132aa6d66e4 529 {
Davidroid 4:265c30b9112a 530 STSpin220_Enable();
davide.aliprandi@st.com 3:a132aa6d66e4 531 }
davide.aliprandi@st.com 3:a132aa6d66e4 532
davide.aliprandi@st.com 3:a132aa6d66e4 533 /**
davide.aliprandi@st.com 3:a132aa6d66e4 534 * @brief Exit STSpin220 device from standby (low power consumption) by
davide.aliprandi@st.com 3:a132aa6d66e4 535 * setting STBY\RESET pin to high level and changing the motion state to
davide.aliprandi@st.com 3:a132aa6d66e4 536 * INACTIVE.
davide.aliprandi@st.com 3:a132aa6d66e4 537 * @param None.
davide.aliprandi@st.com 3:a132aa6d66e4 538 * @retval None.
davide.aliprandi@st.com 3:a132aa6d66e4 539 */
davide.aliprandi@st.com 3:a132aa6d66e4 540 virtual void exit_device_from_standby(void)
davide.aliprandi@st.com 3:a132aa6d66e4 541 {
Davidroid 4:265c30b9112a 542 STSpin220_ExitDeviceFromStandby();
davide.aliprandi@st.com 3:a132aa6d66e4 543 }
davide.aliprandi@st.com 3:a132aa6d66e4 544
davide.aliprandi@st.com 3:a132aa6d66e4 545 /**
davide.aliprandi@st.com 3:a132aa6d66e4 546 * @brief Set the frequency of the VREFA and VREFB PWM
davide.aliprandi@st.com 3:a132aa6d66e4 547 * @param frequency in Hz
davide.aliprandi@st.com 3:a132aa6d66e4 548 * @retval None.
davide.aliprandi@st.com 3:a132aa6d66e4 549 */
davide.aliprandi@st.com 3:a132aa6d66e4 550 virtual uint32_t get_freq_vref_pwm(void)
davide.aliprandi@st.com 3:a132aa6d66e4 551 {
Davidroid 4:265c30b9112a 552 return STSpin220_VrefPwmGetFreq();
davide.aliprandi@st.com 3:a132aa6d66e4 553 }
davide.aliprandi@st.com 3:a132aa6d66e4 554
davide.aliprandi@st.com 3:a132aa6d66e4 555 /**
davide.aliprandi@st.com 3:a132aa6d66e4 556 * @brief Getting the version of the firmware.
davide.aliprandi@st.com 3:a132aa6d66e4 557 * @param None.
davide.aliprandi@st.com 3:a132aa6d66e4 558 * @retval The version of the firmware.
davide.aliprandi@st.com 3:a132aa6d66e4 559 */
davide.aliprandi@st.com 3:a132aa6d66e4 560 virtual unsigned int get_fw_version(void)
davide.aliprandi@st.com 3:a132aa6d66e4 561 {
Davidroid 4:265c30b9112a 562 return (unsigned int) STSpin220_GetFwVersion();
davide.aliprandi@st.com 3:a132aa6d66e4 563 }
davide.aliprandi@st.com 3:a132aa6d66e4 564
davide.aliprandi@st.com 3:a132aa6d66e4 565 /**
davide.aliprandi@st.com 3:a132aa6d66e4 566 * @brief Getting the motor step mode.
davide.aliprandi@st.com 3:a132aa6d66e4 567 * @param None.
davide.aliprandi@st.com 3:a132aa6d66e4 568 * @retval The motor step mode.
davide.aliprandi@st.com 3:a132aa6d66e4 569 */
davide.aliprandi@st.com 3:a132aa6d66e4 570 virtual step_mode_t get_step_mode(void)
davide.aliprandi@st.com 3:a132aa6d66e4 571 {
Davidroid 4:265c30b9112a 572 return (step_mode_t) STSpin220_GetStepMode();
davide.aliprandi@st.com 3:a132aa6d66e4 573 }
davide.aliprandi@st.com 3:a132aa6d66e4 574
davide.aliprandi@st.com 3:a132aa6d66e4 575 /**
davide.aliprandi@st.com 3:a132aa6d66e4 576 * @brief Getting the motor stop mode.
davide.aliprandi@st.com 3:a132aa6d66e4 577 * @param None.
davide.aliprandi@st.com 3:a132aa6d66e4 578 * @retval The motor stop mode.
davide.aliprandi@st.com 3:a132aa6d66e4 579 */
davide.aliprandi@st.com 3:a132aa6d66e4 580 virtual motorStopMode_t get_stop_mode(void)
davide.aliprandi@st.com 3:a132aa6d66e4 581 {
Davidroid 4:265c30b9112a 582 return STSpin220_GetStopMode();
davide.aliprandi@st.com 3:a132aa6d66e4 583 }
davide.aliprandi@st.com 3:a132aa6d66e4 584
davide.aliprandi@st.com 3:a132aa6d66e4 585 /**
davide.aliprandi@st.com 3:a132aa6d66e4 586 * @brief Get the motor torque.
davide.aliprandi@st.com 3:a132aa6d66e4 587 * @param torqueMode Torque mode as specified in enum motorTorqueMode_t
davide.aliprandi@st.com 3:a132aa6d66e4 588 * @retval the torqueValue in % (from 0 to 100)
davide.aliprandi@st.com 3:a132aa6d66e4 589 */
davide.aliprandi@st.com 3:a132aa6d66e4 590 virtual uint8_t get_torque(motorTorqueMode_t torqueMode)
davide.aliprandi@st.com 3:a132aa6d66e4 591 {
Davidroid 4:265c30b9112a 592 return STSpin220_GetTorque(torqueMode);
davide.aliprandi@st.com 3:a132aa6d66e4 593 }
davide.aliprandi@st.com 3:a132aa6d66e4 594
davide.aliprandi@st.com 3:a132aa6d66e4 595 /**
davide.aliprandi@st.com 3:a132aa6d66e4 596 * @brief Get the torque boost feature status.
davide.aliprandi@st.com 3:a132aa6d66e4 597 * @param None.
davide.aliprandi@st.com 3:a132aa6d66e4 598 * @retval true if enabled, false if disabled
davide.aliprandi@st.com 3:a132aa6d66e4 599 */
davide.aliprandi@st.com 3:a132aa6d66e4 600 virtual bool get_torque_boost_enable(void)
davide.aliprandi@st.com 3:a132aa6d66e4 601 {
Davidroid 4:265c30b9112a 602 return STSpin220_GetTorqueBoostEnable();
davide.aliprandi@st.com 3:a132aa6d66e4 603 }
davide.aliprandi@st.com 3:a132aa6d66e4 604
davide.aliprandi@st.com 3:a132aa6d66e4 605 /**
davide.aliprandi@st.com 3:a132aa6d66e4 606 * @brief Get the torque boost threshold
davide.aliprandi@st.com 3:a132aa6d66e4 607 * @retval The torque boost threshold above which the step mode is
davide.aliprandi@st.com 3:a132aa6d66e4 608 * changed to full step
davide.aliprandi@st.com 3:a132aa6d66e4 609 */
davide.aliprandi@st.com 3:a132aa6d66e4 610 virtual uint16_t get_torque_boost_threshold(void)
davide.aliprandi@st.com 3:a132aa6d66e4 611 {
Davidroid 4:265c30b9112a 612 return STSpin220_GetTorqueBoostThreshold();
davide.aliprandi@st.com 3:a132aa6d66e4 613 }
davide.aliprandi@st.com 3:a132aa6d66e4 614
davide.aliprandi@st.com 3:a132aa6d66e4 615 /**
davide.aliprandi@st.com 3:a132aa6d66e4 616 * @brief Going to a specified position with a specificied direction.
davide.aliprandi@st.com 3:a132aa6d66e4 617 * @param direction The desired direction.
davide.aliprandi@st.com 3:a132aa6d66e4 618 * @param position The desired position.
davide.aliprandi@st.com 3:a132aa6d66e4 619 * @retval None.
davide.aliprandi@st.com 3:a132aa6d66e4 620 */
davide.aliprandi@st.com 3:a132aa6d66e4 621 virtual void go_to(direction_t direction, signed int position)
davide.aliprandi@st.com 3:a132aa6d66e4 622 {
Davidroid 4:265c30b9112a 623 STSpin220_GoToDir((motorDir_t) (direction == StepperMotor::FWD ? FORWARD : BACKWARD),(int32_t)position);
davide.aliprandi@st.com 3:a132aa6d66e4 624 }
davide.aliprandi@st.com 3:a132aa6d66e4 625
davide.aliprandi@st.com 3:a132aa6d66e4 626 /**
davide.aliprandi@st.com 3:a132aa6d66e4 627 * @brief Put STSpin220 device in standby (low power consumption) by
davide.aliprandi@st.com 3:a132aa6d66e4 628 * setting STBY\RESET pin to low level and changing the motion state to
davide.aliprandi@st.com 3:a132aa6d66e4 629 * STANDBY.
davide.aliprandi@st.com 3:a132aa6d66e4 630 * @param None.
davide.aliprandi@st.com 3:a132aa6d66e4 631 * @retval None.
davide.aliprandi@st.com 3:a132aa6d66e4 632 */
davide.aliprandi@st.com 3:a132aa6d66e4 633 virtual void put_device_in_standby(void)
davide.aliprandi@st.com 3:a132aa6d66e4 634 {
Davidroid 4:265c30b9112a 635 STSpin220_PutDeviceInStandby();
davide.aliprandi@st.com 3:a132aa6d66e4 636 }
nucleosam 0:0ccd34c56c66 637
davide.aliprandi@st.com 3:a132aa6d66e4 638 /**
davide.aliprandi@st.com 3:a132aa6d66e4 639 * @brief Release the STSpin220 reset (Reset pin set to high level).
davide.aliprandi@st.com 3:a132aa6d66e4 640 * @param None.
davide.aliprandi@st.com 3:a132aa6d66e4 641 * @retval None.
davide.aliprandi@st.com 3:a132aa6d66e4 642 */
davide.aliprandi@st.com 3:a132aa6d66e4 643 virtual void release_reset(void)
davide.aliprandi@st.com 3:a132aa6d66e4 644 {
Davidroid 4:265c30b9112a 645 STSpin220_Board_ReleaseReset();
davide.aliprandi@st.com 3:a132aa6d66e4 646 }
davide.aliprandi@st.com 3:a132aa6d66e4 647
davide.aliprandi@st.com 3:a132aa6d66e4 648 /**
davide.aliprandi@st.com 3:a132aa6d66e4 649 * @brief Reset the STSpin220 (Reset pin set to low level).
davide.aliprandi@st.com 3:a132aa6d66e4 650 * @param None.
davide.aliprandi@st.com 3:a132aa6d66e4 651 * @retval None.
davide.aliprandi@st.com 3:a132aa6d66e4 652 */
davide.aliprandi@st.com 3:a132aa6d66e4 653 virtual void reset(void)
davide.aliprandi@st.com 3:a132aa6d66e4 654 {
Davidroid 4:265c30b9112a 655 STSpin220_Board_Reset();
davide.aliprandi@st.com 3:a132aa6d66e4 656 }
davide.aliprandi@st.com 3:a132aa6d66e4 657
davide.aliprandi@st.com 3:a132aa6d66e4 658 /**
davide.aliprandi@st.com 3:a132aa6d66e4 659 * @brief Set the motor direction.
davide.aliprandi@st.com 3:a132aa6d66e4 660 * @param direction The desired direction.
davide.aliprandi@st.com 3:a132aa6d66e4 661 * @retval None.
davide.aliprandi@st.com 3:a132aa6d66e4 662 */
davide.aliprandi@st.com 3:a132aa6d66e4 663 virtual void set_direction(direction_t direction)
davide.aliprandi@st.com 3:a132aa6d66e4 664 {
Davidroid 4:265c30b9112a 665 STSpin220_SetDirection((motorDir_t) (direction == StepperMotor::FWD ? FORWARD : BACKWARD));
davide.aliprandi@st.com 3:a132aa6d66e4 666 }
davide.aliprandi@st.com 3:a132aa6d66e4 667
davide.aliprandi@st.com 3:a132aa6d66e4 668 /**
davide.aliprandi@st.com 3:a132aa6d66e4 669 * @brief Set the frequency of the PWM for REF pin
davide.aliprandi@st.com 3:a132aa6d66e4 670 * @param frequency in Hz
davide.aliprandi@st.com 3:a132aa6d66e4 671 * @retval None.
davide.aliprandi@st.com 3:a132aa6d66e4 672 */
davide.aliprandi@st.com 3:a132aa6d66e4 673 virtual void set_freq_vref_pwm(uint32_t frequency)
davide.aliprandi@st.com 3:a132aa6d66e4 674 {
Davidroid 4:265c30b9112a 675 STSpin220_VrefPwmSetFreq(frequency);
davide.aliprandi@st.com 3:a132aa6d66e4 676 }
davide.aliprandi@st.com 3:a132aa6d66e4 677
davide.aliprandi@st.com 3:a132aa6d66e4 678 /**
davide.aliprandi@st.com 3:a132aa6d66e4 679 * @brief Set the motor stop mode.
davide.aliprandi@st.com 3:a132aa6d66e4 680 * @param stopMode The desired stop mode (HOLD_MODE, HIZ_MODE or
davide.aliprandi@st.com 3:a132aa6d66e4 681 * STANDBY_MODE).
davide.aliprandi@st.com 3:a132aa6d66e4 682 * @retval None.
davide.aliprandi@st.com 3:a132aa6d66e4 683 */
davide.aliprandi@st.com 3:a132aa6d66e4 684 virtual void set_stop_mode(motorStopMode_t stopMode)
davide.aliprandi@st.com 3:a132aa6d66e4 685 {
Davidroid 4:265c30b9112a 686 STSpin220_SetStopMode(stopMode);
davide.aliprandi@st.com 3:a132aa6d66e4 687 }
davide.aliprandi@st.com 3:a132aa6d66e4 688
davide.aliprandi@st.com 3:a132aa6d66e4 689 /**
davide.aliprandi@st.com 3:a132aa6d66e4 690 * @brief Set the motor torque.
davide.aliprandi@st.com 3:a132aa6d66e4 691 * @param torqueMode Torque mode as specified in enum motorTorqueMode_t
davide.aliprandi@st.com 3:a132aa6d66e4 692 * @param torqueValue in % (from 0 to 100)
davide.aliprandi@st.com 3:a132aa6d66e4 693 * @retval None.
davide.aliprandi@st.com 3:a132aa6d66e4 694 */
davide.aliprandi@st.com 3:a132aa6d66e4 695 virtual void set_torque(motorTorqueMode_t torqueMode, uint8_t torqueValue)
davide.aliprandi@st.com 3:a132aa6d66e4 696 {
Davidroid 4:265c30b9112a 697 STSpin220_SetTorque(torqueMode, torqueValue);
davide.aliprandi@st.com 3:a132aa6d66e4 698 }
davide.aliprandi@st.com 3:a132aa6d66e4 699
davide.aliprandi@st.com 3:a132aa6d66e4 700 /**
davide.aliprandi@st.com 3:a132aa6d66e4 701 * @brief Enable or disable the motor torque boost feature.
davide.aliprandi@st.com 3:a132aa6d66e4 702 * @param enable enable true to enable torque boost, false to disable
davide.aliprandi@st.com 3:a132aa6d66e4 703 * @retval None.
davide.aliprandi@st.com 3:a132aa6d66e4 704 */
davide.aliprandi@st.com 3:a132aa6d66e4 705 virtual void set_torque_boost_enable(bool enable)
davide.aliprandi@st.com 3:a132aa6d66e4 706 {
Davidroid 4:265c30b9112a 707 STSpin220_SetTorqueBoostEnable(enable);
davide.aliprandi@st.com 3:a132aa6d66e4 708 }
davide.aliprandi@st.com 3:a132aa6d66e4 709
davide.aliprandi@st.com 3:a132aa6d66e4 710 /**
davide.aliprandi@st.com 3:a132aa6d66e4 711 * @brief Set the torque boost threshold
davide.aliprandi@st.com 3:a132aa6d66e4 712 * @param[in] speedThreshold speed threshold above which the step mode is
davide.aliprandi@st.com 3:a132aa6d66e4 713 * changed to full step
davide.aliprandi@st.com 3:a132aa6d66e4 714 * @retval None.
davide.aliprandi@st.com 3:a132aa6d66e4 715 */
davide.aliprandi@st.com 3:a132aa6d66e4 716 virtual void set_torque_boost_threshold(uint16_t speedThreshold)
davide.aliprandi@st.com 3:a132aa6d66e4 717 {
Davidroid 4:265c30b9112a 718 STSpin220_SetTorqueBoostThreshold(speedThreshold);
davide.aliprandi@st.com 3:a132aa6d66e4 719 }
davide.aliprandi@st.com 3:a132aa6d66e4 720
davide.aliprandi@st.com 3:a132aa6d66e4 721 /*** Public Interrupt Related Methods ***/
davide.aliprandi@st.com 3:a132aa6d66e4 722
davide.aliprandi@st.com 3:a132aa6d66e4 723 /* ACTION 6 --------------------------------------------------------------*
davide.aliprandi@st.com 3:a132aa6d66e4 724 * Implement here interrupt related methods, if any. *
davide.aliprandi@st.com 3:a132aa6d66e4 725 * Note that interrupt handling is platform dependent, e.g.: *
davide.aliprandi@st.com 3:a132aa6d66e4 726 * + mbed: *
davide.aliprandi@st.com 3:a132aa6d66e4 727 * InterruptIn feature_irq(pin); //Interrupt object. *
davide.aliprandi@st.com 3:a132aa6d66e4 728 * feature_irq.rise(callback); //Attach a callback. *
davide.aliprandi@st.com 3:a132aa6d66e4 729 * feature_irq.mode(PullNone); //Set interrupt mode. *
davide.aliprandi@st.com 3:a132aa6d66e4 730 * feature_irq.enable_irq(); //Enable interrupt. *
davide.aliprandi@st.com 3:a132aa6d66e4 731 * feature_irq.disable_irq(); //Disable interrupt. *
davide.aliprandi@st.com 3:a132aa6d66e4 732 * + Arduino: *
davide.aliprandi@st.com 3:a132aa6d66e4 733 * attachInterrupt(pin, callback, RISING); //Attach a callback. *
davide.aliprandi@st.com 3:a132aa6d66e4 734 * detachInterrupt(pin); //Detach a callback. *
davide.aliprandi@st.com 3:a132aa6d66e4 735 * *
davide.aliprandi@st.com 3:a132aa6d66e4 736 * Example (mbed): *
davide.aliprandi@st.com 3:a132aa6d66e4 737 * void attach_feature_irq(void (*fptr) (void)) *
davide.aliprandi@st.com 3:a132aa6d66e4 738 * { *
davide.aliprandi@st.com 3:a132aa6d66e4 739 * feature_irq.rise(fptr); *
davide.aliprandi@st.com 3:a132aa6d66e4 740 * } *
davide.aliprandi@st.com 3:a132aa6d66e4 741 * *
davide.aliprandi@st.com 3:a132aa6d66e4 742 * void enable_feature_irq(void) *
davide.aliprandi@st.com 3:a132aa6d66e4 743 * { *
davide.aliprandi@st.com 3:a132aa6d66e4 744 * feature_irq.enable_irq(); *
davide.aliprandi@st.com 3:a132aa6d66e4 745 * } *
davide.aliprandi@st.com 3:a132aa6d66e4 746 * *
davide.aliprandi@st.com 3:a132aa6d66e4 747 * void disable_feature_irq(void) *
davide.aliprandi@st.com 3:a132aa6d66e4 748 * { *
davide.aliprandi@st.com 3:a132aa6d66e4 749 * feature_irq.disable_irq(); *
davide.aliprandi@st.com 3:a132aa6d66e4 750 * } *
davide.aliprandi@st.com 3:a132aa6d66e4 751 *------------------------------------------------------------------------*/
davide.aliprandi@st.com 3:a132aa6d66e4 752 /**
davide.aliprandi@st.com 3:a132aa6d66e4 753 * @brief Attaching an interrupt handler to the FLAG interrupt.
davide.aliprandi@st.com 3:a132aa6d66e4 754 * @param fptr An interrupt handler.
davide.aliprandi@st.com 3:a132aa6d66e4 755 * @retval None.
davide.aliprandi@st.com 3:a132aa6d66e4 756 */
davide.aliprandi@st.com 3:a132aa6d66e4 757
davide.aliprandi@st.com 3:a132aa6d66e4 758 void attach_flag_irq(void (*fptr)(void))
davide.aliprandi@st.com 3:a132aa6d66e4 759 {
davide.aliprandi@st.com 3:a132aa6d66e4 760 fault_and_enable_irqFunctionPointer = &(*fptr);
davide.aliprandi@st.com 3:a132aa6d66e4 761 fault_and_enable.fall(fptr);
davide.aliprandi@st.com 3:a132aa6d66e4 762 fault_and_enable.mode(PullDown);
davide.aliprandi@st.com 3:a132aa6d66e4 763 wait_ms(1);
davide.aliprandi@st.com 3:a132aa6d66e4 764 }
davide.aliprandi@st.com 3:a132aa6d66e4 765
davide.aliprandi@st.com 3:a132aa6d66e4 766 /**
davide.aliprandi@st.com 3:a132aa6d66e4 767 * @brief Enabling the FLAG interrupt handling.
davide.aliprandi@st.com 3:a132aa6d66e4 768 * @param None.
davide.aliprandi@st.com 3:a132aa6d66e4 769 * @retval None.
davide.aliprandi@st.com 3:a132aa6d66e4 770 */
davide.aliprandi@st.com 3:a132aa6d66e4 771 void enable_flag_irq(void)
davide.aliprandi@st.com 3:a132aa6d66e4 772 {
davide.aliprandi@st.com 3:a132aa6d66e4 773 fault_and_enable.enable_irq();
davide.aliprandi@st.com 3:a132aa6d66e4 774 }
davide.aliprandi@st.com 3:a132aa6d66e4 775
davide.aliprandi@st.com 3:a132aa6d66e4 776 protected:
davide.aliprandi@st.com 3:a132aa6d66e4 777
davide.aliprandi@st.com 3:a132aa6d66e4 778 /*** Protected Component Related Methods ***/
davide.aliprandi@st.com 3:a132aa6d66e4 779
davide.aliprandi@st.com 3:a132aa6d66e4 780 /* ACTION 7 --------------------------------------------------------------*
davide.aliprandi@st.com 3:a132aa6d66e4 781 * Declare here the component's specific methods. *
davide.aliprandi@st.com 3:a132aa6d66e4 782 * They should be: *
davide.aliprandi@st.com 3:a132aa6d66e4 783 * + Methods with the same name of the C component's virtual table's *
davide.aliprandi@st.com 3:a132aa6d66e4 784 * functions (1); *
davide.aliprandi@st.com 3:a132aa6d66e4 785 * + Methods with the same name of the C component's extended virtual *
davide.aliprandi@st.com 3:a132aa6d66e4 786 * table's functions, if any (2); *
davide.aliprandi@st.com 3:a132aa6d66e4 787 * + Helper methods, if any, like functions declared in the component's *
davide.aliprandi@st.com 3:a132aa6d66e4 788 * source files but not pointed by the component's virtual table (3). *
davide.aliprandi@st.com 3:a132aa6d66e4 789 * *
davide.aliprandi@st.com 3:a132aa6d66e4 790 * Example: *
davide.aliprandi@st.com 3:a132aa6d66e4 791 * status_t COMPONENT_get_value(float *f); //(1) *
davide.aliprandi@st.com 3:a132aa6d66e4 792 * status_t COMPONENT_enable_feature(void); //(2) *
davide.aliprandi@st.com 3:a132aa6d66e4 793 * status_t COMPONENT_compute_average(void); //(3) *
davide.aliprandi@st.com 3:a132aa6d66e4 794 *------------------------------------------------------------------------*/
Davidroid 4:265c30b9112a 795 status_t STSpin220_Init(void *init);
Davidroid 4:265c30b9112a 796 status_t STSpin220_ReadID(uint8_t *id);
Davidroid 4:265c30b9112a 797 void STSpin220_AttachErrorHandler(void (*callback)(uint16_t error));
Davidroid 4:265c30b9112a 798 void STSpin220_ApplyTorque(motorTorqueMode_t torqueMode);
Davidroid 4:265c30b9112a 799 void STSpin220_Disable(void);
Davidroid 4:265c30b9112a 800 void STSpin220_ErrorHandler(uint16_t error);
Davidroid 4:265c30b9112a 801 void STSpin220_Enable(void);
Davidroid 4:265c30b9112a 802 void STSpin220_ExitDeviceFromStandby(void);
Davidroid 4:265c30b9112a 803 uint16_t STSpin220_GetAcceleration(void);
Davidroid 4:265c30b9112a 804 uint16_t STSpin220_GetCurrentSpeed(void);
Davidroid 4:265c30b9112a 805 uint16_t STSpin220_GetDeceleration(void);
Davidroid 4:265c30b9112a 806 motorState_t STSpin220_get_device_state(void);
Davidroid 4:265c30b9112a 807 motorDir_t STSpin220_GetDirection(void);
Davidroid 4:265c30b9112a 808 uint32_t STSpin220_GetFwVersion(void);
Davidroid 4:265c30b9112a 809 int32_t STSpin220_GetMark(void);
Davidroid 4:265c30b9112a 810 uint16_t STSpin220_GetMaxSpeed(void);
Davidroid 4:265c30b9112a 811 uint16_t STSpin220_GetMinSpeed(void);
Davidroid 4:265c30b9112a 812 int32_t STSpin220_GetPosition(void);
Davidroid 4:265c30b9112a 813 motorStepMode_t STSpin220_GetStepMode(void);
Davidroid 4:265c30b9112a 814 motorStopMode_t STSpin220_GetStopMode(void);
Davidroid 4:265c30b9112a 815 uint8_t STSpin220_GetTorque(motorTorqueMode_t torqueMode);
Davidroid 4:265c30b9112a 816 bool STSpin220_GetTorqueBoostEnable(void);
Davidroid 4:265c30b9112a 817 uint16_t STSpin220_GetTorqueBoostThreshold(void);
Davidroid 4:265c30b9112a 818 void STSpin220_GoHome(void);
Davidroid 4:265c30b9112a 819 void STSpin220_GoMark(void);
Davidroid 4:265c30b9112a 820 void STSpin220_GoTo(int32_t targetPosition);
Davidroid 4:265c30b9112a 821 void STSpin220_GoToDir(motorDir_t direction, int32_t targetPosition);
Davidroid 4:265c30b9112a 822 void STSpin220_HardHiZ(void);
Davidroid 4:265c30b9112a 823 void STSpin220_HardStop(void);
Davidroid 4:265c30b9112a 824 void STSpin220_Move(motorDir_t direction, uint32_t stepCount);
Davidroid 4:265c30b9112a 825 void STSpin220_PutDeviceInStandby(void);
Davidroid 4:265c30b9112a 826 void STSpin220_Run(motorDir_t direction);
Davidroid 4:265c30b9112a 827 bool STSpin220_SetAcceleration(uint16_t newAcc);
Davidroid 4:265c30b9112a 828 bool STSpin220_SetDeceleration(uint16_t newDec);
Davidroid 4:265c30b9112a 829 void STSpin220_SetDirection(motorDir_t direction);
Davidroid 4:265c30b9112a 830 void STSpin220_SetHome(void);
Davidroid 4:265c30b9112a 831 void STSpin220_SetMark(void);
Davidroid 4:265c30b9112a 832 bool STSpin220_SetMaxSpeed(uint16_t volatile newSpeed);
Davidroid 4:265c30b9112a 833 bool STSpin220_SetMinSpeed(uint16_t volatile newSpeed);
Davidroid 4:265c30b9112a 834 bool STSpin220_SetStepMode(motorStepMode_t stepMode);
Davidroid 4:265c30b9112a 835 void STSpin220_SetStopMode(motorStopMode_t stopMode);
Davidroid 4:265c30b9112a 836 bool STSpin220_SoftStop(void);
Davidroid 4:265c30b9112a 837 void STSpin220_SetTorque(motorTorqueMode_t torqueMode, uint8_t torqueValue);
Davidroid 4:265c30b9112a 838 void STSpin220_SetTorqueBoostEnable(bool enable);
Davidroid 4:265c30b9112a 839 void STSpin220_SetTorqueBoostThreshold(uint16_t speedThreshold);
Davidroid 4:265c30b9112a 840 uint32_t STSpin220_VrefPwmGetFreq(void);
Davidroid 4:265c30b9112a 841 void STSpin220_VrefPwmSetFreq(uint32_t newFreq);
Davidroid 4:265c30b9112a 842 void STSpin220_WaitWhileActive(void);
davide.aliprandi@st.com 3:a132aa6d66e4 843
davide.aliprandi@st.com 3:a132aa6d66e4 844 /*** Functions intended to be used only internally ***/
Davidroid 4:265c30b9112a 845 void STSpin220_ApplySpeed(uint16_t newSpeed);
Davidroid 4:265c30b9112a 846 void STSpin220_ComputeSpeedProfile(uint32_t nbSteps);
Davidroid 4:265c30b9112a 847 void STSpin220_SetDeviceParamsToGivenValues(STSpin220_init_t* pInitDevicePrm);
Davidroid 4:265c30b9112a 848 void STSpin220_SetDeviceParamsOtherValues(void);
Davidroid 4:265c30b9112a 849 void STSpin220_SetDeviceParamsToPredefinedValues(void);
Davidroid 4:265c30b9112a 850 bool STSpin220_SetStepModeWithoutReset(motorStepMode_t stepMode);
Davidroid 4:265c30b9112a 851 void STSpin220_StartMovement(void);
Davidroid 4:265c30b9112a 852 void STSpin220_StepClockHandler(void);
davide.aliprandi@st.com 3:a132aa6d66e4 853
davide.aliprandi@st.com 3:a132aa6d66e4 854 /*** Component's I/O Methods ***/
davide.aliprandi@st.com 3:a132aa6d66e4 855
davide.aliprandi@st.com 3:a132aa6d66e4 856 /* ACTION 8 --------------------------------------------------------------*
davide.aliprandi@st.com 3:a132aa6d66e4 857 * Implement here other I/O methods beyond those already implemented *
davide.aliprandi@st.com 3:a132aa6d66e4 858 * above, which are declared extern within the component's header file. *
davide.aliprandi@st.com 3:a132aa6d66e4 859 *------------------------------------------------------------------------*/
davide.aliprandi@st.com 3:a132aa6d66e4 860 /**
davide.aliprandi@st.com 3:a132aa6d66e4 861 * @brief Making the CPU wait.
davide.aliprandi@st.com 3:a132aa6d66e4 862 * @param None.
davide.aliprandi@st.com 3:a132aa6d66e4 863 * @retval None.
davide.aliprandi@st.com 3:a132aa6d66e4 864 */
Davidroid 4:265c30b9112a 865 void STSpin220_Board_Delay(uint32_t delay)
davide.aliprandi@st.com 3:a132aa6d66e4 866 {
davide.aliprandi@st.com 3:a132aa6d66e4 867 wait_ms(delay);
davide.aliprandi@st.com 3:a132aa6d66e4 868 }
davide.aliprandi@st.com 3:a132aa6d66e4 869
davide.aliprandi@st.com 3:a132aa6d66e4 870 /**
davide.aliprandi@st.com 3:a132aa6d66e4 871 * @brief Disable the power bridges (leave the output bridges HiZ).
davide.aliprandi@st.com 3:a132aa6d66e4 872 * @param None.
davide.aliprandi@st.com 3:a132aa6d66e4 873 * @retval None.
davide.aliprandi@st.com 3:a132aa6d66e4 874 */
Davidroid 4:265c30b9112a 875 void STSpin220_Board_Disable(void)
davide.aliprandi@st.com 3:a132aa6d66e4 876 {
davide.aliprandi@st.com 3:a132aa6d66e4 877 fault_and_enable.disable_irq();
davide.aliprandi@st.com 3:a132aa6d66e4 878 DigitalOut fault_and_enable(fault_and_enable_pinName);
davide.aliprandi@st.com 3:a132aa6d66e4 879 fault_and_enable.write(0);
davide.aliprandi@st.com 3:a132aa6d66e4 880 }
davide.aliprandi@st.com 3:a132aa6d66e4 881
davide.aliprandi@st.com 3:a132aa6d66e4 882 /**
davide.aliprandi@st.com 3:a132aa6d66e4 883 * @brief Disabling interrupts.
davide.aliprandi@st.com 3:a132aa6d66e4 884 * @param None.
davide.aliprandi@st.com 3:a132aa6d66e4 885 * @retval None.
davide.aliprandi@st.com 3:a132aa6d66e4 886 */
Davidroid 4:265c30b9112a 887 void STSpin220_Board_DisableIrq(void)
davide.aliprandi@st.com 3:a132aa6d66e4 888 {
davide.aliprandi@st.com 3:a132aa6d66e4 889 __disable_irq();
davide.aliprandi@st.com 3:a132aa6d66e4 890 }
davide.aliprandi@st.com 3:a132aa6d66e4 891
davide.aliprandi@st.com 3:a132aa6d66e4 892 /**
davide.aliprandi@st.com 3:a132aa6d66e4 893 * @brief Enable the power bridges (leave the output bridges HiZ).
davide.aliprandi@st.com 3:a132aa6d66e4 894 * @param None.
davide.aliprandi@st.com 3:a132aa6d66e4 895 * @retval None.
davide.aliprandi@st.com 3:a132aa6d66e4 896 */
Davidroid 4:265c30b9112a 897 void STSpin220_Board_Enable(void)
davide.aliprandi@st.com 3:a132aa6d66e4 898 {
davide.aliprandi@st.com 3:a132aa6d66e4 899 DigitalOut fault_and_enable_do(fault_and_enable_pinName);
davide.aliprandi@st.com 3:a132aa6d66e4 900 fault_and_enable_do.write(1);
davide.aliprandi@st.com 3:a132aa6d66e4 901 fault_and_enable.fall(fault_and_enable_irqFunctionPointer);
davide.aliprandi@st.com 3:a132aa6d66e4 902 fault_and_enable.mode(PullUp);
davide.aliprandi@st.com 3:a132aa6d66e4 903 wait_ms(1);
davide.aliprandi@st.com 3:a132aa6d66e4 904 fault_and_enable.enable_irq();
davide.aliprandi@st.com 3:a132aa6d66e4 905 }
davide.aliprandi@st.com 3:a132aa6d66e4 906
davide.aliprandi@st.com 3:a132aa6d66e4 907 /**
davide.aliprandi@st.com 3:a132aa6d66e4 908 * @brief Enabling interrupts.
davide.aliprandi@st.com 3:a132aa6d66e4 909 * @param None.
davide.aliprandi@st.com 3:a132aa6d66e4 910 * @retval None.
davide.aliprandi@st.com 3:a132aa6d66e4 911 */
Davidroid 4:265c30b9112a 912 void STSpin220_Board_EnableIrq(void)
davide.aliprandi@st.com 3:a132aa6d66e4 913 {
davide.aliprandi@st.com 3:a132aa6d66e4 914 __enable_irq();
davide.aliprandi@st.com 3:a132aa6d66e4 915 }
nucleosam 0:0ccd34c56c66 916
davide.aliprandi@st.com 3:a132aa6d66e4 917 /**
davide.aliprandi@st.com 3:a132aa6d66e4 918 * @brief Set the duty cycle of the PwmOut used for the REF
davide.aliprandi@st.com 3:a132aa6d66e4 919 * reference voltage generation and actually start the pwm if the duty cycle
davide.aliprandi@st.com 3:a132aa6d66e4 920 * is not zero.
davide.aliprandi@st.com 3:a132aa6d66e4 921 * @param[in] dutyCycle 0 - 100%
davide.aliprandi@st.com 3:a132aa6d66e4 922 * @retval None
davide.aliprandi@st.com 3:a132aa6d66e4 923 */
Davidroid 4:265c30b9112a 924 void STSpin220_Board_PwmRefSetDutyCycle(uint8_t dutyCycle)
davide.aliprandi@st.com 3:a132aa6d66e4 925 {
davide.aliprandi@st.com 3:a132aa6d66e4 926 pwm_ref.write(((float)(100-dutyCycle))/100);
davide.aliprandi@st.com 3:a132aa6d66e4 927 }
davide.aliprandi@st.com 3:a132aa6d66e4 928
davide.aliprandi@st.com 3:a132aa6d66e4 929 /**
davide.aliprandi@st.com 3:a132aa6d66e4 930 * @brief Set the frequency of the PwmOut used for the REF
davide.aliprandi@st.com 3:a132aa6d66e4 931 * reference voltage generation.
davide.aliprandi@st.com 3:a132aa6d66e4 932 * @param[in] newFreq in Hz.
davide.aliprandi@st.com 3:a132aa6d66e4 933 * @retval None.
davide.aliprandi@st.com 3:a132aa6d66e4 934 */
Davidroid 4:265c30b9112a 935 void STSpin220_Board_PwmRefSetFreq(uint32_t newFreq)
davide.aliprandi@st.com 3:a132aa6d66e4 936 {
davide.aliprandi@st.com 3:a132aa6d66e4 937 pwm_ref.period_us(1000000.0f/newFreq);
davide.aliprandi@st.com 3:a132aa6d66e4 938 }
davide.aliprandi@st.com 3:a132aa6d66e4 939
davide.aliprandi@st.com 3:a132aa6d66e4 940 /**
davide.aliprandi@st.com 3:a132aa6d66e4 941 * @brief Start the PwmOut for the REF pin.
davide.aliprandi@st.com 3:a132aa6d66e4 942 * @param[in] frequency frequency of the PwmOut used to generate the REF
davide.aliprandi@st.com 3:a132aa6d66e4 943 * reference voltage for the bridges.
davide.aliprandi@st.com 3:a132aa6d66e4 944 * @param[in] torqueMode Torque mode as specified in enum motorTorqueMode_t
davide.aliprandi@st.com 3:a132aa6d66e4 945 * @retval None.
davide.aliprandi@st.com 3:a132aa6d66e4 946 */
Davidroid 4:265c30b9112a 947 void STSpin220_Board_PwmRefStart(uint32_t frequency, motorTorqueMode_t torqueMode)
davide.aliprandi@st.com 3:a132aa6d66e4 948 {
davide.aliprandi@st.com 3:a132aa6d66e4 949 /* Setting the period of the PwmOut. */
davide.aliprandi@st.com 3:a132aa6d66e4 950 pwm_ref.period_us(1000000.0f/frequency);
davide.aliprandi@st.com 3:a132aa6d66e4 951 /* Setting the duty cycle and actually starting the of the PwmOut. */
Davidroid 4:265c30b9112a 952 STSpin220_ApplyTorque(torqueMode);
davide.aliprandi@st.com 3:a132aa6d66e4 953 wait_ms(5*PWM_FILTER_TIME_CONSTANT);
davide.aliprandi@st.com 3:a132aa6d66e4 954 }
davide.aliprandi@st.com 3:a132aa6d66e4 955
davide.aliprandi@st.com 3:a132aa6d66e4 956 /**
davide.aliprandi@st.com 3:a132aa6d66e4 957 * @brief Exit the device from standby reset mode.
davide.aliprandi@st.com 3:a132aa6d66e4 958 * @param None.
davide.aliprandi@st.com 3:a132aa6d66e4 959 * @retval None.
davide.aliprandi@st.com 3:a132aa6d66e4 960 */
Davidroid 4:265c30b9112a 961 void STSpin220_Board_ReleaseReset(void)
davide.aliprandi@st.com 3:a132aa6d66e4 962 {
davide.aliprandi@st.com 3:a132aa6d66e4 963 stby_reset = 1;
davide.aliprandi@st.com 3:a132aa6d66e4 964 }
davide.aliprandi@st.com 3:a132aa6d66e4 965
davide.aliprandi@st.com 3:a132aa6d66e4 966 /**
davide.aliprandi@st.com 3:a132aa6d66e4 967 * @brief Put the device in standby reset mode.
davide.aliprandi@st.com 3:a132aa6d66e4 968 * @param None.
davide.aliprandi@st.com 3:a132aa6d66e4 969 * @retval None.
davide.aliprandi@st.com 3:a132aa6d66e4 970 */
Davidroid 4:265c30b9112a 971 void STSpin220_Board_Reset(void)
davide.aliprandi@st.com 3:a132aa6d66e4 972 {
davide.aliprandi@st.com 3:a132aa6d66e4 973 stby_reset = 0;
davide.aliprandi@st.com 3:a132aa6d66e4 974 }
davide.aliprandi@st.com 3:a132aa6d66e4 975
davide.aliprandi@st.com 3:a132aa6d66e4 976 /**
davide.aliprandi@st.com 3:a132aa6d66e4 977 * @brief Set the DIR\MODE4 pin.
davide.aliprandi@st.com 3:a132aa6d66e4 978 * @param dir motor direction FORWARD or BACKWARD.
davide.aliprandi@st.com 3:a132aa6d66e4 979 * @retval None.
davide.aliprandi@st.com 3:a132aa6d66e4 980 */
Davidroid 4:265c30b9112a 981 void STSpin220_Board_SetDirectionGpio(motorDir_t dir)
davide.aliprandi@st.com 3:a132aa6d66e4 982 {
Davidroid 5:fd1315beea32 983 if (dir==BACKWARD)
Davidroid 5:fd1315beea32 984 {
Davidroid 5:fd1315beea32 985 direction_mode4 = 0;
Davidroid 5:fd1315beea32 986 }
Davidroid 5:fd1315beea32 987 else
Davidroid 5:fd1315beea32 988 {
Davidroid 5:fd1315beea32 989 direction_mode4 = 1;
Davidroid 5:fd1315beea32 990 }
davide.aliprandi@st.com 3:a132aa6d66e4 991 }
davide.aliprandi@st.com 3:a132aa6d66e4 992
davide.aliprandi@st.com 3:a132aa6d66e4 993 /**
davide.aliprandi@st.com 3:a132aa6d66e4 994 * @brief Select Full Step mode
davide.aliprandi@st.com 3:a132aa6d66e4 995 * @param None.
davide.aliprandi@st.com 3:a132aa6d66e4 996 * @retval None
davide.aliprandi@st.com 3:a132aa6d66e4 997 */
Davidroid 4:265c30b9112a 998 void STSpin220_Board_SetFullStep(void)
davide.aliprandi@st.com 3:a132aa6d66e4 999 {
davide.aliprandi@st.com 3:a132aa6d66e4 1000 mode1 = 0;
davide.aliprandi@st.com 3:a132aa6d66e4 1001 mode2 = 0;
davide.aliprandi@st.com 3:a132aa6d66e4 1002 }
davide.aliprandi@st.com 3:a132aa6d66e4 1003
davide.aliprandi@st.com 3:a132aa6d66e4 1004 /**
davide.aliprandi@st.com 3:a132aa6d66e4 1005 * @brief Select the STSpin220 mode1, mode2, mode3 and mode4 pins levels.
davide.aliprandi@st.com 3:a132aa6d66e4 1006 * @param[in] modePin1Level level of the mode1 gpio (0 low, 1+ high)
davide.aliprandi@st.com 3:a132aa6d66e4 1007 * @param[in] modePin2Level level of the mode2 gpio (0 low, 1+ high)
davide.aliprandi@st.com 3:a132aa6d66e4 1008 * @param[in] modePin3Level level of the mode3 gpio (0 low, 1+ high)
davide.aliprandi@st.com 3:a132aa6d66e4 1009 * @param[in] modePin4Level level of the mode4 gpio (0 low, 1+ high)
davide.aliprandi@st.com 3:a132aa6d66e4 1010 * @retval 1
davide.aliprandi@st.com 3:a132aa6d66e4 1011 */
Davidroid 4:265c30b9112a 1012 uint8_t STSpin220_Board_SetModePins(uint8_t modePin1Level,\
davide.aliprandi@st.com 3:a132aa6d66e4 1013 uint8_t modePin2Level,\
davide.aliprandi@st.com 3:a132aa6d66e4 1014 uint8_t modePin3Level,\
davide.aliprandi@st.com 3:a132aa6d66e4 1015 uint8_t modePin4Level)
davide.aliprandi@st.com 3:a132aa6d66e4 1016 {
davide.aliprandi@st.com 3:a132aa6d66e4 1017 mode1 = modePin1Level;
davide.aliprandi@st.com 3:a132aa6d66e4 1018 mode2 = modePin2Level;
davide.aliprandi@st.com 3:a132aa6d66e4 1019 stck_mode3 = modePin3Level;
davide.aliprandi@st.com 3:a132aa6d66e4 1020 direction_mode4 = modePin4Level;
davide.aliprandi@st.com 3:a132aa6d66e4 1021 return 1;
davide.aliprandi@st.com 3:a132aa6d66e4 1022 }
davide.aliprandi@st.com 3:a132aa6d66e4 1023
davide.aliprandi@st.com 3:a132aa6d66e4 1024 /**
davide.aliprandi@st.com 3:a132aa6d66e4 1025 * @brief Reset the STCK\MODE3 pin.
davide.aliprandi@st.com 3:a132aa6d66e4 1026 * @param None.
davide.aliprandi@st.com 3:a132aa6d66e4 1027 * @retval None.
davide.aliprandi@st.com 3:a132aa6d66e4 1028 */
Davidroid 4:265c30b9112a 1029 void STSpin220_Board_StckMode3_Reset(void)
davide.aliprandi@st.com 3:a132aa6d66e4 1030 {
davide.aliprandi@st.com 3:a132aa6d66e4 1031 stck_mode3 = 0;
davide.aliprandi@st.com 3:a132aa6d66e4 1032 }
davide.aliprandi@st.com 3:a132aa6d66e4 1033
davide.aliprandi@st.com 3:a132aa6d66e4 1034 /**
davide.aliprandi@st.com 3:a132aa6d66e4 1035 * @brief Set the STCK\MODE3 pin.
davide.aliprandi@st.com 3:a132aa6d66e4 1036 * @param None.
davide.aliprandi@st.com 3:a132aa6d66e4 1037 * @retval None.
davide.aliprandi@st.com 3:a132aa6d66e4 1038 */
Davidroid 4:265c30b9112a 1039 void STSpin220_Board_StckMode3_Set(void)
davide.aliprandi@st.com 3:a132aa6d66e4 1040 {
davide.aliprandi@st.com 3:a132aa6d66e4 1041 stck_mode3 = 1;
davide.aliprandi@st.com 3:a132aa6d66e4 1042 }
davide.aliprandi@st.com 3:a132aa6d66e4 1043
davide.aliprandi@st.com 3:a132aa6d66e4 1044 /**
davide.aliprandi@st.com 3:a132aa6d66e4 1045 * @brief Initialises the step clock pin level
davide.aliprandi@st.com 3:a132aa6d66e4 1046 * @param None.
davide.aliprandi@st.com 3:a132aa6d66e4 1047 * @retval None
davide.aliprandi@st.com 3:a132aa6d66e4 1048 */
Davidroid 4:265c30b9112a 1049 void STSpin220_Board_TimStckInit(bool check)
davide.aliprandi@st.com 3:a132aa6d66e4 1050 {
Davidroid 5:fd1315beea32 1051 if (monitor.is_connected())
Davidroid 5:fd1315beea32 1052 {
Davidroid 5:fd1315beea32 1053 monitor = 0;
Davidroid 5:fd1315beea32 1054 }
Davidroid 5:fd1315beea32 1055 if (check==false)
Davidroid 5:fd1315beea32 1056 {
Davidroid 5:fd1315beea32 1057 stck_mode3 = 0;
Davidroid 5:fd1315beea32 1058 }
Davidroid 5:fd1315beea32 1059 else
Davidroid 5:fd1315beea32 1060 {
Davidroid 5:fd1315beea32 1061 if (stck_mode3==1)
Davidroid 5:fd1315beea32 1062 {
Davidroid 5:fd1315beea32 1063 STSpin220_ErrorHandler(STSPIN220_ERROR_STEP_CLOCK);
Davidroid 5:fd1315beea32 1064 }
Davidroid 5:fd1315beea32 1065 }
davide.aliprandi@st.com 3:a132aa6d66e4 1066 }
nucleosam 0:0ccd34c56c66 1067
davide.aliprandi@st.com 3:a132aa6d66e4 1068 /**
davide.aliprandi@st.com 3:a132aa6d66e4 1069 * @brief Setting the Stck Timeout delay
davide.aliprandi@st.com 3:a132aa6d66e4 1070 * and attaching a callback function to it.
davide.aliprandi@st.com 3:a132aa6d66e4 1071 * @param frequency The frequency corresponding to the delay.
davide.aliprandi@st.com 3:a132aa6d66e4 1072 * @retval None.
davide.aliprandi@st.com 3:a132aa6d66e4 1073 */
Davidroid 4:265c30b9112a 1074 void STSpin220_Board_TimStckSetFreq(uint16_t newFreq)
davide.aliprandi@st.com 3:a132aa6d66e4 1075 {
davide.aliprandi@st.com 3:a132aa6d66e4 1076 /* Computing the delay of the Timeout. */
davide.aliprandi@st.com 3:a132aa6d66e4 1077 float delay_us = (1000000.0f / 2 )/ newFreq;
davide.aliprandi@st.com 3:a132aa6d66e4 1078
davide.aliprandi@st.com 3:a132aa6d66e4 1079 /* Attaching a function which updates */
davide.aliprandi@st.com 3:a132aa6d66e4 1080 /* the state machine after the elapsed period_us time. */
Davidroid 4:265c30b9112a 1081 tim_stck.attach_us(this, &STSpin220::STSpin220_StepClockHandler, delay_us);
davide.aliprandi@st.com 3:a132aa6d66e4 1082 }
davide.aliprandi@st.com 3:a132aa6d66e4 1083
Davidroid 4:265c30b9112a 1084 void STSpin220_Board_Monitor_Set(void)
davide.aliprandi@st.com 3:a132aa6d66e4 1085 {
Davidroid 5:fd1315beea32 1086 if (monitor.is_connected())
Davidroid 5:fd1315beea32 1087 {
Davidroid 5:fd1315beea32 1088 monitor = 1;
Davidroid 5:fd1315beea32 1089 }
davide.aliprandi@st.com 3:a132aa6d66e4 1090 }
davide.aliprandi@st.com 3:a132aa6d66e4 1091
Davidroid 4:265c30b9112a 1092 void STSpin220_Board_Monitor_Reset(void)
davide.aliprandi@st.com 3:a132aa6d66e4 1093 {
Davidroid 5:fd1315beea32 1094 if (monitor.is_connected())
Davidroid 5:fd1315beea32 1095 {
Davidroid 5:fd1315beea32 1096 monitor = 0;
Davidroid 5:fd1315beea32 1097 }
davide.aliprandi@st.com 3:a132aa6d66e4 1098 }
davide.aliprandi@st.com 3:a132aa6d66e4 1099
davide.aliprandi@st.com 3:a132aa6d66e4 1100 /**
davide.aliprandi@st.com 3:a132aa6d66e4 1101 * @brief Stopping the Timeout.
davide.aliprandi@st.com 3:a132aa6d66e4 1102 * @param None.
davide.aliprandi@st.com 3:a132aa6d66e4 1103 * @retval None.
davide.aliprandi@st.com 3:a132aa6d66e4 1104 */
Davidroid 4:265c30b9112a 1105 uint8_t STSpin220_Board_TimStckStop(volatile uint8_t *pToggleOdd)
davide.aliprandi@st.com 3:a132aa6d66e4 1106 {
davide.aliprandi@st.com 3:a132aa6d66e4 1107 __disable_irq();
davide.aliprandi@st.com 3:a132aa6d66e4 1108 if (*pToggleOdd == 1)
davide.aliprandi@st.com 3:a132aa6d66e4 1109 {
davide.aliprandi@st.com 3:a132aa6d66e4 1110 __enable_irq();
davide.aliprandi@st.com 3:a132aa6d66e4 1111 return 1;
davide.aliprandi@st.com 3:a132aa6d66e4 1112 }
davide.aliprandi@st.com 3:a132aa6d66e4 1113 if (stck_mode3 != 0)
davide.aliprandi@st.com 3:a132aa6d66e4 1114 {
davide.aliprandi@st.com 3:a132aa6d66e4 1115 __enable_irq();
davide.aliprandi@st.com 3:a132aa6d66e4 1116 return 0;
davide.aliprandi@st.com 3:a132aa6d66e4 1117 }
davide.aliprandi@st.com 3:a132aa6d66e4 1118 tim_stck.detach();
davide.aliprandi@st.com 3:a132aa6d66e4 1119 __enable_irq();
davide.aliprandi@st.com 3:a132aa6d66e4 1120 return 1;
davide.aliprandi@st.com 3:a132aa6d66e4 1121 }
davide.aliprandi@st.com 3:a132aa6d66e4 1122
davide.aliprandi@st.com 3:a132aa6d66e4 1123 /**
davide.aliprandi@st.com 3:a132aa6d66e4 1124 * @brief Unselect Full Step mode
davide.aliprandi@st.com 3:a132aa6d66e4 1125 * @param None.
davide.aliprandi@st.com 3:a132aa6d66e4 1126 * @retval None
davide.aliprandi@st.com 3:a132aa6d66e4 1127 */
Davidroid 4:265c30b9112a 1128 void STSpin220_Board_UnsetFullStep(void)
davide.aliprandi@st.com 3:a132aa6d66e4 1129 {
davide.aliprandi@st.com 3:a132aa6d66e4 1130 mode1 = 1;
davide.aliprandi@st.com 3:a132aa6d66e4 1131 }
davide.aliprandi@st.com 3:a132aa6d66e4 1132
davide.aliprandi@st.com 3:a132aa6d66e4 1133 protected:
davide.aliprandi@st.com 3:a132aa6d66e4 1134
davide.aliprandi@st.com 3:a132aa6d66e4 1135 /*** Component's Instance Variables ***/
nucleosam 0:0ccd34c56c66 1136
davide.aliprandi@st.com 3:a132aa6d66e4 1137 /* ACTION 9 --------------------------------------------------------------*
davide.aliprandi@st.com 3:a132aa6d66e4 1138 * Declare here interrupt related variables, if needed. *
davide.aliprandi@st.com 3:a132aa6d66e4 1139 * Note that interrupt handling is platform dependent, see *
davide.aliprandi@st.com 3:a132aa6d66e4 1140 * "Interrupt Related Methods" above. *
davide.aliprandi@st.com 3:a132aa6d66e4 1141 * *
davide.aliprandi@st.com 3:a132aa6d66e4 1142 * Example: *
davide.aliprandi@st.com 3:a132aa6d66e4 1143 * + mbed: *
davide.aliprandi@st.com 3:a132aa6d66e4 1144 * InterruptIn feature_irq; *
davide.aliprandi@st.com 3:a132aa6d66e4 1145 *------------------------------------------------------------------------*/
davide.aliprandi@st.com 3:a132aa6d66e4 1146 /* Fault Interrupt and chip enable. */
davide.aliprandi@st.com 3:a132aa6d66e4 1147 InterruptIn fault_and_enable;
davide.aliprandi@st.com 3:a132aa6d66e4 1148
davide.aliprandi@st.com 3:a132aa6d66e4 1149 /* Interrupt to toggle the MODE3\STCK pin */
davide.aliprandi@st.com 3:a132aa6d66e4 1150 Timeout tim_stck;
davide.aliprandi@st.com 3:a132aa6d66e4 1151
davide.aliprandi@st.com 3:a132aa6d66e4 1152 /* ACTION 10 -------------------------------------------------------------*
davide.aliprandi@st.com 3:a132aa6d66e4 1153 * Declare here other pin related variables, if needed. *
davide.aliprandi@st.com 3:a132aa6d66e4 1154 * *
davide.aliprandi@st.com 3:a132aa6d66e4 1155 * Example: *
davide.aliprandi@st.com 3:a132aa6d66e4 1156 * + mbed: *
davide.aliprandi@st.com 3:a132aa6d66e4 1157 * DigitalOut standby_reset; *
davide.aliprandi@st.com 3:a132aa6d66e4 1158 *------------------------------------------------------------------------*/
davide.aliprandi@st.com 3:a132aa6d66e4 1159 /* STBY\RESET pin. */
davide.aliprandi@st.com 3:a132aa6d66e4 1160 DigitalOut stby_reset;
davide.aliprandi@st.com 3:a132aa6d66e4 1161 /* MODE4\DIR pin. */
davide.aliprandi@st.com 3:a132aa6d66e4 1162 DigitalOut direction_mode4;
davide.aliprandi@st.com 3:a132aa6d66e4 1163 /* MODE1 pin */
davide.aliprandi@st.com 3:a132aa6d66e4 1164 DigitalOut mode1;
davide.aliprandi@st.com 3:a132aa6d66e4 1165 /* MODE2 pin */
davide.aliprandi@st.com 3:a132aa6d66e4 1166 DigitalOut mode2;
davide.aliprandi@st.com 3:a132aa6d66e4 1167 /* MODE3\STCK pin. */
davide.aliprandi@st.com 3:a132aa6d66e4 1168 DigitalOut stck_mode3;
davide.aliprandi@st.com 3:a132aa6d66e4 1169
davide.aliprandi@st.com 3:a132aa6d66e4 1170 /* Pulse Width Modulation pin for REF pin */
davide.aliprandi@st.com 3:a132aa6d66e4 1171 PwmOut pwm_ref;
davide.aliprandi@st.com 3:a132aa6d66e4 1172
davide.aliprandi@st.com 3:a132aa6d66e4 1173 /* Monitoring of step clock handler duration */
davide.aliprandi@st.com 3:a132aa6d66e4 1174 DigitalOut monitor;
nucleosam 0:0ccd34c56c66 1175
davide.aliprandi@st.com 3:a132aa6d66e4 1176 /* fault and enable pin */
davide.aliprandi@st.com 3:a132aa6d66e4 1177 PinName fault_and_enable_pinName;
davide.aliprandi@st.com 3:a132aa6d66e4 1178
davide.aliprandi@st.com 3:a132aa6d66e4 1179 /* ACTION 11 -------------------------------------------------------------*
davide.aliprandi@st.com 3:a132aa6d66e4 1180 * Declare here communication related variables, if needed. *
davide.aliprandi@st.com 3:a132aa6d66e4 1181 * *
davide.aliprandi@st.com 3:a132aa6d66e4 1182 * Example: *
davide.aliprandi@st.com 3:a132aa6d66e4 1183 * + mbed: *
davide.aliprandi@st.com 3:a132aa6d66e4 1184 * DigitalOut ssel; *
davide.aliprandi@st.com 3:a132aa6d66e4 1185 * DevSPI &dev_spi; *
davide.aliprandi@st.com 3:a132aa6d66e4 1186 *------------------------------------------------------------------------*/
davide.aliprandi@st.com 3:a132aa6d66e4 1187 /* Configuration. */
davide.aliprandi@st.com 3:a132aa6d66e4 1188
davide.aliprandi@st.com 3:a132aa6d66e4 1189 /* IO Device. */
davide.aliprandi@st.com 3:a132aa6d66e4 1190
davide.aliprandi@st.com 3:a132aa6d66e4 1191 /* ACTION 12 -------------------------------------------------------------*
davide.aliprandi@st.com 3:a132aa6d66e4 1192 * Declare here identity related variables, if needed. *
davide.aliprandi@st.com 3:a132aa6d66e4 1193 * Note that there should be only a unique identifier for each component, *
davide.aliprandi@st.com 3:a132aa6d66e4 1194 * which should be the "who_am_i" parameter. *
davide.aliprandi@st.com 3:a132aa6d66e4 1195 *------------------------------------------------------------------------*/
davide.aliprandi@st.com 3:a132aa6d66e4 1196 /* Identity */
davide.aliprandi@st.com 3:a132aa6d66e4 1197 uint8_t who_am_i;
davide.aliprandi@st.com 3:a132aa6d66e4 1198
davide.aliprandi@st.com 3:a132aa6d66e4 1199 /* ACTION 13 -------------------------------------------------------------*
davide.aliprandi@st.com 3:a132aa6d66e4 1200 * Declare here the component's static and non-static data, one variable *
davide.aliprandi@st.com 3:a132aa6d66e4 1201 * per line. *
davide.aliprandi@st.com 3:a132aa6d66e4 1202 * *
davide.aliprandi@st.com 3:a132aa6d66e4 1203 * Example: *
davide.aliprandi@st.com 3:a132aa6d66e4 1204 * float measure; *
davide.aliprandi@st.com 3:a132aa6d66e4 1205 * int instance_id; *
davide.aliprandi@st.com 3:a132aa6d66e4 1206 * static int number_of_instances; *
davide.aliprandi@st.com 3:a132aa6d66e4 1207 *------------------------------------------------------------------------*/
davide.aliprandi@st.com 3:a132aa6d66e4 1208 /* Data. */
davide.aliprandi@st.com 3:a132aa6d66e4 1209 void (*fault_and_enable_irqFunctionPointer)(void);
davide.aliprandi@st.com 3:a132aa6d66e4 1210 void (*errorHandlerCallback)(uint16_t error);
davide.aliprandi@st.com 3:a132aa6d66e4 1211 deviceParams_t devicePrm;
davide.aliprandi@st.com 3:a132aa6d66e4 1212 uint8_t deviceInstance;
davide.aliprandi@st.com 3:a132aa6d66e4 1213 volatile uint8_t toggleOdd;
davide.aliprandi@st.com 3:a132aa6d66e4 1214
davide.aliprandi@st.com 3:a132aa6d66e4 1215 /* Static data. */
davide.aliprandi@st.com 3:a132aa6d66e4 1216 static uint8_t numberOfDevices;
davide.aliprandi@st.com 3:a132aa6d66e4 1217
davide.aliprandi@st.com 3:a132aa6d66e4 1218 public:
davide.aliprandi@st.com 3:a132aa6d66e4 1219
davide.aliprandi@st.com 3:a132aa6d66e4 1220 /* Static data. */
davide.aliprandi@st.com 3:a132aa6d66e4 1221
davide.aliprandi@st.com 3:a132aa6d66e4 1222 };
davide.aliprandi@st.com 3:a132aa6d66e4 1223
davide.aliprandi@st.com 3:a132aa6d66e4 1224 #endif // __STSPIN220_CLASS_H
davide.aliprandi@st.com 3:a132aa6d66e4 1225
davide.aliprandi@st.com 3:a132aa6d66e4 1226 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/