Expansion SW library to control high power stepper motor(s) using IHM03A1 expansion board(s) with Powerstep01 driver.
Dependencies: X_NUCLEO_COMMON ST_INTERFACES
Dependents: IHM03A1_ExampleFor1Motor HelloWorld_IHM03A1 IHM03A1_ExampleFor3Motors KYPHOS_Stepper_Motor_Control
Fork of X_NUCLEO_IHM03A1 by
Motor Control Library
Library to handle the X-NUCLEO-IHM03A1 Motor Control Expansion Board based on the Powerstep01 component.
It features the:
- read and write of Powerstep01 registers
- Nucleo and expansion board configuration (GPIOs, PWMs, IRQs, etc.)
- Powerstep01 application commands handling
- FLAG and BUSY interrupt handling (alarm reporting)
- Daisy chain handling
The API allows to easily:
- perform various positioning, moves and stops
- get/set or monitor the motor positions
- set home position and mark another position
- get/set minimum and maximum speed
- get current speed
- get/set acceleration and deceleration
- get/set the step mode (up to 1/128)
- get/set the control method
- get/set parameters for voltage mode driving
- get/set parameters for current mode driving
- get/set parameters for gate driving
- configure various protections such as overcurrent detection
- enable/disable alarms
- handle step-clock
- get system status
Daisy-Chain Configuration
The IHM03A1 board can be stacked up to three times so that the Powerstep01 components will be connected in daisy-chain configuration. For this purpose, some resistors must be correctly connected on the boards as depicted here below:
Platform compatibility
Compatible platforms have been tested with the default configuration provided by the HelloWorld_IHM03A1 example.
Diff: Components/Interfaces/StepperMotor_class.h
- Revision:
- 1:8ce2a5d6fbf8
- Parent:
- 0:00a3c3f5a8f0
--- a/Components/Interfaces/StepperMotor_class.h Tue Apr 05 15:18:56 2016 +0000
+++ b/Components/Interfaces/StepperMotor_class.h Thu Apr 07 16:11:47 2016 +0000
@@ -1,15 +1,15 @@
/**
******************************************************************************
* @file StepperMotor_class.h
- * @author IPC Rennes
- * @version V1.2.0
- * @date March 18th, 2016
+ * @author Davide Aliprandi, STMicroelectronics
+ * @version V1.1.0
+ * @date April 6th, 2016
* @brief This file contains the abstract class describing the interface of a
* stepper-motor component.
******************************************************************************
* @attention
*
- * <h2><center>© COPYRIGHT(c) 2016 STMicroelectronics</center></h2>
+ * <h2><center>© COPYRIGHT(c) 2015 STMicroelectronics</center></h2>
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
@@ -60,17 +60,28 @@
*/
typedef enum
{
- BWD = 0, /* Backward. */
- FWD = 1 /* Forward. */
+ BWD = 0, /* Backward. */
+ FWD = 1 /* Forward. */
} direction_t;
/**
- * @brief Attaching an error handler.
- * @param fptr An error handler.
- * @retval None.
+ * @brief Step modes.
*/
- virtual void AttachErrorHandler(void (*fptr)(uint16_t error)) = 0;
-
+ typedef enum
+ {
+ STEP_MODE_FULL = 0, /* Full-step. */
+ STEP_MODE_HALF, /* Half-step. */
+ STEP_MODE_1_4, /* 1/4 microstep. */
+ STEP_MODE_1_8, /* 1/8 microstep. */
+ STEP_MODE_1_16, /* 1/16 microstep. */
+ STEP_MODE_1_32, /* 1/32 microstep. */
+ STEP_MODE_1_64, /* 1/64 microstep. */
+ STEP_MODE_1_128, /* 1/128 microstep. */
+ STEP_MODE_1_256, /* 1/256 microstep. */
+ STEP_MODE_UNKNOWN,
+ STEP_MODE_WAVE /* Full-step one-phase-on*/
+ } step_mode_t;
+
/**
* @brief Getting the status.
* @param None.
@@ -79,20 +90,6 @@
virtual unsigned int GetStatus(void) = 0;
/**
- * @brief Getting a parameter in the register format
- * @param parameter The parameter's identifier (or its register address).
- * @retval The parameter's value in the register format (digital value)
- */
- virtual unsigned int GetParameter(unsigned int parameter) = 0;
-
- /**
- * @brief Getting a parameter value in float format
- * @param parameter The parameter's identifier (or its register address).
- * @retval The parameter's value in float format (analog value)
- */
- virtual float GetAnalogValue(unsigned int parameter) = 0;
-
- /**
* @brief Getting the position.
* @param None.
* @retval The position.
@@ -105,7 +102,7 @@
* @retval The marked position.
*/
virtual signed int GetMark(void) = 0;
-
+
/**
* @brief Getting the current speed in pps.
* @param None.
@@ -140,29 +137,13 @@
* @retval The deceleration in pps^2.
*/
virtual unsigned int GetDeceleration(void) = 0;
-
+
/**
* @brief Getting the direction of rotation.
* @param None.
* @retval The direction of rotation.
*/
virtual direction_t GetDirection(void) = 0;
-
- /**
- * @brief Setting a parameter.
- * @param parameter The parameter's identifier (or its register address).
- * @param value The parameter's value in the register format (digital value)
- * @retval None.
- */
- virtual void SetParameter(unsigned int parameter, unsigned int value) = 0;
-
- /**
- * @brief Setting a parameter.
- * @param parameter The parameter's identifier (or its register address).
- * @param value The parameter's value in a float format (analog value)
- * @retval None.
- */
- virtual bool SetAnalogValue(unsigned int parameter, float value) = 0;
/**
* @brief Setting the current position to be the home position.
@@ -181,37 +162,37 @@
/**
* @brief Setting the maximum speed in pps.
* @param speed The maximum speed in pps.
- * @retval TRUE if value is valid, FALSE otherwise.
+ * @retval "true" in case of success, "false" otherwise.
*/
virtual bool SetMaxSpeed(unsigned int speed) = 0;
/**
* @brief Setting the minimum speed in pps.
* @param speed The minimum speed in pps.
- * @retval TRUE if value is valid, FALSE otherwise.
+ * @retval "true" in case of success, "false" otherwise.
*/
virtual bool SetMinSpeed(unsigned int speed) = 0;
/**
* @brief Setting the acceleration in pps^2.
* @param acceleration The acceleration in pps^2.
- * @retval TRUE if value is valid, FALSE otherwise.
+ * @retval "true" in case of success, "false" otherwise.
*/
- virtual bool SetAcceleration(unsigned int speed) = 0;
+ virtual bool SetAcceleration(unsigned int acceleration) = 0;
/**
* @brief Setting the deceleration in pps^2.
* @param deceleration The deceleration in pps^2.
- * @retval TRUE if value is valid, FALSE otherwise.
+ * @retval "true" in case of success, "false" otherwise.
*/
- virtual bool SetDeceleration(unsigned int speed) = 0;
-
+ virtual bool SetDeceleration(unsigned int deceleration) = 0;
+
/**
* @brief Setting the Step Mode.
* @param step_mode The Step Mode.
- * @retval None.
+ * @retval "true" in case of success, "false" otherwise.
*/
- virtual void SetStepMode(motorStepMode_t step_mode) = 0;
+ virtual bool SetStepMode(step_mode_t step_mode) = 0;
/**
* @brief Going to a specified position.
@@ -283,9 +264,8 @@
* @retval None.
*/
virtual void WaitWhileActive(void) = 0;
-
};
#endif /* __STEPPERMOTOR_CLASS_H */
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/

X-NUCLEO-IHM03A1 High Power Stepper Motor Driver