Library used to control ST Nucleo Evaluation board IHM04A1, based on L6206 motor control driver.

Dependencies:   ST_INTERFACES

Dependents:   HelloWorld_IHM04A1 RoboCane_Motore arm_dcmotor_can arm_linear_can_2 ... more

Fork of X_NUCLEO_IHM04A1 by ST Expansion SW Team

Motor Control Library

Library to handle the X-NUCLEO-IHM04A1 Motor Control Expansion Board based on the L6206 component.

It allows a complete management of the L6206 by providing a complete APIs.

The key features of the library are :

  • Configuration of the L6206 (bridges inputs and enabling signals, bridges paralleling)
  • FLAG interrupts handling (overcurrent and thermal alarms reporting)
  • Handling of up to two bidirectional Brush DC motors or up to 4 unidirectional Brush DC motors depending of the bridges paralleling configuration
  • Nucleo and expansion board configuration (GPIOs, PWMs, IRQs…)

To use the L6206 driver library, the user first has to call its initialization method which:

  • Setups the required GPIOs to handle the bridges enable pins, the FLAG interrupt which reports overcurrent detection or thermal protection.
  • Loads the driver parameters with initial values configured by the user or with their predefined values from “l6206_target_config.h”, in order to program the PWMs frequency of the bridges inputs, the bridges paralleling configuration, the number and the type (bidirectional or unidirectional) of brush DC motors.

Once the initialization is done, the user can modify the driver parameters by calling specific functions to change the bridges paralleling configuration, types and numbers of motors or the PWMs frequency.

The user can also write callback functions and attach them to:

  • The flag interrupt handler depending on the actions he wants to perform when an overcurrent or a thermal alarm is reported.
  • The Error handler which is called by the library when it reports an error.

Then, the user can drive the different brush DC motors by requesting to run in a specified direction and by changing the maximal speed. When a motor is requested to run, the corresponding bridge is automatically enabled.

A motion command can be stopped at any moment:

  • Either by a hard stop which immediately stops the motor.
  • Or by a hardHiz command which immediately stops the motor and disables the bridge which is used by the motor.

The library also provides functions to disable or enable the bridges independently from the run or stop commands.

Arduino Connector Compatibility Warning

Using the X-NUCLEO-IHM04A1 expansion board with the NUCLEO-F429ZI requires adopting the following patch:

  • to connect with a wire the PB_4 Nucleo pin to the IN1A expansion board pin;
  • to connect with a wire the PC_7 Nucleo pin to the IN2A expansion board pin;
  • to connect with a wire the PA_15 Nucleo pin to the IN1B expansion board pin;
  • to connect with a wire the PB_3 Nucleo pin to the IN2B expansion board pin.


Board configuration for HelloWorld_IHM04A1 example

/media/uploads/brdirais/drive4brushdcmotor_ihm04a1.png

