Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: RPCInterface mbed-dsp mbed
main.cpp@2:095a45ed34c5, 2016-12-20 (annotated)
- 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?
| User | Revision | Line number | New 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 | } |