Theis Rotating Platform Demo code

Dependencies:   X_NUCLEO_IHM01A1_Demo_Code mbed

Fork of Demo_IHM01A1_3-Motors by Arkadi Rafalovich

Revision:
21:ed054abddfe4
Parent:
17:aae1446c67f4
Child:
23:f9d35a756e79
--- a/main.cpp	Mon Feb 15 16:04:45 2016 +0000
+++ b/main.cpp	Thu Feb 25 17:27:42 2016 +0000
@@ -60,7 +60,7 @@
 /* Motor Control Component. */
 L6474 *motor1;
 L6474 *motor2;
-
+L6474 *motor3;
 
 /* Main ----------------------------------------------------------------------*/
 
@@ -74,219 +74,113 @@
     /* Initializing Motor Control Components. */
     motor1 = new L6474(D2, D8, D7, D9, D10, dev_spi);
     motor2 = new L6474(D2, D8, D4, D3, D10, dev_spi);
+    motor3 = new L6474(D2, D8, D5, D6, D10, dev_spi);
     if (motor1->Init() != COMPONENT_OK)
         exit(EXIT_FAILURE);
     if (motor2->Init() != COMPONENT_OK)
         exit(EXIT_FAILURE);
+    if (motor3->Init() != COMPONENT_OK)
+        exit(EXIT_FAILURE);
+
+
+
+    /*----- Changing motor setting. -----*/
+    
+    /* Setting High Impedance State to update L6474's registers. */
+    motor1->SoftHiZ();
+    motor2->SoftHiZ();
+    motor3->SoftHiZ();
+    // Disabling motor
+    motor1->Disable();
+    motor2->Disable();
+    motor3->Disable();
+    /* Changing step mode. */
+    motor1->SetStepMode(STEP_MODE_1_16);
+    motor2->SetStepMode(STEP_MODE_1_16);
+    motor3->SetStepMode(STEP_MODE_1_16);
+    /* Increasing the torque regulation current to 500mA. */
+    motor1->SetParameter(L6474_TVAL, 1250); // Limit 2.0A
+    motor2->SetParameter(L6474_TVAL, 1700); // Limit 1.7A
+    motor3->SetParameter(L6474_TVAL, 850);  // Limit 1.0A
+    
+    /* Max speed to 2400 step/s. */
+    motor1->SetMaxSpeed(1000);
+    motor2->SetMaxSpeed(1000);
+    motor3->SetMaxSpeed(1000);
+
+    /* Min speed to 200 step/s. */
+    motor1->SetMinSpeed(100);
+    motor2->SetMinSpeed(100);
+    motor3->SetMinSpeed(100);
+    
+    /* set accelerations */
+    motor1->SetAcceleration(500);
+    motor2->SetAcceleration(500);
+    motor3->SetAcceleration(500);
+    motor1->SetDeceleration(500);
+    motor2->SetDeceleration(500);
+    motor3->SetDeceleration(500);
+    
+    // Enabling motor
+    motor1->Enable();
+    motor2->Enable();
+    motor3->Enable();
+    
 
     /* Printing to the console. */
-    printf("Motor Control Application Example for 2 Motors\r\n\n");
-
+    printf("Motor Control Application Example for 3 Motors\r\n\n");
 
     /*----- Moving. -----*/
-
-    /* Printing to the console. */
-    printf("--> Moving forward: M1 %d steps, M2 %d steps.\r\n", STEPS >> 1, STEPS);
-
+    
     /* Moving N steps in the forward direction. */
-    motor1->Move(StepperMotor::FWD, STEPS >> 1);
+    motor1->Move(StepperMotor::FWD, STEPS);
     motor2->Move(StepperMotor::FWD, STEPS);
-
+    motor3->Move(StepperMotor::FWD, STEPS);
     /* Waiting while the motor is active. */
     motor1->WaitWhileActive();
     motor2->WaitWhileActive();
-
-    /* Getting current position. */
-    int position1 = motor1->GetPosition();
-    int position2 = motor2->GetPosition();
-    
-    /* Printing to the console. */
-    printf("    Position: M1 %d, M2 %d.\r\n", position1, position2);
-
-    /* Waiting 2 seconds. */
+    motor3->WaitWhileActive();
+ 
+     /* Waiting 2 seconds. */
     wait_ms(2000);
-
-    
-    /*----- Moving. -----*/
-    
-    /* Printing to the console. */
-    printf("--> Moving backward: M1 %d steps, M2 %d steps.\r\n", STEPS >> 1, STEPS);
-
+ 
     
     /* Moving N steps in the backward direction. */
-    motor1->Move(StepperMotor::BWD, STEPS >> 1);
+    motor1->Move(StepperMotor::BWD, STEPS);
     motor2->Move(StepperMotor::BWD, STEPS);
-    
+    motor3->Move(StepperMotor::BWD, STEPS);
     /* Waiting while the motor is active. */
     motor1->WaitWhileActive();
     motor2->WaitWhileActive();
