Test
Dependencies: X_NUCLEO_IHM02A1 mbed
Fork of HelloWorld_IHM02A1 by
main.cpp@20:64b4bb57c3c6, 2018-05-10 (annotated)
- Committer:
- Robby
- Date:
- Thu May 10 02:12:07 2018 +0000
- Revision:
- 20:64b4bb57c3c6
- Parent:
- 18:591a007effc2
Test
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Davidroid | 0:5148e9486cf2 | 1 | /** |
Davidroid | 0:5148e9486cf2 | 2 | ****************************************************************************** |
Davidroid | 0:5148e9486cf2 | 3 | * @file main.cpp |
Davidroid | 12:5be6dd48b94a | 4 | * @author Davide Aliprandi, STMicroelectronics |
Davidroid | 0:5148e9486cf2 | 5 | * @version V1.0.0 |
Davidroid | 0:5148e9486cf2 | 6 | * @date November 4th, 2015 |
Davidroid | 12:5be6dd48b94a | 7 | * @brief mbed test application for the STMicroelectronics X-NUCLEO-IHM02A1 |
Davidroid | 1:9f1974b0960d | 8 | * Motor Control Expansion Board: control of 2 motors. |
Davidroid | 0:5148e9486cf2 | 9 | ****************************************************************************** |
Davidroid | 0:5148e9486cf2 | 10 | * @attention |
Davidroid | 0:5148e9486cf2 | 11 | * |
Davidroid | 0:5148e9486cf2 | 12 | * <h2><center>© COPYRIGHT(c) 2015 STMicroelectronics</center></h2> |
Davidroid | 0:5148e9486cf2 | 13 | * |
Davidroid | 0:5148e9486cf2 | 14 | * Redistribution and use in source and binary forms, with or without modification, |
Davidroid | 0:5148e9486cf2 | 15 | * are permitted provided that the following conditions are met: |
Davidroid | 0:5148e9486cf2 | 16 | * 1. Redistributions of source code must retain the above copyright notice, |
Davidroid | 0:5148e9486cf2 | 17 | * this list of conditions and the following disclaimer. |
Davidroid | 0:5148e9486cf2 | 18 | * 2. Redistributions in binary form must reproduce the above copyright notice, |
Davidroid | 0:5148e9486cf2 | 19 | * this list of conditions and the following disclaimer in the documentation |
Davidroid | 0:5148e9486cf2 | 20 | * and/or other materials provided with the distribution. |
Davidroid | 0:5148e9486cf2 | 21 | * 3. Neither the name of STMicroelectronics nor the names of its contributors |
Davidroid | 0:5148e9486cf2 | 22 | * may be used to endorse or promote products derived from this software |
Davidroid | 0:5148e9486cf2 | 23 | * without specific prior written permission. |
Davidroid | 0:5148e9486cf2 | 24 | * |
Davidroid | 0:5148e9486cf2 | 25 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
Davidroid | 0:5148e9486cf2 | 26 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
Davidroid | 0:5148e9486cf2 | 27 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
Davidroid | 0:5148e9486cf2 | 28 | * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE |
Davidroid | 0:5148e9486cf2 | 29 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
Davidroid | 0:5148e9486cf2 | 30 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR |
Davidroid | 0:5148e9486cf2 | 31 | * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER |
Davidroid | 0:5148e9486cf2 | 32 | * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, |
Davidroid | 0:5148e9486cf2 | 33 | * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
Davidroid | 0:5148e9486cf2 | 34 | * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
Davidroid | 0:5148e9486cf2 | 35 | * |
Davidroid | 0:5148e9486cf2 | 36 | ****************************************************************************** |
Davidroid | 0:5148e9486cf2 | 37 | */ |
Davidroid | 0:5148e9486cf2 | 38 | |
Davidroid | 0:5148e9486cf2 | 39 | |
Davidroid | 0:5148e9486cf2 | 40 | /* Includes ------------------------------------------------------------------*/ |
Davidroid | 0:5148e9486cf2 | 41 | |
Davidroid | 0:5148e9486cf2 | 42 | /* mbed specific header files. */ |
Davidroid | 0:5148e9486cf2 | 43 | #include "mbed.h" |
Davidroid | 0:5148e9486cf2 | 44 | |
Davidroid | 0:5148e9486cf2 | 45 | /* Helper header files. */ |
Davidroid | 0:5148e9486cf2 | 46 | #include "DevSPI.h" |
Davidroid | 0:5148e9486cf2 | 47 | |
Davidroid | 0:5148e9486cf2 | 48 | /* Expansion Board specific header files. */ |
Davidroid | 0:5148e9486cf2 | 49 | #include "x_nucleo_ihm02a1_class.h" |
Davidroid | 0:5148e9486cf2 | 50 | |
Robby | 20:64b4bb57c3c6 | 51 | /* String libraries for splitting commands*/ |
Robby | 20:64b4bb57c3c6 | 52 | #include <string.h> |
Davidroid | 0:5148e9486cf2 | 53 | |
Davidroid | 0:5148e9486cf2 | 54 | /* Definitions ---------------------------------------------------------------*/ |
Davidroid | 0:5148e9486cf2 | 55 | |
Davidroid | 0:5148e9486cf2 | 56 | /* Number of movements per revolution. */ |
Davidroid | 0:5148e9486cf2 | 57 | #define MPR_1 4 |
Davidroid | 1:9f1974b0960d | 58 | |
Davidroid | 1:9f1974b0960d | 59 | /* Number of steps. */ |
Robby | 20:64b4bb57c3c6 | 60 | #define STEPS_1 (200 * 128) /* 1 revolution given a 400 steps motor configured at 1/128 microstep mode. */ |
Davidroid | 18:591a007effc2 | 61 | #define STEPS_2 (STEPS_1 * 2) |
Davidroid | 0:5148e9486cf2 | 62 | |
Davidroid | 0:5148e9486cf2 | 63 | /* Delay in milliseconds. */ |
Davidroid | 1:9f1974b0960d | 64 | #define DELAY_1 1000 |
Davidroid | 0:5148e9486cf2 | 65 | #define DELAY_2 2000 |
Davidroid | 0:5148e9486cf2 | 66 | #define DELAY_3 5000 |
Davidroid | 0:5148e9486cf2 | 67 | |
Davidroid | 0:5148e9486cf2 | 68 | |
Davidroid | 0:5148e9486cf2 | 69 | /* Variables -----------------------------------------------------------------*/ |
Davidroid | 0:5148e9486cf2 | 70 | |
Robby | 20:64b4bb57c3c6 | 71 | /* Serial port to USB*/ |
Robby | 20:64b4bb57c3c6 | 72 | Serial pc(USBTX,USBRX);//tx, rx |
Robby | 20:64b4bb57c3c6 | 73 | |
Davidroid | 0:5148e9486cf2 | 74 | /* Motor Control Expansion Board. */ |
Davidroid | 0:5148e9486cf2 | 75 | X_NUCLEO_IHM02A1 *x_nucleo_ihm02a1; |
Davidroid | 0:5148e9486cf2 | 76 | |
Davidroid | 9:f35fbeedb8f4 | 77 | /* Initialization parameters of the motors connected to the expansion board. */ |
Davidroid | 15:698fe51556c0 | 78 | L6470_Init_t init[L6470DAISYCHAINSIZE] = |
Davidroid | 9:f35fbeedb8f4 | 79 | { |
Davidroid | 9:f35fbeedb8f4 | 80 | /* First Motor. */ |
Davidroid | 9:f35fbeedb8f4 | 81 | { |
Robby | 20:64b4bb57c3c6 | 82 | 12.0, /* Motor supply voltage in V. */ |
Robby | 20:64b4bb57c3c6 | 83 | 200, /* Min number of steps per revolution for the motor. */ |
Robby | 20:64b4bb57c3c6 | 84 | 0.5, /* Max motor phase voltage in A. */ |
Robby | 20:64b4bb57c3c6 | 85 | 5.06, /* Max motor phase voltage in V. */ |
Robby | 20:64b4bb57c3c6 | 86 | 200.0, /* Motor initial speed [step/s]. */ |
Robby | 20:64b4bb57c3c6 | 87 | 300.0, /* Motor acceleration [step/s^2] (comment for infinite acceleration mode). */ |
Robby | 20:64b4bb57c3c6 | 88 | 300.0, /* Motor deceleration [step/s^2] (comment for infinite deceleration mode). */ |
Robby | 20:64b4bb57c3c6 | 89 | 400.0, /* Motor maximum speed [step/s]. */ |
Davidroid | 18:591a007effc2 | 90 | 0.0, /* Motor minimum speed [step/s]. */ |
Robby | 20:64b4bb57c3c6 | 91 | 800, /* Motor full-step speed threshold [step/s]. */ |
Davidroid | 18:591a007effc2 | 92 | 3.06, /* Holding kval [V]. */ |
Davidroid | 18:591a007effc2 | 93 | 3.06, /* Constant speed kval [V]. */ |
Davidroid | 18:591a007effc2 | 94 | 3.06, /* Acceleration starting kval [V]. */ |
Davidroid | 18:591a007effc2 | 95 | 3.06, /* Deceleration starting kval [V]. */ |
Davidroid | 18:591a007effc2 | 96 | 61.52, /* Intersect speed for bemf compensation curve slope changing [step/s]. */ |
Davidroid | 18:591a007effc2 | 97 | 392.1569e-6, /* Start slope [s/step]. */ |
Davidroid | 18:591a007effc2 | 98 | 643.1372e-6, /* Acceleration final slope [s/step]. */ |
Davidroid | 18:591a007effc2 | 99 | 643.1372e-6, /* Deceleration final slope [s/step]. */ |
Davidroid | 18:591a007effc2 | 100 | 0, /* Thermal compensation factor (range [0, 15]). */ |
Davidroid | 18:591a007effc2 | 101 | 3.06 * 1000 * 1.10, /* Ocd threshold [ma] (range [375 ma, 6000 ma]). */ |
Davidroid | 18:591a007effc2 | 102 | 3.06 * 1000 * 1.00, /* Stall threshold [ma] (range [31.25 ma, 4000 ma]). */ |
Davidroid | 18:591a007effc2 | 103 | StepperMotor::STEP_MODE_1_128, /* Step mode selection. */ |
Davidroid | 18:591a007effc2 | 104 | 0xFF, /* Alarm conditions enable. */ |
Davidroid | 18:591a007effc2 | 105 | 0x2E88 /* Ic configuration. */ |
Davidroid | 9:f35fbeedb8f4 | 106 | }, |
Davidroid | 9:f35fbeedb8f4 | 107 | |
Davidroid | 9:f35fbeedb8f4 | 108 | /* Second Motor. */ |
Davidroid | 9:f35fbeedb8f4 | 109 | { |
Robby | 20:64b4bb57c3c6 | 110 | 12.0, /* Motor supply voltage in V. */ |
Robby | 20:64b4bb57c3c6 | 111 | 200, /* Min number of steps per revolution for the motor. */ |
Robby | 20:64b4bb57c3c6 | 112 | 0.5, /* Max motor phase voltage in A. */ |
Robby | 20:64b4bb57c3c6 | 113 | 5.06, /* Max motor phase voltage in V. */ |
Robby | 20:64b4bb57c3c6 | 114 | 200.0, /* Motor initial speed [step/s]. */ |
Robby | 20:64b4bb57c3c6 | 115 | 300.0, /* Motor acceleration [step/s^2] (comment for infinite acceleration mode). */ |
Robby | 20:64b4bb57c3c6 | 116 | 300.0, /* Motor deceleration [step/s^2] (comment for infinite deceleration mode). */ |
Robby | 20:64b4bb57c3c6 | 117 | 400.0, /* Motor maximum speed [step/s]. */ |
Davidroid | 18:591a007effc2 | 118 | 0.0, /* Motor minimum speed [step/s]. */ |
Robby | 20:64b4bb57c3c6 | 119 | 800, /* Motor full-step speed threshold [step/s]. */ |
Davidroid | 18:591a007effc2 | 120 | 3.06, /* Holding kval [V]. */ |
Davidroid | 18:591a007effc2 | 121 | 3.06, /* Constant speed kval [V]. */ |
Davidroid | 18:591a007effc2 | 122 | 3.06, /* Acceleration starting kval [V]. */ |
Davidroid | 18:591a007effc2 | 123 | 3.06, /* Deceleration starting kval [V]. */ |
Davidroid | 18:591a007effc2 | 124 | 61.52, /* Intersect speed for bemf compensation curve slope changing [step/s]. */ |
Davidroid | 18:591a007effc2 | 125 | 392.1569e-6, /* Start slope [s/step]. */ |
Davidroid | 18:591a007effc2 | 126 | 643.1372e-6, /* Acceleration final slope [s/step]. */ |
Davidroid | 18:591a007effc2 | 127 | 643.1372e-6, /* Deceleration final slope [s/step]. */ |
Davidroid | 18:591a007effc2 | 128 | 0, /* Thermal compensation factor (range [0, 15]). */ |
Davidroid | 18:591a007effc2 | 129 | 3.06 * 1000 * 1.10, /* Ocd threshold [ma] (range [375 ma, 6000 ma]). */ |
Davidroid | 18:591a007effc2 | 130 | 3.06 * 1000 * 1.00, /* Stall threshold [ma] (range [31.25 ma, 4000 ma]). */ |
Davidroid | 18:591a007effc2 | 131 | StepperMotor::STEP_MODE_1_128, /* Step mode selection. */ |
Davidroid | 18:591a007effc2 | 132 | 0xFF, /* Alarm conditions enable. */ |
Davidroid | 18:591a007effc2 | 133 | 0x2E88 /* Ic configuration. */ |
Davidroid | 9:f35fbeedb8f4 | 134 | } |
Davidroid | 9:f35fbeedb8f4 | 135 | }; |
Robby | 20:64b4bb57c3c6 | 136 | |
Robby | 20:64b4bb57c3c6 | 137 | DigitalIn enable(PA_8); |
Robby | 20:64b4bb57c3c6 | 138 | /* Building a list of motor control components. */ |
Robby | 20:64b4bb57c3c6 | 139 | //L6470 **motors = x_nucleo_ihm02a1->GetComponents(); |
Robby | 20:64b4bb57c3c6 | 140 | L6470 **motors; |
Davidroid | 9:f35fbeedb8f4 | 141 | |
Robby | 20:64b4bb57c3c6 | 142 | void highZ(){ |
Robby | 20:64b4bb57c3c6 | 143 | /* Preparing each motor to set High Impedance State. */ |
Robby | 20:64b4bb57c3c6 | 144 | for (int m = 0; m < L6470DAISYCHAINSIZE; m++) |
Robby | 20:64b4bb57c3c6 | 145 | motors[m]->PrepareHardHiZ(); |
Robby | 20:64b4bb57c3c6 | 146 | |
Robby | 20:64b4bb57c3c6 | 147 | /* Performing the action on each motor at the same time. */ |
Robby | 20:64b4bb57c3c6 | 148 | x_nucleo_ihm02a1->PerformPreparedActions(); |
Robby | 20:64b4bb57c3c6 | 149 | } |
Robby | 20:64b4bb57c3c6 | 150 | |
Robby | 20:64b4bb57c3c6 | 151 | void hardStop(int motor){ |
Robby | 20:64b4bb57c3c6 | 152 | // /*----- Hard Stop. -----*/ |
Robby | 20:64b4bb57c3c6 | 153 | // |
Robby | 20:64b4bb57c3c6 | 154 | /* Printing to the console. */ |
Robby | 20:64b4bb57c3c6 | 155 | // pc.printf("--> Hard Stop.\r\n"); |
Robby | 20:64b4bb57c3c6 | 156 | |
Robby | 20:64b4bb57c3c6 | 157 | /* Preparing each motor to perform a hard stop. */ |
Robby | 20:64b4bb57c3c6 | 158 | // for (int m = 0; m < L6470DAISYCHAINSIZE; m++) |
Robby | 20:64b4bb57c3c6 | 159 | motors[motor]->PrepareHardStop(); |
Robby | 20:64b4bb57c3c6 | 160 | |
Robby | 20:64b4bb57c3c6 | 161 | /* Performing the action on each motor at the same time. */ |
Robby | 20:64b4bb57c3c6 | 162 | x_nucleo_ihm02a1->PerformPreparedActions(); |
Robby | 20:64b4bb57c3c6 | 163 | |
Robby | 20:64b4bb57c3c6 | 164 | highZ(); |
Robby | 20:64b4bb57c3c6 | 165 | /* Waiting. */ |
Robby | 20:64b4bb57c3c6 | 166 | // wait_ms(DELAY_2); |
Robby | 20:64b4bb57c3c6 | 167 | } |
Robby | 20:64b4bb57c3c6 | 168 | |
Robby | 20:64b4bb57c3c6 | 169 | void stopAllMotors(){ |
Robby | 20:64b4bb57c3c6 | 170 | /* Preparing each motor to perform a hard stop. */ |
Robby | 20:64b4bb57c3c6 | 171 | for (int m = 0; m < L6470DAISYCHAINSIZE; m++) |
Robby | 20:64b4bb57c3c6 | 172 | motors[m]->PrepareHardStop(); |
Robby | 20:64b4bb57c3c6 | 173 | |
Robby | 20:64b4bb57c3c6 | 174 | /* Performing the action on each motor at the same time. */ |
Robby | 20:64b4bb57c3c6 | 175 | x_nucleo_ihm02a1->PerformPreparedActions(); |
Robby | 20:64b4bb57c3c6 | 176 | |
Robby | 20:64b4bb57c3c6 | 177 | highZ(); |
Robby | 20:64b4bb57c3c6 | 178 | } |
Robby | 20:64b4bb57c3c6 | 179 | |
Robby | 20:64b4bb57c3c6 | 180 | void setHome(int motor){ |
Robby | 20:64b4bb57c3c6 | 181 | motors[motor]->SetHome(); |
Robby | 20:64b4bb57c3c6 | 182 | } |
Robby | 20:64b4bb57c3c6 | 183 | |
Robby | 20:64b4bb57c3c6 | 184 | int getPosition(int motor){ |
Robby | 20:64b4bb57c3c6 | 185 | int position = motors[motor]->GetPosition(); |
Robby | 20:64b4bb57c3c6 | 186 | return position; |
Robby | 20:64b4bb57c3c6 | 187 | } |
Robby | 20:64b4bb57c3c6 | 188 | |
Robby | 20:64b4bb57c3c6 | 189 | void moveSteps(int motor, int steps){ |
Robby | 20:64b4bb57c3c6 | 190 | |
Robby | 20:64b4bb57c3c6 | 191 | if(steps < 0) |
Robby | 20:64b4bb57c3c6 | 192 | motors[motor]->Move(StepperMotor::BWD, steps*-1); |
Robby | 20:64b4bb57c3c6 | 193 | else |
Robby | 20:64b4bb57c3c6 | 194 | motors[motor]->Move(StepperMotor::FWD, steps); |
Robby | 20:64b4bb57c3c6 | 195 | motors[motor]->WaitWhileActive(); |
Robby | 20:64b4bb57c3c6 | 196 | hardStop(motor); |
Robby | 20:64b4bb57c3c6 | 197 | } |
Robby | 20:64b4bb57c3c6 | 198 | |
Robby | 20:64b4bb57c3c6 | 199 | void runAtSpeed(int motor, int speed){ |
Robby | 20:64b4bb57c3c6 | 200 | if(speed < 0) |
Robby | 20:64b4bb57c3c6 | 201 | motors[motor]->PrepareRun(StepperMotor::BWD, speed*-1); |
Robby | 20:64b4bb57c3c6 | 202 | else if(speed > 0) |
Robby | 20:64b4bb57c3c6 | 203 | motors[motor]->PrepareRun(StepperMotor::FWD, speed); |
Robby | 20:64b4bb57c3c6 | 204 | else{ |
Robby | 20:64b4bb57c3c6 | 205 | hardStop(motor); |
Robby | 20:64b4bb57c3c6 | 206 | return; |
Robby | 20:64b4bb57c3c6 | 207 | } |
Robby | 20:64b4bb57c3c6 | 208 | /* Performing the action on each motor at the same time. */ |
Robby | 20:64b4bb57c3c6 | 209 | x_nucleo_ihm02a1->PerformPreparedActions(); |
Robby | 20:64b4bb57c3c6 | 210 | } |
Robby | 20:64b4bb57c3c6 | 211 | |
Robby | 20:64b4bb57c3c6 | 212 | void moveInSync(int steps){ |
Robby | 20:64b4bb57c3c6 | 213 | if(steps < 0){ |
Robby | 20:64b4bb57c3c6 | 214 | motors[0]->PrepareMove(StepperMotor::BWD, steps*-1); |
Robby | 20:64b4bb57c3c6 | 215 | motors[1]->PrepareMove(StepperMotor::BWD, steps*-1); |
Robby | 20:64b4bb57c3c6 | 216 | } |
Robby | 20:64b4bb57c3c6 | 217 | else if(steps > 0){ |
Robby | 20:64b4bb57c3c6 | 218 | motors[0]->PrepareMove(StepperMotor::FWD, steps); |
Robby | 20:64b4bb57c3c6 | 219 | motors[1]->PrepareMove(StepperMotor::FWD, steps); |
Robby | 20:64b4bb57c3c6 | 220 | } |
Robby | 20:64b4bb57c3c6 | 221 | x_nucleo_ihm02a1->PerformPreparedActions(); |
Robby | 20:64b4bb57c3c6 | 222 | motors[0]->WaitWhileActive(); |
Robby | 20:64b4bb57c3c6 | 223 | motors[1]->WaitWhileActive(); |
Robby | 20:64b4bb57c3c6 | 224 | } |
Robby | 20:64b4bb57c3c6 | 225 | |
Robby | 20:64b4bb57c3c6 | 226 | void goXRHome(int speed){ |
Robby | 20:64b4bb57c3c6 | 227 | //while not pushing button move motor to the left? |
Robby | 20:64b4bb57c3c6 | 228 | motors[0]->PrepareRun(StepperMotor::BWD, speed); |
Robby | 20:64b4bb57c3c6 | 229 | motors[1]->PrepareRun(StepperMotor::BWD, speed); |
Robby | 20:64b4bb57c3c6 | 230 | |
Robby | 20:64b4bb57c3c6 | 231 | x_nucleo_ihm02a1->PerformPreparedActions(); |
Robby | 20:64b4bb57c3c6 | 232 | |
Robby | 20:64b4bb57c3c6 | 233 | // while( |
Robby | 20:64b4bb57c3c6 | 234 | wait_ms(5000); |
Robby | 20:64b4bb57c3c6 | 235 | |
Robby | 20:64b4bb57c3c6 | 236 | stopAllMotors(); |
Robby | 20:64b4bb57c3c6 | 237 | } |
Robby | 20:64b4bb57c3c6 | 238 | |
Robby | 20:64b4bb57c3c6 | 239 | void goHome(int motor, int speed){ |
Robby | 20:64b4bb57c3c6 | 240 | //while not pushing button move motor to the left? |
Robby | 20:64b4bb57c3c6 | 241 | motors[motor]->PrepareRun(StepperMotor::BWD, speed); |
Robby | 20:64b4bb57c3c6 | 242 | |
Robby | 20:64b4bb57c3c6 | 243 | x_nucleo_ihm02a1->PerformPreparedActions(); |
Robby | 20:64b4bb57c3c6 | 244 | |
Robby | 20:64b4bb57c3c6 | 245 | // while( |
Robby | 20:64b4bb57c3c6 | 246 | wait_ms(5000); |
Robby | 20:64b4bb57c3c6 | 247 | |
Robby | 20:64b4bb57c3c6 | 248 | stopAllMotors(); |
Robby | 20:64b4bb57c3c6 | 249 | } |
Robby | 20:64b4bb57c3c6 | 250 | |
Robby | 20:64b4bb57c3c6 | 251 | void readSerial(){ |
Robby | 20:64b4bb57c3c6 | 252 | char rx_line[10]; |
Robby | 20:64b4bb57c3c6 | 253 | // while(pc.readable()){ |
Robby | 20:64b4bb57c3c6 | 254 | pc.scanf("%s", rx_line); |
Robby | 20:64b4bb57c3c6 | 255 | //pc.printf("Spoken %s \r\n", rx_line); |
Robby | 20:64b4bb57c3c6 | 256 | |
Robby | 20:64b4bb57c3c6 | 257 | char cmd[10], cmdv[10], cmdv2[10]; |
Robby | 20:64b4bb57c3c6 | 258 | int values = sscanf(rx_line, "%[^','],%[^','],%s",cmd, cmdv, cmdv2); |
Robby | 20:64b4bb57c3c6 | 259 | //pc.printf("%d\r\n",values); |
Robby | 20:64b4bb57c3c6 | 260 | int cmd_value = atoi(cmdv); |
Robby | 20:64b4bb57c3c6 | 261 | int cmd_value2 = atoi(cmdv2); |
Robby | 20:64b4bb57c3c6 | 262 | //pc.printf("%s\r\n%d\r\n%d\r\n", cmd, cmd_value, cmd_value2); |
Robby | 20:64b4bb57c3c6 | 263 | |
Robby | 20:64b4bb57c3c6 | 264 | char c = cmd[0]; |
Robby | 20:64b4bb57c3c6 | 265 | //pc.printf("%c", c); |
Robby | 20:64b4bb57c3c6 | 266 | int pos; |
Robby | 20:64b4bb57c3c6 | 267 | int pos2; |
Robby | 20:64b4bb57c3c6 | 268 | switch(c){ |
Robby | 20:64b4bb57c3c6 | 269 | case 'a': |
Robby | 20:64b4bb57c3c6 | 270 | |
Robby | 20:64b4bb57c3c6 | 271 | return; |
Robby | 20:64b4bb57c3c6 | 272 | case 'b': |
Robby | 20:64b4bb57c3c6 | 273 | //set home |
Robby | 20:64b4bb57c3c6 | 274 | setHome(cmd_value); |
Robby | 20:64b4bb57c3c6 | 275 | pos = getPosition(cmd_value); |
Robby | 20:64b4bb57c3c6 | 276 | pc.printf("%c,%d,%d\r\n",c,cmd_value,pos); |
Robby | 20:64b4bb57c3c6 | 277 | return; |
Robby | 20:64b4bb57c3c6 | 278 | case 'c': |
Robby | 20:64b4bb57c3c6 | 279 | //get position |
Robby | 20:64b4bb57c3c6 | 280 | pos = getPosition(cmd_value); |
Robby | 20:64b4bb57c3c6 | 281 | pc.printf("%c,%d,%d\r\n",c,cmd_value,pos); |
Robby | 20:64b4bb57c3c6 | 282 | return; |
Robby | 20:64b4bb57c3c6 | 283 | case 'd': |
Robby | 20:64b4bb57c3c6 | 284 | |
Robby | 20:64b4bb57c3c6 | 285 | break; |
Robby | 20:64b4bb57c3c6 | 286 | case 'e': |
Robby | 20:64b4bb57c3c6 | 287 | //move steps |
Robby | 20:64b4bb57c3c6 | 288 | moveSteps(cmd_value, cmd_value2); |
Robby | 20:64b4bb57c3c6 | 289 | pos = getPosition(cmd_value); |
Robby | 20:64b4bb57c3c6 | 290 | pc.printf("%c,%d,%d\r\n",c,cmd_value,pos); |
Robby | 20:64b4bb57c3c6 | 291 | return; |
Robby | 20:64b4bb57c3c6 | 292 | case 'f': |
Robby | 20:64b4bb57c3c6 | 293 | //run at a given speed or change to run until hit bump |
Robby | 20:64b4bb57c3c6 | 294 | runAtSpeed(cmd_value, cmd_value2); |
Robby | 20:64b4bb57c3c6 | 295 | break; |
Robby | 20:64b4bb57c3c6 | 296 | case 'g': |
Robby | 20:64b4bb57c3c6 | 297 | //Halt |
Robby | 20:64b4bb57c3c6 | 298 | stopAllMotors(); |
Robby | 20:64b4bb57c3c6 | 299 | break; |
Robby | 20:64b4bb57c3c6 | 300 | case 'h': |
Robby | 20:64b4bb57c3c6 | 301 | //move X to home (and R cause connected) |
Robby | 20:64b4bb57c3c6 | 302 | goXRHome(cmd_value2); |
Robby | 20:64b4bb57c3c6 | 303 | pos = getPosition(0); |
Robby | 20:64b4bb57c3c6 | 304 | pos2 = getPosition(1); |
Robby | 20:64b4bb57c3c6 | 305 | pc.printf("%c,%d,%d\r\n",c,pos,pos2); |
Robby | 20:64b4bb57c3c6 | 306 | return; |
Robby | 20:64b4bb57c3c6 | 307 | case 'i': |
Robby | 20:64b4bb57c3c6 | 308 | //move X numebr of steps and R cause connected |
Robby | 20:64b4bb57c3c6 | 309 | moveInSync(cmd_value); |
Robby | 20:64b4bb57c3c6 | 310 | pos = getPosition(0); |
Robby | 20:64b4bb57c3c6 | 311 | pos2 = getPosition(1); |
Robby | 20:64b4bb57c3c6 | 312 | pc.printf("%c,%d,%d\r\n",c,pos,pos2); |
Robby | 20:64b4bb57c3c6 | 313 | return; |
Robby | 20:64b4bb57c3c6 | 314 | case 'j': |
Robby | 20:64b4bb57c3c6 | 315 | //go home |
Robby | 20:64b4bb57c3c6 | 316 | goHome(cmd_value, cmd_value2); |
Robby | 20:64b4bb57c3c6 | 317 | pos = getPosition(cmd_value); |
Robby | 20:64b4bb57c3c6 | 318 | pc.printf("%c,%d,%d\r\n",c,cmd_value,pos); |
Robby | 20:64b4bb57c3c6 | 319 | return; |
Robby | 20:64b4bb57c3c6 | 320 | default: |
Robby | 20:64b4bb57c3c6 | 321 | //N/A command |
Robby | 20:64b4bb57c3c6 | 322 | pc.printf("Do not understand commands: %s with value %d\r\n", cmd, cmd_value); |
Robby | 20:64b4bb57c3c6 | 323 | return; |
Robby | 20:64b4bb57c3c6 | 324 | } |
Robby | 20:64b4bb57c3c6 | 325 | pc.printf("complete\r\n"); |
Robby | 20:64b4bb57c3c6 | 326 | } |
Davidroid | 0:5148e9486cf2 | 327 | |
Davidroid | 0:5148e9486cf2 | 328 | /* Main ----------------------------------------------------------------------*/ |
Davidroid | 0:5148e9486cf2 | 329 | |
Davidroid | 0:5148e9486cf2 | 330 | int main() |
Davidroid | 0:5148e9486cf2 | 331 | { |
Davidroid | 2:41eeee48951b | 332 | /* Initializing SPI bus. */ |
Robby | 20:64b4bb57c3c6 | 333 | DevSPI dev_spi(D11, D12, D13); |
Robby | 20:64b4bb57c3c6 | 334 | |
Davidroid | 5:3b8e19bbf386 | 335 | /* Initializing Motor Control Expansion Board. */ |
Davidroid | 9:f35fbeedb8f4 | 336 | x_nucleo_ihm02a1 = new X_NUCLEO_IHM02A1(&init[0], &init[1], A4, A5, D4, A2, &dev_spi); |
Davidroid | 1:9f1974b0960d | 337 | |
Robby | 20:64b4bb57c3c6 | 338 | motors = x_nucleo_ihm02a1->GetComponents(); |
Davidroid | 18:591a007effc2 | 339 | |
Robby | 20:64b4bb57c3c6 | 340 | pc.attach(readSerial); |
Robby | 20:64b4bb57c3c6 | 341 | pc.printf("ready\r\n"); |
Robby | 20:64b4bb57c3c6 | 342 | |
Robby | 20:64b4bb57c3c6 | 343 | while(1){ |
Robby | 20:64b4bb57c3c6 | 344 | } |
Davidroid | 18:591a007effc2 | 345 | |
Robby | 20:64b4bb57c3c6 | 346 | ///*----- Initialization. -----*/ |
Robby | 20:64b4bb57c3c6 | 347 | // |
Robby | 20:64b4bb57c3c6 | 348 | // /* Initializing SPI bus. */ |
Robby | 20:64b4bb57c3c6 | 349 | // DevSPI dev_spi(D11, D12, D13); |
Robby | 20:64b4bb57c3c6 | 350 | // |
Robby | 20:64b4bb57c3c6 | 351 | // /* Initializing Motor Control Expansion Board. */ |
Robby | 20:64b4bb57c3c6 | 352 | // x_nucleo_ihm02a1 = new X_NUCLEO_IHM02A1(&init[0], &init[1], A4, A5, D4, A2, &dev_spi); |
Robby | 20:64b4bb57c3c6 | 353 | // |
Robby | 20:64b4bb57c3c6 | 354 | // /* Building a list of motor control components. */ |
Robby | 20:64b4bb57c3c6 | 355 | // L6470 **motors = x_nucleo_ihm02a1->GetComponents(); |
Robby | 20:64b4bb57c3c6 | 356 | // |
Robby | 20:64b4bb57c3c6 | 357 | // /* Printing to the console. */ |
Robby | 20:64b4bb57c3c6 | 358 | // pc.printf("Motor Control Application Example for 2 Motors\r\n\n"); |
Robby | 20:64b4bb57c3c6 | 359 | // |
Robby | 20:64b4bb57c3c6 | 360 | // |
Robby | 20:64b4bb57c3c6 | 361 | // /*----- Setting home and marke positions, getting positions, and going to positions. -----*/ |
Robby | 20:64b4bb57c3c6 | 362 | // |
Robby | 20:64b4bb57c3c6 | 363 | // /* Printing to the console. */ |
Robby | 20:64b4bb57c3c6 | 364 | // pc.printf("--> Setting home position.\r\n"); |
Robby | 20:64b4bb57c3c6 | 365 | // |
Robby | 20:64b4bb57c3c6 | 366 | // /* Setting the home position. */ |
Robby | 20:64b4bb57c3c6 | 367 | // motors[0]->SetHome(); |
Robby | 20:64b4bb57c3c6 | 368 | // |
Robby | 20:64b4bb57c3c6 | 369 | // /* Waiting. */ |
Robby | 20:64b4bb57c3c6 | 370 | // wait_ms(DELAY_1); |
Robby | 20:64b4bb57c3c6 | 371 | // |
Robby | 20:64b4bb57c3c6 | 372 | // /* Getting the current position. */ |
Robby | 20:64b4bb57c3c6 | 373 | // int position = motors[0]->GetPosition(); |
Robby | 20:64b4bb57c3c6 | 374 | // |
Robby | 20:64b4bb57c3c6 | 375 | // /* Printing to the console. */ |
Robby | 20:64b4bb57c3c6 | 376 | // pc.printf("--> Getting the current position: %d\r\n", position); |
Robby | 20:64b4bb57c3c6 | 377 | // |
Robby | 20:64b4bb57c3c6 | 378 | // /* Waiting. */ |
Robby | 20:64b4bb57c3c6 | 379 | // wait_ms(DELAY_1); |
Robby | 20:64b4bb57c3c6 | 380 | // |
Robby | 20:64b4bb57c3c6 | 381 | // /* Printing to the console. */ |
Robby | 20:64b4bb57c3c6 | 382 | // pc.printf("--> Moving forward %d steps.\r\n", STEPS_1); |
Robby | 20:64b4bb57c3c6 | 383 | // |
Robby | 20:64b4bb57c3c6 | 384 | // /* Moving. */ |
Robby | 20:64b4bb57c3c6 | 385 | // motors[0]->Move(StepperMotor::FWD, STEPS_1); |
Robby | 20:64b4bb57c3c6 | 386 | // |
Robby | 20:64b4bb57c3c6 | 387 | // /* Waiting while active. */ |
Robby | 20:64b4bb57c3c6 | 388 | // motors[0]->WaitWhileActive(); |
Robby | 20:64b4bb57c3c6 | 389 | // |
Robby | 20:64b4bb57c3c6 | 390 | // /* Getting the current position. */ |
Robby | 20:64b4bb57c3c6 | 391 | // position = motors[0]->GetPosition(); |
Robby | 20:64b4bb57c3c6 | 392 | // |
Robby | 20:64b4bb57c3c6 | 393 | // /* Printing to the console. */ |
Robby | 20:64b4bb57c3c6 | 394 | // pc.printf("--> Getting the current position: %d\r\n", position); |
Robby | 20:64b4bb57c3c6 | 395 | // |
Robby | 20:64b4bb57c3c6 | 396 | // /* Printing to the console. */ |
Robby | 20:64b4bb57c3c6 | 397 | // pc.printf("--> Marking the current position.\r\n"); |
Robby | 20:64b4bb57c3c6 | 398 | // |
Robby | 20:64b4bb57c3c6 | 399 | // /* Marking the current position. */ |
Robby | 20:64b4bb57c3c6 | 400 | // motors[0]->SetMark(); |
Robby | 20:64b4bb57c3c6 | 401 | // |
Robby | 20:64b4bb57c3c6 | 402 | // /* Waiting. */ |
Robby | 20:64b4bb57c3c6 | 403 | // wait_ms(DELAY_1); |
Robby | 20:64b4bb57c3c6 | 404 | // |
Robby | 20:64b4bb57c3c6 | 405 | // /* Printing to the console. */ |
Robby | 20:64b4bb57c3c6 | 406 | // pc.printf("--> Moving backward %d steps.\r\n", STEPS_2); |
Robby | 20:64b4bb57c3c6 | 407 | // |
Robby | 20:64b4bb57c3c6 | 408 | // /* Moving. */ |
Robby | 20:64b4bb57c3c6 | 409 | //motors[0]->Move(StepperMotor::BWD, STEPS_2); |
Robby | 20:64b4bb57c3c6 | 410 | // |
Robby | 20:64b4bb57c3c6 | 411 | // /* Waiting while active. */ |
Robby | 20:64b4bb57c3c6 | 412 | // motors[0]->WaitWhileActive(); |
Robby | 20:64b4bb57c3c6 | 413 | // |
Robby | 20:64b4bb57c3c6 | 414 | // /* Waiting. */ |
Robby | 20:64b4bb57c3c6 | 415 | // wait_ms(DELAY_1); |
Robby | 20:64b4bb57c3c6 | 416 | // |
Robby | 20:64b4bb57c3c6 | 417 | // /* Getting the current position. */ |
Robby | 20:64b4bb57c3c6 | 418 | // position = motors[0]->GetPosition(); |
Robby | 20:64b4bb57c3c6 | 419 | // |
Robby | 20:64b4bb57c3c6 | 420 | // /* Printing to the console. */ |
Robby | 20:64b4bb57c3c6 | 421 | // pc.printf("--> Getting the current position: %d\r\n", position); |
Robby | 20:64b4bb57c3c6 | 422 | // |
Robby | 20:64b4bb57c3c6 | 423 | // /* Waiting. */ |
Robby | 20:64b4bb57c3c6 | 424 | // wait_ms(DELAY_1); |
Robby | 20:64b4bb57c3c6 | 425 | // |
Robby | 20:64b4bb57c3c6 | 426 | // /* Printing to the console. */ |
Robby | 20:64b4bb57c3c6 | 427 | // pc.printf("--> Going to marked position.\r\n"); |
Robby | 20:64b4bb57c3c6 | 428 | // |
Robby | 20:64b4bb57c3c6 | 429 | // /* Going to marked position. */ |
Robby | 20:64b4bb57c3c6 | 430 | // motors[0]->GoMark(); |
Robby | 20:64b4bb57c3c6 | 431 | // |
Robby | 20:64b4bb57c3c6 | 432 | // /* Waiting while active. */ |
Robby | 20:64b4bb57c3c6 | 433 | // motors[0]->WaitWhileActive(); |
Robby | 20:64b4bb57c3c6 | 434 | // |
Robby | 20:64b4bb57c3c6 | 435 | // /* Waiting. */ |
Robby | 20:64b4bb57c3c6 | 436 | // wait_ms(DELAY_1); |
Robby | 20:64b4bb57c3c6 | 437 | // |
Robby | 20:64b4bb57c3c6 | 438 | // /* Getting the current position. */ |
Robby | 20:64b4bb57c3c6 | 439 | // position = motors[0]->GetPosition(); |
Robby | 20:64b4bb57c3c6 | 440 | // |
Robby | 20:64b4bb57c3c6 | 441 | // /* Printing to the console. */ |
Robby | 20:64b4bb57c3c6 | 442 | // pc.printf("--> Getting the current position: %d\r\n", position); |
Robby | 20:64b4bb57c3c6 | 443 | // |
Robby | 20:64b4bb57c3c6 | 444 | // /* Waiting. */ |
Robby | 20:64b4bb57c3c6 | 445 | // wait_ms(DELAY_1); |
Robby | 20:64b4bb57c3c6 | 446 | // |
Robby | 20:64b4bb57c3c6 | 447 | // /* Printing to the console. */ |
Robby | 20:64b4bb57c3c6 | 448 | // pc.printf("--> Going to home position.\r\n"); |
Robby | 20:64b4bb57c3c6 | 449 | // |
Robby | 20:64b4bb57c3c6 | 450 | // /* Going to home position. */ |
Robby | 20:64b4bb57c3c6 | 451 | // motors[0]->GoHome(); |
Robby | 20:64b4bb57c3c6 | 452 | // |
Robby | 20:64b4bb57c3c6 | 453 | // /* Waiting while active. */ |
Robby | 20:64b4bb57c3c6 | 454 | // motors[0]->WaitWhileActive(); |
Robby | 20:64b4bb57c3c6 | 455 | // |
Robby | 20:64b4bb57c3c6 | 456 | // /* Waiting. */ |
Robby | 20:64b4bb57c3c6 | 457 | // wait_ms(DELAY_1); |
Robby | 20:64b4bb57c3c6 | 458 | // |
Robby | 20:64b4bb57c3c6 | 459 | // /* Getting the current position. */ |
Robby | 20:64b4bb57c3c6 | 460 | // position = motors[0]->GetPosition(); |
Robby | 20:64b4bb57c3c6 | 461 | // |
Robby | 20:64b4bb57c3c6 | 462 | // /* Printing to the console. */ |
Robby | 20:64b4bb57c3c6 | 463 | // pc.printf("--> Getting the current position: %d\r\n", position); |
Robby | 20:64b4bb57c3c6 | 464 | // |
Robby | 20:64b4bb57c3c6 | 465 | // /* Waiting. */ |
Robby | 20:64b4bb57c3c6 | 466 | // wait_ms(DELAY_1); |
Robby | 20:64b4bb57c3c6 | 467 | // |
Robby | 20:64b4bb57c3c6 | 468 | // /* Printing to the console. */ |
Robby | 20:64b4bb57c3c6 | 469 | // pc.printf("--> Halving the microsteps.\r\n"); |
Robby | 20:64b4bb57c3c6 | 470 | // |
Robby | 20:64b4bb57c3c6 | 471 | // /* Halving the microsteps. */ |
Robby | 20:64b4bb57c3c6 | 472 | // init[0].step_sel = (init[0].step_sel > 0 ? init[0].step_sel - 1 : init[0].step_sel); |
Robby | 20:64b4bb57c3c6 | 473 | // if (!motors[0]->SetStepMode((StepperMotor::step_mode_t) init[0].step_sel)) |
Robby | 20:64b4bb57c3c6 | 474 | // pc.printf(" Step Mode not allowed.\r\n"); |
Robby | 20:64b4bb57c3c6 | 475 | // |
Robby | 20:64b4bb57c3c6 | 476 | // /* Waiting. */ |
Robby | 20:64b4bb57c3c6 | 477 | // wait_ms(DELAY_1); |
Robby | 20:64b4bb57c3c6 | 478 | // |
Robby | 20:64b4bb57c3c6 | 479 | // /* Printing to the console. */ |
Robby | 20:64b4bb57c3c6 | 480 | // pc.printf("--> Setting home position.\r\n"); |
Robby | 20:64b4bb57c3c6 | 481 | // |
Robby | 20:64b4bb57c3c6 | 482 | // /* Setting the home position. */ |
Robby | 20:64b4bb57c3c6 | 483 | // motors[0]->SetHome(); |
Robby | 20:64b4bb57c3c6 | 484 | // |
Robby | 20:64b4bb57c3c6 | 485 | // /* Waiting. */ |
Robby | 20:64b4bb57c3c6 | 486 | // wait_ms(DELAY_1); |
Robby | 20:64b4bb57c3c6 | 487 | // |
Robby | 20:64b4bb57c3c6 | 488 | // /* Getting the current position. */ |
Robby | 20:64b4bb57c3c6 | 489 | // position = motors[0]->GetPosition(); |
Robby | 20:64b4bb57c3c6 | 490 | // |
Robby | 20:64b4bb57c3c6 | 491 | // /* Printing to the console. */ |
Robby | 20:64b4bb57c3c6 | 492 | // pc.printf("--> Getting the current position: %d\r\n", position); |
Robby | 20:64b4bb57c3c6 | 493 | // |
Robby | 20:64b4bb57c3c6 | 494 | // /* Waiting. */ |
Robby | 20:64b4bb57c3c6 | 495 | // wait_ms(DELAY_1); |
Robby | 20:64b4bb57c3c6 | 496 | // |
Robby | 20:64b4bb57c3c6 | 497 | // /* Printing to the console. */ |
Robby | 20:64b4bb57c3c6 | 498 | // pc.printf("--> Moving forward %d steps.\r\n", STEPS_1); |
Robby | 20:64b4bb57c3c6 | 499 | // |
Robby | 20:64b4bb57c3c6 | 500 | // /* Moving. */ |
Robby | 20:64b4bb57c3c6 | 501 | // motors[0]->Move(StepperMotor::FWD, STEPS_1); |
Robby | 20:64b4bb57c3c6 | 502 | // |
Robby | 20:64b4bb57c3c6 | 503 | // /* Waiting while active. */ |
Robby | 20:64b4bb57c3c6 | 504 | // motors[0]->WaitWhileActive(); |
Robby | 20:64b4bb57c3c6 | 505 | // |
Robby | 20:64b4bb57c3c6 | 506 | // /* Getting the current position. */ |
Robby | 20:64b4bb57c3c6 | 507 | // position = motors[0]->GetPosition(); |
Robby | 20:64b4bb57c3c6 | 508 | // |
Robby | 20:64b4bb57c3c6 | 509 | // /* Printing to the console. */ |
Robby | 20:64b4bb57c3c6 | 510 | // pc.printf("--> Getting the current position: %d\r\n", position); |
Robby | 20:64b4bb57c3c6 | 511 | // |
Robby | 20:64b4bb57c3c6 | 512 | // /* Printing to the console. */ |
Robby | 20:64b4bb57c3c6 | 513 | // pc.printf("--> Marking the current position.\r\n"); |
Robby | 20:64b4bb57c3c6 | 514 | // |
Robby | 20:64b4bb57c3c6 | 515 | // /* Marking the current position. */ |
Robby | 20:64b4bb57c3c6 | 516 | // motors[0]->SetMark(); |
Robby | 20:64b4bb57c3c6 | 517 | // |
Robby | 20:64b4bb57c3c6 | 518 | // /* Waiting. */ |
Robby | 20:64b4bb57c3c6 | 519 | // wait_ms(DELAY_2); |
Robby | 20:64b4bb57c3c6 | 520 | // |
Robby | 20:64b4bb57c3c6 | 521 | // |
Robby | 20:64b4bb57c3c6 | 522 | // /*----- Running together for a certain amount of time. -----*/ |
Robby | 20:64b4bb57c3c6 | 523 | // |
Robby | 20:64b4bb57c3c6 | 524 | // /* Printing to the console. */ |
Robby | 20:64b4bb57c3c6 | 525 | // pc.printf("--> Running together for %d seconds.\r\n", DELAY_3 / 1000); |
Robby | 20:64b4bb57c3c6 | 526 | // |
Robby | 20:64b4bb57c3c6 | 527 | // /* Preparing each motor to perform a run at a specified speed. */ |
Robby | 20:64b4bb57c3c6 | 528 | // for (int m = 0; m < L6470DAISYCHAINSIZE; m++) |
Robby | 20:64b4bb57c3c6 | 529 | // motors[m]->PrepareRun(StepperMotor::BWD, 400); |
Robby | 20:64b4bb57c3c6 | 530 | // |
Robby | 20:64b4bb57c3c6 | 531 | // /* Performing the action on each motor at the same time. */ |
Robby | 20:64b4bb57c3c6 | 532 | // x_nucleo_ihm02a1->PerformPreparedActions(); |
Robby | 20:64b4bb57c3c6 | 533 | // |
Robby | 20:64b4bb57c3c6 | 534 | // /* Waiting. */ |
Robby | 20:64b4bb57c3c6 | 535 | // wait_ms(DELAY_3); |
Robby | 20:64b4bb57c3c6 | 536 | // |
Robby | 20:64b4bb57c3c6 | 537 | // |
Robby | 20:64b4bb57c3c6 | 538 | // /*----- Increasing the speed while running. -----*/ |
Robby | 20:64b4bb57c3c6 | 539 | // |
Robby | 20:64b4bb57c3c6 | 540 | // /* Preparing each motor to perform a run at a specified speed. */ |
Robby | 20:64b4bb57c3c6 | 541 | // for (int m = 0; m < L6470DAISYCHAINSIZE; m++) |
Robby | 20:64b4bb57c3c6 | 542 | // motors[m]->PrepareGetSpeed(); |
Robby | 20:64b4bb57c3c6 | 543 | // |
Robby | 20:64b4bb57c3c6 | 544 | // /* Performing the action on each motor at the same time. */ |
Robby | 20:64b4bb57c3c6 | 545 | // uint32_t* results = x_nucleo_ihm02a1->PerformPreparedActions(); |
Robby | 20:64b4bb57c3c6 | 546 | // |
Robby | 20:64b4bb57c3c6 | 547 | // /* Printing to the console. */ |
Robby | 20:64b4bb57c3c6 | 548 | // pc.printf(" Speed: M1 %d, M2 %d.\r\n", results[0], results[1]); |
Robby | 20:64b4bb57c3c6 | 549 | // |
Robby | 20:64b4bb57c3c6 | 550 | // /* Printing to the console. */ |
Robby | 20:64b4bb57c3c6 | 551 | // pc.printf("--> Doublig the speed while running again for %d seconds.\r\n", DELAY_3 / 1000); |
Robby | 20:64b4bb57c3c6 | 552 | // |
Robby | 20:64b4bb57c3c6 | 553 | // /* Preparing each motor to perform a run at a specified speed. */ |
Robby | 20:64b4bb57c3c6 | 554 | // for (int m = 0; m < L6470DAISYCHAINSIZE; m++) |
Robby | 20:64b4bb57c3c6 | 555 | // motors[m]->PrepareRun(StepperMotor::BWD, results[m] << 1); |
Robby | 20:64b4bb57c3c6 | 556 | // |
Robby | 20:64b4bb57c3c6 | 557 | // /* Performing the action on each motor at the same time. */ |
Robby | 20:64b4bb57c3c6 | 558 | // results = x_nucleo_ihm02a1->PerformPreparedActions(); |
Robby | 20:64b4bb57c3c6 | 559 | // |
Robby | 20:64b4bb57c3c6 | 560 | // /* Waiting. */ |
Robby | 20:64b4bb57c3c6 | 561 | // wait_ms(DELAY_3); |
Robby | 20:64b4bb57c3c6 | 562 | // |
Robby | 20:64b4bb57c3c6 | 563 | // /* Preparing each motor to perform a run at a specified speed. */ |
Robby | 20:64b4bb57c3c6 | 564 | // for (int m = 0; m < L6470DAISYCHAINSIZE; m++) |
Robby | 20:64b4bb57c3c6 | 565 | // motors[m]->PrepareGetSpeed(); |
Robby | 20:64b4bb57c3c6 | 566 | // |
Robby | 20:64b4bb57c3c6 | 567 | // /* Performing the action on each motor at the same time. */ |
Robby | 20:64b4bb57c3c6 | 568 | // results = x_nucleo_ihm02a1->PerformPreparedActions(); |
Robby | 20:64b4bb57c3c6 | 569 | // |
Robby | 20:64b4bb57c3c6 | 570 | // /* Printing to the console. */ |
Robby | 20:64b4bb57c3c6 | 571 | // pc.printf(" Speed: M1 %d, M2 %d.\r\n", results[0], results[1]); |
Robby | 20:64b4bb57c3c6 | 572 | // |
Robby | 20:64b4bb57c3c6 | 573 | // /* Waiting. */ |
Robby | 20:64b4bb57c3c6 | 574 | // wait_ms(DELAY_1); |
Robby | 20:64b4bb57c3c6 | 575 | // |
Robby | 20:64b4bb57c3c6 | 576 | // |
Robby | 20:64b4bb57c3c6 | 577 | // /*----- Hard Stop. -----*/ |
Robby | 20:64b4bb57c3c6 | 578 | // |
Robby | 20:64b4bb57c3c6 | 579 | // /* Printing to the console. */ |
Robby | 20:64b4bb57c3c6 | 580 | // pc.printf("--> Hard Stop.\r\n"); |
Robby | 20:64b4bb57c3c6 | 581 | // |
Robby | 20:64b4bb57c3c6 | 582 | // /* Preparing each motor to perform a hard stop. */ |
Robby | 20:64b4bb57c3c6 | 583 | // for (int m = 0; m < L6470DAISYCHAINSIZE; m++) |
Robby | 20:64b4bb57c3c6 | 584 | // motors[m]->PrepareHardStop(); |
Robby | 20:64b4bb57c3c6 | 585 | // |
Robby | 20:64b4bb57c3c6 | 586 | // /* Performing the action on each motor at the same time. */ |
Robby | 20:64b4bb57c3c6 | 587 | // x_nucleo_ihm02a1->PerformPreparedActions(); |
Robby | 20:64b4bb57c3c6 | 588 | // |
Robby | 20:64b4bb57c3c6 | 589 | // /* Waiting. */ |
Robby | 20:64b4bb57c3c6 | 590 | // wait_ms(DELAY_2); |
Robby | 20:64b4bb57c3c6 | 591 | // |
Robby | 20:64b4bb57c3c6 | 592 | // |
Robby | 20:64b4bb57c3c6 | 593 | // /*----- Doing a full revolution on each motor, one after the other. -----*/ |
Robby | 20:64b4bb57c3c6 | 594 | // |
Robby | 20:64b4bb57c3c6 | 595 | // /* Printing to the console. */ |
Robby | 20:64b4bb57c3c6 | 596 | // pc.printf("--> Doing a full revolution on each motor, one after the other.\r\n"); |
Robby | 20:64b4bb57c3c6 | 597 | // |
Robby | 20:64b4bb57c3c6 | 598 | // /* Doing a full revolution on each motor, one after the other. */ |
Robby | 20:64b4bb57c3c6 | 599 | // for (int m = 0; m < L6470DAISYCHAINSIZE; m++) |
Robby | 20:64b4bb57c3c6 | 600 | // for (int i = 0; i < MPR_1; i++) |
Robby | 20:64b4bb57c3c6 | 601 | // { |
Robby | 20:64b4bb57c3c6 | 602 | // /* Computing the number of steps. */ |
Robby | 20:64b4bb57c3c6 | 603 | // int steps = (int) (((int) init[m].fullstepsperrevolution * pow(2.0f, init[m].step_sel)) / MPR_1); |
Robby | 20:64b4bb57c3c6 | 604 | // |
Robby | 20:64b4bb57c3c6 | 605 | // /* Moving. */ |
Robby | 20:64b4bb57c3c6 | 606 | // motors[m]->Move(StepperMotor::FWD, steps); |
Robby | 20:64b4bb57c3c6 | 607 | // |
Robby | 20:64b4bb57c3c6 | 608 | // /* Waiting while active. */ |
Robby | 20:64b4bb57c3c6 | 609 | // motors[m]->WaitWhileActive(); |
Robby | 20:64b4bb57c3c6 | 610 | // |
Robby | 20:64b4bb57c3c6 | 611 | // /* Waiting. */ |
Robby | 20:64b4bb57c3c6 | 612 | // wait_ms(DELAY_1); |
Robby | 20:64b4bb57c3c6 | 613 | // } |
Robby | 20:64b4bb57c3c6 | 614 | // |
Robby | 20:64b4bb57c3c6 | 615 | // /* Waiting. */ |
Robby | 20:64b4bb57c3c6 | 616 | // wait_ms(DELAY_2); |
Robby | 20:64b4bb57c3c6 | 617 | // |
Robby | 20:64b4bb57c3c6 | 618 | // |
Robby | 20:64b4bb57c3c6 | 619 | // /*----- High Impedance State. -----*/ |
Robby | 20:64b4bb57c3c6 | 620 | // |
Robby | 20:64b4bb57c3c6 | 621 | // /* Printing to the console. */ |
Robby | 20:64b4bb57c3c6 | 622 | // pc.printf("--> High Impedance State.\r\n"); |
Robby | 20:64b4bb57c3c6 | 623 | // |
Robby | 20:64b4bb57c3c6 | 624 | // /* Preparing each motor to set High Impedance State. */ |
Robby | 20:64b4bb57c3c6 | 625 | // for (int m = 0; m < L6470DAISYCHAINSIZE; m++) |
Robby | 20:64b4bb57c3c6 | 626 | // motors[m]->PrepareHardHiZ(); |
Robby | 20:64b4bb57c3c6 | 627 | // |
Robby | 20:64b4bb57c3c6 | 628 | // /* Performing the action on each motor at the same time. */ |
Robby | 20:64b4bb57c3c6 | 629 | // x_nucleo_ihm02a1->PerformPreparedActions(); |
Robby | 20:64b4bb57c3c6 | 630 | // |
Robby | 20:64b4bb57c3c6 | 631 | // /* Waiting. */ |
Robby | 20:64b4bb57c3c6 | 632 | // wait_ms(DELAY_2); |
Davidroid | 0:5148e9486cf2 | 633 | } |