Committer:
davide.aliprandi@st.com
Date:
Fri Mar 24 10:59:06 2017 +0100
Revision:
4:24158c44f02e
Aligning to ARM mbed coding style.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
davide.aliprandi@st.com 4:24158c44f02e 1 /**
davide.aliprandi@st.com 4:24158c44f02e 2 ******************************************************************************
davide.aliprandi@st.com 4:24158c44f02e 3 * @file motor_def.h
davide.aliprandi@st.com 4:24158c44f02e 4 * @author IPC Rennes
davide.aliprandi@st.com 4:24158c44f02e 5 * @version V1.5.0
davide.aliprandi@st.com 4:24158c44f02e 6 * @date January 25, 2016
davide.aliprandi@st.com 4:24158c44f02e 7 * @brief This file contains all the functions prototypes for motor drivers.
davide.aliprandi@st.com 4:24158c44f02e 8 ******************************************************************************
davide.aliprandi@st.com 4:24158c44f02e 9 * @attention
davide.aliprandi@st.com 4:24158c44f02e 10 *
davide.aliprandi@st.com 4:24158c44f02e 11 * <h2><center>&copy; COPYRIGHT(c) 2016 STMicroelectronics</center></h2>
davide.aliprandi@st.com 4:24158c44f02e 12 *
davide.aliprandi@st.com 4:24158c44f02e 13 * Redistribution and use in source and binary forms, with or without modification,
davide.aliprandi@st.com 4:24158c44f02e 14 * are permitted provided that the following conditions are met:
davide.aliprandi@st.com 4:24158c44f02e 15 * 1. Redistributions of source code must retain the above copyright notice,
davide.aliprandi@st.com 4:24158c44f02e 16 * this list of conditions and the following disclaimer.
davide.aliprandi@st.com 4:24158c44f02e 17 * 2. Redistributions in binary form must reproduce the above copyright notice,
davide.aliprandi@st.com 4:24158c44f02e 18 * this list of conditions and the following disclaimer in the documentation
davide.aliprandi@st.com 4:24158c44f02e 19 * and/or other materials provided with the distribution.
davide.aliprandi@st.com 4:24158c44f02e 20 * 3. Neither the name of STMicroelectronics nor the names of its contributors
davide.aliprandi@st.com 4:24158c44f02e 21 * may be used to endorse or promote products derived from this software
davide.aliprandi@st.com 4:24158c44f02e 22 * without specific prior written permission.
davide.aliprandi@st.com 4:24158c44f02e 23 *
davide.aliprandi@st.com 4:24158c44f02e 24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
davide.aliprandi@st.com 4:24158c44f02e 25 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
davide.aliprandi@st.com 4:24158c44f02e 26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
davide.aliprandi@st.com 4:24158c44f02e 27 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
davide.aliprandi@st.com 4:24158c44f02e 28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
davide.aliprandi@st.com 4:24158c44f02e 29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
davide.aliprandi@st.com 4:24158c44f02e 30 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
davide.aliprandi@st.com 4:24158c44f02e 31 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
davide.aliprandi@st.com 4:24158c44f02e 32 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
davide.aliprandi@st.com 4:24158c44f02e 33 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
davide.aliprandi@st.com 4:24158c44f02e 34 *
davide.aliprandi@st.com 4:24158c44f02e 35 ******************************************************************************
davide.aliprandi@st.com 4:24158c44f02e 36 */
davide.aliprandi@st.com 4:24158c44f02e 37
davide.aliprandi@st.com 4:24158c44f02e 38 /* Define to prevent recursive inclusion -------------------------------------*/
davide.aliprandi@st.com 4:24158c44f02e 39 #ifndef __MOTOR_H
davide.aliprandi@st.com 4:24158c44f02e 40 #define __MOTOR_H
davide.aliprandi@st.com 4:24158c44f02e 41
davide.aliprandi@st.com 4:24158c44f02e 42 #ifdef __cplusplus
davide.aliprandi@st.com 4:24158c44f02e 43 extern "C" {
davide.aliprandi@st.com 4:24158c44f02e 44 #endif
davide.aliprandi@st.com 4:24158c44f02e 45
davide.aliprandi@st.com 4:24158c44f02e 46 /* Includes ------------------------------------------------------------------*/
davide.aliprandi@st.com 4:24158c44f02e 47 #include <stdint.h>
davide.aliprandi@st.com 4:24158c44f02e 48 #include "component_def.h"
davide.aliprandi@st.com 4:24158c44f02e 49
davide.aliprandi@st.com 4:24158c44f02e 50 /** @addtogroup BSP
davide.aliprandi@st.com 4:24158c44f02e 51 * @{
davide.aliprandi@st.com 4:24158c44f02e 52 */
davide.aliprandi@st.com 4:24158c44f02e 53
davide.aliprandi@st.com 4:24158c44f02e 54 /** @addtogroup Components
davide.aliprandi@st.com 4:24158c44f02e 55 * @{
davide.aliprandi@st.com 4:24158c44f02e 56 */
davide.aliprandi@st.com 4:24158c44f02e 57
davide.aliprandi@st.com 4:24158c44f02e 58 /** @defgroup Motor Motor
davide.aliprandi@st.com 4:24158c44f02e 59 * @{
davide.aliprandi@st.com 4:24158c44f02e 60 */
davide.aliprandi@st.com 4:24158c44f02e 61
davide.aliprandi@st.com 4:24158c44f02e 62 /** @defgroup Motor_Exported_Constants Motor Exported Constants
davide.aliprandi@st.com 4:24158c44f02e 63 * @{
davide.aliprandi@st.com 4:24158c44f02e 64 */
davide.aliprandi@st.com 4:24158c44f02e 65
davide.aliprandi@st.com 4:24158c44f02e 66 /// boolean for false condition
davide.aliprandi@st.com 4:24158c44f02e 67 #ifndef FALSE
davide.aliprandi@st.com 4:24158c44f02e 68 #define FALSE (0)
davide.aliprandi@st.com 4:24158c44f02e 69 #endif
davide.aliprandi@st.com 4:24158c44f02e 70 /// boolean for true condition
davide.aliprandi@st.com 4:24158c44f02e 71 #ifndef TRUE
davide.aliprandi@st.com 4:24158c44f02e 72 #define TRUE (1)
davide.aliprandi@st.com 4:24158c44f02e 73 #endif
davide.aliprandi@st.com 4:24158c44f02e 74
davide.aliprandi@st.com 4:24158c44f02e 75 /**
davide.aliprandi@st.com 4:24158c44f02e 76 * @}
davide.aliprandi@st.com 4:24158c44f02e 77 */
davide.aliprandi@st.com 4:24158c44f02e 78
davide.aliprandi@st.com 4:24158c44f02e 79 /** @defgroup Motor_Exported_Types Motor Exported Types
davide.aliprandi@st.com 4:24158c44f02e 80 * @{
davide.aliprandi@st.com 4:24158c44f02e 81 */
davide.aliprandi@st.com 4:24158c44f02e 82
davide.aliprandi@st.com 4:24158c44f02e 83 /** @defgroup Motor_Boolean_Type Motor Boolean Type
davide.aliprandi@st.com 4:24158c44f02e 84 * @{
davide.aliprandi@st.com 4:24158c44f02e 85 */
davide.aliprandi@st.com 4:24158c44f02e 86 ///bool Type
davide.aliprandi@st.com 4:24158c44f02e 87 //typedef uint8_t bool;
davide.aliprandi@st.com 4:24158c44f02e 88 /**
davide.aliprandi@st.com 4:24158c44f02e 89 * @}
davide.aliprandi@st.com 4:24158c44f02e 90 */
davide.aliprandi@st.com 4:24158c44f02e 91
davide.aliprandi@st.com 4:24158c44f02e 92 /** @defgroup Device_Direction_Options Device Direction Options
davide.aliprandi@st.com 4:24158c44f02e 93 * @{
davide.aliprandi@st.com 4:24158c44f02e 94 */
davide.aliprandi@st.com 4:24158c44f02e 95 /// Direction options
davide.aliprandi@st.com 4:24158c44f02e 96 typedef enum {
davide.aliprandi@st.com 4:24158c44f02e 97 BACKWARD = 0,
davide.aliprandi@st.com 4:24158c44f02e 98 FORWARD = 1,
davide.aliprandi@st.com 4:24158c44f02e 99 UNKNOW_DIR = ((uint8_t)0xFF)
davide.aliprandi@st.com 4:24158c44f02e 100 } motorDir_t;
davide.aliprandi@st.com 4:24158c44f02e 101 /**
davide.aliprandi@st.com 4:24158c44f02e 102 * @}
davide.aliprandi@st.com 4:24158c44f02e 103 */
davide.aliprandi@st.com 4:24158c44f02e 104
davide.aliprandi@st.com 4:24158c44f02e 105 /** @defgroup Device_Action_Options Device Action Options
davide.aliprandi@st.com 4:24158c44f02e 106 * @{
davide.aliprandi@st.com 4:24158c44f02e 107 */
davide.aliprandi@st.com 4:24158c44f02e 108 /// Action options
davide.aliprandi@st.com 4:24158c44f02e 109 typedef enum {
davide.aliprandi@st.com 4:24158c44f02e 110 ACTION_RESET = ((uint8_t)0x00),
davide.aliprandi@st.com 4:24158c44f02e 111 ACTION_COPY = ((uint8_t)0x08)
davide.aliprandi@st.com 4:24158c44f02e 112 } motorAction_t;
davide.aliprandi@st.com 4:24158c44f02e 113 /**
davide.aliprandi@st.com 4:24158c44f02e 114 * @}
davide.aliprandi@st.com 4:24158c44f02e 115 */
davide.aliprandi@st.com 4:24158c44f02e 116
davide.aliprandi@st.com 4:24158c44f02e 117 /** @defgroup Device_States Device States
davide.aliprandi@st.com 4:24158c44f02e 118 * @{
davide.aliprandi@st.com 4:24158c44f02e 119 */
davide.aliprandi@st.com 4:24158c44f02e 120 /// Device states
davide.aliprandi@st.com 4:24158c44f02e 121 typedef enum {
davide.aliprandi@st.com 4:24158c44f02e 122 ACCELERATING = 0,
davide.aliprandi@st.com 4:24158c44f02e 123 DECELERATINGTOSTOP = 1,
davide.aliprandi@st.com 4:24158c44f02e 124 DECELERATING = 2,
davide.aliprandi@st.com 4:24158c44f02e 125 STEADY = 3,
davide.aliprandi@st.com 4:24158c44f02e 126 INDEX_ACCEL = 4,
davide.aliprandi@st.com 4:24158c44f02e 127 INDEX_RUN = 5,
davide.aliprandi@st.com 4:24158c44f02e 128 INDEX_DECEL = 6,
davide.aliprandi@st.com 4:24158c44f02e 129 INDEX_DWELL = 7,
davide.aliprandi@st.com 4:24158c44f02e 130 INACTIVE = 8,
davide.aliprandi@st.com 4:24158c44f02e 131 STANDBY = 9,
davide.aliprandi@st.com 4:24158c44f02e 132 STANDBYTOINACTIVE = 10
davide.aliprandi@st.com 4:24158c44f02e 133 } motorState_t;
davide.aliprandi@st.com 4:24158c44f02e 134 /**
davide.aliprandi@st.com 4:24158c44f02e 135 * @}
davide.aliprandi@st.com 4:24158c44f02e 136 */
davide.aliprandi@st.com 4:24158c44f02e 137
davide.aliprandi@st.com 4:24158c44f02e 138 /** @defgroup Device_Step_mode Device Step mode
davide.aliprandi@st.com 4:24158c44f02e 139 * @{
davide.aliprandi@st.com 4:24158c44f02e 140 */
davide.aliprandi@st.com 4:24158c44f02e 141 /// Stepping options
davide.aliprandi@st.com 4:24158c44f02e 142 typedef enum {
davide.aliprandi@st.com 4:24158c44f02e 143 STEP_MODE_FULL = ((uint8_t)0x00),
davide.aliprandi@st.com 4:24158c44f02e 144 STEP_MODE_HALF = ((uint8_t)0x01),
davide.aliprandi@st.com 4:24158c44f02e 145 STEP_MODE_1_4 = ((uint8_t)0x02),
davide.aliprandi@st.com 4:24158c44f02e 146 STEP_MODE_1_8 = ((uint8_t)0x03),
davide.aliprandi@st.com 4:24158c44f02e 147 STEP_MODE_1_16 = ((uint8_t)0x04),
davide.aliprandi@st.com 4:24158c44f02e 148 STEP_MODE_1_32 = ((uint8_t)0x05),
davide.aliprandi@st.com 4:24158c44f02e 149 STEP_MODE_1_64 = ((uint8_t)0x06),
davide.aliprandi@st.com 4:24158c44f02e 150 STEP_MODE_1_128 = ((uint8_t)0x07),
davide.aliprandi@st.com 4:24158c44f02e 151 STEP_MODE_1_256 = ((uint8_t)0x08),
davide.aliprandi@st.com 4:24158c44f02e 152 STEP_MODE_UNKNOW = ((uint8_t)0xFE),
davide.aliprandi@st.com 4:24158c44f02e 153 STEP_MODE_WAVE = ((uint8_t)0xFF)
davide.aliprandi@st.com 4:24158c44f02e 154 } motorStepMode_t;
davide.aliprandi@st.com 4:24158c44f02e 155
davide.aliprandi@st.com 4:24158c44f02e 156 /**
davide.aliprandi@st.com 4:24158c44f02e 157 * @}
davide.aliprandi@st.com 4:24158c44f02e 158 */
davide.aliprandi@st.com 4:24158c44f02e 159
davide.aliprandi@st.com 4:24158c44f02e 160 /** @defgroup Decay_mode Decay mode
davide.aliprandi@st.com 4:24158c44f02e 161 * @{
davide.aliprandi@st.com 4:24158c44f02e 162 */
davide.aliprandi@st.com 4:24158c44f02e 163 /// Decay Mode
davide.aliprandi@st.com 4:24158c44f02e 164 typedef enum {
davide.aliprandi@st.com 4:24158c44f02e 165 SLOW_DECAY = 0,
davide.aliprandi@st.com 4:24158c44f02e 166 FAST_DECAY = 1,
davide.aliprandi@st.com 4:24158c44f02e 167 UNKNOW_DECAY = ((uint8_t)0xFF)
davide.aliprandi@st.com 4:24158c44f02e 168 } motorDecayMode_t;
davide.aliprandi@st.com 4:24158c44f02e 169 /**
davide.aliprandi@st.com 4:24158c44f02e 170 * @}
davide.aliprandi@st.com 4:24158c44f02e 171 */
davide.aliprandi@st.com 4:24158c44f02e 172
davide.aliprandi@st.com 4:24158c44f02e 173 /** @defgroup Stop_mode Stop mode
davide.aliprandi@st.com 4:24158c44f02e 174 * @{
davide.aliprandi@st.com 4:24158c44f02e 175 */
davide.aliprandi@st.com 4:24158c44f02e 176 /// Stop mode
davide.aliprandi@st.com 4:24158c44f02e 177 typedef enum
davide.aliprandi@st.com 4:24158c44f02e 178 {
davide.aliprandi@st.com 4:24158c44f02e 179 HOLD_MODE = 0,
davide.aliprandi@st.com 4:24158c44f02e 180 HIZ_MODE = 1,
davide.aliprandi@st.com 4:24158c44f02e 181 STANDBY_MODE = 2,
davide.aliprandi@st.com 4:24158c44f02e 182 UNKNOW_STOP_MODE = ((uint8_t)0xFF)
davide.aliprandi@st.com 4:24158c44f02e 183 } motorStopMode_t;
davide.aliprandi@st.com 4:24158c44f02e 184 /**
davide.aliprandi@st.com 4:24158c44f02e 185 * @}
davide.aliprandi@st.com 4:24158c44f02e 186 */
davide.aliprandi@st.com 4:24158c44f02e 187
davide.aliprandi@st.com 4:24158c44f02e 188 /** @defgroup Torque_mode Torque mode
davide.aliprandi@st.com 4:24158c44f02e 189 * @{
davide.aliprandi@st.com 4:24158c44f02e 190 */
davide.aliprandi@st.com 4:24158c44f02e 191 /// Torque mode
davide.aliprandi@st.com 4:24158c44f02e 192 typedef enum
davide.aliprandi@st.com 4:24158c44f02e 193 {
davide.aliprandi@st.com 4:24158c44f02e 194 ACC_TORQUE = 0,
davide.aliprandi@st.com 4:24158c44f02e 195 DEC_TORQUE = 1,
davide.aliprandi@st.com 4:24158c44f02e 196 RUN_TORQUE = 2,
davide.aliprandi@st.com 4:24158c44f02e 197 HOLD_TORQUE = 3,
davide.aliprandi@st.com 4:24158c44f02e 198 CURRENT_TORQUE = 4,
davide.aliprandi@st.com 4:24158c44f02e 199 UNKNOW_TORQUE = ((uint8_t)0xFF)
davide.aliprandi@st.com 4:24158c44f02e 200 } motorTorqueMode_t;
davide.aliprandi@st.com 4:24158c44f02e 201 /**
davide.aliprandi@st.com 4:24158c44f02e 202 * @}
davide.aliprandi@st.com 4:24158c44f02e 203 */
davide.aliprandi@st.com 4:24158c44f02e 204
davide.aliprandi@st.com 4:24158c44f02e 205 /** @defgroup Dual_Full_Bridge_Configuration Dual Full Bridge Configuration
davide.aliprandi@st.com 4:24158c44f02e 206 * @{
davide.aliprandi@st.com 4:24158c44f02e 207 */
davide.aliprandi@st.com 4:24158c44f02e 208 ///Dual full bridge configurations for brush DC motors
davide.aliprandi@st.com 4:24158c44f02e 209 typedef enum {
davide.aliprandi@st.com 4:24158c44f02e 210 PARALLELING_NONE___1_BIDIR_MOTOR_BRIDGE_A__1_BIDIR_MOTOR_BRIDGE_B = 0,
davide.aliprandi@st.com 4:24158c44f02e 211 PARALLELING_NONE___1_BIDIR_MOTOR_BRIDGE_A__2_UNDIR_MOTOR_BRIDGE_B = 1,
davide.aliprandi@st.com 4:24158c44f02e 212 PARALLELING_NONE___2_UNDIR_MOTOR_BRIDGE_A__1_BIDIR_MOTOR_BRIDGE_B = 2,
davide.aliprandi@st.com 4:24158c44f02e 213 PARALLELING_NONE___2_UNDIR_MOTOR_BRIDGE_A__2_UNDIR_MOTOR_BRIDGE_B = 3,
davide.aliprandi@st.com 4:24158c44f02e 214 PARALLELING_IN1A_IN2A__1_UNDIR_MOTOR_BRIDGE_A__1_BIDIR_MOTOR_BRIDGE_B = 4,
davide.aliprandi@st.com 4:24158c44f02e 215 PARALLELING_IN1A_IN2A__1_UNDIR_MOTOR_BRIDGE_A__2_UNDIR_MOTOR_BRIDGE_B = 5,
davide.aliprandi@st.com 4:24158c44f02e 216 PARALLELING_IN1B_IN2B__1_BIDIR_MOTOR_BRIDGE_A__1_UNDIR_MOTOR_BRIDGE_B = 6,
davide.aliprandi@st.com 4:24158c44f02e 217 PARALLELING_IN1B_IN2B__2_UNDIR_MOTOR_BRIDGE_A__1_UNDIR_MOTOR_BRIDGE_B = 7,
davide.aliprandi@st.com 4:24158c44f02e 218 PARALLELING_IN1A_IN2A__IN1B_IN2B__1_UNDIR_MOTOR_BRIDGE_A__1_UNDIR_MOTOR_BRIDGE_B = 8,
davide.aliprandi@st.com 4:24158c44f02e 219 PARALLELING_IN1A_IN2A__IN1B_IN2B__1_BIDIR_MOTOR = 9,
davide.aliprandi@st.com 4:24158c44f02e 220 PARALLELING_IN1A_IN1B__IN2A_IN2B__1_UNDIR_MOTOR_BRIDGE_1A__1_UNDIR_MOTOR_BRIDGE_2A = 10,
davide.aliprandi@st.com 4:24158c44f02e 221 PARALLELING_IN1A_IN1B__IN2A_IN2B__1_BIDIR_MOTOR = 11,
davide.aliprandi@st.com 4:24158c44f02e 222 PARALLELING_ALL_WITH_IN1A___1_UNDIR_MOTOR = 12,
davide.aliprandi@st.com 4:24158c44f02e 223 PARALLELING_END_ENUM = 13
davide.aliprandi@st.com 4:24158c44f02e 224 } dualFullBridgeConfig_t;
davide.aliprandi@st.com 4:24158c44f02e 225 /**
davide.aliprandi@st.com 4:24158c44f02e 226 * @}
davide.aliprandi@st.com 4:24158c44f02e 227 */
davide.aliprandi@st.com 4:24158c44f02e 228
davide.aliprandi@st.com 4:24158c44f02e 229 /** @defgroup Motor_Driver_Structure Motor Driver Structure
davide.aliprandi@st.com 4:24158c44f02e 230 * @{
davide.aliprandi@st.com 4:24158c44f02e 231 */
davide.aliprandi@st.com 4:24158c44f02e 232 /// Motor driver structure definition
davide.aliprandi@st.com 4:24158c44f02e 233 typedef struct
davide.aliprandi@st.com 4:24158c44f02e 234 {
davide.aliprandi@st.com 4:24158c44f02e 235
davide.aliprandi@st.com 4:24158c44f02e 236 /* Generic */
davide.aliprandi@st.com 4:24158c44f02e 237 status_t (*init)(void *handle, void *init);
davide.aliprandi@st.com 4:24158c44f02e 238 status_t (*read_id)(void *handle, uint8_t *id);
davide.aliprandi@st.com 4:24158c44f02e 239
davide.aliprandi@st.com 4:24158c44f02e 240 /* Interrupts */
davide.aliprandi@st.com 4:24158c44f02e 241 /// Function pointer to attach_error_handler
davide.aliprandi@st.com 4:24158c44f02e 242 void(*attach_error_handler)(void *handle, void (*callback)(void *handle, uint16_t error));
davide.aliprandi@st.com 4:24158c44f02e 243 /// Function pointer to attach_flag_interrupt
davide.aliprandi@st.com 4:24158c44f02e 244 void (*attach_flag_interrupt)(void *handle, void (*callback)(void *handle));
davide.aliprandi@st.com 4:24158c44f02e 245 /// Function pointer to AttachBusyInterrupt
davide.aliprandi@st.com 4:24158c44f02e 246 void (*AttachBusyInterrupt)(void *handle, void (*callback)(void *handle));
davide.aliprandi@st.com 4:24158c44f02e 247 /// Function pointer to FlagInterruptHandler
davide.aliprandi@st.com 4:24158c44f02e 248 void (*FlagInterruptHandler)(void *handle);
davide.aliprandi@st.com 4:24158c44f02e 249
davide.aliprandi@st.com 4:24158c44f02e 250 /* Specific */
davide.aliprandi@st.com 4:24158c44f02e 251 /// Function pointer to get_acceleration
davide.aliprandi@st.com 4:24158c44f02e 252 uint16_t (*get_acceleration)(void *handle);
davide.aliprandi@st.com 4:24158c44f02e 253 /// Function pointer to GetCurrentSpeed
davide.aliprandi@st.com 4:24158c44f02e 254 uint16_t (*GetCurrentSpeed)(void *handle, uint8_t motorId);
davide.aliprandi@st.com 4:24158c44f02e 255 /// Function pointer to get_deceleration
davide.aliprandi@st.com 4:24158c44f02e 256 uint16_t (*get_deceleration)(void *handle);
davide.aliprandi@st.com 4:24158c44f02e 257 /// Function pointer to get_device_state
davide.aliprandi@st.com 4:24158c44f02e 258 motorState_t(*get_device_state)(void *handle, uint8_t motorId);
davide.aliprandi@st.com 4:24158c44f02e 259 /// Function pointer to get_fw_version
davide.aliprandi@st.com 4:24158c44f02e 260 uint8_t (*get_fw_version)(void *handle);
davide.aliprandi@st.com 4:24158c44f02e 261 /// Function pointer to get_mark
davide.aliprandi@st.com 4:24158c44f02e 262 int32_t (*get_mark)(void *handle);
davide.aliprandi@st.com 4:24158c44f02e 263 /// Function pointer to get_max_speed
davide.aliprandi@st.com 4:24158c44f02e 264 uint16_t (*get_max_speed)(void *handle, uint8_t motorId);
davide.aliprandi@st.com 4:24158c44f02e 265 /// Function pointer to get_min_speed
davide.aliprandi@st.com 4:24158c44f02e 266 uint16_t (*get_min_speed)(void *handle, uint8_t motorId);
davide.aliprandi@st.com 4:24158c44f02e 267 /// Function pointer to get_position
davide.aliprandi@st.com 4:24158c44f02e 268 int32_t (*get_position)(void *handle);
davide.aliprandi@st.com 4:24158c44f02e 269 /// Function pointer to go_home
davide.aliprandi@st.com 4:24158c44f02e 270 void (*go_home)(void *handle);
davide.aliprandi@st.com 4:24158c44f02e 271 /// Function pointer to go_mark
davide.aliprandi@st.com 4:24158c44f02e 272 void (*go_mark)(void *handle);
davide.aliprandi@st.com 4:24158c44f02e 273 /// Function pointer to go_to
davide.aliprandi@st.com 4:24158c44f02e 274 void (*go_to)(void *handle, uint8_t deviceId, int32_t motorId);
davide.aliprandi@st.com 4:24158c44f02e 275 /// Function pointer to hard_stop
davide.aliprandi@st.com 4:24158c44f02e 276 void (*hard_stop)(void *handle, uint8_t motorId);
davide.aliprandi@st.com 4:24158c44f02e 277 /// Function pointer to move
davide.aliprandi@st.com 4:24158c44f02e 278 void (*move)(void *handle, motorDir_t direction, uint32_t stepCount);
davide.aliprandi@st.com 4:24158c44f02e 279 /// Function pointer to ResetAllDevices
davide.aliprandi@st.com 4:24158c44f02e 280 void (*ResetAllDevices)(void *handle);
davide.aliprandi@st.com 4:24158c44f02e 281 /// Function pointer to run
davide.aliprandi@st.com 4:24158c44f02e 282 void (*run)(void *handle, uint8_t stepCount, motorDir_t direction);
davide.aliprandi@st.com 4:24158c44f02e 283 /// Function pointer to set_acceleration
davide.aliprandi@st.com 4:24158c44f02e 284 bool(*set_acceleration)(void *handle, uint16_t newAcc);
davide.aliprandi@st.com 4:24158c44f02e 285 /// Function pointer to set_deceleration
davide.aliprandi@st.com 4:24158c44f02e 286 bool(*set_deceleration)(void *handle, uint16_t newDec);
davide.aliprandi@st.com 4:24158c44f02e 287 /// Function pointer to set_home
davide.aliprandi@st.com 4:24158c44f02e 288 void (*set_home)(void *handle);
davide.aliprandi@st.com 4:24158c44f02e 289 /// Function pointer to set_mark
davide.aliprandi@st.com 4:24158c44f02e 290 void (*set_mark)(void *handle);
davide.aliprandi@st.com 4:24158c44f02e 291 /// Function pointer to set_max_speed
davide.aliprandi@st.com 4:24158c44f02e 292 bool (*set_max_speed)(void *handle, uint8_t motorId, uint16_t newMaxSpeed);
davide.aliprandi@st.com 4:24158c44f02e 293 /// Function pointer to set_min_speed
davide.aliprandi@st.com 4:24158c44f02e 294 bool (*set_min_speed)(void *handle, uint8_t motorId, uint16_t newMinSpeed);
davide.aliprandi@st.com 4:24158c44f02e 295 /// Function pointer to soft_stop
davide.aliprandi@st.com 4:24158c44f02e 296 bool (*soft_stop)(void *handle);
davide.aliprandi@st.com 4:24158c44f02e 297 /// Function pointer to StepClockHandler
davide.aliprandi@st.com 4:24158c44f02e 298 void (*StepClockHandler)(void *handle);
davide.aliprandi@st.com 4:24158c44f02e 299 /// Function pointer to wait_while_active
davide.aliprandi@st.com 4:24158c44f02e 300 void (*wait_while_active)(void *handle);
davide.aliprandi@st.com 4:24158c44f02e 301 /// Function pointer to CmdDisable
davide.aliprandi@st.com 4:24158c44f02e 302 void (*CmdDisable)(void *handle, uint8_t bridgeId);
davide.aliprandi@st.com 4:24158c44f02e 303 /// Function pointer to CmdEnable
davide.aliprandi@st.com 4:24158c44f02e 304 void (*CmdEnable)(void *handle, uint8_t bridgeId);
davide.aliprandi@st.com 4:24158c44f02e 305 /// Function pointer to CmdGetParam
davide.aliprandi@st.com 4:24158c44f02e 306 uint32_t (*CmdGetParam)(void *handle, uint32_t param);
davide.aliprandi@st.com 4:24158c44f02e 307 /// Function pointer to CmdGetStatus
davide.aliprandi@st.com 4:24158c44f02e 308 uint16_t (*CmdGetStatus)(void *handle, uint8_t bridgeId);
davide.aliprandi@st.com 4:24158c44f02e 309 /// Function pointer to CmdNop
davide.aliprandi@st.com 4:24158c44f02e 310 void (*CmdNop)(void *handle);
davide.aliprandi@st.com 4:24158c44f02e 311 /// Function pointer to CmdSetParam
davide.aliprandi@st.com 4:24158c44f02e 312 void (*CmdSetParam)(void *handle, uint32_t param, uint32_t value);
davide.aliprandi@st.com 4:24158c44f02e 313 /// Function pointer to read_status_register
davide.aliprandi@st.com 4:24158c44f02e 314 uint16_t (*read_status_register)(void *handle);
davide.aliprandi@st.com 4:24158c44f02e 315 /// Function pointer to release_reset
davide.aliprandi@st.com 4:24158c44f02e 316 void (*release_reset)(void *handle);
davide.aliprandi@st.com 4:24158c44f02e 317 /// Function pointer to Reset
davide.aliprandi@st.com 4:24158c44f02e 318 void (*Reset)(void *handle);
davide.aliprandi@st.com 4:24158c44f02e 319 /// Function pointer to SelectStepMode
davide.aliprandi@st.com 4:24158c44f02e 320 void (*SelectStepMode)(void *handle, motorStepMode_t stepMode);
davide.aliprandi@st.com 4:24158c44f02e 321 /// Function pointer to set_direction
davide.aliprandi@st.com 4:24158c44f02e 322 void (*set_direction)(void *handle, motorDir_t direction);
davide.aliprandi@st.com 4:24158c44f02e 323 /// Function pointer to CmdGoToDir
davide.aliprandi@st.com 4:24158c44f02e 324 void (*CmdGoToDir)(void *handle, motorDir_t direction, int32_t abs_pos);
davide.aliprandi@st.com 4:24158c44f02e 325 /// Function pointer to check_busy_hw
davide.aliprandi@st.com 4:24158c44f02e 326 uint8_t (*check_busy_hw)(void *handle);
davide.aliprandi@st.com 4:24158c44f02e 327 /// Function pointer to check_status_hw
davide.aliprandi@st.com 4:24158c44f02e 328 uint8_t (*check_status_hw)(void *handle);
davide.aliprandi@st.com 4:24158c44f02e 329 /// Function pointer to CmdGoUntil
davide.aliprandi@st.com 4:24158c44f02e 330 void (*CmdGoUntil)(void *handle, motorAction_t action, motorDir_t direction, uint32_t speed);
davide.aliprandi@st.com 4:24158c44f02e 331 /// Function pointer to CmdHardHiZ
davide.aliprandi@st.com 4:24158c44f02e 332 void (*CmdHardHiZ)(void *handle, uint8_t motorId);
davide.aliprandi@st.com 4:24158c44f02e 333 /// Function pointer to CmdReleaseSw
davide.aliprandi@st.com 4:24158c44f02e 334 void (*CmdReleaseSw)(void *handle, motorAction_t action, motorDir_t direction);
davide.aliprandi@st.com 4:24158c44f02e 335 /// Function pointer to CmdResetDevice
davide.aliprandi@st.com 4:24158c44f02e 336 void (*CmdResetDevice)(void *handle);
davide.aliprandi@st.com 4:24158c44f02e 337 /// Function pointer to CmdResetPos
davide.aliprandi@st.com 4:24158c44f02e 338 void (*CmdResetPos)(void *handle);
davide.aliprandi@st.com 4:24158c44f02e 339 /// Function pointer to CmdRun
davide.aliprandi@st.com 4:24158c44f02e 340 void (*CmdRun)(void *handle, motorDir_t direction, uint32_t speed);
davide.aliprandi@st.com 4:24158c44f02e 341 /// Function pointer to CmdSoftHiZ
davide.aliprandi@st.com 4:24158c44f02e 342 void (*CmdSoftHiZ)(void *handle);
davide.aliprandi@st.com 4:24158c44f02e 343 /// Function pointer to CmdStepClock
davide.aliprandi@st.com 4:24158c44f02e 344 void (*CmdStepClock)(void *handle, motorDir_t direction);
davide.aliprandi@st.com 4:24158c44f02e 345 /// Function pointer to fetch_and_clear_all_status
davide.aliprandi@st.com 4:24158c44f02e 346 void (*fetch_and_clear_all_status)(void *handle);
davide.aliprandi@st.com 4:24158c44f02e 347 /// Function pointer to get_fetched_status
davide.aliprandi@st.com 4:24158c44f02e 348 uint16_t (*get_fetched_status)(void *handle);
davide.aliprandi@st.com 4:24158c44f02e 349 /// Function pointer to get_nb_devices
davide.aliprandi@st.com 4:24158c44f02e 350 uint8_t (*get_nb_devices)(void *handle);
davide.aliprandi@st.com 4:24158c44f02e 351 /// Function pointer to is_device_busy
davide.aliprandi@st.com 4:24158c44f02e 352 bool (*is_device_busy)(void *handle);
davide.aliprandi@st.com 4:24158c44f02e 353 /// Function pointer to send_queued_commands
davide.aliprandi@st.com 4:24158c44f02e 354 void (*send_queued_commands)(void *handle);
davide.aliprandi@st.com 4:24158c44f02e 355 /// Function pointer to queue_commands
davide.aliprandi@st.com 4:24158c44f02e 356 void (*queue_commands)(void *handle, uint8_t param, int32_t value);
davide.aliprandi@st.com 4:24158c44f02e 357 /// Function pointer to WaitForAllDevicesNotBusy
davide.aliprandi@st.com 4:24158c44f02e 358 void (*WaitForAllDevicesNotBusy)(void *handle);
davide.aliprandi@st.com 4:24158c44f02e 359 /// Function pointer to error_handler
davide.aliprandi@st.com 4:24158c44f02e 360 void (*error_handler)(void *handle, uint16_t error);
davide.aliprandi@st.com 4:24158c44f02e 361 /// Function pointer to BusyInterruptHandler
davide.aliprandi@st.com 4:24158c44f02e 362 void (*BusyInterruptHandler)(void *handle);
davide.aliprandi@st.com 4:24158c44f02e 363 /// Function pointer to CmdSoftStop
davide.aliprandi@st.com 4:24158c44f02e 364 void (*CmdSoftStop)(void *handle);
davide.aliprandi@st.com 4:24158c44f02e 365 /// Function pointer to StartStepClock
davide.aliprandi@st.com 4:24158c44f02e 366 void (*StartStepClock)(void *handle);
davide.aliprandi@st.com 4:24158c44f02e 367 /// Function pointer to StopStepClock
davide.aliprandi@st.com 4:24158c44f02e 368 void (*StopStepClock)(void *handle);
davide.aliprandi@st.com 4:24158c44f02e 369 /// Function pointer to set_dual_full_bridge_config
davide.aliprandi@st.com 4:24158c44f02e 370 void (*set_dual_full_bridge_config)(void *handle, uint8_t newConfig);
davide.aliprandi@st.com 4:24158c44f02e 371 /// Function pointer to get_bridge_input_pwm_freq
davide.aliprandi@st.com 4:24158c44f02e 372 uint32_t (*get_bridge_input_pwm_freq)(void *handle, uint8_t bridgeId);
davide.aliprandi@st.com 4:24158c44f02e 373 /// Function pointer to set_bridge_input_pwm_freq
davide.aliprandi@st.com 4:24158c44f02e 374 void (*set_bridge_input_pwm_freq)(void *handle, uint8_t bridgeId, uint32_t newFreq);
davide.aliprandi@st.com 4:24158c44f02e 375 /// Function pointer to set_stop_mode
davide.aliprandi@st.com 4:24158c44f02e 376 void (*set_stop_mode)(void *handle, motorStopMode_t stopMode);
davide.aliprandi@st.com 4:24158c44f02e 377 /// Function pointer to get_stop_mode
davide.aliprandi@st.com 4:24158c44f02e 378 motorStopMode_t (*get_stop_mode)(void *handle);
davide.aliprandi@st.com 4:24158c44f02e 379 /// Function pointer to set_decay_mode
davide.aliprandi@st.com 4:24158c44f02e 380 void (*set_decay_mode)(void *handle, motorDecayMode_t decayMode);
davide.aliprandi@st.com 4:24158c44f02e 381 /// Function pointer to get_decay_mode
davide.aliprandi@st.com 4:24158c44f02e 382 motorDecayMode_t (*get_decay_mode)(void *handle);
davide.aliprandi@st.com 4:24158c44f02e 383 /// Function pointer to get_step_mode
davide.aliprandi@st.com 4:24158c44f02e 384 motorStepMode_t (*get_step_mode)(void *handle);
davide.aliprandi@st.com 4:24158c44f02e 385 /// Function pointer to get_direction
davide.aliprandi@st.com 4:24158c44f02e 386 motorDir_t (*get_direction)(void *handle);
davide.aliprandi@st.com 4:24158c44f02e 387 /// Function pointer to ExitDeviceFromReset
davide.aliprandi@st.com 4:24158c44f02e 388 void (*ExitDeviceFromReset)(void *handle);
davide.aliprandi@st.com 4:24158c44f02e 389 /// Function pointer to set_torque
davide.aliprandi@st.com 4:24158c44f02e 390 void (*set_torque)(void *handle, motorTorqueMode_t torqueMode, uint8_t torqueValue);
davide.aliprandi@st.com 4:24158c44f02e 391 /// Function pointer to get_torque
davide.aliprandi@st.com 4:24158c44f02e 392 uint8_t (*get_torque)(void *handle, motorTorqueMode_t torqueMode);
davide.aliprandi@st.com 4:24158c44f02e 393 /// Function pointer to SetVRefFreq
davide.aliprandi@st.com 4:24158c44f02e 394 void (*SetRefFreq)(void *handle, uint32_t freq);
davide.aliprandi@st.com 4:24158c44f02e 395 /// Function pointer to GetVRefFreq
davide.aliprandi@st.com 4:24158c44f02e 396 uint32_t (*GetRefFreq)(void *handle);
davide.aliprandi@st.com 4:24158c44f02e 397 /// Function pointer to SetVRefDc
davide.aliprandi@st.com 4:24158c44f02e 398 void (*SetRefDc)(void *handle, uint8_t RefDc);
davide.aliprandi@st.com 4:24158c44f02e 399 /// Function pointer to GetVRefDc
davide.aliprandi@st.com 4:24158c44f02e 400 uint8_t (*GetRefDc)(void *handle);
davide.aliprandi@st.com 4:24158c44f02e 401 /// Function pointer to set_nb_devices
davide.aliprandi@st.com 4:24158c44f02e 402 bool (*set_nb_devices)(void *handle, uint8_t nbDevices);
davide.aliprandi@st.com 4:24158c44f02e 403 /// Function pointer to set a parameter
davide.aliprandi@st.com 4:24158c44f02e 404 bool (*set_analog_value)(void *handle, uint32_t param, float value);
davide.aliprandi@st.com 4:24158c44f02e 405 /// Function pointer to get a parameter
davide.aliprandi@st.com 4:24158c44f02e 406 float (*get_analog_value)(void *handle, uint32_t param);
davide.aliprandi@st.com 4:24158c44f02e 407 } MOTOR_VTable_t;
davide.aliprandi@st.com 4:24158c44f02e 408
davide.aliprandi@st.com 4:24158c44f02e 409 /**
davide.aliprandi@st.com 4:24158c44f02e 410
davide.aliprandi@st.com 4:24158c44f02e 411 * @}
davide.aliprandi@st.com 4:24158c44f02e 412 */
davide.aliprandi@st.com 4:24158c44f02e 413
davide.aliprandi@st.com 4:24158c44f02e 414 /**
davide.aliprandi@st.com 4:24158c44f02e 415 * @}
davide.aliprandi@st.com 4:24158c44f02e 416 */
davide.aliprandi@st.com 4:24158c44f02e 417
davide.aliprandi@st.com 4:24158c44f02e 418 /**
davide.aliprandi@st.com 4:24158c44f02e 419 * @}
davide.aliprandi@st.com 4:24158c44f02e 420 */
davide.aliprandi@st.com 4:24158c44f02e 421
davide.aliprandi@st.com 4:24158c44f02e 422 /**
davide.aliprandi@st.com 4:24158c44f02e 423 * @}
davide.aliprandi@st.com 4:24158c44f02e 424 */
davide.aliprandi@st.com 4:24158c44f02e 425
davide.aliprandi@st.com 4:24158c44f02e 426 /**
davide.aliprandi@st.com 4:24158c44f02e 427 * @}
davide.aliprandi@st.com 4:24158c44f02e 428 */
davide.aliprandi@st.com 4:24158c44f02e 429
davide.aliprandi@st.com 4:24158c44f02e 430 #ifdef __cplusplus
davide.aliprandi@st.com 4:24158c44f02e 431 }
davide.aliprandi@st.com 4:24158c44f02e 432 #endif
davide.aliprandi@st.com 4:24158c44f02e 433
davide.aliprandi@st.com 4:24158c44f02e 434 #endif /* __MOTOR_H */
davide.aliprandi@st.com 4:24158c44f02e 435
davide.aliprandi@st.com 4:24158c44f02e 436 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
davide.aliprandi@st.com 4:24158c44f02e 437