ST / X_NUCLEO_IHM06A1

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
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 * @file STSpin220.h
davide.aliprandi@st.com 3:a132aa6d66e4 3 * @author IPC Rennes
davide.aliprandi@st.com 3:a132aa6d66e4 4 * @version V1.1.0
davide.aliprandi@st.com 3:a132aa6d66e4 5 * @date May 26th, 2016
davide.aliprandi@st.com 3:a132aa6d66e4 6 * @brief Header for STSpin220 driver (fully integrated microstepping motor driver)
davide.aliprandi@st.com 3:a132aa6d66e4 7 * @note (C) COPYRIGHT 2016 STMicroelectronics
davide.aliprandi@st.com 3:a132aa6d66e4 8 ******************************************************************************
davide.aliprandi@st.com 3:a132aa6d66e4 9 * @attention
davide.aliprandi@st.com 3:a132aa6d66e4 10 *
davide.aliprandi@st.com 3:a132aa6d66e4 11 * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>
davide.aliprandi@st.com 3:a132aa6d66e4 12 *
davide.aliprandi@st.com 3:a132aa6d66e4 13 * Redistribution and use in source and binary forms, with or without modification,
davide.aliprandi@st.com 3:a132aa6d66e4 14 * are permitted provided that the following conditions are met:
davide.aliprandi@st.com 3:a132aa6d66e4 15 * 1. Redistributions of source code must retain the above copyright notice,
davide.aliprandi@st.com 3:a132aa6d66e4 16 * this list of conditions and the following disclaimer.
davide.aliprandi@st.com 3:a132aa6d66e4 17 * 2. Redistributions in binary form must reproduce the above copyright notice,
davide.aliprandi@st.com 3:a132aa6d66e4 18 * this list of conditions and the following disclaimer in the documentation
davide.aliprandi@st.com 3:a132aa6d66e4 19 * and/or other materials provided with the distribution.
davide.aliprandi@st.com 3:a132aa6d66e4 20 * 3. Neither the name of STMicroelectronics nor the names of its contributors
davide.aliprandi@st.com 3:a132aa6d66e4 21 * may be used to endorse or promote products derived from this software
davide.aliprandi@st.com 3:a132aa6d66e4 22 * without specific prior written permission.
davide.aliprandi@st.com 3:a132aa6d66e4 23 *
davide.aliprandi@st.com 3:a132aa6d66e4 24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
davide.aliprandi@st.com 3:a132aa6d66e4 25 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
davide.aliprandi@st.com 3:a132aa6d66e4 26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
davide.aliprandi@st.com 3:a132aa6d66e4 27 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
davide.aliprandi@st.com 3:a132aa6d66e4 28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
davide.aliprandi@st.com 3:a132aa6d66e4 29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
davide.aliprandi@st.com 3:a132aa6d66e4 30 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
davide.aliprandi@st.com 3:a132aa6d66e4 31 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
davide.aliprandi@st.com 3:a132aa6d66e4 32 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
davide.aliprandi@st.com 3:a132aa6d66e4 33 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
davide.aliprandi@st.com 3:a132aa6d66e4 34 *
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 /* Define to prevent recursive inclusion -------------------------------------*/
davide.aliprandi@st.com 3:a132aa6d66e4 39 #ifndef __STSPIN220_H
davide.aliprandi@st.com 3:a132aa6d66e4 40 #define __STSPIN220_H
davide.aliprandi@st.com 3:a132aa6d66e4 41
davide.aliprandi@st.com 3:a132aa6d66e4 42 #ifdef __cplusplus
davide.aliprandi@st.com 3:a132aa6d66e4 43 extern "C" {
davide.aliprandi@st.com 3:a132aa6d66e4 44 #endif
davide.aliprandi@st.com 3:a132aa6d66e4 45
davide.aliprandi@st.com 3:a132aa6d66e4 46 /* Includes ------------------------------------------------------------------*/
davide.aliprandi@st.com 3:a132aa6d66e4 47 #include "STSpin220_config.h"
davide.aliprandi@st.com 3:a132aa6d66e4 48 #include "motor_def.h"
davide.aliprandi@st.com 3:a132aa6d66e4 49
davide.aliprandi@st.com 3:a132aa6d66e4 50 /* Definitions ---------------------------------------------------------------*/
davide.aliprandi@st.com 3:a132aa6d66e4 51
davide.aliprandi@st.com 3:a132aa6d66e4 52 /** @addtogroup Components
davide.aliprandi@st.com 3:a132aa6d66e4 53 * @{
davide.aliprandi@st.com 3:a132aa6d66e4 54 */
davide.aliprandi@st.com 3:a132aa6d66e4 55
davide.aliprandi@st.com 3:a132aa6d66e4 56 /** @defgroup STSpin220
davide.aliprandi@st.com 3:a132aa6d66e4 57 * @{
davide.aliprandi@st.com 3:a132aa6d66e4 58 */
davide.aliprandi@st.com 3:a132aa6d66e4 59
davide.aliprandi@st.com 3:a132aa6d66e4 60 /** @defgroup Stspin220_Exported_Constants Stspin220 Exported Constants
davide.aliprandi@st.com 3:a132aa6d66e4 61 * @{
davide.aliprandi@st.com 3:a132aa6d66e4 62 */
davide.aliprandi@st.com 3:a132aa6d66e4 63 /// Current FW major version
davide.aliprandi@st.com 3:a132aa6d66e4 64 #define STSPIN220_FW_MAJOR_VERSION (uint8_t)(1)
davide.aliprandi@st.com 3:a132aa6d66e4 65 /// Current FW minor version
davide.aliprandi@st.com 3:a132aa6d66e4 66 #define STSPIN220_FW_MINOR_VERSION (uint8_t)(1)
davide.aliprandi@st.com 3:a132aa6d66e4 67 /// Current FW patch version
davide.aliprandi@st.com 3:a132aa6d66e4 68 #define STSPIN220_FW_PATCH_VERSION (uint8_t)(0)
davide.aliprandi@st.com 3:a132aa6d66e4 69 /// Current FW version
davide.aliprandi@st.com 3:a132aa6d66e4 70 #define STSPIN220_FW_VERSION (uint32_t)((STSPIN220_FW_MAJOR_VERSION<<16)|\
davide.aliprandi@st.com 3:a132aa6d66e4 71 (STSPIN220_FW_MINOR_VERSION<<8)|\
davide.aliprandi@st.com 3:a132aa6d66e4 72 (STSPIN220_FW_PATCH_VERSION))
davide.aliprandi@st.com 3:a132aa6d66e4 73
davide.aliprandi@st.com 3:a132aa6d66e4 74 /// Max position
davide.aliprandi@st.com 3:a132aa6d66e4 75 #define STSPIN220_MAX_POSITION (0x7FFFFFFF)
davide.aliprandi@st.com 3:a132aa6d66e4 76
davide.aliprandi@st.com 3:a132aa6d66e4 77 /// Min position
davide.aliprandi@st.com 3:a132aa6d66e4 78 #define STSPIN220_MIN_POSITION (0x80000000)
davide.aliprandi@st.com 3:a132aa6d66e4 79
davide.aliprandi@st.com 3:a132aa6d66e4 80 /// Position range
davide.aliprandi@st.com 3:a132aa6d66e4 81 #define STSPIN220_POSITION_RANGE ((uint32_t)(STSPIN220_MAX_POSITION -\
davide.aliprandi@st.com 3:a132aa6d66e4 82 STSPIN220_MIN_POSITION))
davide.aliprandi@st.com 3:a132aa6d66e4 83 /// STSpin220 error base number
davide.aliprandi@st.com 3:a132aa6d66e4 84 #define STSPIN220_ERROR_BASE (0xA000)
davide.aliprandi@st.com 3:a132aa6d66e4 85
davide.aliprandi@st.com 3:a132aa6d66e4 86 /// run bit mask
davide.aliprandi@st.com 3:a132aa6d66e4 87 #define STSPIN220_RUN_BIT_MASK (0x01)
davide.aliprandi@st.com 3:a132aa6d66e4 88
davide.aliprandi@st.com 3:a132aa6d66e4 89 /// move bit mask
davide.aliprandi@st.com 3:a132aa6d66e4 90 #define STSPIN220_MOVE_BIT_MASK (0x02)
davide.aliprandi@st.com 3:a132aa6d66e4 91
davide.aliprandi@st.com 3:a132aa6d66e4 92 /// soft stop bit mask
davide.aliprandi@st.com 3:a132aa6d66e4 93 #define STSPIN220_SOFT_STOP_BIT_MASK (0x04)
davide.aliprandi@st.com 3:a132aa6d66e4 94
davide.aliprandi@st.com 3:a132aa6d66e4 95 /// direction change bit mask
davide.aliprandi@st.com 3:a132aa6d66e4 96 #define STSPIN220_DIR_CHANGE_BIT_MASK (0x08)
davide.aliprandi@st.com 3:a132aa6d66e4 97
davide.aliprandi@st.com 3:a132aa6d66e4 98 /// Maximum frequency of the step clock frequency in Hz
davide.aliprandi@st.com 3:a132aa6d66e4 99 #define STSPIN220_MAX_STCK_FREQ (10000)
davide.aliprandi@st.com 3:a132aa6d66e4 100
davide.aliprandi@st.com 3:a132aa6d66e4 101 /// Minimum frequency of the step clock frequency in Hz
davide.aliprandi@st.com 3:a132aa6d66e4 102 #define STSPIN220_MIN_STCK_FREQ (8)
davide.aliprandi@st.com 3:a132aa6d66e4 103
davide.aliprandi@st.com 3:a132aa6d66e4 104 /// Minimum duration of standby
davide.aliprandi@st.com 3:a132aa6d66e4 105 #define STANDBY_MIN_DURATION (1)
davide.aliprandi@st.com 3:a132aa6d66e4 106
davide.aliprandi@st.com 3:a132aa6d66e4 107 /// Dead time after standby exit
davide.aliprandi@st.com 3:a132aa6d66e4 108 #define AFTER_STANDBY_EXIT_DEAD_TIME (1)
davide.aliprandi@st.com 3:a132aa6d66e4 109
davide.aliprandi@st.com 3:a132aa6d66e4 110 /// Reset delay to select step mode
davide.aliprandi@st.com 3:a132aa6d66e4 111 #define SELECT_STEP_MODE_DELAY (1)
davide.aliprandi@st.com 3:a132aa6d66e4 112
davide.aliprandi@st.com 3:a132aa6d66e4 113 /// PWM REF and bridges disable delay
davide.aliprandi@st.com 3:a132aa6d66e4 114 #define DISABLE_DELAY (1)
davide.aliprandi@st.com 3:a132aa6d66e4 115
davide.aliprandi@st.com 3:a132aa6d66e4 116 /// Microstepping sequencer maximum value
davide.aliprandi@st.com 3:a132aa6d66e4 117 #define SEQUENCER_MAX_VALUE (uint16_t)(0x3FF)
davide.aliprandi@st.com 3:a132aa6d66e4 118
davide.aliprandi@st.com 3:a132aa6d66e4 119 /// MCU wait time after power bridges are enabled
davide.aliprandi@st.com 3:a132aa6d66e4 120 #define BRIDGE_TURN_ON_DELAY (10)
davide.aliprandi@st.com 3:a132aa6d66e4 121
davide.aliprandi@st.com 3:a132aa6d66e4 122 /// RC Filtering delay on the PWM
davide.aliprandi@st.com 3:a132aa6d66e4 123 #define PWM_FILTER_TIME_CONSTANT (5)
davide.aliprandi@st.com 3:a132aa6d66e4 124 /**
davide.aliprandi@st.com 3:a132aa6d66e4 125 * @}
davide.aliprandi@st.com 3:a132aa6d66e4 126 */
davide.aliprandi@st.com 3:a132aa6d66e4 127
davide.aliprandi@st.com 3:a132aa6d66e4 128 /* Types ---------------------------------------------------------------------*/
davide.aliprandi@st.com 3:a132aa6d66e4 129
davide.aliprandi@st.com 3:a132aa6d66e4 130 /** @defgroup Stspin220_Exported_Types Stspin220 Exported Types
davide.aliprandi@st.com 3:a132aa6d66e4 131 * @{
davide.aliprandi@st.com 3:a132aa6d66e4 132 */
davide.aliprandi@st.com 3:a132aa6d66e4 133
davide.aliprandi@st.com 3:a132aa6d66e4 134 /** @defgroup Error_Types Error Types
davide.aliprandi@st.com 3:a132aa6d66e4 135 * @{
davide.aliprandi@st.com 3:a132aa6d66e4 136 */
davide.aliprandi@st.com 3:a132aa6d66e4 137 /// Errors
davide.aliprandi@st.com 3:a132aa6d66e4 138 typedef enum {
davide.aliprandi@st.com 3:a132aa6d66e4 139 STSPIN220_ERROR_SET_HOME = STSPIN220_ERROR_BASE, /// Error while setting home position
davide.aliprandi@st.com 3:a132aa6d66e4 140 STSPIN220_ERROR_SET_MAX_SPEED = STSPIN220_ERROR_BASE + 1, /// Error while setting max speed
davide.aliprandi@st.com 3:a132aa6d66e4 141 STSPIN220_ERROR_SET_MIN_SPEED = STSPIN220_ERROR_BASE + 2, /// Error while setting min speed
davide.aliprandi@st.com 3:a132aa6d66e4 142 STSPIN220_ERROR_SET_ACCELERATION = STSPIN220_ERROR_BASE + 3, /// Error while setting acceleration
davide.aliprandi@st.com 3:a132aa6d66e4 143 STSPIN220_ERROR_SET_DECELERATION = STSPIN220_ERROR_BASE + 4, /// Error while setting decelaration
davide.aliprandi@st.com 3:a132aa6d66e4 144 STSPIN220_ERROR_MCU_OSC_CONFIG = STSPIN220_ERROR_BASE + 5, /// Error while configuring mcu oscillator
davide.aliprandi@st.com 3:a132aa6d66e4 145 STSPIN220_ERROR_MCU_CLOCK_CONFIG = STSPIN220_ERROR_BASE + 6, /// Error while configuring mcu clock
davide.aliprandi@st.com 3:a132aa6d66e4 146 STSPIN220_ERROR_POSITION = STSPIN220_ERROR_BASE + 7, /// Unexpected current position (wrong number of steps)
davide.aliprandi@st.com 3:a132aa6d66e4 147 STSPIN220_ERROR_SPEED = STSPIN220_ERROR_BASE + 8, /// Unexpected current speed
davide.aliprandi@st.com 3:a132aa6d66e4 148 STSPIN220_ERROR_INIT = STSPIN220_ERROR_BASE + 9, /// Unexpected number of devices or unexpected value for predefined parameter
davide.aliprandi@st.com 3:a132aa6d66e4 149 STSPIN220_ERROR_SET_DIRECTION = STSPIN220_ERROR_BASE + 10, /// Error while setting direction
davide.aliprandi@st.com 3:a132aa6d66e4 150 STSPIN220_ERROR_SET_STEP_MODE = STSPIN220_ERROR_BASE + 11, /// Attempt to set an unsupported step mode
davide.aliprandi@st.com 3:a132aa6d66e4 151 STSPIN220_ERROR_APPLY_SPEED = STSPIN220_ERROR_BASE + 12, /// Error while applying speed
davide.aliprandi@st.com 3:a132aa6d66e4 152 STSPIN220_ERROR_SET_TORQUE = STSPIN220_ERROR_BASE + 13, /// Error while setting torque
davide.aliprandi@st.com 3:a132aa6d66e4 153 STSPIN220_ERROR_STEP_CLOCK = STSPIN220_ERROR_BASE + 14 /// Error related to step clock
davide.aliprandi@st.com 3:a132aa6d66e4 154 }errorTypes_t;
davide.aliprandi@st.com 3:a132aa6d66e4 155 /**
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 /** @defgroup Device_Commands Device Commands
davide.aliprandi@st.com 3:a132aa6d66e4 160 * @{
davide.aliprandi@st.com 3:a132aa6d66e4 161 */
davide.aliprandi@st.com 3:a132aa6d66e4 162 /// Device commands
davide.aliprandi@st.com 3:a132aa6d66e4 163 typedef enum {
davide.aliprandi@st.com 3:a132aa6d66e4 164 NO_CMD = 0x00,
davide.aliprandi@st.com 3:a132aa6d66e4 165 RUN_CMD = (STSPIN220_RUN_BIT_MASK),
davide.aliprandi@st.com 3:a132aa6d66e4 166 MOVE_CMD = (STSPIN220_MOVE_BIT_MASK),
davide.aliprandi@st.com 3:a132aa6d66e4 167 } deviceCommand_t;
davide.aliprandi@st.com 3:a132aa6d66e4 168 /**
davide.aliprandi@st.com 3:a132aa6d66e4 169 * @}
davide.aliprandi@st.com 3:a132aa6d66e4 170 */
davide.aliprandi@st.com 3:a132aa6d66e4 171
davide.aliprandi@st.com 3:a132aa6d66e4 172 /** @defgroup Device_Parameters Device Parameters
davide.aliprandi@st.com 3:a132aa6d66e4 173 * @{
davide.aliprandi@st.com 3:a132aa6d66e4 174 */
davide.aliprandi@st.com 3:a132aa6d66e4 175 /// Device Parameters Structure Type
davide.aliprandi@st.com 3:a132aa6d66e4 176 typedef struct {
davide.aliprandi@st.com 3:a132aa6d66e4 177 /// accumulator used to store speed increase smaller than 1 pps
davide.aliprandi@st.com 3:a132aa6d66e4 178 volatile uint32_t accu;
davide.aliprandi@st.com 3:a132aa6d66e4 179 /// Position in microstep according to current step mode
davide.aliprandi@st.com 3:a132aa6d66e4 180 volatile int32_t currentPosition;
davide.aliprandi@st.com 3:a132aa6d66e4 181 /// Position of sequencer
davide.aliprandi@st.com 3:a132aa6d66e4 182 volatile int16_t sequencerPosition;
davide.aliprandi@st.com 3:a132aa6d66e4 183 /// mark position in microstep (motor position control mode)
davide.aliprandi@st.com 3:a132aa6d66e4 184 volatile int32_t markPosition;
davide.aliprandi@st.com 3:a132aa6d66e4 185 /// position in microstep at the end of the accelerating phase
davide.aliprandi@st.com 3:a132aa6d66e4 186 volatile uint32_t endAccPos;
davide.aliprandi@st.com 3:a132aa6d66e4 187 /// nb of in microstep performed from the beggining of the goto or the move command
davide.aliprandi@st.com 3:a132aa6d66e4 188 volatile uint32_t relativePos;
davide.aliprandi@st.com 3:a132aa6d66e4 189 /// position in microstep step at the start of the decelerating phase
davide.aliprandi@st.com 3:a132aa6d66e4 190 volatile uint32_t startDecPos;
davide.aliprandi@st.com 3:a132aa6d66e4 191 /// nb of microstep steps to perform for the goto or move commands
davide.aliprandi@st.com 3:a132aa6d66e4 192 uint32_t stepsToTake;
davide.aliprandi@st.com 3:a132aa6d66e4 193
davide.aliprandi@st.com 3:a132aa6d66e4 194 /// constant speed phase torque value (%)
davide.aliprandi@st.com 3:a132aa6d66e4 195 volatile uint8_t runTorque;
davide.aliprandi@st.com 3:a132aa6d66e4 196 /// acceleration phase torque value (%)
davide.aliprandi@st.com 3:a132aa6d66e4 197 volatile uint8_t accelTorque;
davide.aliprandi@st.com 3:a132aa6d66e4 198 /// deceleration phase torque value (%)
davide.aliprandi@st.com 3:a132aa6d66e4 199 volatile uint8_t decelTorque;
davide.aliprandi@st.com 3:a132aa6d66e4 200 /// holding phase torque value (%)
davide.aliprandi@st.com 3:a132aa6d66e4 201 volatile uint8_t holdTorque;
davide.aliprandi@st.com 3:a132aa6d66e4 202 /// current selected torque value
davide.aliprandi@st.com 3:a132aa6d66e4 203 volatile uint8_t currentTorque;
davide.aliprandi@st.com 3:a132aa6d66e4 204 /// torque update
davide.aliprandi@st.com 3:a132aa6d66e4 205 volatile bool updateTorque;
davide.aliprandi@st.com 3:a132aa6d66e4 206 /// PWM frequency used to generate REF voltage
davide.aliprandi@st.com 3:a132aa6d66e4 207 volatile uint32_t refPwmFreq;
davide.aliprandi@st.com 3:a132aa6d66e4 208 /// torque boost enable
davide.aliprandi@st.com 3:a132aa6d66e4 209 volatile bool torqueBoostEnable;
davide.aliprandi@st.com 3:a132aa6d66e4 210 /// torque boost speed threshold
davide.aliprandi@st.com 3:a132aa6d66e4 211 volatile uint16_t torqueBoostSpeedThreshold;
davide.aliprandi@st.com 3:a132aa6d66e4 212
davide.aliprandi@st.com 3:a132aa6d66e4 213 /// acceleration in pps^2
davide.aliprandi@st.com 3:a132aa6d66e4 214 volatile uint16_t acceleration;
davide.aliprandi@st.com 3:a132aa6d66e4 215 /// deceleration in pps^2
davide.aliprandi@st.com 3:a132aa6d66e4 216 volatile uint16_t deceleration;
davide.aliprandi@st.com 3:a132aa6d66e4 217 /// max speed in pps (speed use for goto or move command)
davide.aliprandi@st.com 3:a132aa6d66e4 218 volatile uint16_t maxSpeed;
davide.aliprandi@st.com 3:a132aa6d66e4 219 /// min speed in pps
davide.aliprandi@st.com 3:a132aa6d66e4 220 volatile uint16_t minSpeed;
davide.aliprandi@st.com 3:a132aa6d66e4 221 /// current speed in pps
davide.aliprandi@st.com 3:a132aa6d66e4 222 volatile uint16_t speed;
davide.aliprandi@st.com 3:a132aa6d66e4 223
davide.aliprandi@st.com 3:a132aa6d66e4 224 /// command under execution
davide.aliprandi@st.com 3:a132aa6d66e4 225 volatile deviceCommand_t commandExecuted;
davide.aliprandi@st.com 3:a132aa6d66e4 226 /// FORWARD or BACKWARD direction
davide.aliprandi@st.com 3:a132aa6d66e4 227 volatile motorDir_t direction;
davide.aliprandi@st.com 3:a132aa6d66e4 228 /// current state of the device
davide.aliprandi@st.com 3:a132aa6d66e4 229 volatile motorState_t motionState;
davide.aliprandi@st.com 3:a132aa6d66e4 230 /// current step mode
davide.aliprandi@st.com 3:a132aa6d66e4 231 volatile motorStepMode_t stepMode;
davide.aliprandi@st.com 3:a132aa6d66e4 232 /// latched step mode
davide.aliprandi@st.com 3:a132aa6d66e4 233 motorStepMode_t stepModeLatched;
davide.aliprandi@st.com 3:a132aa6d66e4 234 /// current stop mode
davide.aliprandi@st.com 3:a132aa6d66e4 235 motorStopMode_t stopMode;
davide.aliprandi@st.com 3:a132aa6d66e4 236
davide.aliprandi@st.com 3:a132aa6d66e4 237 }deviceParams_t;
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
davide.aliprandi@st.com 3:a132aa6d66e4 242 /// Motor driver initialization structure definition
davide.aliprandi@st.com 3:a132aa6d66e4 243 typedef struct
davide.aliprandi@st.com 3:a132aa6d66e4 244 {
davide.aliprandi@st.com 3:a132aa6d66e4 245 /// acceleration in pps^2
davide.aliprandi@st.com 3:a132aa6d66e4 246 uint16_t acceleration;
davide.aliprandi@st.com 3:a132aa6d66e4 247 /// deceleration in pps^2
davide.aliprandi@st.com 3:a132aa6d66e4 248 uint16_t deceleration;
davide.aliprandi@st.com 3:a132aa6d66e4 249 /// max speed in pps (speed use for goto or move command)
davide.aliprandi@st.com 3:a132aa6d66e4 250 uint16_t maxSpeed;
davide.aliprandi@st.com 3:a132aa6d66e4 251 /// min speed in pps
davide.aliprandi@st.com 3:a132aa6d66e4 252 uint16_t minSpeed;
davide.aliprandi@st.com 3:a132aa6d66e4 253 /// acceleration phase torque value (%)
davide.aliprandi@st.com 3:a132aa6d66e4 254 uint8_t accelTorque;
davide.aliprandi@st.com 3:a132aa6d66e4 255 /// deceleration phase torque value (%)
davide.aliprandi@st.com 3:a132aa6d66e4 256 uint8_t decelTorque;
davide.aliprandi@st.com 3:a132aa6d66e4 257 /// constant speed phase torque value (%)
davide.aliprandi@st.com 3:a132aa6d66e4 258 uint8_t runTorque;
davide.aliprandi@st.com 3:a132aa6d66e4 259 /// holding phase torque value (%)
davide.aliprandi@st.com 3:a132aa6d66e4 260 uint8_t holdTorque;
davide.aliprandi@st.com 3:a132aa6d66e4 261 /// torque boost enable
davide.aliprandi@st.com 3:a132aa6d66e4 262 bool torqueBoostEnable;
davide.aliprandi@st.com 3:a132aa6d66e4 263 /// torque boost speed threshold
davide.aliprandi@st.com 3:a132aa6d66e4 264 uint16_t torqueBoostSpeedThreshold;
davide.aliprandi@st.com 3:a132aa6d66e4 265 /// step mode
davide.aliprandi@st.com 3:a132aa6d66e4 266 motorStepMode_t stepMode;
davide.aliprandi@st.com 3:a132aa6d66e4 267 /// stop mode
davide.aliprandi@st.com 3:a132aa6d66e4 268 motorStopMode_t stopMode;
davide.aliprandi@st.com 3:a132aa6d66e4 269 /// PWM frequency used to generate REF voltage
davide.aliprandi@st.com 3:a132aa6d66e4 270 uint32_t vrefPwmFreq;
davide.aliprandi@st.com 3:a132aa6d66e4 271 } Stspin220_init_t;
davide.aliprandi@st.com 3:a132aa6d66e4 272 /**
davide.aliprandi@st.com 3:a132aa6d66e4 273 * @}
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 */
davide.aliprandi@st.com 3:a132aa6d66e4 279
davide.aliprandi@st.com 3:a132aa6d66e4 280 /* Functions --------------------------------------------------------*/
davide.aliprandi@st.com 3:a132aa6d66e4 281
davide.aliprandi@st.com 3:a132aa6d66e4 282 /** @defgroup MotorControl_Board_Linked_Functions MotorControl Board Linked Functions
davide.aliprandi@st.com 3:a132aa6d66e4 283 * @{
davide.aliprandi@st.com 3:a132aa6d66e4 284 */
davide.aliprandi@st.com 3:a132aa6d66e4 285 ///Delay of the requested number of milliseconds
davide.aliprandi@st.com 3:a132aa6d66e4 286 extern void Stspin220_Board_Delay(uint32_t delay);
davide.aliprandi@st.com 3:a132aa6d66e4 287 ///Enable Irq
davide.aliprandi@st.com 3:a132aa6d66e4 288 extern void Stspin220_Board_EnableIrq(void);
davide.aliprandi@st.com 3:a132aa6d66e4 289 ///Disable Irq
davide.aliprandi@st.com 3:a132aa6d66e4 290 extern void Stspin220_Board_DisableIrq(void);
davide.aliprandi@st.com 3:a132aa6d66e4 291 ///Setting the Stck Timeout delay and attaching a callback function to it
davide.aliprandi@st.com 3:a132aa6d66e4 292 extern void Stspin220_Board_TimStckSetFreq(uint16_t newFreq);
davide.aliprandi@st.com 3:a132aa6d66e4 293 ///Initialises the step clock pin level
davide.aliprandi@st.com 3:a132aa6d66e4 294 extern void Stspin220_Board_TimStckInit(void);
davide.aliprandi@st.com 3:a132aa6d66e4 295 ///Stopping the Timeout
davide.aliprandi@st.com 3:a132aa6d66e4 296 extern uint8_t Stspin220_Board_TimStckStop(volatile uint8_t *pToggleOdd);
davide.aliprandi@st.com 3:a132aa6d66e4 297 ///Set the duty cycle of the PwmOut used for the REF
davide.aliprandi@st.com 3:a132aa6d66e4 298 extern void Stspin220_Board_PwmRefSetDutyCycle(uint8_t dutyCycle);
davide.aliprandi@st.com 3:a132aa6d66e4 299 ///Set the frequency of the PwmOut used for the REF
davide.aliprandi@st.com 3:a132aa6d66e4 300 extern void Stspin220_Board_PwmRefSetFreq(uint32_t newFreq);
davide.aliprandi@st.com 3:a132aa6d66e4 301 ///Start the reference voltage pwm
davide.aliprandi@st.com 3:a132aa6d66e4 302 extern void Stspin220_Board_PwmRefStart(void);
davide.aliprandi@st.com 3:a132aa6d66e4 303 ///Reset the STSpin220 reset pin
davide.aliprandi@st.com 3:a132aa6d66e4 304 extern void Stspin220_Board_Releasereset(void);
davide.aliprandi@st.com 3:a132aa6d66e4 305 ///Set the STSpin220 reset pin
davide.aliprandi@st.com 3:a132aa6d66e4 306 extern void Stspin220_Board_reset(void);
davide.aliprandi@st.com 3:a132aa6d66e4 307 ///Set direction GPIO
davide.aliprandi@st.com 3:a132aa6d66e4 308 extern void Stspin220_Board_SetDirectionGpio(uint8_t gpioState);
davide.aliprandi@st.com 3:a132aa6d66e4 309 ///Reset the STCK\MODE3 pin
davide.aliprandi@st.com 3:a132aa6d66e4 310 extern void Stspin220_Board_StckMode3_reset(void);
davide.aliprandi@st.com 3:a132aa6d66e4 311 ///Set the STCK\MODE3 pin
davide.aliprandi@st.com 3:a132aa6d66e4 312 extern void Stspin220_Board_StckMode3_Set(void);
davide.aliprandi@st.com 3:a132aa6d66e4 313 ///Enable the power bridges (leave the output bridges HiZ)
davide.aliprandi@st.com 3:a132aa6d66e4 314 extern void Stspin220_Board_enable(void);
davide.aliprandi@st.com 3:a132aa6d66e4 315 ///Disable the power bridges (leave the output bridges HiZ)
davide.aliprandi@st.com 3:a132aa6d66e4 316 extern void Stspin220_Board_disable(void);
davide.aliprandi@st.com 3:a132aa6d66e4 317 ///Select the STSpin220 mode1, mode2, mode3 and mode4 pins levels
davide.aliprandi@st.com 3:a132aa6d66e4 318 extern bool Stspin220_Board_SetModePins(uint8_t modePin1Level,\
davide.aliprandi@st.com 3:a132aa6d66e4 319 uint8_t modePin2Level,\
davide.aliprandi@st.com 3:a132aa6d66e4 320 uint8_t modePin3Level,\
davide.aliprandi@st.com 3:a132aa6d66e4 321 uint8_t modePin4Level);
davide.aliprandi@st.com 3:a132aa6d66e4 322 ///Select Full Step mode
davide.aliprandi@st.com 3:a132aa6d66e4 323 extern void Stspin220_Board_SetFullStep(void);
davide.aliprandi@st.com 3:a132aa6d66e4 324 ///Unselect Full Step mode
davide.aliprandi@st.com 3:a132aa6d66e4 325 extern void Stspin220_Board_UnsetFullStep(void);
davide.aliprandi@st.com 3:a132aa6d66e4 326 /**
davide.aliprandi@st.com 3:a132aa6d66e4 327 * @}
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 */
davide.aliprandi@st.com 3:a132aa6d66e4 333
davide.aliprandi@st.com 3:a132aa6d66e4 334 /**
davide.aliprandi@st.com 3:a132aa6d66e4 335 * @}
davide.aliprandi@st.com 3:a132aa6d66e4 336 */
davide.aliprandi@st.com 3:a132aa6d66e4 337
davide.aliprandi@st.com 3:a132aa6d66e4 338 #ifdef __cplusplus
davide.aliprandi@st.com 3:a132aa6d66e4 339 }
davide.aliprandi@st.com 3:a132aa6d66e4 340 #endif
davide.aliprandi@st.com 3:a132aa6d66e4 341
davide.aliprandi@st.com 3:a132aa6d66e4 342 #endif /* #ifndef __STSPIN220_H */
davide.aliprandi@st.com 3:a132aa6d66e4 343
davide.aliprandi@st.com 3:a132aa6d66e4 344 /******************* (C) COPYRIGHT 2016 STMicroelectronics *****END OF FILE****/