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