-
-    /* Getting current position. */
-    position1 = motor1->GetPosition();
-    position2 = motor2->GetPosition();
-    
-    /* Printing to the console. */
-    printf("    Position: M1 %d, M2 %d.\r\n", position1, position2);
-    printf("--> Setting Home.\r\n");
-
-    /* Setting the current position to be the home position. */
-    motor1->SetHome();
-    motor2->SetHome();
-
-    /* Waiting 2 seconds. */
-    wait_ms(2000);
-
-
-    /*----- Going to a specified position. -----*/
-
-    /* Printing to the console. */
-    printf("--> Going to position: M1 %d, M2 %d.\r\n", STEPS, STEPS >> 1);
-    
-    /* Requesting to go to a specified position. */
-    motor1->GoTo(STEPS);
-    motor2->GoTo(STEPS >> 1);
-    
-    /* Waiting while the motor is active. */
-    motor1->WaitWhileActive();
-    motor2->WaitWhileActive();
-
-    /* Getting current position. */
-    position1 = motor1->GetPosition();
-    position2 = motor2->GetPosition();
-    
-    /* Printing to the console. */
-    printf("    Position: M1 %d, M2 %d.\r\n", position1, position2);
+    motor3->WaitWhileActive();
     
     /* Waiting 2 seconds. */
     wait_ms(2000);
 
+    /* Infinite Loop. */
+    while(1)
+    {
+            /*----- Moving. -----*/
     
-    /*----- Going Home. -----*/
-
-    /* Printing to the console. */
-    printf("--> Going Home.\r\n");
-    
-    /* Requesting to go to home. */
-    motor1->GoHome();
-    motor2->GoHome();
-    
+    /* Moving N steps in the forward direction. */
+    motor1->Move(StepperMotor::FWD, STEPS);
+    motor2->Move(StepperMotor::FWD, STEPS);
+    motor3->Move(StepperMotor::FWD, STEPS);
     /* Waiting while the motor is active. */
     motor1->WaitWhileActive();
     motor2->WaitWhileActive();
-
-    /* Getting current position. */
-    position1 = motor1->GetPosition();
-    position2 = motor2->GetPosition();
-
-    /* Printing to the console. */
-    printf("    Position: M1 %d, M2 %d.\r\n", position1, position2);
-
-    /* Waiting 2 seconds. */
-    wait_ms(2000);
-
-
-    /*----- Running. -----*/
-
-    /* Printing to the console. */
-    printf("--> M1 running backward, M2 running forward.\r\n");
-
-    /* Requesting to run backward. */
-    motor1->Run(StepperMotor::BWD);
-    motor2->Run(StepperMotor::FWD);
-
-    /* Waiting until delay has expired. */
-    wait_ms(6000);
-
-    /* Getting current speed. */
-    int speed1 = motor1->GetSpeed();
-    int speed2 = motor2->GetSpeed();
-
-    /* Printing to the console. */
-    printf("    Speed: M1 %d, M2 %d.\r\n", speed1, speed2);
-
-    /*----- Increasing the speed while running. -----*/
-
-    /* Printing to the console. */
-    printf("--> Increasing the speed while running.\r\n");
-
-    /* Increasing speed to 2400 step/s. */
-    motor1->SetMaxSpeed(2400);
-    motor2->SetMaxSpeed(2400);
-
-    /* Waiting until delay has expired. */
-    wait_ms(6000);
-
-    /* Getting current speed. */
-    speed1 = motor1->GetSpeed();
-    speed2 = motor2->GetSpeed();
-
-    /* Printing to the console. */
-    printf("    Speed: M1 %d, M2 %d.\r\n", speed1, speed2);
-
-
-    /*----- Decreasing the speed while running. -----*/
-
-    /* Printing to the console. */
-    printf("--> Decreasing the speed while running.\r\n");
-
-    /* Decreasing speed to 1200 step/s. */
-    motor1->SetMaxSpeed(1200);
-    motor2->SetMaxSpeed(1200);
-
-    /* Waiting until delay has expired. */
-    wait_ms(8000);
-
-    /* Getting current speed. */
-    speed1 = motor1->GetSpeed();
-    speed2 = motor2->GetSpeed();
-
-    /* Printing to the console. */
-    printf("    Speed: M1 %d, M2 %d.\r\n", speed1, speed2);
-
-
-    /*----- Requiring hard-stop while running. -----*/
-
-    /* Printing to the console. */
-    printf("--> Requiring hard-stop while running.\r\n");
-
-    /* Requesting to immediatly stop. */
-    motor1->HardStop();
-    motor2->HardStop();
-
+    motor3->WaitWhileActive();
+    
+    /* Moving N steps in the backward direction. */
+    motor1->Move(StepperMotor::BWD, STEPS);
+    motor2->Move(StepperMotor::BWD, STEPS);
+    motor3->Move(StepperMotor::BWD, STEPS);
     /* Waiting while the motor is active. */
     motor1->WaitWhileActive();
     motor2->WaitWhileActive();
-
+    motor3->WaitWhileActive();
+    
     /* Waiting 2 seconds. */
     wait_ms(2000);
-
-
-    /*----- Infinite Loop. -----*/
-
-    /* Printing to the console. */
-    printf("--> Infinite Loop...\r\n");
-
-    /* Setting the current position to be the home position. */
-    motor1->SetHome();
-    motor2->SetHome();
-
-    /* Infinite Loop. */
-    while(1)
-    {
-        /* Requesting to go to a specified position. */
-        motor1->GoTo(STEPS >> 1);
-        motor2->GoTo(- (STEPS >> 1));
-
-        /* Waiting while the motor is active. */
-        motor1->WaitWhileActive();
-        motor2->WaitWhileActive();
-
-        /* Requesting to go to a specified position. */
-        motor1->GoTo(- (STEPS >> 1));
-        motor2->GoTo(STEPS >> 1);
-
-        /* Waiting while the motor is active. */
-        motor1->WaitWhileActive();
-        motor2->WaitWhileActive();
     }
 }