Simple test application for the STMicroelectronics X-NUCLEO-IHM02A1 Stepper Motor Control Expansion Board.

Dependencies:   X_NUCLEO_IHM02A1 mbed

Fork of HelloWorld_IHM02A1 by ST Expansion SW Team

Motor Control with the X-NUCLEO-IHM02A1 Expansion Board

This application provides a simple example of usage of the X-NUCLEO-IHM02A1 Stepper Motor Control Expansion Board.
It shows how to use two stepper motors connected in daisy chain configuration to the board, moving the rotors to specific positions, with given speed values, direction of rotations, etc.

Files at this revision

API Documentation at this revision

Comitter:
Davidroid
Date:
Thu Apr 07 16:56:27 2016 +0000
Parent:
17:09f408175202
Child:
19:eeb4796d6a03
Commit message:
+ Updated with the new version of the library.

Changed in this revision

X_NUCLEO_IHM02A1.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/X_NUCLEO_IHM02A1.lib	Fri Mar 11 16:03:13 2016 +0000
+++ b/X_NUCLEO_IHM02A1.lib	Thu Apr 07 16:56:27 2016 +0000
@@ -1,1 +1,1 @@
-https://developer.mbed.org/teams/ST/code/X_NUCLEO_IHM02A1/#0d5be428b264
+https://developer.mbed.org/teams/ST/code/X_NUCLEO_IHM02A1/#4b3dc908724f
--- a/main.cpp	Fri Mar 11 16:03:13 2016 +0000
+++ b/main.cpp	Thu Apr 07 16:56:27 2016 +0000
@@ -55,8 +55,8 @@
 #define MPR_1 4
 
 /* Number of steps. */
-#define STEPS_1 100000
-#define STEPS_2 200000
+#define STEPS_1 (400 * 128)   /* 1 revolution given a 400 steps motor configured at 1/128 microstep mode. */
+#define STEPS_2 (STEPS_1 * 2)
 
 /* Delay in milliseconds. */
 #define DELAY_1 1000
