Theis Rotating Platform Demo code

Dependencies:   X_NUCLEO_IHM01A1_Demo_Code mbed

Fork of Demo_IHM01A1_3-Motors by Arkadi Rafalovich

main.cpp

Committer:
Arkadi
Date:
2017-05-24
Revision:
24:9b5c3f8ad3c5
Parent:
23:f9d35a756e79

File content as of revision 24:9b5c3f8ad3c5:

////////////////////////////////////////
//    Rotating Platform Demo Code     //
//  Arkadiraf@gmail.com - 24/05/2017  //
////////////////////////////////////////

/*
   Parts:
    Nucleo STM32F401RE
    X-NUCLEO-IHM01A1 - 3 Stepper motor controller
*/

/*
    Pinout:
    Nucleo STM32F401RE
    PA_5 --> led (DigitalOut)

    PC - Serial 2
    PA_2 (Tx) --> STLINK
    PA_3 (Rx) --> STLINK

    X-NUCLEO-IHM01A1 (http://www.st.com/content/ccc/resource/technical/document/data_brief/59/ff/d0/16/94/ff/49/85/DM00122463.pdf/files/DM00122463.pdf/jcr:content/translations/en.DM00122463.pdf)
    SPI:
    PA_7 (D11) --> mosi
    PA_9 (D12) --> miso
    PA_8 (D13) --> sclk

    Motor 1
    PA_10(D2) --> flag_irq  (DigitalOut)
    PA_9 (D8) --> Standby   (DigitalOut)
    PA_8 (D7) --> MOT1Dir  (DigitalOut)
    PC_7 (D9) --> MOT1Step (PWM)
    PB_6 (D10)--> ssel      (DigitalOut)

    Motor 2
    PA_10(D2) --> flag_irq  (DigitalOut)
    PA_9 (D8) --> Standby   (DigitalOut)
    PB_5 (D4) --> MOT2Dir   (DigitalOut)
    PB_3 (D3) --> MOT2Step  (PWM)
    PB_6 (D10)--> ssel      (DigitalOut)

    Motor 3
    PA_10(D2) --> flag_irq  (DigitalOut)
    PA_9 (D8) --> Standby   (DigitalOut)
    PB_4 (D5) --> MOT3Dir   (DigitalOut)
    PB_10(D6) --> MOT3Step  (PWM)
    PB_6 (D10)--> ssel      (DigitalOut)


*/

/* Includes ------------------------------------------------------------------*/

/* mbed specific header files. */
#include "mbed.h"

/* Helper header files. */
#include "DevSPI.h"

/* Component specific header files. */
#include "l6474_class.h"


/* Definitions ---------------------------------------------------------------*/

/* Number of steps to move. */
#define STEPS 3200


/* Variables -----------------------------------------------------------------*/

/* Motor Control Component. */
L6474 *motor1;
L6474 *motor2;
L6474 *motor3;

/* Main ----------------------------------------------------------------------*/

int main()
{
    /*----- Initialization. -----*/

    /* Initializing SPI bus. */
    DevSPI dev_spi(D11, D12, D13);

    /* 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. */
    motor1->SetParameter(L6474_TVAL, 1250); // Limit 2.0A
    motor2->SetParameter(L6474_TVAL, 1650); // Limit 1.7A
    motor3->SetParameter(L6474_TVAL, 300);  // Limit 0.28A
    
    /* Max speed to 2400 step/s. */
    motor1->SetMaxSpeed(750);
    motor2->SetMaxSpeed(750);
    motor3->SetMaxSpeed(750);

    /* Min speed to 200 step/s. */
    motor1->SetMinSpeed(100);
    motor2->SetMinSpeed(100);
    motor3->SetMinSpeed(100);
    
    /* set accelerations */
    motor1->SetAcceleration(250);
    motor2->SetAcceleration(250);
    motor3->SetAcceleration(250);
    motor1->SetDeceleration(250);
    motor2->SetDeceleration(250);
    motor3->SetDeceleration(250);
    
    // Enabling motor
    motor1->Enable();
    motor2->Enable();
    motor3->Enable();
    

    /* Printing to the console. */
    printf("Motor Control Application Example for 3 Motors\r\n\n");

    /*----- Moving. -----*/
    
    /* 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();
    motor3->WaitWhileActive();
 
     /* Waiting 2 seconds. */
    wait_ms(2000);
 
    
    /* 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. */
    while(1)
    {
            /*----- Moving. -----*/
    
    /* 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();
    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);
    }
}