Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of X-NUCLEO-IHM05A1 by
motor.h
00001 /** 00002 ****************************************************************************** 00003 * @file motor.h 00004 * @author IPC Rennes 00005 * @version V1.5.0 00006 * @date January 25, 2016 00007 * @brief This file contains all the functions prototypes for motor drivers. 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 __MOTOR_H 00040 #define __MOTOR_H 00041 00042 #ifdef __cplusplus 00043 extern "C" { 00044 #endif 00045 00046 /* Includes ------------------------------------------------------------------*/ 00047 #include <stdint.h> 00048 #include "component.h" 00049 00050 /* Definitions ---------------------------------------------------------------*/ 00051 /// boolean for false condition 00052 #ifndef FALSE 00053 #define FALSE (0) 00054 #endif 00055 /// boolean for true condition 00056 #ifndef TRUE 00057 #define TRUE (1) 00058 #endif 00059 00060 /* Types ---------------------------------------------------------------------*/ 00061 /** @addtogroup BSP 00062 * @{ 00063 */ 00064 00065 /** @addtogroup Components 00066 * @{ 00067 */ 00068 00069 /** @defgroup Motor Motor 00070 * @{ 00071 */ 00072 00073 /** @defgroup Motor_Exported_Types Motor Exported Types 00074 * @{ 00075 */ 00076 00077 /** @defgroup Device_Direction_Options Device Direction Options 00078 * @{ 00079 */ 00080 /// Direction options 00081 typedef enum { 00082 BACKWARD = 0, 00083 FORWARD = 1, 00084 UNKNOW_DIR = ((uint8_t)0xFF) 00085 } motorDir_t; 00086 /** 00087 * @} 00088 */ 00089 00090 /** @defgroup Device_Action_Options Device Action Options 00091 * @{ 00092 */ 00093 /// Action options 00094 typedef enum { 00095 ACTION_RESET = ((uint8_t)0x00), 00096 ACTION_COPY = ((uint8_t)0x08) 00097 } motorAction_t; 00098 /** 00099 * @} 00100 */ 00101 00102 /** @defgroup Device_States Device States 00103 * @{ 00104 */ 00105 /// Device states 00106 typedef enum { 00107 ACCELERATING = 0, 00108 DECELERATINGTOSTOP = 1, 00109 DECELERATING = 2, 00110 STEADY = 3, 00111 INDEX_ACCEL = 4, 00112 INDEX_RUN = 5, 00113 INDEX_DECEL = 6, 00114 INDEX_DWELL = 7, 00115 INACTIVE = 8, 00116 STANDBY = 9, 00117 STANDBYTOINACTIVE = 10 00118 } motorState_t; 00119 /** 00120 * @} 00121 */ 00122 00123 /** @defgroup Device_Step_mode Device Step mode 00124 * @{ 00125 */ 00126 /// Stepping options 00127 typedef enum { 00128 STEP_MODE_FULL = ((uint8_t)0x00), 00129 STEP_MODE_HALF = ((uint8_t)0x01), 00130 STEP_MODE_1_4 = ((uint8_t)0x02), 00131 STEP_MODE_1_8 = ((uint8_t)0x03), 00132 STEP_MODE_1_16 = ((uint8_t)0x04), 00133 STEP_MODE_1_32 = ((uint8_t)0x05), 00134 STEP_MODE_1_64 = ((uint8_t)0x06), 00135 STEP_MODE_1_128 = ((uint8_t)0x07), 00136 STEP_MODE_1_256 = ((uint8_t)0x08), 00137 STEP_MODE_UNKNOW = ((uint8_t)0xFE), 00138 STEP_MODE_WAVE = ((uint8_t)0xFF) 00139 } motorStepMode_t; 00140 00141 /** 00142 * @} 00143 */ 00144 00145 /** @defgroup Decay_mode Decay mode 00146 * @{ 00147 */ 00148 /// Decay Mode 00149 typedef enum { 00150 SLOW_DECAY = 0, 00151 FAST_DECAY = 1, 00152 UNKNOW_DECAY = ((uint8_t)0xFF) 00153 } motorDecayMode_t; 00154 /** 00155 * @} 00156 */ 00157 00158 /** @defgroup Stop_mode Stop mode 00159 * @{ 00160 */ 00161 /// Stop mode 00162 typedef enum 00163 { 00164 HOLD_MODE = 0, 00165 HIZ_MODE = 1, 00166 STANDBY_MODE = 2, 00167 UNKNOW_STOP_MODE = ((uint8_t)0xFF) 00168 } motorStopMode_t; 00169 /** 00170 * @} 00171 */ 00172 00173 /** @defgroup Torque_mode Torque mode 00174 * @{ 00175 */ 00176 /// Torque mode 00177 typedef enum 00178 { 00179 ACC_TORQUE = 0, 00180 DEC_TORQUE = 1, 00181 RUN_TORQUE = 2, 00182 HOLD_TORQUE = 3, 00183 CURRENT_TORQUE = 4, 00184 UNKNOW_TORQUE = ((uint8_t)0xFF) 00185 } motorTorqueMode_t; 00186 /** 00187 * @} 00188 */ 00189 00190 /** @defgroup Dual_Full_Bridge_Configuration Dual Full Bridge Configuration 00191 * @{ 00192 */ 00193 ///Dual full bridge configurations for brush DC motors 00194 typedef enum { 00195 PARALLELING_NONE___1_BIDIR_MOTOR_BRIDGE_A__1_BIDIR_MOTOR_BRIDGE_B = 0, 00196 PARALLELING_NONE___1_BIDIR_MOTOR_BRIDGE_A__2_UNDIR_MOTOR_BRIDGE_B = 1, 00197 PARALLELING_NONE___2_UNDIR_MOTOR_BRIDGE_A__1_BIDIR_MOTOR_BRIDGE_B = 2, 00198 PARALLELING_NONE___2_UNDIR_MOTOR_BRIDGE_A__2_UNDIR_MOTOR_BRIDGE_B = 3, 00199 PARALLELING_IN1A_IN2A__1_UNDIR_MOTOR_BRIDGE_A__1_BIDIR_MOTOR_BRIDGE_B = 4, 00200 PARALLELING_IN1A_IN2A__1_UNDIR_MOTOR_BRIDGE_A__2_UNDIR_MOTOR_BRIDGE_B = 5, 00201 PARALLELING_IN1B_IN2B__1_BIDIR_MOTOR_BRIDGE_A__1_UNDIR_MOTOR_BRIDGE_B = 6, 00202 PARALLELING_IN1B_IN2B__2_UNDIR_MOTOR_BRIDGE_A__1_UNDIR_MOTOR_BRIDGE_B = 7, 00203 PARALLELING_IN1A_IN2A__IN1B_IN2B__1_UNDIR_MOTOR_BRIDGE_A__1_UNDIR_MOTOR_BRIDGE_B = 8, 00204 PARALLELING_IN1A_IN2A__IN1B_IN2B__1_BIDIR_MOTOR = 9, 00205 PARALLELING_IN1A_IN1B__IN2A_IN2B__1_UNDIR_MOTOR_BRIDGE_1A__1_UNDIR_MOTOR_BRIDGE_2A = 10, 00206 PARALLELING_IN1A_IN1B__IN2A_IN2B__1_BIDIR_MOTOR = 11, 00207 PARALLELING_ALL_WITH_IN1A___1_UNDIR_MOTOR = 12, 00208 PARALLELING_END_ENUM = 13 00209 } dualFullBridgeConfig_t; 00210 /** 00211 * @} 00212 */ 00213 00214 /** @defgroup Motor_Driver_Structure Motor Driver Structure 00215 * @{ 00216 */ 00217 /** 00218 * @brief MOTOR driver virtual table structure definition. 00219 */ 00220 typedef struct 00221 { 00222 /* ACTION ----------------------------------------------------------------* 00223 * Declare here the component's generic functions. * 00224 * Tag this group of functions with the " Generic " C-style comment. * 00225 * A component's interface has to define at least the two generic * 00226 * functions provided here below within the "Example" section, as the * 00227 * first and second functions of its Virtual Table. They have to be * 00228 * specified exactly in the given way. * 00229 * * 00230 * Example: * 00231 * Status_t (*Init) (void *handle, void *init); * 00232 * Status_t (*ReadID) (void *handle, uint8_t *id); * 00233 *------------------------------------------------------------------------*/ 00234 /* Generic */ 00235 Status_t (*Init)(void *handle, void *init); 00236 Status_t (*ReadID)(void *handle, uint8_t *id); 00237 /* ACTION ----------------------------------------------------------------* 00238 * Declare here the component's interrupts related functions. * 00239 * Tag this group of functions with the " Interrupts " C-style comment. * 00240 * Do not specify any function if not required. * 00241 * * 00242 * Example: * 00243 * void (*ConfigIT) (void *handle, int a); * 00244 *------------------------------------------------------------------------*/ 00245 /* Interrupts */ 00246 /// Function pointer to AttachErrorHandler 00247 void (*AttachErrorHandler)(void *handle, void (*callback)(void *handle, uint16_t error)); 00248 /// Function pointer to AttachFlagInterrupt 00249 void (*AttachFlagInterrupt)(void *handle, void (*callback)(void *handle)); 00250 /// Function pointer to AttachBusyInterrupt 00251 void (*AttachBusyInterrupt)(void *handle, void (*callback)(void *handle)); 00252 /// Function pointer to FlagInterruptHandler 00253 void (*FlagInterruptHandler)(void *handle); 00254 /* ACTION ----------------------------------------------------------------* 00255 * Declare here the component's specific functions. * 00256 * Tag this group of functions with the " Specific " C-style comment. * 00257 * Do not specify any function if not required. * 00258 * * 00259 * Example: * 00260 * Status_t (*GetValue) (void *handle, float *f); * 00261 *------------------------------------------------------------------------*/ 00262 /* Specific */ 00263 /// Function pointer to GetAcceleration 00264 uint16_t (*GetAcceleration)(void *handle); 00265 /// Function pointer to GetCurrentSpeed 00266 uint16_t (*GetCurrentSpeed)(void *handle); 00267 /// Function pointer to GetDeceleration 00268 uint16_t (*GetDeceleration)(void *handle); 00269 /// Function pointer to GetDeviceState 00270 motorState_t(*GetDeviceState)(void *handle); 00271 /// Function pointer to GetFwVersion 00272 uint8_t (*GetFwVersion)(void *handle); 00273 /// Function pointer to GetMark 00274 int32_t (*GetMark)(void *handle); 00275 /// Function pointer to GetMaxSpeed 00276 uint16_t (*GetMaxSpeed)(void *handle); 00277 /// Function pointer to GetMinSpeed 00278 uint16_t (*GetMinSpeed)(void *handle); 00279 /// Function pointer to GetPosition 00280 int32_t (*GetPosition)(void *handle); 00281 /// Function pointer to GoHome 00282 void (*GoHome)(void *handle); 00283 /// Function pointer to GoMark 00284 void (*GoMark)(void *handle); 00285 /// Function pointer to GoTo 00286 void (*GoTo)(void *handle, int32_t targetPosition); 00287 /// Function pointer to HardStop 00288 void (*HardStop)(void *handle); 00289 /// Function pointer to Move 00290 void (*Move)(void *handle, motorDir_t direction, uint32_t stepCount); 00291 /// Function pointer to ResetAllDevices 00292 //void (*ResetAllDevices)(void *handle); 00293 /// Function pointer to Run 00294 void (*Run)(void *handle, motorDir_t direction); 00295 /// Function pointer to SetAcceleration 00296 bool (*SetAcceleration)(void *handle, uint16_t newAcc); 00297 /// Function pointer to SetDeceleration 00298 bool (*SetDeceleration)(void *handle, uint16_t newDec); 00299 /// Function pointer to SetHome 00300 void (*SetHome)(void *handle); 00301 /// Function pointer to SetMark 00302 void (*SetMark)(void *handle); 00303 /// Function pointer to SetMaxSpeed 00304 bool (*SetMaxSpeed)(void *handle, uint16_t newMaxSpeed); 00305 /// Function pointer to SetMinSpeed 00306 bool (*SetMinSpeed)(void *handle, uint16_t newMinSpeed); 00307 /// Function pointer to SoftStop 00308 bool (*SoftStop)(void *handle); 00309 /// Function pointer to StepClockHandler 00310 void (*StepClockHandler)(void *handle); 00311 /// Function pointer to WaitWhileActive 00312 void (*WaitWhileActive)(void *handle); 00313 /// Function pointer to CmdDisable 00314 void (*CmdDisable)(void *handle); 00315 /// Function pointer to CmdEnable 00316 void (*CmdEnable)(void *handle); 00317 /// Function pointer to CmdGetParam 00318 uint32_t (*CmdGetParam)(void *handle, uint32_t param); 00319 /// Function pointer to CmdGetStatus 00320 uint16_t (*CmdGetStatus)(void *handle); 00321 /// Function pointer to CmdNop 00322 void (*CmdNop)(void *handle); 00323 /// Function pointer to CmdSetParam 00324 void (*CmdSetParam)(void *handle, uint32_t param, uint32_t value); 00325 /// Function pointer to ReadStatusRegister 00326 uint16_t (*ReadStatusRegister)(void *handle); 00327 /// Function pointer to ReleaseReset 00328 void (*ReleaseReset)(void *handle); 00329 /// Function pointer to Reset 00330 void (*Reset)(void *handle); 00331 /// Function pointer to SelectStepMode 00332 void (*SelectStepMode)(void *handle, motorStepMode_t); 00333 /// Function pointer to SetDirection 00334 void (*SetDirection)(void *handle, motorDir_t direction); 00335 /// Function pointer to CmdGoToDir 00336 void (*CmdGoToDir)(void *handle, motorDir_t direction, int32_t targetPosition); 00337 /// Function pointer to CheckBusyHw 00338 uint8_t (*CheckBusyHw)(void *handle); 00339 /// Function pointer to CheckStatusHw 00340 uint8_t (*CheckStatusHw)(void *handle); 00341 /// Function pointer to CmdGoUntil 00342 void (*CmdGoUntil)(void *handle, motorAction_t action, motorDir_t direction, uint32_t targetPosition); 00343 /// Function pointer to CmdHardHiZ 00344 void (*CmdHardHiZ)(void *handle); 00345 /// Function pointer to CmdReleaseSw 00346 void (*CmdReleaseSw)(void *handle, motorAction_t action, motorDir_t direction); 00347 /// Function pointer to CmdResetDevice 00348 void (*CmdResetDevice)(void *handle); 00349 /// Function pointer to CmdResetPos 00350 void (*CmdResetPos)(void *handle); 00351 /// Function pointer to CmdRun 00352 void (*CmdRun)(void *handle, motorDir_t direction, uint32_t targetPosition); 00353 /// Function pointer to CmdSoftHiZ 00354 void (*CmdSoftHiZ)(void *handle); 00355 /// Function pointer to CmdStepClock 00356 void (*CmdStepClock)(void *handle, motorDir_t direction); 00357 /// Function pointer to FetchAndClearAllStatus 00358 void (*FetchAndClearAllStatus)(void *handle); 00359 /// Function pointer to GetFetchedStatus 00360 uint16_t (*GetFetchedStatus)(void *handle); 00361 /// Function pointer to GetNbDevices 00362 uint8_t (*GetNbDevices)(void *handle); 00363 /// Function pointer to IsDeviceBusy 00364 bool (*IsDeviceBusy)(void *handle); 00365 /// Function pointer to SendQueuedCommands 00366 void (*SendQueuedCommands)(void *handle); 00367 /// Function pointer to QueueCommands 00368 void (*QueueCommands)(void *handle, uint8_t command, int32_t value); 00369 /// Function pointer to WaitForAllDevicesNotBusy 00370 void (*WaitForAllDevicesNotBusy)(void *handle); 00371 /// Function pointer to ErrorHandler 00372 void (*ErrorHandler)(void *handle, uint16_t error); 00373 /// Function pointer to BusyInterruptHandler 00374 void (*BusyInterruptHandler)(void *handle); 00375 /// Function pointer to CmdSoftStop 00376 void (*CmdSoftStop)(void *handle); 00377 /// Function pointer to StartStepClock 00378 void (*StartStepClock)(void *handle, uint16_t newFreq); 00379 /// Function pointer to StopStepClock 00380 void (*StopStepClock)(void *handle); 00381 /// Function pointer to SetDualFullBridgeConfig 00382 void (*SetDualFullBridgeConfig)(void *handle, uint8_t config); 00383 /// Function pointer to GetBridgeInputPwmFreq 00384 uint32_t (*GetBridgeInputPwmFreq)(void *handle); 00385 /// Function pointer to SetBridgeInputPwmFreq 00386 void (*SetBridgeInputPwmFreq)(void *handle, uint32_t newFreq); 00387 /// Function pointer to SetStopMode 00388 void (*SetStopMode)(void *handle, motorStopMode_t stopMode); 00389 /// Function pointer to GetStopMode 00390 motorStopMode_t (*GetStopMode)(void *handle); 00391 /// Function pointer to SetDecayMode 00392 void (*SetDecayMode)(void *handle, motorDecayMode_t decayMode); 00393 /// Function pointer to GetDecayMode 00394 motorDecayMode_t (*GetDecayMode)(void *handle); 00395 /// Function pointer to GetStepMode 00396 motorStepMode_t (*GetStepMode)(void *handle); 00397 /// Function pointer to GetDirection 00398 motorDir_t (*GetDirection)(void *handle); 00399 /// Function pointer to ExitDeviceFromReset 00400 void (*ExitDeviceFromReset)(void *handle); 00401 /// Function pointer to SetTorque 00402 void (*SetTorque)(void *handle, motorTorqueMode_t torqueMode, uint8_t torqueValue); 00403 /// Function pointer to GetTorque 00404 uint8_t (*GetTorque)(void *handle, motorTorqueMode_t torqueMode); 00405 /// Function pointer to SetVRefFreq 00406 void (*SetRefFreq)(void *handle, uint32_t newFreq); 00407 /// Function pointer to GetVRefFreq 00408 uint32_t (*GetRefFreq)(void *handle); 00409 /// Function pointer to SetVRefDc 00410 void (*SetRefDc)(void *handle, uint8_t newDc); 00411 /// Function pointer to GetVRefDc 00412 uint8_t (*GetRefDc)(void *handle); 00413 /// Function pointer to SetNbDevices 00414 bool (*SetNbDevices)(void *handle, uint8_t nbDevices); 00415 /// Function pointer to set a parameter 00416 bool (*SetAnalogValue)(void *handle, uint32_t param, float value); 00417 /// Function pointer to get a parameter 00418 float (*GetAnalogValue)(void *handle, uint32_t param); 00419 } MOTOR_VTable_t; 00420 /** 00421 * @} 00422 */ 00423 00424 /** 00425 * @} 00426 */ 00427 00428 /** 00429 * @} 00430 */ 00431 00432 /** 00433 * @} 00434 */ 00435 00436 /** 00437 * @} 00438 */ 00439 00440 #ifdef __cplusplus 00441 } 00442 #endif 00443 00444 #endif /* __MOTOR_H */ 00445 00446 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
Generated on Thu Jul 21 2022 19:36:08 by
1.7.2
