STM32F302R8 with Konrad's inverter boards for senior design.

Dependencies:   mbed

Fork of Blue_Board_Ticker by Brad VanderWilp

Committer:
BVanderWilp
Date:
Wed Apr 06 20:36:41 2016 +0000
Revision:
5:6110655353ad
Parent:
4:ab4d51b5b1c8
Child:
6:e401c592d2c3
Added variable speed with potentiometer;

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 5:6110655353ad 10 AnalogIn pot(PB_1);
BVanderWilp 5:6110655353ad 11
BVanderWilp 0:d445abf9a8e9 12 InterruptIn button(USER_BUTTON);
BVanderWilp 0:d445abf9a8e9 13
BVanderWilp 0:d445abf9a8e9 14 DigitalOut redLed(PB_2);
BVanderWilp 0:d445abf9a8e9 15 DigitalOut led(LED1);
BVanderWilp 1:69c06d3676fd 16 InterruptIn hallA(PA_15); //H1, Green
BVanderWilp 1:69c06d3676fd 17 InterruptIn hallB(PB_3); //H2, Blue
BVanderWilp 1:69c06d3676fd 18 InterruptIn hallC(PB_10); //H3, White
BVanderWilp 0:d445abf9a8e9 19
BVanderWilp 1:69c06d3676fd 20 Ticker interrupt;
BVanderWilp 0:d445abf9a8e9 21
BVanderWilp 5:6110655353ad 22 float pwmMax = 0.9;
BVanderWilp 5:6110655353ad 23 float pwmDuty;
BVanderWilp 0:d445abf9a8e9 24 int stall = 0;
BVanderWilp 0:d445abf9a8e9 25 void activate()
BVanderWilp 0:d445abf9a8e9 26 {
BVanderWilp 0:d445abf9a8e9 27 stall = 1;
BVanderWilp 0:d445abf9a8e9 28 }
BVanderWilp 0:d445abf9a8e9 29
BVanderWilp 1:69c06d3676fd 30 void Crise() //state1, A0 B- C+
BVanderWilp 0:d445abf9a8e9 31 {
BVanderWilp 0:d445abf9a8e9 32 phaseAEN = 0;
BVanderWilp 1:69c06d3676fd 33 phaseBEN = 1;
BVanderWilp 1:69c06d3676fd 34
BVanderWilp 3:2bcc36fe4de5 35 phaseC.write(pwmDuty);
BVanderWilp 3:2bcc36fe4de5 36 phaseCEN = 1;
BVanderWilp 1:69c06d3676fd 37 redLed = ! redLed;
BVanderWilp 1:69c06d3676fd 38 }
BVanderWilp 1:69c06d3676fd 39
BVanderWilp 1:69c06d3676fd 40 void Bfall() //state2, A+ B- C0
BVanderWilp 1:69c06d3676fd 41 {
BVanderWilp 1:69c06d3676fd 42 phaseCEN = 0;
BVanderWilp 1:69c06d3676fd 43 phaseC.write(0);
BVanderWilp 1:69c06d3676fd 44 phaseA.write(pwmDuty);
BVanderWilp 1:69c06d3676fd 45 phaseAEN = 1;
BVanderWilp 3:2bcc36fe4de5 46
BVanderWilp 3:2bcc36fe4de5 47 phaseBEN = 1;
BVanderWilp 1:69c06d3676fd 48 }
BVanderWilp 1:69c06d3676fd 49
BVanderWilp 1:69c06d3676fd 50 void Arise() //state3, A+ B0 C-
BVanderWilp 1:69c06d3676fd 51 {
BVanderWilp 1:69c06d3676fd 52 phaseBEN = 0;
BVanderWilp 1:69c06d3676fd 53 phaseCEN = 1;
BVanderWilp 3:2bcc36fe4de5 54
BVanderWilp 3:2bcc36fe4de5 55 phaseA.write(pwmDuty);
BVanderWilp 3:2bcc36fe4de5 56 phaseAEN = 1;
BVanderWilp 1:69c06d3676fd 57 }
BVanderWilp 1:69c06d3676fd 58
BVanderWilp 1:69c06d3676fd 59 void Cfall() //state4, A0 B+ C-
BVanderWilp 1:69c06d3676fd 60 {
BVanderWilp 1:69c06d3676fd 61 phaseAEN = 0;
BVanderWilp 0:d445abf9a8e9 62 phaseA.write(0);
BVanderWilp 0:d445abf9a8e9 63 phaseB.write(pwmDuty);
BVanderWilp 0:d445abf9a8e9 64 phaseBEN = 1;
BVanderWilp 1:69c06d3676fd 65
BVanderWilp 3:2bcc36fe4de5 66 phaseCEN = 1;
BVanderWilp 1:69c06d3676fd 67 redLed = ! redLed;
BVanderWilp 0:d445abf9a8e9 68 }
BVanderWilp 0:d445abf9a8e9 69
BVanderWilp 1:69c06d3676fd 70 void Brise() //state5, A- B+ C0
BVanderWilp 0:d445abf9a8e9 71 {
BVanderWilp 0:d445abf9a8e9 72 phaseCEN = 0;
BVanderWilp 0:d445abf9a8e9 73 phaseAEN = 1;
BVanderWilp 3:2bcc36fe4de5 74
BVanderWilp 3:2bcc36fe4de5 75 phaseB.write(pwmDuty);
BVanderWilp 3:2bcc36fe4de5 76 phaseBEN = 1;
BVanderWilp 0:d445abf9a8e9 77 }
BVanderWilp 0:d445abf9a8e9 78
BVanderWilp 1:69c06d3676fd 79 void Afall() //state5, A- B0 C+
BVanderWilp 0:d445abf9a8e9 80 {
BVanderWilp 0:d445abf9a8e9 81 phaseBEN = 0;
BVanderWilp 0:d445abf9a8e9 82 phaseB.write(0);
BVanderWilp 0:d445abf9a8e9 83 phaseC.write(pwmDuty);
BVanderWilp 0:d445abf9a8e9 84 phaseCEN = 1;
BVanderWilp 3:2bcc36fe4de5 85
BVanderWilp 3:2bcc36fe4de5 86 phaseAEN = 1;
BVanderWilp 0:d445abf9a8e9 87 }
BVanderWilp 0:d445abf9a8e9 88
BVanderWilp 1:69c06d3676fd 89 int count = 0;
BVanderWilp 1:69c06d3676fd 90 void intcall(){
BVanderWilp 1:69c06d3676fd 91 count = (count + 1) % 6;
BVanderWilp 1:69c06d3676fd 92
BVanderWilp 1:69c06d3676fd 93 if(count == 0) //B+, C-
BVanderWilp 1:69c06d3676fd 94 {
BVanderWilp 1:69c06d3676fd 95 phaseAEN = 0;
BVanderWilp 1:69c06d3676fd 96 phaseA.write(0);
BVanderWilp 1:69c06d3676fd 97 phaseB.write(pwmDuty);
BVanderWilp 1:69c06d3676fd 98 phaseBEN = 1;
BVanderWilp 1:69c06d3676fd 99 }
BVanderWilp 1:69c06d3676fd 100 else if(count == 1) //B+, A-
BVanderWilp 1:69c06d3676fd 101 {
BVanderWilp 1:69c06d3676fd 102 phaseCEN = 0;
BVanderWilp 1:69c06d3676fd 103 phaseAEN = 1;
BVanderWilp 1:69c06d3676fd 104 }
BVanderWilp 1:69c06d3676fd 105 else if(count == 2) //C+, A-
BVanderWilp 1:69c06d3676fd 106 {
BVanderWilp 1:69c06d3676fd 107 phaseBEN = 0;
BVanderWilp 1:69c06d3676fd 108 phaseB.write(0);
BVanderWilp 1:69c06d3676fd 109 phaseC.write(pwmDuty);
BVanderWilp 1:69c06d3676fd 110 phaseCEN = 1;
BVanderWilp 1:69c06d3676fd 111 }
BVanderWilp 1:69c06d3676fd 112 else if(count == 3) //C+, B-
BVanderWilp 1:69c06d3676fd 113 {
BVanderWilp 1:69c06d3676fd 114 phaseAEN = 0;
BVanderWilp 1:69c06d3676fd 115 phaseBEN = 1;
BVanderWilp 1:69c06d3676fd 116 }
BVanderWilp 1:69c06d3676fd 117 else if(count == 4) //A+, B-
BVanderWilp 1:69c06d3676fd 118 {
BVanderWilp 1:69c06d3676fd 119 phaseCEN = 0;
BVanderWilp 1:69c06d3676fd 120 phaseC.write(0);
BVanderWilp 1:69c06d3676fd 121 phaseA.write(pwmDuty);
BVanderWilp 1:69c06d3676fd 122 phaseAEN = 1;
BVanderWilp 1:69c06d3676fd 123 }
BVanderWilp 1:69c06d3676fd 124 else if(count == 5) //A+, C-
BVanderWilp 1:69c06d3676fd 125 {
BVanderWilp 1:69c06d3676fd 126 phaseBEN = 0;
BVanderWilp 1:69c06d3676fd 127 phaseCEN = 1;
BVanderWilp 1:69c06d3676fd 128 }
BVanderWilp 0:d445abf9a8e9 129 }
BVanderWilp 0:d445abf9a8e9 130
BVanderWilp 0:d445abf9a8e9 131
BVanderWilp 0:d445abf9a8e9 132 int main() {
BVanderWilp 1:69c06d3676fd 133 //wait until button push to start
BVanderWilp 0:d445abf9a8e9 134 button.rise(&activate);
BVanderWilp 0:d445abf9a8e9 135 while(stall == 0) {
BVanderWilp 0:d445abf9a8e9 136 led = !led;
BVanderWilp 4:ab4d51b5b1c8 137 wait(1);
BVanderWilp 0:d445abf9a8e9 138 }
BVanderWilp 1:69c06d3676fd 139
BVanderWilp 3:2bcc36fe4de5 140 // //startup with open loop
BVanderWilp 3:2bcc36fe4de5 141 // phaseA.period_us(10);
BVanderWilp 3:2bcc36fe4de5 142 // phaseB.period_us(10);
BVanderWilp 3:2bcc36fe4de5 143 // phaseC.period_us(10);
BVanderWilp 3:2bcc36fe4de5 144 // interrupt.attach(&intcall, .01);
BVanderWilp 3:2bcc36fe4de5 145 //
BVanderWilp 3:2bcc36fe4de5 146 //
BVanderWilp 3:2bcc36fe4de5 147 // phaseA.write(0);
BVanderWilp 3:2bcc36fe4de5 148 // phaseB.write(pwmDuty);
BVanderWilp 3:2bcc36fe4de5 149 // phaseC.write(0);
BVanderWilp 3:2bcc36fe4de5 150 //
BVanderWilp 3:2bcc36fe4de5 151 // phaseAEN = 0;
BVanderWilp 3:2bcc36fe4de5 152 // phaseBEN = 1;
BVanderWilp 3:2bcc36fe4de5 153 // phaseCEN = 1;
BVanderWilp 3:2bcc36fe4de5 154 //
BVanderWilp 3:2bcc36fe4de5 155 // for(int i = 0; i < 4; i++)
BVanderWilp 3:2bcc36fe4de5 156 // {
BVanderWilp 3:2bcc36fe4de5 157 // i++;
BVanderWilp 3:2bcc36fe4de5 158 // led = !led;
BVanderWilp 3:2bcc36fe4de5 159 // wait(0.5);
BVanderWilp 3:2bcc36fe4de5 160 // }
BVanderWilp 3:2bcc36fe4de5 161 // interrupt.detach();
BVanderWilp 3:2bcc36fe4de5 162
BVanderWilp 5:6110655353ad 163 pwmDuty = pot.read() * pwmMax;
BVanderWilp 5:6110655353ad 164
BVanderWilp 0:d445abf9a8e9 165 phaseA.period_us(10);
BVanderWilp 0:d445abf9a8e9 166 phaseB.period_us(10);
BVanderWilp 0:d445abf9a8e9 167 phaseC.period_us(10);
BVanderWilp 0:d445abf9a8e9 168
BVanderWilp 0:d445abf9a8e9 169 phaseA.write(0);
BVanderWilp 3:2bcc36fe4de5 170 phaseB.write(0);
BVanderWilp 0:d445abf9a8e9 171 phaseC.write(0);
BVanderWilp 0:d445abf9a8e9 172
BVanderWilp 0:d445abf9a8e9 173 phaseAEN = 0;
BVanderWilp 3:2bcc36fe4de5 174 phaseBEN = 0;
BVanderWilp 3:2bcc36fe4de5 175 phaseCEN = 0;
BVanderWilp 3:2bcc36fe4de5 176 //begin sensored mode
BVanderWilp 1:69c06d3676fd 177 hallA.fall(&Afall);
BVanderWilp 1:69c06d3676fd 178 hallA.rise(&Arise);
BVanderWilp 1:69c06d3676fd 179 hallB.fall(&Bfall);
BVanderWilp 1:69c06d3676fd 180 hallB.rise(&Brise);
BVanderWilp 1:69c06d3676fd 181 hallC.fall(&Cfall);
BVanderWilp 1:69c06d3676fd 182 hallC.rise(&Crise);
BVanderWilp 1:69c06d3676fd 183
BVanderWilp 3:2bcc36fe4de5 184 int h1 = hallA.read();
BVanderWilp 3:2bcc36fe4de5 185 int h2 = hallB.read();
BVanderWilp 3:2bcc36fe4de5 186 int h3 = hallC.read();
BVanderWilp 3:2bcc36fe4de5 187 //check where we start
BVanderWilp 3:2bcc36fe4de5 188 if(h1 == 0 && h2 == 1 && h3 == 1) //state1
BVanderWilp 3:2bcc36fe4de5 189 {
BVanderWilp 3:2bcc36fe4de5 190 Crise();
BVanderWilp 3:2bcc36fe4de5 191 Bfall();
BVanderWilp 3:2bcc36fe4de5 192 }
BVanderWilp 3:2bcc36fe4de5 193 else if(h1 == 0 && h2 == 0 && h3 == 1) //state2
BVanderWilp 3:2bcc36fe4de5 194 {
BVanderWilp 3:2bcc36fe4de5 195 Bfall();
BVanderWilp 3:2bcc36fe4de5 196 Arise();
BVanderWilp 3:2bcc36fe4de5 197 }
BVanderWilp 3:2bcc36fe4de5 198 else if(h1 == 1 && h2 == 0 && h3 == 1) //state3
BVanderWilp 3:2bcc36fe4de5 199 {
BVanderWilp 3:2bcc36fe4de5 200 Arise();
BVanderWilp 3:2bcc36fe4de5 201 Cfall();
BVanderWilp 3:2bcc36fe4de5 202 }
BVanderWilp 3:2bcc36fe4de5 203 else if(h1 == 1 && h2 == 0 && h3 == 0) //state4
BVanderWilp 3:2bcc36fe4de5 204 {
BVanderWilp 3:2bcc36fe4de5 205 Cfall();
BVanderWilp 3:2bcc36fe4de5 206 Brise();
BVanderWilp 3:2bcc36fe4de5 207 }
BVanderWilp 3:2bcc36fe4de5 208 else if(h1 == 1 && h2 == 1 && h3 == 0) //state5
BVanderWilp 3:2bcc36fe4de5 209 {
BVanderWilp 3:2bcc36fe4de5 210 Brise();
BVanderWilp 4:ab4d51b5b1c8 211 Afall();
BVanderWilp 3:2bcc36fe4de5 212 }
BVanderWilp 3:2bcc36fe4de5 213 else //state6
BVanderWilp 3:2bcc36fe4de5 214 {
BVanderWilp 3:2bcc36fe4de5 215 Afall();
BVanderWilp 4:ab4d51b5b1c8 216 Crise();
BVanderWilp 3:2bcc36fe4de5 217 }
BVanderWilp 5:6110655353ad 218 float ADCSum = 0;;
BVanderWilp 5:6110655353ad 219 int ADCCount = 0;
BVanderWilp 0:d445abf9a8e9 220 while(1) {
BVanderWilp 0:d445abf9a8e9 221 led = !led;
BVanderWilp 5:6110655353ad 222 ADCSum += pot.read();
BVanderWilp 5:6110655353ad 223 ADCCount++;
BVanderWilp 5:6110655353ad 224 if(ADCCount == 20)
BVanderWilp 5:6110655353ad 225 {
BVanderWilp 5:6110655353ad 226 pwmDuty = (ADCSum/20) * pwmMax;
BVanderWilp 5:6110655353ad 227 ADCSum = 0;
BVanderWilp 5:6110655353ad 228 ADCCount = 0;
BVanderWilp 5:6110655353ad 229 }
BVanderWilp 5:6110655353ad 230 // pwmDuty = pot.read() * 0.7;
BVanderWilp 5:6110655353ad 231 wait(0.05);
BVanderWilp 0:d445abf9a8e9 232 }
BVanderWilp 0:d445abf9a8e9 233 }