@@ -74,58 +74,58 @@
 {
     /* First Motor. */
     {
-        9.0,                /* Motor supply voltage in V. */
-        400,                /* Min number of steps per revolution for the motor. */
-        1.7,                /* Max motor phase voltage in A. */
-        3.06,               /* Max motor phase voltage in V. */
-        300.0,              /* Motor initial speed [step/s]. */
-        500.0,              /* Motor acceleration [step/s^2] (comment for infinite acceleration mode). */
-        500.0,              /* Motor deceleration [step/s^2] (comment for infinite deceleration mode). */
-        992.0,              /* Motor maximum speed [step/s]. */
-        0.0,                /* Motor minimum speed [step/s]. */
-        602.7,              /* Motor full-step speed threshold [step/s]. */
-        3.06,               /* Holding kval [V]. */
-        3.06,               /* Constant speed kval [V]. */
-        3.06,               /* Acceleration starting kval [V]. */
-        3.06,               /* Deceleration starting kval [V]. */
-        61.52,              /* Intersect speed for bemf compensation curve slope changing [step/s]. */
-        392.1569e-6,        /* Start slope [s/step]. */
-        643.1372e-6,        /* Acceleration final slope [s/step]. */
-        643.1372e-6,        /* Deceleration final slope [s/step]. */
-        0,                  /* Thermal compensation factor (range [0, 15]). */
-        3.06 * 1000 * 1.10, /* Ocd threshold [ma] (range [375 ma, 6000 ma]). */
-        3.06 * 1000 * 1.00, /* Stall threshold [ma] (range [31.25 ma, 4000 ma]). */
-        MICROSTEP_1_128,    /* Step mode selection. */
-        0xFF,               /* Alarm conditions enable. */
-        0x2E88              /* Ic configuration. */
+        9.0,                           /* Motor supply voltage in V. */
+        400,                           /* Min number of steps per revolution for the motor. */
+        1.7,                           /* Max motor phase voltage in A. */
+        3.06,                          /* Max motor phase voltage in V. */
+        300.0,                         /* Motor initial speed [step/s]. */
+        500.0,                         /* Motor acceleration [step/s^2] (comment for infinite acceleration mode). */
+        500.0,                         /* Motor deceleration [step/s^2] (comment for infinite deceleration mode). */
+        992.0,                         /* Motor maximum speed [step/s]. */
+        0.0,                           /* Motor minimum speed [step/s]. */
+        602.7,                         /* Motor full-step speed threshold [step/s]. */
+        3.06,                          /* Holding kval [V]. */
+        3.06,                          /* Constant speed kval [V]. */
+        3.06,                          /* Acceleration starting kval [V]. */
+        3.06,                          /* Deceleration starting kval [V]. */
+        61.52,                         /* Intersect speed for bemf compensation curve slope changing [step/s]. */
+        392.1569e-6,                   /* Start slope [s/step]. */
+        643.1372e-6,                   /* Acceleration final slope [s/step]. */
+        643.1372e-6,                   /* Deceleration final slope [s/step]. */
+        0,                             /* Thermal compensation factor (range [0, 15]). */
+        3.06 * 1000 * 1.10,            /* Ocd threshold [ma] (range [375 ma, 6000 ma]). */
+        3.06 * 1000 * 1.00,            /* Stall threshold [ma] (range [31.25 ma, 4000 ma]). */
+        StepperMotor::STEP_MODE_1_128, /* Step mode selection. */
+        0xFF,                          /* Alarm conditions enable. */
+        0x2E88                         /* Ic configuration. */
     },
 
     /* Second Motor. */
     {
-        9.0,                /* Motor supply voltage in V. */
-        400,                /* Min number of steps per revolution for the motor. */
-        1.7,                /* Max motor phase voltage in A. */
-        3.06,               /* Max motor phase voltage in V. */
-        300.0,              /* Motor initial speed [step/s]. */
-        500.0,              /* Motor acceleration [step/s^2] (comment for infinite acceleration mode). */
-        500.0,              /* Motor deceleration [step/s^2] (comment for infinite deceleration mode). */
-        992.0,              /* Motor maximum speed [step/s]. */
-        0.0,                /* Motor minimum speed [step/s]. */
-        602.7,              /* Motor full-step speed threshold [step/s]. */
-        3.06,               /* Holding kval [V]. */
-        3.06,               /* Constant speed kval [V]. */
-        3.06,               /* Acceleration starting kval [V]. */
-        3.06,               /* Deceleration starting kval [V]. */
-        61.52,              /* Intersect speed for bemf compensation curve slope changing [step/s]. */
-        392.1569e-6,        /* Start slope [s/step]. */
-        643.1372e-6,        /* Acceleration final slope [s/step]. */
-        643.1372e-6,        /* Deceleration final slope [s/step]. */
-        0,                  /* Thermal compensation factor (range [0, 15]). */
-        3.06 * 1000 * 1.10, /* Ocd threshold [ma] (range [375 ma, 6000 ma]). */
-        3.06 * 1000 * 1.00, /* Stall threshold [ma] (range [31.25 ma, 4000 ma]). */
-        MICROSTEP_1_128,    /* Step mode selection. */
-        0xFF,               /* Alarm conditions enable. */
-        0x2E88              /* Ic configuration. */
+        9.0,                           /* Motor supply voltage in V. */
+        400,                           /* Min number of steps per revolution for the motor. */
+        1.7,                           /* Max motor phase voltage in A. */
+        3.06,                          /* Max motor phase voltage in V. */
+        300.0,                         /* Motor initial speed [step/s]. */
+        500.0,                         /* Motor acceleration [step/s^2] (comment for infinite acceleration mode). */
+        500.0,                         /* Motor deceleration [step/s^2] (comment for infinite deceleration mode). */
+        992.0,                         /* Motor maximum speed [step/s]. */
+        0.0,                           /* Motor minimum speed [step/s]. */
+        602.7,                         /* Motor full-step speed threshold [step/s]. */
+        3.06,                          /* Holding kval [V]. */
+        3.06,                          /* Constant speed kval [V]. */
+        3.06,                          /* Acceleration starting kval [V]. */
+        3.06,                          /* Deceleration starting kval [V]. */
+        61.52,                         /* Intersect speed for bemf compensation curve slope changing [step/s]. */
+        392.1569e-6,                   /* Start slope [s/step]. */
+        643.1372e-6,                   /* Acceleration final slope [s/step]. */
+        643.1372e-6,                   /* Deceleration final slope [s/step]. */
+        0,                             /* Thermal compensation factor (range [0, 15]). */
+        3.06 * 1000 * 1.10,            /* Ocd threshold [ma] (range [375 ma, 6000 ma]). */
+        3.06 * 1000 * 1.00,            /* Stall threshold [ma] (range [31.25 ma, 4000 ma]). */
+        StepperMotor::STEP_MODE_1_128, /* Step mode selection. */
+        0xFF,                          /* Alarm conditions enable. */
+        0x2E88                         /* Ic configuration. */
     }
 };
 
