Steven Cheldelin / Mbed 2 deprecated STM32F303_GAMI_eMPC_motor_tester_v1

Dependencies:   RPCInterface mbed-dsp mbed

Committer:
rcflyair
Date:
Tue Dec 20 21:40:49 2016 +0000
Revision:
2:095a45ed34c5
Parent:
1:eabd95ed3f53
First motor tester commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
rcflyair 2:095a45ed34c5 1 // motor test firmware
rcflyair 2:095a45ed34c5 2 // STM32F303 version 1.0
rcflyair 2:095a45ed34c5 3 // 2016-12-19
rcflyair 2:095a45ed34c5 4 // Cheldelin
rcflyair 2:095a45ed34c5 5
rcflyair 2:095a45ed34c5 6 #include "mbed.h" // main mbed library
rcflyair 2:095a45ed34c5 7 #include "SerialRPCInterface.h" // mbed rpc library for serial rpc communication to Labview
rcflyair 2:095a45ed34c5 8 #include "dsp.h" // mbed cmsis arm library for PID control
rcflyair 2:095a45ed34c5 9 #include "STM32F303_L6470_v1.h" // L6470 stepper motor conrol interface for ST
rcflyair 2:095a45ed34c5 10
rcflyair 2:095a45ed34c5 11 #define OFF 0
rcflyair 2:095a45ed34c5 12 #define ON 1
rcflyair 0:5e49c3bc05f5 13
rcflyair 0:5e49c3bc05f5 14 // Global objects
rcflyair 2:095a45ed34c5 15 DigitalOut led_green(PB_3); // active low to turn on green part of RGB LED on FRDM-K22F
rcflyair 0:5e49c3bc05f5 16
rcflyair 2:095a45ed34c5 17 SerialRPCInterface rpc(USBTX, USBRX, 115200); // create serial rpc interface on usb virtual com port
rcflyair 2:095a45ed34c5 18 L6470 motor(PA_7, PA_6, PA_5, PA_4); // create motor object with mosi, miso, sclk, cs on NUCLEO STMF303
rcflyair 0:5e49c3bc05f5 19
rcflyair 2:095a45ed34c5 20 int direction; // global holds current direction to move motor, either OPEN or CLOSE
rcflyair 2:095a45ed34c5 21 float distance_1; // global holds current distance to move motor in steps
rcflyair 2:095a45ed34c5 22 float distance_2;
rcflyair 2:095a45ed34c5 23 float position = 0;
rcflyair 0:5e49c3bc05f5 24
rcflyair 1:eabd95ed3f53 25 // RPC variable assignments
rcflyair 2:095a45ed34c5 26 RPCVariable<int> rpc_position(&motor.position, "position");
rcflyair 2:095a45ed34c5 27 RPCVariable<int> rpc_range(&motor.range, "range");
rcflyair 2:095a45ed34c5 28 RPCVariable<int> rpc_direction(&direction, "direction");
rcflyair 2:095a45ed34c5 29 RPCVariable<float> rpc_distance_1(&distance_1, "distance_1");
rcflyair 2:095a45ed34c5 30 RPCVariable<float> rpc_distance_2(&distance_2, "distance_2");
rcflyair 0:5e49c3bc05f5 31
rcflyair 0:5e49c3bc05f5 32 int main(){
rcflyair 2:095a45ed34c5 33
rcflyair 2:095a45ed34c5 34 // Turn off LED
rcflyair 2:095a45ed34c5 35 led_green = OFF;
rcflyair 2:095a45ed34c5 36
rcflyair 2:095a45ed34c5 37 // delay to allow L6470 to power up
rcflyair 2:095a45ed34c5 38 // TODO: set up digital pin on BUSY and/or FLAG pin for feedback
rcflyair 2:095a45ed34c5 39 wait_ms(1000);
rcflyair 2:095a45ed34c5 40
rcflyair 2:095a45ed34c5 41 // Set the default motor parameters
rcflyair 2:095a45ed34c5 42 motor.SetDefaultParameters();
rcflyair 2:095a45ed34c5 43
rcflyair 2:095a45ed34c5 44 // troubleshooting???
rcflyair 0:5e49c3bc05f5 45 motor.HardStop();
rcflyair 2:095a45ed34c5 46 motor.SoftHIZ();
rcflyair 2:095a45ed34c5 47 wait_ms(1000);
rcflyair 2:095a45ed34c5 48
rcflyair 2:095a45ed34c5 49 // set step mode
rcflyair 2:095a45ed34c5 50 uint32_t StepMode = motor.GetParameter(STEP_MODE);
rcflyair 2:095a45ed34c5 51 StepMode = StepMode & 0xfffffff0; // turn off microstepping
rcflyair 2:095a45ed34c5 52 //StepMode = StepMode + 0x00; // new step mode 0x00 thru 0x07
rcflyair 2:095a45ed34c5 53 motor.SetParameter(STEP_MODE, StepMode); // set step mode
rcflyair 1:eabd95ed3f53 54 motor.ResetPosition();
rcflyair 1:eabd95ed3f53 55
rcflyair 2:095a45ed34c5 56 // Main loop
rcflyair 0:5e49c3bc05f5 57 while(1){
rcflyair 2:095a45ed34c5 58 uint16_t MaxSpeed = 0x6f;
rcflyair 2:095a45ed34c5 59 uint16_t MaxTime = 1400;
rcflyair 1:eabd95ed3f53 60
rcflyair 2:095a45ed34c5 61 // close full speed
rcflyair 2:095a45ed34c5 62 led_green = ON;
rcflyair 2:095a45ed34c5 63 motor.SetParameter(MAX_SPEED, MaxSpeed);
rcflyair 2:095a45ed34c5 64 //motor.SpeedRun(CLOSE, 0x0010);
rcflyair 2:095a45ed34c5 65 motor.Move(CLOSE, 1400);
rcflyair 2:095a45ed34c5 66 wait_ms(MaxTime);
rcflyair 2:095a45ed34c5 67
rcflyair 2:095a45ed34c5 68 // open full speed
rcflyair 2:095a45ed34c5 69 led_green = OFF;
rcflyair 2:095a45ed34c5 70 motor.SetParameter(MAX_SPEED, MaxSpeed);
rcflyair 2:095a45ed34c5 71 //motor.SpeedRun(CLOSE, 0x0004ff);
rcflyair 2:095a45ed34c5 72 motor.Move(OPEN, 1400);
rcflyair 2:095a45ed34c5 73 wait_ms(MaxTime);
rcflyair 1:eabd95ed3f53 74
rcflyair 2:095a45ed34c5 75 // close half speed
rcflyair 2:095a45ed34c5 76 led_green = ON;
rcflyair 2:095a45ed34c5 77 motor.SetParameter(MAX_SPEED, MaxSpeed >> 1);
rcflyair 2:095a45ed34c5 78 //motor.SpeedRun(CLOSE, 0x0010);
rcflyair 2:095a45ed34c5 79 motor.Move(CLOSE, 1400);
rcflyair 2:095a45ed34c5 80 wait_ms(MaxTime << 1);
rcflyair 2:095a45ed34c5 81
rcflyair 2:095a45ed34c5 82 // open half speed
rcflyair 2:095a45ed34c5 83 led_green = OFF;
rcflyair 2:095a45ed34c5 84 motor.SetParameter(MAX_SPEED, MaxSpeed >> 1);
rcflyair 2:095a45ed34c5 85 //motor.SpeedRun(CLOSE, 0x0004ff);
rcflyair 2:095a45ed34c5 86 motor.Move(OPEN, 1400);
rcflyair 2:095a45ed34c5 87 wait_ms(MaxTime << 1);
rcflyair 2:095a45ed34c5 88
rcflyair 2:095a45ed34c5 89 // close quarter speed
rcflyair 2:095a45ed34c5 90 led_green = ON;
rcflyair 2:095a45ed34c5 91 motor.SetParameter(MAX_SPEED, MaxSpeed >> 2);
rcflyair 2:095a45ed34c5 92 //motor.SpeedRun(CLOSE, 0x0010);
rcflyair 2:095a45ed34c5 93 motor.Move(CLOSE, 1400);
rcflyair 2:095a45ed34c5 94 wait_ms(MaxTime << 2);
rcflyair 1:eabd95ed3f53 95
rcflyair 2:095a45ed34c5 96 // open quarter speed
rcflyair 2:095a45ed34c5 97 led_green = OFF;
rcflyair 2:095a45ed34c5 98 motor.SetParameter(MAX_SPEED, MaxSpeed >> 2);
rcflyair 2:095a45ed34c5 99 //motor.SpeedRun(CLOSE, 0x0004ff);
rcflyair 2:095a45ed34c5 100 motor.Move(OPEN, 1400);
rcflyair 2:095a45ed34c5 101 wait_ms(MaxTime << 2);
rcflyair 2:095a45ed34c5 102
rcflyair 2:095a45ed34c5 103 uint8_t KVal = 0x05;
rcflyair 2:095a45ed34c5 104 motor.SetLowSpeedOpt(OFF); // turn of low speed optimization
rcflyair 2:095a45ed34c5 105 // close eighth speed
rcflyair 2:095a45ed34c5 106 led_green = ON;
rcflyair 2:095a45ed34c5 107 motor.SetParameter(KVAL_RUN, KVal);
rcflyair 2:095a45ed34c5 108 motor.SetParameter(MAX_SPEED, MaxSpeed >> 3);
rcflyair 2:095a45ed34c5 109 //motor.SpeedRun(CLOSE, 0x0010);
rcflyair 2:095a45ed34c5 110 motor.SetParameter(KVAL_RUN, 0x0F); // increase motor drive at slowest speed
rcflyair 2:095a45ed34c5 111 motor.Move(CLOSE, 1400);
rcflyair 2:095a45ed34c5 112 motor.SetParameter(KVAL_RUN, KVal); // set motor drive back to default
rcflyair 2:095a45ed34c5 113 wait_ms(MaxTime << 3);
rcflyair 1:eabd95ed3f53 114
rcflyair 2:095a45ed34c5 115 // open eighth speed
rcflyair 2:095a45ed34c5 116 led_green = OFF;
rcflyair 2:095a45ed34c5 117 motor.SetParameter(MAX_SPEED, MaxSpeed >> 3); // increase motor drive at slowest speed
rcflyair 2:095a45ed34c5 118 //motor.SpeedRun(CLOSE, 0x0004ff);
rcflyair 2:095a45ed34c5 119 motor.SetParameter(KVAL_RUN, 0x0F); // set motor drive back to default
rcflyair 2:095a45ed34c5 120 motor.Move(OPEN, 1400);
rcflyair 2:095a45ed34c5 121 motor.SetParameter(KVAL_RUN, KVal);
rcflyair 2:095a45ed34c5 122 wait_ms(MaxTime << 3);
rcflyair 1:eabd95ed3f53 123
rcflyair 2:095a45ed34c5 124 led_green = ON;
rcflyair 2:095a45ed34c5 125 KVal = 0x10;
rcflyair 2:095a45ed34c5 126 motor.SetLowSpeedOpt(ON); // turn of low speed optimization
rcflyair 2:095a45ed34c5 127 // close eighth speed
rcflyair 2:095a45ed34c5 128 motor.SetParameter(KVAL_RUN, KVal);
rcflyair 2:095a45ed34c5 129 motor.SetParameter(MAX_SPEED, MaxSpeed >> 3);
rcflyair 2:095a45ed34c5 130 //motor.SpeedRun(CLOSE, 0x0010);
rcflyair 2:095a45ed34c5 131 motor.SetParameter(KVAL_RUN, 0x0F); // increase motor drive at slowest speed
rcflyair 2:095a45ed34c5 132 motor.Move(CLOSE, 1400);
rcflyair 2:095a45ed34c5 133 motor.SetParameter(KVAL_RUN, KVal); // set motor drive back to default
rcflyair 2:095a45ed34c5 134 wait_ms(MaxTime << 3);
rcflyair 2:095a45ed34c5 135
rcflyair 2:095a45ed34c5 136 // open eighth speed
rcflyair 2:095a45ed34c5 137 led_green = OFF;
rcflyair 2:095a45ed34c5 138 motor.SetParameter(MAX_SPEED, MaxSpeed >> 3); // increase motor drive at slowest speed
rcflyair 2:095a45ed34c5 139 //motor.SpeedRun(CLOSE, 0x0004ff);
rcflyair 2:095a45ed34c5 140 motor.SetParameter(KVAL_RUN, 0x0F); // set motor drive back to default
rcflyair 2:095a45ed34c5 141 motor.Move(OPEN, 1400);
rcflyair 2:095a45ed34c5 142 motor.SetParameter(KVAL_RUN, KVal);
rcflyair 2:095a45ed34c5 143 wait_ms(MaxTime << 3);
rcflyair 2:095a45ed34c5 144 led_green = 0;
rcflyair 2:095a45ed34c5 145
rcflyair 0:5e49c3bc05f5 146 }
rcflyair 1:eabd95ed3f53 147 }