hello
Dependencies: X_NUCLEO_IHM01A1
Fork of HelloWorld_IHM01A1_2Motors_mbedOS by
Revision 3:02d9ec4f88b2, committed 2015-11-18
- Comitter:
- Davidroid
- Date:
- Wed Nov 18 18:46:58 2015 +0000
- Parent:
- 2:e12e4df7a486
- Child:
- 4:3331bcf7b08e
- Commit message:
- mbed test application for the STMicrolectronics X-NUCLEO-IHM01A1 Motor Control Expansion Board: control of 2 motors.
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/HelloWorld_IHM01A1.lib Wed Nov 18 18:46:58 2015 +0000 @@ -0,0 +1,1 @@ +http://developer.mbed.org/teams/ST-Expansion-SW-Team/code/HelloWorld_IHM01A1/#e12e4df7a486
--- a/X_NUCLEO_IHM01A1.lib Fri Nov 13 12:59:29 2015 +0000 +++ b/X_NUCLEO_IHM01A1.lib Wed Nov 18 18:46:58 2015 +0000 @@ -1,1 +1,1 @@ -https://developer.mbed.org/teams/ST-Expansion-SW-Team/code/X_NUCLEO_IHM01A1/#83a1eb397a65 +https://developer.mbed.org/teams/ST-Expansion-SW-Team/code/X_NUCLEO_IHM01A1/#d3c78f12a78d
--- a/main.cpp Fri Nov 13 12:59:29 2015 +0000
+++ b/main.cpp Wed Nov 18 18:46:58 2015 +0000
@@ -5,7 +5,7 @@
* @version V1.0.0
* @date October 14th, 2015
* @brief mbed test application for the STMicrolectronics X-NUCLEO-IHM01A1
- * Motor Control Expansion Board: control of 1 motor.
+ * Motor Control Expansion Board: control of 2 motors.
* This application makes use of a C++ component architecture obtained
* from the C component architecture through the Stm32CubeTOO tool.
******************************************************************************
@@ -54,13 +54,14 @@
/* Definitions ---------------------------------------------------------------*/
/* Number of steps corresponding to one round angle of the motor. */
-#define ROUND_ANGLE_STEPS 1600
+#define ROUND_ANGLE_STEPS 3200
/* Variables -----------------------------------------------------------------*/
/* Motor Control Component. */
-L6474 *motor;
+L6474 *motor1;
+L6474 *motor2;
/* Main ----------------------------------------------------------------------*/
@@ -71,56 +72,68 @@
DevSPI dev_spi(D11, D12, D13);
/* Initializing Motor Control Component. */
- motor = new L6474(D8, D7, D9, D10, dev_spi);
- if (motor->Init(NULL) != COMPONENT_OK)
+ motor1 = new L6474(D8, D7, D9, D10, dev_spi);
+ if (motor1->Init(NULL) != COMPONENT_OK)
+ return false;
+ motor2 = new L6474(D8, D4, D3, D10, dev_spi);
+ if (motor2->Init(NULL) != COMPONENT_OK)
return false;
/* Printing to the console. */
- printf("Motor Control Application Example for 1 Motor\r\n\n");
+ printf("Motor Control Application Example for 2 Motors\r\n\n");
/* Main Loop. */
while(true)
{
- /*----- Moving forward of N steps. -----*/
+ /*----- Moving. -----*/
/* Printing to the console. */
- printf("--> Moving forward %d steps.\r\n", ROUND_ANGLE_STEPS);
+ printf("--> Moving forward: M1 %d steps, M2 %d steps.\r\n", ROUND_ANGLE_STEPS >> 1, ROUND_ANGLE_STEPS);
/* Moving N steps in the forward direction. */
- motor->Move(StepperMotor::CW, ROUND_ANGLE_STEPS);
-
+ motor1->Move(StepperMotor::FWD, ROUND_ANGLE_STEPS >> 1);
+ motor2->Move(StepperMotor::FWD, ROUND_ANGLE_STEPS);
+
/* Waiting while the motor is active. */
- motor->WaitWhileActive();
+ motor1->WaitWhileActive();
+ motor2->WaitWhileActive();
/* Getting current position. */
- int position = motor->GetPosition();
+ int position1 = motor1->GetPosition();
+ int position2 = motor2->GetPosition();
/* Printing to the console. */
- printf(" Position: %d.\r\n", position);
+ printf(" Position: M1 %d, M2 %d.\r\n", position1, position2);
/* Waiting 2 seconds. */
wait_ms(2000);
- /*----- Moving backward N steps. -----*/
+ /*----- Moving. -----*/
/* Printing to the console. */
- printf("--> Moving backward %d steps.\r\n", ROUND_ANGLE_STEPS);
+ printf("--> Moving backward: M1 %d steps, M2 %d steps.\r\n", ROUND_ANGLE_STEPS >> 1, ROUND_ANGLE_STEPS);
+
/* Moving N steps in the backward direction. */
- motor->Move(StepperMotor::CCW, ROUND_ANGLE_STEPS);
+ motor1->Move(StepperMotor::BWD, ROUND_ANGLE_STEPS >> 1);
+ motor2->Move(StepperMotor::BWD, ROUND_ANGLE_STEPS);
/* Waiting while the motor is active. */
- motor->WaitWhileActive();
+ motor1->WaitWhileActive();
+ motor2->WaitWhileActive();
/* Getting current position. */
- position = motor->GetPosition();
+ position1 = motor1->GetPosition();
+ position2 = motor2->GetPosition();
/* Printing to the console. */
- printf(" Position: %d.\r\n", position);
+ printf(" Position: M1 %d, M2 %d.\r\n", position1, position2);
+ printf("--> Setting Home.\r\n");
/* Setting the current position to be the home position. */
- motor->SetHome();
+ motor1->SetHome();
+ motor2->SetHome();
/* Waiting 2 seconds. */
wait_ms(2000);
@@ -129,19 +142,22 @@
/*----- Going to a specified position. -----*/
/* Printing to the console. */
- printf("--> Going to position %d.\r\n", ROUND_ANGLE_STEPS >> 1);
+ printf("--> Going to position: M1 %d, M2 %d.\r\n", ROUND_ANGLE_STEPS, ROUND_ANGLE_STEPS >> 1);
/* Requesting to go to a specified position. */
- motor->GoTo(ROUND_ANGLE_STEPS >> 1);
+ motor1->GoTo(ROUND_ANGLE_STEPS);
+ motor2->GoTo(ROUND_ANGLE_STEPS >> 1);
/* Waiting while the motor is active. */
- motor->WaitWhileActive();
+ motor1->WaitWhileActive();
+ motor2->WaitWhileActive();
/* Getting current position. */
- position = motor->GetPosition();
+ position1 = motor1->GetPosition();
+ position2 = motor2->GetPosition();
/* Printing to the console. */
- printf(" Position: %d.\r\n", position);
+ printf(" Position: M1 %d, M2 %d.\r\n", position1, position2);
/* Waiting 2 seconds. */
wait_ms(2000);
@@ -153,38 +169,42 @@
printf("--> Going Home.\r\n");
/* Requesting to go to home. */
- motor->GoHome();
+ motor1->GoHome();
+ motor2->GoHome();
/* Waiting while the motor is active. */
- motor->WaitWhileActive();
+ motor1->WaitWhileActive();
+ motor2->WaitWhileActive();
/* Getting current position. */
- position = motor->GetPosition();
+ position1 = motor1->GetPosition();
+ position2 = motor2->GetPosition();
/* Printing to the console. */
- printf(" Position: %d.\r\n", position);
+ printf(" Position: M1 %d, M2 %d.\r\n", position1, position2);
/* Waiting 2 seconds. */
wait_ms(2000);
- /*----- Moving backward. -----*/
+ /*----- Running. -----*/
/* Printing to the console. */
- printf("--> Moving backward.\r\n");
+ printf("--> M1 running backward, M2 running forward.\r\n");
/* Requesting to run backward. */
- motor->Run(StepperMotor::CCW);
+ motor1->Run(StepperMotor::BWD);
+ motor2->Run(StepperMotor::FWD);
/* Waiting until delay has expired. */
wait_ms(6000);
/* Getting current speed. */
- int speed = motor->GetSpeed();
+ int speed1 = motor1->GetSpeed();
+ int speed2 = motor2->GetSpeed();
/* Printing to the console. */
- printf(" Speed: %d.\r\n", speed);
-
+ printf(" Speed: M1 %d, M2 %d.\r\n", speed1, speed2);
/*----- Increasing the speed while running. -----*/
@@ -192,16 +212,18 @@
printf("--> Increasing the speed while running.\r\n");
/* Increasing speed to 2400 step/s. */
- motor->SetMaxSpeed(2400);
+ motor1->SetMaxSpeed(2400);
+ motor2->SetMaxSpeed(2400);
/* Waiting until delay has expired. */
wait_ms(6000);
/* Getting current speed. */
- speed = motor->GetSpeed();
+ speed1 = motor1->GetSpeed();
+ speed2 = motor2->GetSpeed();
/* Printing to the console. */
- printf(" Speed: %d.\r\n", speed);
+ printf(" Speed: M1 %d, M2 %d.\r\n", speed1, speed2);
/*----- Decreasing the speed while running. -----*/
@@ -210,29 +232,19 @@
printf("--> Decreasing the speed while running.\r\n");
/* Decreasing speed to 1200 step/s. */
- motor->SetMaxSpeed(1200);
+ motor1->SetMaxSpeed(1200);
+ motor2->SetMaxSpeed(1200);
/* Waiting until delay has expired. */
wait_ms(8000);
/* Getting current speed. */
- speed = motor->GetSpeed();
-
- /* Printing to the console. */
- printf(" Speed: %d.\r\n", speed);
-
-
- /*----- Moving forward. -----*/
+ speed1 = motor1->GetSpeed();
+ speed2 = motor2->GetSpeed();
/* Printing to the console. */
- printf("--> Moving forward.\r\n");
+ printf(" Speed: M1 %d, M2 %d.\r\n", speed1, speed2);
- /* Requesting to run in forward direction. */
- motor->Run(StepperMotor::CW);
-
- /* Waiting until delay has expired. */
- wait_ms(4000);
-
/*----- Requiring hard-stop while running. -----*/
@@ -240,10 +252,12 @@
printf("--> Requiring hard-stop while running.\r\n");
/* Requesting to immediatly stop. */
- motor->HardStop();
+ motor1->HardStop();
+ motor2->HardStop();
/* Waiting while the motor is active. */
- motor->WaitWhileActive();
+ motor1->WaitWhileActive();
+ motor2->WaitWhileActive();
/* Waiting 2 seconds. */
wait_ms(2000);
@@ -255,22 +269,27 @@
printf("--> Infinite Loop...\r\n");
/* Setting the current position to be the home position. */
- motor->SetHome();
+ motor1->SetHome();
+ motor2->SetHome();
/* Infinite Loop. */
while(1)
{
/* Requesting to go to a specified position. */
- motor->GoTo(- ROUND_ANGLE_STEPS >> 2);
+ motor1->GoTo(ROUND_ANGLE_STEPS >> 1);
+ motor2->GoTo(- (ROUND_ANGLE_STEPS >> 1));
/* Waiting while the motor is active. */
- motor->WaitWhileActive();
+ motor1->WaitWhileActive();
+ motor2->WaitWhileActive();
/* Requesting to go to a specified position. */
- motor->GoTo(ROUND_ANGLE_STEPS >> 2);
+ motor1->GoTo(- (ROUND_ANGLE_STEPS >> 1));
+ motor2->GoTo(ROUND_ANGLE_STEPS >> 1);
/* Waiting while the motor is active. */
- motor->WaitWhileActive();
+ motor1->WaitWhileActive();
+ motor2->WaitWhileActive();
}
}
}
