Theis Rotating Platform Demo code

Dependencies:   X_NUCLEO_IHM01A1_Demo_Code mbed

Fork of Demo_IHM01A1_3-Motors by Arkadi Rafalovich

Committer:
Arkadi
Date:
Wed May 24 09:58:22 2017 +0000
Revision:
24:9b5c3f8ad3c5
Parent:
23:f9d35a756e79
Thesis Rotating Platform Demo code

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Arkadi 23:f9d35a756e79 1 ////////////////////////////////////////
Arkadi 23:f9d35a756e79 2 // Rotating Platform Demo Code //
Arkadi 23:f9d35a756e79 3 // Arkadiraf@gmail.com - 24/05/2017 //
Arkadi 23:f9d35a756e79 4 ////////////////////////////////////////
Arkadi 23:f9d35a756e79 5
Arkadi 23:f9d35a756e79 6 /*
Arkadi 23:f9d35a756e79 7 Parts:
Arkadi 23:f9d35a756e79 8 Nucleo STM32F401RE
Arkadi 23:f9d35a756e79 9 X-NUCLEO-IHM01A1 - 3 Stepper motor controller
Arkadi 23:f9d35a756e79 10 */
Arkadi 23:f9d35a756e79 11
Arkadi 23:f9d35a756e79 12 /*
Arkadi 23:f9d35a756e79 13 Pinout:
Arkadi 23:f9d35a756e79 14 Nucleo STM32F401RE
Arkadi 23:f9d35a756e79 15 PA_5 --> led (DigitalOut)
Arkadi 23:f9d35a756e79 16
Arkadi 23:f9d35a756e79 17 PC - Serial 2
Arkadi 23:f9d35a756e79 18 PA_2 (Tx) --> STLINK
Arkadi 23:f9d35a756e79 19 PA_3 (Rx) --> STLINK
Davidroid 0:e6a49a092e2a 20
Arkadi 23:f9d35a756e79 21 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)
Arkadi 23:f9d35a756e79 22 SPI:
Arkadi 23:f9d35a756e79 23 PA_7 (D11) --> mosi
Arkadi 23:f9d35a756e79 24 PA_9 (D12) --> miso
Arkadi 23:f9d35a756e79 25 PA_8 (D13) --> sclk
Arkadi 23:f9d35a756e79 26
Arkadi 23:f9d35a756e79 27 Motor 1
Arkadi 23:f9d35a756e79 28 PA_10(D2) --> flag_irq (DigitalOut)
Arkadi 23:f9d35a756e79 29 PA_9 (D8) --> Standby (DigitalOut)
Arkadi 23:f9d35a756e79 30 PA_8 (D7) --> MOT1Dir (DigitalOut)
Arkadi 23:f9d35a756e79 31 PC_7 (D9) --> MOT1Step (PWM)
Arkadi 23:f9d35a756e79 32 PB_6 (D10)--> ssel (DigitalOut)
Arkadi 23:f9d35a756e79 33
Arkadi 23:f9d35a756e79 34 Motor 2
Arkadi 23:f9d35a756e79 35 PA_10(D2) --> flag_irq (DigitalOut)
Arkadi 23:f9d35a756e79 36 PA_9 (D8) --> Standby (DigitalOut)
Arkadi 23:f9d35a756e79 37 PB_5 (D4) --> MOT2Dir (DigitalOut)
Arkadi 23:f9d35a756e79 38 PB_3 (D3) --> MOT2Step (PWM)
Arkadi 23:f9d35a756e79 39 PB_6 (D10)--> ssel (DigitalOut)
Arkadi 23:f9d35a756e79 40
Arkadi 23:f9d35a756e79 41 Motor 3
Arkadi 23:f9d35a756e79 42 PA_10(D2) --> flag_irq (DigitalOut)
Arkadi 23:f9d35a756e79 43 PA_9 (D8) --> Standby (DigitalOut)
Arkadi 23:f9d35a756e79 44 PB_4 (D5) --> MOT3Dir (DigitalOut)
Arkadi 23:f9d35a756e79 45 PB_10(D6) --> MOT3Step (PWM)
Arkadi 23:f9d35a756e79 46 PB_6 (D10)--> ssel (DigitalOut)
Arkadi 23:f9d35a756e79 47
Arkadi 23:f9d35a756e79 48
Arkadi 23:f9d35a756e79 49 */
Davidroid 0:e6a49a092e2a 50
Davidroid 0:e6a49a092e2a 51 /* Includes ------------------------------------------------------------------*/
Davidroid 0:e6a49a092e2a 52
Davidroid 0:e6a49a092e2a 53 /* mbed specific header files. */
Davidroid 0:e6a49a092e2a 54 #include "mbed.h"
Davidroid 0:e6a49a092e2a 55
Davidroid 0:e6a49a092e2a 56 /* Helper header files. */
Davidroid 0:e6a49a092e2a 57 #include "DevSPI.h"
Davidroid 0:e6a49a092e2a 58
Davidroid 0:e6a49a092e2a 59 /* Component specific header files. */
Davidroid 0:e6a49a092e2a 60 #include "l6474_class.h"
Davidroid 0:e6a49a092e2a 61
Davidroid 0:e6a49a092e2a 62
Davidroid 0:e6a49a092e2a 63 /* Definitions ---------------------------------------------------------------*/
Davidroid 0:e6a49a092e2a 64
Davidroid 9:a9e51320aee4 65 /* Number of steps to move. */
Davidroid 9:a9e51320aee4 66 #define STEPS 3200
Davidroid 0:e6a49a092e2a 67
Davidroid 0:e6a49a092e2a 68
Davidroid 0:e6a49a092e2a 69 /* Variables -----------------------------------------------------------------*/
Davidroid 0:e6a49a092e2a 70
Davidroid 0:e6a49a092e2a 71 /* Motor Control Component. */
Davidroid 3:02d9ec4f88b2 72 L6474 *motor1;
Davidroid 3:02d9ec4f88b2 73 L6474 *motor2;
Arkadi 21:ed054abddfe4 74 L6474 *motor3;
Davidroid 0:e6a49a092e2a 75
Davidroid 0:e6a49a092e2a 76 /* Main ----------------------------------------------------------------------*/
Davidroid 0:e6a49a092e2a 77
Davidroid 0:e6a49a092e2a 78 int main()
Davidroid 0:e6a49a092e2a 79 {
Davidroid 8:cec4c2c03a27 80 /*----- Initialization. -----*/
Davidroid 8:cec4c2c03a27 81
Davidroid 0:e6a49a092e2a 82 /* Initializing SPI bus. */
Davidroid 0:e6a49a092e2a 83 DevSPI dev_spi(D11, D12, D13);
Davidroid 0:e6a49a092e2a 84
Davidroid 9:a9e51320aee4 85 /* Initializing Motor Control Components. */
Davidroid 5:a0268a435bb1 86 motor1 = new L6474(D2, D8, D7, D9, D10, dev_spi);
Davidroid 16:810667a9f31f 87 motor2 = new L6474(D2, D8, D4, D3, D10, dev_spi);
Arkadi 21:ed054abddfe4 88 motor3 = new L6474(D2, D8, D5, D6, D10, dev_spi);
Davidroid 14:fcd452b03d1a 89 if (motor1->Init() != COMPONENT_OK)
Davidroid 14:fcd452b03d1a 90 exit(EXIT_FAILURE);
Davidroid 14:fcd452b03d1a 91 if (motor2->Init() != COMPONENT_OK)
Davidroid 14:fcd452b03d1a 92 exit(EXIT_FAILURE);
Arkadi 21:ed054abddfe4 93 if (motor3->Init() != COMPONENT_OK)
Arkadi 21:ed054abddfe4 94 exit(EXIT_FAILURE);
Arkadi 21:ed054abddfe4 95
Arkadi 21:ed054abddfe4 96
Arkadi 21:ed054abddfe4 97
Arkadi 21:ed054abddfe4 98 /*----- Changing motor setting. -----*/
Arkadi 21:ed054abddfe4 99
Arkadi 21:ed054abddfe4 100 /* Setting High Impedance State to update L6474's registers. */
Arkadi 21:ed054abddfe4 101 motor1->SoftHiZ();
Arkadi 21:ed054abddfe4 102 motor2->SoftHiZ();
Arkadi 21:ed054abddfe4 103 motor3->SoftHiZ();
Arkadi 21:ed054abddfe4 104 // Disabling motor
Arkadi 21:ed054abddfe4 105 motor1->Disable();
Arkadi 21:ed054abddfe4 106 motor2->Disable();
Arkadi 21:ed054abddfe4 107 motor3->Disable();
Arkadi 21:ed054abddfe4 108 /* Changing step mode. */
Arkadi 21:ed054abddfe4 109 motor1->SetStepMode(STEP_MODE_1_16);
Arkadi 21:ed054abddfe4 110 motor2->SetStepMode(STEP_MODE_1_16);
Arkadi 21:ed054abddfe4 111 motor3->SetStepMode(STEP_MODE_1_16);
Arkadi 23:f9d35a756e79 112
Arkadi 23:f9d35a756e79 113 /* Increasing the torque regulation current. */
Arkadi 21:ed054abddfe4 114 motor1->SetParameter(L6474_TVAL, 1250); // Limit 2.0A
Arkadi 23:f9d35a756e79 115 motor2->SetParameter(L6474_TVAL, 1650); // Limit 1.7A
Arkadi 23:f9d35a756e79 116 motor3->SetParameter(L6474_TVAL, 300); // Limit 0.28A
Arkadi 21:ed054abddfe4 117
Arkadi 21:ed054abddfe4 118 /* Max speed to 2400 step/s. */
Arkadi 23:f9d35a756e79 119 motor1->SetMaxSpeed(750);
Arkadi 23:f9d35a756e79 120 motor2->SetMaxSpeed(750);
Arkadi 23:f9d35a756e79 121 motor3->SetMaxSpeed(750);
Arkadi 21:ed054abddfe4 122
Arkadi 21:ed054abddfe4 123 /* Min speed to 200 step/s. */
Arkadi 21:ed054abddfe4 124 motor1->SetMinSpeed(100);
Arkadi 21:ed054abddfe4 125 motor2->SetMinSpeed(100);
Arkadi 21:ed054abddfe4 126 motor3->SetMinSpeed(100);
Arkadi 21:ed054abddfe4 127
Arkadi 21:ed054abddfe4 128 /* set accelerations */
Arkadi 23:f9d35a756e79 129 motor1->SetAcceleration(250);
Arkadi 23:f9d35a756e79 130 motor2->SetAcceleration(250);
Arkadi 23:f9d35a756e79 131 motor3->SetAcceleration(250);
Arkadi 23:f9d35a756e79 132 motor1->SetDeceleration(250);
Arkadi 23:f9d35a756e79 133 motor2->SetDeceleration(250);
Arkadi 23:f9d35a756e79 134 motor3->SetDeceleration(250);
Arkadi 21:ed054abddfe4 135
Arkadi 21:ed054abddfe4 136 // Enabling motor
Arkadi 21:ed054abddfe4 137 motor1->Enable();
Arkadi 21:ed054abddfe4 138 motor2->Enable();
Arkadi 21:ed054abddfe4 139 motor3->Enable();
Arkadi 21:ed054abddfe4 140
Davidroid 0:e6a49a092e2a 141
Davidroid 0:e6a49a092e2a 142 /* Printing to the console. */
Arkadi 21:ed054abddfe4 143 printf("Motor Control Application Example for 3 Motors\r\n\n");
Davidroid 8:cec4c2c03a27 144
Davidroid 8:cec4c2c03a27 145 /*----- Moving. -----*/
Arkadi 21:ed054abddfe4 146
Davidroid 8:cec4c2c03a27 147 /* Moving N steps in the forward direction. */
Arkadi 21:ed054abddfe4 148 motor1->Move(StepperMotor::FWD, STEPS);
Davidroid 9:a9e51320aee4 149 motor2->Move(StepperMotor::FWD, STEPS);
Arkadi 21:ed054abddfe4 150 motor3->Move(StepperMotor::FWD, STEPS);
Davidroid 8:cec4c2c03a27 151 /* Waiting while the motor is active. */
Davidroid 8:cec4c2c03a27 152 motor1->WaitWhileActive();
Davidroid 8:cec4c2c03a27 153 motor2->WaitWhileActive();
Arkadi 21:ed054abddfe4 154 motor3->WaitWhileActive();
Arkadi 21:ed054abddfe4 155
Arkadi 21:ed054abddfe4 156 /* Waiting 2 seconds. */
Davidroid 8:cec4c2c03a27 157 wait_ms(2000);
Arkadi 21:ed054abddfe4 158
Davidroid 8:cec4c2c03a27 159
Davidroid 8:cec4c2c03a27 160 /* Moving N steps in the backward direction. */
Arkadi 21:ed054abddfe4 161 motor1->Move(StepperMotor::BWD, STEPS);
Davidroid 9:a9e51320aee4 162 motor2->Move(StepperMotor::BWD, STEPS);
Arkadi 21:ed054abddfe4 163 motor3->Move(StepperMotor::BWD, STEPS);
Davidroid 8:cec4c2c03a27 164 /* Waiting while the motor is active. */
Davidroid 8:cec4c2c03a27 165 motor1->WaitWhileActive();
Davidroid 8:cec4c2c03a27 166 motor2->WaitWhileActive();
Arkadi 21:ed054abddfe4 167 motor3->WaitWhileActive();
Davidroid 8:cec4c2c03a27 168
Davidroid 8:cec4c2c03a27 169 /* Waiting 2 seconds. */
Davidroid 8:cec4c2c03a27 170 wait_ms(2000);
Davidroid 8:cec4c2c03a27 171
Arkadi 21:ed054abddfe4 172 /* Infinite Loop. */
Arkadi 21:ed054abddfe4 173 while(1)
Arkadi 21:ed054abddfe4 174 {
Arkadi 21:ed054abddfe4 175 /*----- Moving. -----*/
Davidroid 8:cec4c2c03a27 176
Arkadi 21:ed054abddfe4 177 /* Moving N steps in the forward direction. */
Arkadi 21:ed054abddfe4 178 motor1->Move(StepperMotor::FWD, STEPS);
Arkadi 21:ed054abddfe4 179 motor2->Move(StepperMotor::FWD, STEPS);
Arkadi 21:ed054abddfe4 180 motor3->Move(StepperMotor::FWD, STEPS);
Davidroid 8:cec4c2c03a27 181 /* Waiting while the motor is active. */
Davidroid 8:cec4c2c03a27 182 motor1->WaitWhileActive();
Davidroid 8:cec4c2c03a27 183 motor2->WaitWhileActive();
Arkadi 21:ed054abddfe4 184 motor3->WaitWhileActive();
Arkadi 21:ed054abddfe4 185
Arkadi 21:ed054abddfe4 186 /* Moving N steps in the backward direction. */
Arkadi 21:ed054abddfe4 187 motor1->Move(StepperMotor::BWD, STEPS);
Arkadi 21:ed054abddfe4 188 motor2->Move(StepperMotor::BWD, STEPS);
Arkadi 21:ed054abddfe4 189 motor3->Move(StepperMotor::BWD, STEPS);
Davidroid 8:cec4c2c03a27 190 /* Waiting while the motor is active. */
Davidroid 8:cec4c2c03a27 191 motor1->WaitWhileActive();
Davidroid 8:cec4c2c03a27 192 motor2->WaitWhileActive();
Arkadi 21:ed054abddfe4 193 motor3->WaitWhileActive();
Arkadi 21:ed054abddfe4 194
Davidroid 8:cec4c2c03a27 195 /* Waiting 2 seconds. */
Davidroid 8:cec4c2c03a27 196 wait_ms(2000);
Davidroid 0:e6a49a092e2a 197 }
Davidroid 0:e6a49a092e2a 198 }