Test

Dependencies:   X_NUCLEO_IHM02A1 mbed

Fork of HelloWorld_IHM02A1 by ST

Committer:
Robby
Date:
Thu May 10 02:12:07 2018 +0000
Revision:
20:64b4bb57c3c6
Parent:
18:591a007effc2
Test

Who changed what in which revision?

UserRevisionLine numberNew 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>&copy; 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 }