1

Dependencies:   X-NUCLEO-IHM05A1

Example code to use L6208 stepper motor driver with nucleo evaluation shield

Explanation: Run a test to determine the maximum speed of the motor at given current and acceleration Run the motor in position mode with microstepping and slow decay

Files at this revision

API Documentation at this revision

Comitter:
gidiana
Date:
Sat Dec 01 12:31:22 2018 +0000
Parent:
8:baedd289a8cc
Child:
10:9d908db05638
Commit message:
1

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/main.cpp	Fri Jul 28 13:07:13 2017 +0000
+++ b/main.cpp	Sat Dec 01 12:31:22 2018 +0000
@@ -63,12 +63,12 @@
 l6208_init_t init =
 {
   1500,            //Acceleration rate in step/s^2 or (1/16)th step/s^2 for microstep modes
-  40,              //Acceleration current torque in % (from 0 to 100)
-  1500,            //Deceleration rate in step/s^2 or (1/16)th step/s^2 for microstep modes
-  30,              //Deceleration current torque in % (from 0 to 100)
+  50,              //Acceleration current torque in % (from 0 to 100)
+  1000,            //Deceleration rate in step/s^2 or (1/16)th step/s^2 for microstep modes
+  50,              //Deceleration current torque in % (from 0 to 100)
   1500,            //Running speed in step/s or (1/16)th step/s for microstep modes
   50,              //Running current torque in % (from 0 to 100)
-  20,              //Holding current torque in % (from 0 to 100)
+  30,              //Holding current torque in % (from 0 to 100)
   STEP_MODE_1_16,  //Step mode via enum motorStepMode_t
   FAST_DECAY,      //Decay mode via enum motorDecayMode_t
   0,               //Dwelling time in ms
@@ -119,14 +119,7 @@
 
 int main()
 {
-  /* Printing to the console. */
-  printf("STARTING MAIN PROGRAM\r\n");
-  printf("    Reminder:\r\n");
-  printf("    The position unit is in agreement to the step mode.\r\n");
-  printf("    The speed, acceleration or deceleration unit depend on the step mode:\r\n");
-  printf("    - For normal mode and half step mode, the unit is steps/s or /s^2.\r\n");
-  printf("    - For microstep modes, the unit is (1/16)steps/s or /s^2.\r\n");
-    
+
 //----- Initialization 
   /* Initializing Motor Control Component. */
   motor = new L6208(D2, D8, D7, D4, D5, D6, VREFA_PWM_PIN, VREFB_PWM_PIN);
@@ -140,11 +133,7 @@
     
   /* Attaching an error handler */
   motor->attach_error_handler(&my_error_handler);
-
-  /* Printing to the console. */
-  printf("Motor Control Application Example for 1 Motor\r\n");
-
-//----- run the motor BACKWARD
+ //----- run the motor BACKWARD
   printf("--> Running the motor backward.\r\n");
   motor->run(StepperMotor::BWD);
   
@@ -174,140 +163,41 @@
   /* Wait for 5 seconds */  
   wait_ms(5000);
   
-//----- Soft stop required while running
-  printf("--> Soft stop requested.\r\n");
-  motor->soft_stop();
-  
-  /* Wait for the motor of device ends moving */  
-  motor->wait_while_active();
-
-  /* Wait for 2 seconds */
-  wait_ms(2000);
-
-//----- Change step mode to full step mode
-  motor->set_step_mode(StepperMotor::STEP_MODE_FULL);
-  printf("    Motor step mode: %d (0:FS, 1:1/2, 2:1/4, 3:1/8, 4:1/16).\r\n", motor->get_step_mode());
-  
-  /* Get current position of device and print to the console */
-  printf("    Position: %d.\r\n", motor->get_position());
-  
-  /* Set speed, acceleration and deceleration to scale with normal mode */
-  motor->set_max_speed(init.maxSpeedSps>>4);
-  motor->set_acceleration(motor->get_acceleration()>>4);
-  motor->set_deceleration(motor->get_deceleration()>>4);
-  /* Print parameters to the console */  
-  printf("    Motor Max Speed: %d step/s.\r\n", motor->get_max_speed());
-  printf("    Motor Min Speed: %d step/s.\r\n", motor->get_min_speed());
-  printf("    Motor Acceleration: %d step/s.\r\n", motor->get_acceleration());
-  printf("    Motor Deceleration: %d step/s.\r\n", motor->get_deceleration());
-  
-//----- move of 200 steps in the FW direction
-  printf("--> Moving forward 200 steps.\r\n");
-  motor->move(StepperMotor::FWD, 200);
-  
-  /* Waiting while the motor is active. */
-  motor->wait_while_active();
-  
-  /* Get current position of device and print to the console */
-  printf("    Position: %d.\r\n", motor->get_position());
-  
-  /* Disable the power bridges */
-  motor->disable();
-  
-  /* Check that the power bridges are actually disabled */
-  if (motor->check_status_hw()!=0) {
-    printf("    Motor driver disabled.\r\n");
-  } else {
-    printf("    Failed to disable the motor driver.\r\n");
-  }
-    
-  /* Wait for 2 seconds */  
-  wait_ms(2000);
-  
  //----- Change step mode to 1/4 microstepping mode  
   motor->set_step_mode(StepperMotor::STEP_MODE_1_4);
-  printf("    Motor step mode: %d (0:FS, 1:1/2, 2:1/4, 3:1/8, 4:1/16).\r\n", motor->get_step_mode());
-  
-  /* Get current position of device and print to the console */
-  printf("    Position: %d.\r\n", motor->get_position());
 
   /* Set speed, acceleration and deceleration to scale with microstep mode */
   motor->set_max_speed(motor->get_max_speed()<<4);
   motor->set_acceleration(motor->get_acceleration()<<4);
   motor->set_deceleration(motor->get_deceleration()<<4);
-  /* Print parameters to the console */
-  printf("    Motor Max Speed: %d step/s.\r\n", motor->get_max_speed());
-  printf("    Motor Min Speed: %d step/s.\r\n", motor->get_min_speed());
-  printf("    Motor Acceleration: %d step/s.\r\n", motor->get_acceleration());
-  printf("    Motor Deceleration: %d step/s.\r\n", motor->get_deceleration());
   
   /* Request to go position 800 (quarter steps) */
-  motor->go_to(800);
+  motor->go_to(9000);
 
   /* Wait for the motor ends moving */
   motor->wait_while_active();
-
-  /* Get current position of device and print to the console */
-  printf("    Position: %d.\r\n", motor->get_position());
-  
-  /* Wait for 2 seconds */  
-  wait_ms(2000);
-  
-//----- Restore step mode to its initialization value
-  motor->set_step_mode((StepperMotor::step_mode_t)init.stepMode);
-  printf("    Motor step mode: %d (0:FS, 1:1/2, 2:1/4, 3:1/8, 4:1/16).\r\n", motor->get_step_mode());  
+motor->go_to(-9000);
 
-  /* Get current position of device and print to the console */
-  printf("    Position: %d.\r\n", motor->get_position());
-  
-//----- Change decay mode
-  motor->set_decay_mode(SLOW_DECAY);
-  printf("    Motor decay mode: %d (0:slow decay, 1:fast decay).\r\n", motor->get_decay_mode());   
-  
-//----- Go to position -6400
-  printf("--> Go to position -6400 steps.\r\n");
-  motor->go_to(-6400);
-  
   /* Wait for the motor ends moving */
   motor->wait_while_active();
-
-  /* Get current position of device and print to the console */
-  printf("    Position: %d.\r\n", motor->get_position());
-  
   /* Wait for 2 seconds */  
   wait_ms(2000);
-
-//----- Restore decay mode to its initialization value
-  motor->set_decay_mode(init.decayMode);
-  printf("    Motor decay mode: %d (0:slow decay, 1:fast decay).\r\n", motor->get_decay_mode());
-  
-//----- Go Home
-  printf("--> Go to home position.\r\n");
-  motor->go_home();
- 
-  /* Wait for the motor ends moving */
-  motor->wait_while_active();
-  
-  /* Wait for 1 second */
-  wait_ms(1000);
-  
-  /* Infinite Loop. */
-  printf("--> Infinite Loop...\r\n");
-  //while (true) {
-  int i;
-  for (i = 0; i < 2; i++) {
+int i;
+  for (i = 0; i < 4; i++) {
     /* Request device to go position -3200 */
-    motor->go_to(-3200);
+    motor->go_to(3200);
 
     /* Waiting while the motor is active. */
     motor->wait_while_active();
 
     /* Request device to go position 3200 */
-    motor->go_to(3200);
+    motor->go_to(-3200);
  
     /* Waiting while the motor is active. */
     motor->wait_while_active();
   }
+    wait_ms(5000);  
+  motor->disable();
 }
 
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
+