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/powerstep01/powerstep01_class.cpp
- Revision:
- 2:06f3a5360a45
- Parent:
- 1:8ce2a5d6fbf8
--- a/Components/powerstep01/powerstep01_class.cpp Thu Apr 07 16:11:47 2016 +0000
+++ b/Components/powerstep01/powerstep01_class.cpp Wed Apr 13 12:55:45 2016 +0000
@@ -708,16 +708,16 @@
{
// Current mode
Powerstep01_CmdSetParam(POWERSTEP01_TVAL_HOLD,
- Tval_Current_to_RegVal(
+ Tval_RefVoltage_to_RegVal(
initPrm->cm.tvalHold));
Powerstep01_CmdSetParam(POWERSTEP01_TVAL_RUN,
- Tval_Current_to_RegVal(
+ Tval_RefVoltage_to_RegVal(
initPrm->cm.tvalRun));
Powerstep01_CmdSetParam(POWERSTEP01_TVAL_ACC,
- Tval_Current_to_RegVal(
+ Tval_RefVoltage_to_RegVal(
initPrm->cm.tvalAcc));
Powerstep01_CmdSetParam(POWERSTEP01_TVAL_DEC,
- Tval_Current_to_RegVal(
+ Tval_RefVoltage_to_RegVal(
initPrm->cm.tvalDec));
Powerstep01_CmdSetParam(POWERSTEP01_T_FAST,
(uint8_t)initPrm->cm.toffFast|
@@ -842,16 +842,16 @@
{
// Current mode
Powerstep01_CmdSetParam(POWERSTEP01_TVAL_HOLD,
- Tval_Current_to_RegVal(
+ Tval_RefVoltage_to_RegVal(
POWERSTEP01_CONF_PARAM_TVAL_HOLD_DEVICE_0));
Powerstep01_CmdSetParam(POWERSTEP01_TVAL_RUN,
- Tval_Current_to_RegVal(
+ Tval_RefVoltage_to_RegVal(
POWERSTEP01_CONF_PARAM_TVAL_RUN_DEVICE_0));
Powerstep01_CmdSetParam(POWERSTEP01_TVAL_ACC,
- Tval_Current_to_RegVal(
+ Tval_RefVoltage_to_RegVal(
POWERSTEP01_CONF_PARAM_TVAL_ACC_DEVICE_0));
Powerstep01_CmdSetParam(POWERSTEP01_TVAL_DEC,
- Tval_Current_to_RegVal(
+ Tval_RefVoltage_to_RegVal(
POWERSTEP01_CONF_PARAM_TVAL_DEC_DEVICE_0));
Powerstep01_CmdSetParam(POWERSTEP01_T_FAST,
(uint8_t)POWERSTEP01_CONF_PARAM_TOFF_FAST_DEVICE_0 |
@@ -956,16 +956,16 @@
{
// Current mode
Powerstep01_CmdSetParam(POWERSTEP01_TVAL_HOLD,
- Tval_Current_to_RegVal(
+ Tval_RefVoltage_to_RegVal(
POWERSTEP01_CONF_PARAM_TVAL_HOLD_DEVICE_1));
Powerstep01_CmdSetParam(POWERSTEP01_TVAL_RUN,
- Tval_Current_to_RegVal(
+ Tval_RefVoltage_to_RegVal(
POWERSTEP01_CONF_PARAM_TVAL_RUN_DEVICE_1));
Powerstep01_CmdSetParam(POWERSTEP01_TVAL_ACC,
- Tval_Current_to_RegVal(
+ Tval_RefVoltage_to_RegVal(
POWERSTEP01_CONF_PARAM_TVAL_ACC_DEVICE_1));
Powerstep01_CmdSetParam(POWERSTEP01_TVAL_DEC,
- Tval_Current_to_RegVal(
+ Tval_RefVoltage_to_RegVal(
POWERSTEP01_CONF_PARAM_TVAL_DEC_DEVICE_1));
Powerstep01_CmdSetParam(POWERSTEP01_T_FAST,
(uint8_t)POWERSTEP01_CONF_PARAM_TOFF_FAST_DEVICE_1 |
@@ -1071,16 +1071,16 @@
{
// Current mode
Powerstep01_CmdSetParam(POWERSTEP01_TVAL_HOLD,
- Tval_Current_to_RegVal(
+ Tval_RefVoltage_to_RegVal(
POWERSTEP01_CONF_PARAM_TVAL_HOLD_DEVICE_2));
Powerstep01_CmdSetParam(POWERSTEP01_TVAL_RUN,
- Tval_Current_to_RegVal(
+ Tval_RefVoltage_to_RegVal(
POWERSTEP01_CONF_PARAM_TVAL_RUN_DEVICE_2));
Powerstep01_CmdSetParam(POWERSTEP01_TVAL_ACC,
- Tval_Current_to_RegVal(
+ Tval_RefVoltage_to_RegVal(
POWERSTEP01_CONF_PARAM_TVAL_ACC_DEVICE_2));
Powerstep01_CmdSetParam(POWERSTEP01_TVAL_DEC,
- Tval_Current_to_RegVal(
+ Tval_RefVoltage_to_RegVal(
POWERSTEP01_CONF_PARAM_TVAL_DEC_DEVICE_2));
Powerstep01_CmdSetParam(POWERSTEP01_T_FAST,
(uint8_t)POWERSTEP01_CONF_PARAM_TOFF_FAST_DEVICE_2 |
@@ -1535,7 +1535,7 @@
if (voltageMode==FALSE)
{
if (value > POWERSTEP01_TVAL_MAX_VALUE) result = FALSE;
- else registerValue = Tval_Current_to_RegVal(value);
+ else registerValue = Tval_RefVoltage_to_RegVal(value);
}
else
{

X-NUCLEO-IHM03A1 High Power Stepper Motor Driver