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
STSpin220_def.h
00001 /******************************************************//** 00002 * @file STSpin220.h 00003 * @author IPC Rennes 00004 * @version V1.1.0 00005 * @date May 26th, 2016 00006 * @brief Header for STSpin220 driver (fully integrated microstepping motor driver) 00007 * @note (C) COPYRIGHT 2016 STMicroelectronics 00008 ****************************************************************************** 00009 * @attention 00010 * 00011 * <h2><center>© COPYRIGHT(c) 2016 STMicroelectronics</center></h2> 00012 * 00013 * Redistribution and use in source and binary forms, with or without modification, 00014 * are permitted provided that the following conditions are met: 00015 * 1. Redistributions of source code must retain the above copyright notice, 00016 * this list of conditions and the following disclaimer. 00017 * 2. Redistributions in binary form must reproduce the above copyright notice, 00018 * this list of conditions and the following disclaimer in the documentation 00019 * and/or other materials provided with the distribution. 00020 * 3. Neither the name of STMicroelectronics nor the names of its contributors 00021 * may be used to endorse or promote products derived from this software 00022 * without specific prior written permission. 00023 * 00024 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 00025 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 00026 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 00027 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 00028 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 00029 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 00030 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 00031 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 00032 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 00033 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00034 * 00035 ****************************************************************************** 00036 */ 00037 00038 /* Define to prevent recursive inclusion -------------------------------------*/ 00039 #ifndef __STSPIN220_H 00040 #define __STSPIN220_H 00041 00042 #ifdef __cplusplus 00043 extern "C" { 00044 #endif 00045 00046 /* Includes ------------------------------------------------------------------*/ 00047 #include "STSpin220_config.h" 00048 #include "motor_def.h" 00049 00050 /* Definitions ---------------------------------------------------------------*/ 00051 00052 /** @addtogroup Components 00053 * @{ 00054 */ 00055 00056 /** @defgroup STSpin220 00057 * @{ 00058 */ 00059 00060 /** @defgroup STSpin220_Exported_Constants STSpin220 Exported Constants 00061 * @{ 00062 */ 00063 /// Current FW major version 00064 #define STSPIN220_FW_MAJOR_VERSION (uint8_t)(1) 00065 /// Current FW minor version 00066 #define STSPIN220_FW_MINOR_VERSION (uint8_t)(1) 00067 /// Current FW patch version 00068 #define STSPIN220_FW_PATCH_VERSION (uint8_t)(0) 00069 /// Current FW version 00070 #define STSPIN220_FW_VERSION (uint32_t)((STSPIN220_FW_MAJOR_VERSION<<16)|\ 00071 (STSPIN220_FW_MINOR_VERSION<<8)|\ 00072 (STSPIN220_FW_PATCH_VERSION)) 00073 00074 /// Max position 00075 #define STSPIN220_MAX_POSITION (0x7FFFFFFF) 00076 00077 /// Min position 00078 #define STSPIN220_MIN_POSITION (0x80000000) 00079 00080 /// Position range 00081 #define STSPIN220_POSITION_RANGE ((uint32_t)(STSPIN220_MAX_POSITION -\ 00082 STSPIN220_MIN_POSITION)) 00083 /// STSpin220 error base number 00084 #define STSPIN220_ERROR_BASE (0xA000) 00085 00086 /// run bit mask 00087 #define STSPIN220_RUN_BIT_MASK (0x01) 00088 00089 /// move bit mask 00090 #define STSPIN220_MOVE_BIT_MASK (0x02) 00091 00092 /// soft stop bit mask 00093 #define STSPIN220_SOFT_STOP_BIT_MASK (0x04) 00094 00095 /// direction change bit mask 00096 #define STSPIN220_DIR_CHANGE_BIT_MASK (0x08) 00097 00098 /// Maximum frequency of the step clock frequency in Hz 00099 #define STSPIN220_MAX_STCK_FREQ (10000) 00100 00101 /// Minimum frequency of the step clock frequency in Hz 00102 #define STSPIN220_MIN_STCK_FREQ (8) 00103 00104 /// Minimum duration of standby 00105 #define STANDBY_MIN_DURATION (1) 00106 00107 /// Dead time after standby exit 00108 #define AFTER_STANDBY_EXIT_DEAD_TIME (1) 00109 00110 /// Reset delay to select step mode 00111 #define SELECT_STEP_MODE_DELAY (1) 00112 00113 /// PWM REF and bridges disable delay 00114 #define DISABLE_DELAY (1) 00115 00116 /// Microstepping sequencer maximum value 00117 #define SEQUENCER_MAX_VALUE (uint16_t)(0x3FF) 00118 00119 /// MCU wait time after power bridges are enabled 00120 #define BRIDGE_TURN_ON_DELAY (10) 00121 00122 /// RC Filtering delay on the PWM 00123 #define PWM_FILTER_TIME_CONSTANT (5) 00124 /** 00125 * @} 00126 */ 00127 00128 /* Types ---------------------------------------------------------------------*/ 00129 00130 /** @defgroup STSpin220_Exported_Types STSpin220 Exported Types 00131 * @{ 00132 */ 00133 00134 /** @defgroup Error_Types Error Types 00135 * @{ 00136 */ 00137 /// Errors 00138 typedef enum { 00139 STSPIN220_ERROR_SET_HOME = STSPIN220_ERROR_BASE, /// Error while setting home position 00140 STSPIN220_ERROR_SET_MAX_SPEED = STSPIN220_ERROR_BASE + 1, /// Error while setting max speed 00141 STSPIN220_ERROR_SET_MIN_SPEED = STSPIN220_ERROR_BASE + 2, /// Error while setting min speed 00142 STSPIN220_ERROR_SET_ACCELERATION = STSPIN220_ERROR_BASE + 3, /// Error while setting acceleration 00143 STSPIN220_ERROR_SET_DECELERATION = STSPIN220_ERROR_BASE + 4, /// Error while setting decelaration 00144 STSPIN220_ERROR_MCU_OSC_CONFIG = STSPIN220_ERROR_BASE + 5, /// Error while configuring mcu oscillator 00145 STSPIN220_ERROR_MCU_CLOCK_CONFIG = STSPIN220_ERROR_BASE + 6, /// Error while configuring mcu clock 00146 STSPIN220_ERROR_POSITION = STSPIN220_ERROR_BASE + 7, /// Unexpected current position (wrong number of steps) 00147 STSPIN220_ERROR_SPEED = STSPIN220_ERROR_BASE + 8, /// Unexpected current speed 00148 STSPIN220_ERROR_INIT = STSPIN220_ERROR_BASE + 9, /// Unexpected number of devices or unexpected value for predefined parameter 00149 STSPIN220_ERROR_SET_DIRECTION = STSPIN220_ERROR_BASE + 10, /// Error while setting direction 00150 STSPIN220_ERROR_SET_STEP_MODE = STSPIN220_ERROR_BASE + 11, /// Attempt to set an unsupported step mode 00151 STSPIN220_ERROR_APPLY_SPEED = STSPIN220_ERROR_BASE + 12, /// Error while applying speed 00152 STSPIN220_ERROR_SET_TORQUE = STSPIN220_ERROR_BASE + 13, /// Error while setting torque 00153 STSPIN220_ERROR_STEP_CLOCK = STSPIN220_ERROR_BASE + 14 /// Error related to step clock 00154 }errorTypes_t; 00155 /** 00156 * @} 00157 */ 00158 00159 /** @defgroup Device_Commands Device Commands 00160 * @{ 00161 */ 00162 /// Device commands 00163 typedef enum { 00164 NO_CMD = 0x00, 00165 RUN_CMD = (STSPIN220_RUN_BIT_MASK), 00166 MOVE_CMD = (STSPIN220_MOVE_BIT_MASK), 00167 } deviceCommand_t; 00168 /** 00169 * @} 00170 */ 00171 00172 /** @defgroup Device_Parameters Device Parameters 00173 * @{ 00174 */ 00175 /// Device Parameters Structure Type 00176 typedef struct { 00177 /// accumulator used to store speed increase smaller than 1 pps 00178 volatile uint32_t accu; 00179 /// Position in microstep according to current step mode 00180 volatile int32_t currentPosition; 00181 /// Position of sequencer 00182 volatile int16_t sequencerPosition; 00183 /// mark position in microstep (motor position control mode) 00184 volatile int32_t markPosition; 00185 /// position in microstep at the end of the accelerating phase 00186 volatile uint32_t endAccPos; 00187 /// nb of in microstep performed from the beggining of the goto or the move command 00188 volatile uint32_t relativePos; 00189 /// position in microstep step at the start of the decelerating phase 00190 volatile uint32_t startDecPos; 00191 /// nb of microstep steps to perform for the goto or move commands 00192 uint32_t stepsToTake; 00193 00194 /// constant speed phase torque value (%) 00195 volatile uint8_t runTorque; 00196 /// acceleration phase torque value (%) 00197 volatile uint8_t accelTorque; 00198 /// deceleration phase torque value (%) 00199 volatile uint8_t decelTorque; 00200 /// holding phase torque value (%) 00201 volatile uint8_t holdTorque; 00202 /// current selected torque value 00203 volatile uint8_t currentTorque; 00204 /// torque update 00205 volatile bool updateTorque; 00206 /// PWM frequency used to generate REF voltage 00207 volatile uint32_t refPwmFreq; 00208 /// torque boost enable 00209 volatile bool torqueBoostEnable; 00210 /// torque boost speed threshold 00211 volatile uint16_t torqueBoostSpeedThreshold; 00212 00213 /// acceleration in pps^2 00214 volatile uint16_t acceleration; 00215 /// deceleration in pps^2 00216 volatile uint16_t deceleration; 00217 /// max speed in pps (speed use for goto or move command) 00218 volatile uint16_t maxSpeed; 00219 /// min speed in pps 00220 volatile uint16_t minSpeed; 00221 /// current speed in pps 00222 volatile uint16_t speed; 00223 00224 /// command under execution 00225 volatile deviceCommand_t commandExecuted; 00226 /// FORWARD or BACKWARD direction 00227 volatile motorDir_t direction; 00228 /// current state of the device 00229 volatile motorState_t motionState; 00230 /// current step mode 00231 volatile motorStepMode_t stepMode; 00232 /// latched step mode 00233 motorStepMode_t stepModeLatched; 00234 /// current stop mode 00235 motorStopMode_t stopMode; 00236 00237 }deviceParams_t; 00238 /** 00239 * @} 00240 */ 00241 00242 /// Motor driver initialization structure definition 00243 typedef struct 00244 { 00245 /// acceleration in pps^2 00246 uint16_t acceleration; 00247 /// deceleration in pps^2 00248 uint16_t deceleration; 00249 /// max speed in pps (speed use for goto or move command) 00250 uint16_t maxSpeed; 00251 /// min speed in pps 00252 uint16_t minSpeed; 00253 /// acceleration phase torque value (%) 00254 uint8_t accelTorque; 00255 /// deceleration phase torque value (%) 00256 uint8_t decelTorque; 00257 /// constant speed phase torque value (%) 00258 uint8_t runTorque; 00259 /// holding phase torque value (%) 00260 uint8_t holdTorque; 00261 /// torque boost enable 00262 bool torqueBoostEnable; 00263 /// torque boost speed threshold 00264 uint16_t torqueBoostSpeedThreshold; 00265 /// step mode 00266 motorStepMode_t stepMode; 00267 /// stop mode 00268 motorStopMode_t stopMode; 00269 /// PWM frequency used to generate REF voltage 00270 uint32_t vrefPwmFreq; 00271 } STSpin220_init_t; 00272 /** 00273 * @} 00274 */ 00275 00276 /** 00277 * @} 00278 */ 00279 00280 /* Functions --------------------------------------------------------*/ 00281 00282 /** @defgroup MotorControl_Board_Linked_Functions MotorControl Board Linked Functions 00283 * @{ 00284 */ 00285 ///Delay of the requested number of milliseconds 00286 extern void STSpin220_Board_Delay(uint32_t delay); 00287 ///Enable Irq 00288 extern void STSpin220_Board_EnableIrq(void); 00289 ///Disable Irq 00290 extern void STSpin220_Board_DisableIrq(void); 00291 ///Setting the Stck Timeout delay and attaching a callback function to it 00292 extern void STSpin220_Board_TimStckSetFreq(uint16_t newFreq); 00293 ///Initialises the step clock pin level 00294 extern void STSpin220_Board_TimStckInit(void); 00295 ///Stopping the Timeout 00296 extern uint8_t STSpin220_Board_TimStckStop(volatile uint8_t *pToggleOdd); 00297 ///Set the duty cycle of the PwmOut used for the REF 00298 extern void STSpin220_Board_PwmRefSetDutyCycle(uint8_t dutyCycle); 00299 ///Set the frequency of the PwmOut used for the REF 00300 extern void STSpin220_Board_PwmRefSetFreq(uint32_t newFreq); 00301 ///Start the reference voltage pwm 00302 extern void STSpin220_Board_PwmRefStart(void); 00303 ///Reset the STSpin220 reset pin 00304 extern void STSpin220_Board_Releasereset(void); 00305 ///Set the STSpin220 reset pin 00306 extern void STSpin220_Board_reset(void); 00307 ///Set direction GPIO 00308 extern void STSpin220_Board_SetDirectionGpio(uint8_t gpioState); 00309 ///Reset the STCK\MODE3 pin 00310 extern void STSpin220_Board_StckMode3_reset(void); 00311 ///Set the STCK\MODE3 pin 00312 extern void STSpin220_Board_StckMode3_Set(void); 00313 ///Enable the power bridges (leave the output bridges HiZ) 00314 extern void STSpin220_Board_enable(void); 00315 ///Disable the power bridges (leave the output bridges HiZ) 00316 extern void STSpin220_Board_disable(void); 00317 ///Select the STSpin220 mode1, mode2, mode3 and mode4 pins levels 00318 extern bool STSpin220_Board_SetModePins(uint8_t modePin1Level,\ 00319 uint8_t modePin2Level,\ 00320 uint8_t modePin3Level,\ 00321 uint8_t modePin4Level); 00322 ///Select Full Step mode 00323 extern void STSpin220_Board_SetFullStep(void); 00324 ///Unselect Full Step mode 00325 extern void STSpin220_Board_UnsetFullStep(void); 00326 /** 00327 * @} 00328 */ 00329 00330 /** 00331 * @} 00332 */ 00333 00334 /** 00335 * @} 00336 */ 00337 00338 #ifdef __cplusplus 00339 } 00340 #endif 00341 00342 #endif /* #ifndef __STSPIN220_H */ 00343 00344 /******************* (C) COPYRIGHT 2016 STMicroelectronics *****END OF FILE****/
Generated on Tue Jul 12 2022 15:16:41 by
1.7.2

X-NUCLEO-IHM06A1 Low Voltage Stepper Motor Driver