Senior design censored code to run freescale motor with X-NUCLEO-IM07M1. REFACTORED

Dependencies:   mbed

Fork of Blue_Board_Test_2 by Brad VanderWilp

Committer:
BVanderWilp
Date:
Wed Apr 06 19:41:25 2016 +0000
Revision:
1:69c06d3676fd
Parent:
0:d445abf9a8e9
Child:
2:0fbba327c44f
rough sensored implementation, 50-50 chance to run smooth after ramp;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
BVanderWilp 0:d445abf9a8e9 1 #include "mbed.h"
BVanderWilp 0:d445abf9a8e9 2
BVanderWilp 1:69c06d3676fd 3 PwmOut phaseA(PA_8); //Out1, Green
BVanderWilp 0:d445abf9a8e9 4 DigitalOut phaseAEN(PC_10);
BVanderWilp 1:69c06d3676fd 5 PwmOut phaseB(PA_9); //Out2, Blue
BVanderWilp 0:d445abf9a8e9 6 DigitalOut phaseBEN(PC_11);
BVanderWilp 1:69c06d3676fd 7 PwmOut phaseC(PA_10); //Out3, White
BVanderWilp 0:d445abf9a8e9 8 DigitalOut phaseCEN(PC_12);
BVanderWilp 0:d445abf9a8e9 9
BVanderWilp 0:d445abf9a8e9 10 InterruptIn button(USER_BUTTON);
BVanderWilp 0:d445abf9a8e9 11
BVanderWilp 0:d445abf9a8e9 12 DigitalOut redLed(PB_2);
BVanderWilp 0:d445abf9a8e9 13 DigitalOut led(LED1);
BVanderWilp 1:69c06d3676fd 14 InterruptIn hallA(PA_15); //H1, Green
BVanderWilp 1:69c06d3676fd 15 InterruptIn hallB(PB_3); //H2, Blue
BVanderWilp 1:69c06d3676fd 16 InterruptIn hallC(PB_10); //H3, White
BVanderWilp 0:d445abf9a8e9 17
BVanderWilp 1:69c06d3676fd 18 Ticker interrupt;
BVanderWilp 0:d445abf9a8e9 19
BVanderWilp 1:69c06d3676fd 20 float pwmDuty = 0.5;
BVanderWilp 0:d445abf9a8e9 21 int stall = 0;
BVanderWilp 0:d445abf9a8e9 22 void activate()
BVanderWilp 0:d445abf9a8e9 23 {
BVanderWilp 0:d445abf9a8e9 24 stall = 1;
BVanderWilp 0:d445abf9a8e9 25 }
BVanderWilp 0:d445abf9a8e9 26
BVanderWilp 1:69c06d3676fd 27 void Crise() //state1, A0 B- C+
BVanderWilp 0:d445abf9a8e9 28 {
BVanderWilp 0:d445abf9a8e9 29 phaseAEN = 0;
BVanderWilp 1:69c06d3676fd 30 phaseBEN = 1;
BVanderWilp 1:69c06d3676fd 31
BVanderWilp 1:69c06d3676fd 32 redLed = ! redLed;
BVanderWilp 1:69c06d3676fd 33 }
BVanderWilp 1:69c06d3676fd 34
BVanderWilp 1:69c06d3676fd 35 void Bfall() //state2, A+ B- C0
BVanderWilp 1:69c06d3676fd 36 {
BVanderWilp 1:69c06d3676fd 37 phaseCEN = 0;
BVanderWilp 1:69c06d3676fd 38 phaseC.write(0);
BVanderWilp 1:69c06d3676fd 39 phaseA.write(pwmDuty);
BVanderWilp 1:69c06d3676fd 40 phaseAEN = 1;
BVanderWilp 1:69c06d3676fd 41 }
BVanderWilp 1:69c06d3676fd 42
BVanderWilp 1:69c06d3676fd 43 void Arise() //state3, A+ B0 C-
BVanderWilp 1:69c06d3676fd 44 {
BVanderWilp 1:69c06d3676fd 45 phaseBEN = 0;
BVanderWilp 1:69c06d3676fd 46 phaseCEN = 1;
BVanderWilp 1:69c06d3676fd 47 }
BVanderWilp 1:69c06d3676fd 48
BVanderWilp 1:69c06d3676fd 49 void Cfall() //state4, A0 B+ C-
BVanderWilp 1:69c06d3676fd 50 {
BVanderWilp 1:69c06d3676fd 51 phaseAEN = 0;
BVanderWilp 0:d445abf9a8e9 52 phaseA.write(0);
BVanderWilp 0:d445abf9a8e9 53 phaseB.write(pwmDuty);
BVanderWilp 0:d445abf9a8e9 54 phaseBEN = 1;
BVanderWilp 1:69c06d3676fd 55
BVanderWilp 1:69c06d3676fd 56 redLed = ! redLed;
BVanderWilp 0:d445abf9a8e9 57 }
BVanderWilp 0:d445abf9a8e9 58
BVanderWilp 1:69c06d3676fd 59 void Brise() //state5, A- B+ C0
BVanderWilp 0:d445abf9a8e9 60 {
BVanderWilp 0:d445abf9a8e9 61 phaseCEN = 0;
BVanderWilp 0:d445abf9a8e9 62 phaseAEN = 1;
BVanderWilp 0:d445abf9a8e9 63 }
BVanderWilp 0:d445abf9a8e9 64
BVanderWilp 1:69c06d3676fd 65 void Afall() //state5, A- B0 C+
BVanderWilp 0:d445abf9a8e9 66 {
BVanderWilp 0:d445abf9a8e9 67 phaseBEN = 0;
BVanderWilp 0:d445abf9a8e9 68 phaseB.write(0);
BVanderWilp 0:d445abf9a8e9 69 phaseC.write(pwmDuty);
BVanderWilp 0:d445abf9a8e9 70 phaseCEN = 1;
BVanderWilp 0:d445abf9a8e9 71 }
BVanderWilp 0:d445abf9a8e9 72
BVanderWilp 1:69c06d3676fd 73 int count = 0;
BVanderWilp 1:69c06d3676fd 74 void intcall(){
BVanderWilp 1:69c06d3676fd 75 count = (count + 1) % 6;
BVanderWilp 1:69c06d3676fd 76
BVanderWilp 1:69c06d3676fd 77 if(count == 0) //B+, C-
BVanderWilp 1:69c06d3676fd 78 {
BVanderWilp 1:69c06d3676fd 79 phaseAEN = 0;
BVanderWilp 1:69c06d3676fd 80 phaseA.write(0);
BVanderWilp 1:69c06d3676fd 81 phaseB.write(pwmDuty);
BVanderWilp 1:69c06d3676fd 82 phaseBEN = 1;
BVanderWilp 1:69c06d3676fd 83 }
BVanderWilp 1:69c06d3676fd 84 else if(count == 1) //B+, A-
BVanderWilp 1:69c06d3676fd 85 {
BVanderWilp 1:69c06d3676fd 86 phaseCEN = 0;
BVanderWilp 1:69c06d3676fd 87 phaseAEN = 1;
BVanderWilp 1:69c06d3676fd 88 }
BVanderWilp 1:69c06d3676fd 89 else if(count == 2) //C+, A-
BVanderWilp 1:69c06d3676fd 90 {
BVanderWilp 1:69c06d3676fd 91 phaseBEN = 0;
BVanderWilp 1:69c06d3676fd 92 phaseB.write(0);
BVanderWilp 1:69c06d3676fd 93 phaseC.write(pwmDuty);
BVanderWilp 1:69c06d3676fd 94 phaseCEN = 1;
BVanderWilp 1:69c06d3676fd 95 }
BVanderWilp 1:69c06d3676fd 96 else if(count == 3) //C+, B-
BVanderWilp 1:69c06d3676fd 97 {
BVanderWilp 1:69c06d3676fd 98 phaseAEN = 0;
BVanderWilp 1:69c06d3676fd 99 phaseBEN = 1;
BVanderWilp 1:69c06d3676fd 100 }
BVanderWilp 1:69c06d3676fd 101 else if(count == 4) //A+, B-
BVanderWilp 1:69c06d3676fd 102 {
BVanderWilp 1:69c06d3676fd 103 phaseCEN = 0;
BVanderWilp 1:69c06d3676fd 104 phaseC.write(0);
BVanderWilp 1:69c06d3676fd 105 phaseA.write(pwmDuty);
BVanderWilp 1:69c06d3676fd 106 phaseAEN = 1;
BVanderWilp 1:69c06d3676fd 107 }
BVanderWilp 1:69c06d3676fd 108 else if(count == 5) //A+, C-
BVanderWilp 1:69c06d3676fd 109 {
BVanderWilp 1:69c06d3676fd 110 phaseBEN = 0;
BVanderWilp 1:69c06d3676fd 111 phaseCEN = 1;
BVanderWilp 1:69c06d3676fd 112 }
BVanderWilp 0:d445abf9a8e9 113 }
BVanderWilp 0:d445abf9a8e9 114
BVanderWilp 0:d445abf9a8e9 115
BVanderWilp 0:d445abf9a8e9 116 int main() {
BVanderWilp 1:69c06d3676fd 117 //wait until button push to start
BVanderWilp 0:d445abf9a8e9 118 button.rise(&activate);
BVanderWilp 0:d445abf9a8e9 119 while(stall == 0) {
BVanderWilp 0:d445abf9a8e9 120 led = !led;
BVanderWilp 0:d445abf9a8e9 121 wait(2);
BVanderWilp 0:d445abf9a8e9 122 }
BVanderWilp 1:69c06d3676fd 123
BVanderWilp 1:69c06d3676fd 124 //startup with open loop
BVanderWilp 0:d445abf9a8e9 125 phaseA.period_us(10);
BVanderWilp 0:d445abf9a8e9 126 phaseB.period_us(10);
BVanderWilp 0:d445abf9a8e9 127 phaseC.period_us(10);
BVanderWilp 1:69c06d3676fd 128 interrupt.attach(&intcall, .015);
BVanderWilp 1:69c06d3676fd 129
BVanderWilp 0:d445abf9a8e9 130
BVanderWilp 0:d445abf9a8e9 131 phaseA.write(0);
BVanderWilp 0:d445abf9a8e9 132 phaseB.write(pwmDuty);
BVanderWilp 0:d445abf9a8e9 133 phaseC.write(0);
BVanderWilp 0:d445abf9a8e9 134
BVanderWilp 0:d445abf9a8e9 135 phaseAEN = 0;
BVanderWilp 0:d445abf9a8e9 136 phaseBEN = 1;
BVanderWilp 0:d445abf9a8e9 137 phaseCEN = 1;
BVanderWilp 0:d445abf9a8e9 138
BVanderWilp 1:69c06d3676fd 139 for(int i = 0; i < 4; i++)
BVanderWilp 1:69c06d3676fd 140 {
BVanderWilp 1:69c06d3676fd 141 i++;
BVanderWilp 1:69c06d3676fd 142 led = !led;
BVanderWilp 1:69c06d3676fd 143 wait(0.5);
BVanderWilp 1:69c06d3676fd 144 }
BVanderWilp 1:69c06d3676fd 145 interrupt.detach();
BVanderWilp 1:69c06d3676fd 146 //begin sensored mode
BVanderWilp 1:69c06d3676fd 147
BVanderWilp 1:69c06d3676fd 148 // hallA.fall(&Arise);
BVanderWilp 1:69c06d3676fd 149 // hallA.rise(&Afall);
BVanderWilp 1:69c06d3676fd 150 // hallB.fall(&Brise);
BVanderWilp 1:69c06d3676fd 151 // hallB.rise(&Bfall);
BVanderWilp 1:69c06d3676fd 152 // hallC.fall(&Crise);
BVanderWilp 1:69c06d3676fd 153 // hallC.rise(&Cfall);
BVanderWilp 1:69c06d3676fd 154
BVanderWilp 1:69c06d3676fd 155 hallA.fall(&Afall);
BVanderWilp 1:69c06d3676fd 156 hallA.rise(&Arise);
BVanderWilp 1:69c06d3676fd 157 hallB.fall(&Bfall);
BVanderWilp 1:69c06d3676fd 158 hallB.rise(&Brise);
BVanderWilp 1:69c06d3676fd 159 hallC.fall(&Cfall);
BVanderWilp 1:69c06d3676fd 160 hallC.rise(&Crise);
BVanderWilp 1:69c06d3676fd 161
BVanderWilp 0:d445abf9a8e9 162 while(1) {
BVanderWilp 0:d445abf9a8e9 163 led = !led;
BVanderWilp 0:d445abf9a8e9 164 wait(0.2);
BVanderWilp 0:d445abf9a8e9 165 }
BVanderWilp 0:d445abf9a8e9 166 }