@@ -162,7 +162,7 @@
 
     /* Getting the current position. */
     int position = motors[0]->GetPosition();
-    
+
     /* Printing to the console. */
     printf("--> Getting the current position: %d\r\n", position);
 
@@ -254,6 +254,59 @@
     printf("--> Getting the current position: %d\r\n", position);
 
     /* Waiting. */
+    wait_ms(DELAY_1);
+
+    /* Printing to the console. */
+    printf("--> Halving the microsteps.\r\n");
+
+    /* Halving the microsteps. */
+    init[0].step_sel = (init[0].step_sel > 0 ? init[0].step_sel -  1 : init[0].step_sel);
+    if (!motors[0]->SetStepMode((StepperMotor::step_mode_t) init[0].step_sel))
+        printf("    Step Mode not allowed.\r\n");
+
+    /* Waiting. */
+    wait_ms(DELAY_1);
+
+    /* Printing to the console. */
+    printf("--> Setting home position.\r\n");
+
+    /* Setting the home position. */
+    motors[0]->SetHome();
+
+    /* Waiting. */
+    wait_ms(DELAY_1);
+
+    /* Getting the current position. */
+    position = motors[0]->GetPosition();
+    
+    /* Printing to the console. */
+    printf("--> Getting the current position: %d\r\n", position);
+
+    /* Waiting. */
+    wait_ms(DELAY_1);
+
+    /* Printing to the console. */
+    printf("--> Moving forward %d steps.\r\n", STEPS_1);
+
+    /* Moving. */
+    motors[0]->Move(StepperMotor::FWD, STEPS_1);
+
+    /* Waiting while active. */
+    motors[0]->WaitWhileActive();
+
+    /* Getting the current position. */
+    position = motors[0]->GetPosition();
+    
+    /* Printing to the console. */
+    printf("--> Getting the current position: %d\r\n", position);
+
+    /* Printing to the console. */
+    printf("--> Marking the current position.\r\n");
+
+    /* Marking the current position. */
+    motors[0]->SetMark();
+
+    /* Waiting. */
     wait_ms(DELAY_2);
 
 
@@ -286,7 +339,7 @@
     printf("    Speed: M1 %d, M2 %d.\r\n", results[0], results[1]);
 
     /* Printing to the console. */
-    printf("--> Doublig the speed while running.\r\n");
+    printf("--> Doublig the speed while running again for %d seconds.\r\n", DELAY_3 / 1000);
 
     /* Preparing each motor to perform a run at a specified speed. */
     for (int m = 0; m < L6470DAISYCHAINSIZE; m++)