STM32F302R8 with Konrad's inverter boards for senior design.
Fork of Blue_Board_Ticker by
main.cpp
- Committer:
- BVanderWilp
- Date:
- 2016-04-06
- Revision:
- 5:6110655353ad
- Parent:
- 4:ab4d51b5b1c8
- Child:
- 6:e401c592d2c3
File content as of revision 5:6110655353ad:
#include "mbed.h" PwmOut phaseA(PA_8); //Out1, Green DigitalOut phaseAEN(PC_10); PwmOut phaseB(PA_9); //Out2, Blue DigitalOut phaseBEN(PC_11); PwmOut phaseC(PA_10); //Out3, White DigitalOut phaseCEN(PC_12); AnalogIn pot(PB_1); InterruptIn button(USER_BUTTON); DigitalOut redLed(PB_2); DigitalOut led(LED1); InterruptIn hallA(PA_15); //H1, Green InterruptIn hallB(PB_3); //H2, Blue InterruptIn hallC(PB_10); //H3, White Ticker interrupt; float pwmMax = 0.9; float pwmDuty; int stall = 0; void activate() { stall = 1; } void Crise() //state1, A0 B- C+ { phaseAEN = 0; phaseBEN = 1; phaseC.write(pwmDuty); phaseCEN = 1; redLed = ! redLed; } void Bfall() //state2, A+ B- C0 { phaseCEN = 0; phaseC.write(0); phaseA.write(pwmDuty); phaseAEN = 1; phaseBEN = 1; } void Arise() //state3, A+ B0 C- { phaseBEN = 0; phaseCEN = 1; phaseA.write(pwmDuty); phaseAEN = 1; } void Cfall() //state4, A0 B+ C- { phaseAEN = 0; phaseA.write(0); phaseB.write(pwmDuty); phaseBEN = 1; phaseCEN = 1; redLed = ! redLed; } void Brise() //state5, A- B+ C0 { phaseCEN = 0; phaseAEN = 1; phaseB.write(pwmDuty); phaseBEN = 1; } void Afall() //state5, A- B0 C+ { phaseBEN = 0; phaseB.write(0); phaseC.write(pwmDuty); phaseCEN = 1; phaseAEN = 1; } int count = 0; void intcall(){ count = (count + 1) % 6; if(count == 0) //B+, C- { phaseAEN = 0; phaseA.write(0); phaseB.write(pwmDuty); phaseBEN = 1; } else if(count == 1) //B+, A- { phaseCEN = 0; phaseAEN = 1; } else if(count == 2) //C+, A- { phaseBEN = 0; phaseB.write(0); phaseC.write(pwmDuty); phaseCEN = 1; } else if(count == 3) //C+, B- { phaseAEN = 0; phaseBEN = 1; } else if(count == 4) //A+, B- { phaseCEN = 0; phaseC.write(0); phaseA.write(pwmDuty); phaseAEN = 1; } else if(count == 5) //A+, C- { phaseBEN = 0; phaseCEN = 1; } } int main() { //wait until button push to start button.rise(&activate); while(stall == 0) { led = !led; wait(1); } // //startup with open loop // phaseA.period_us(10); // phaseB.period_us(10); // phaseC.period_us(10); // interrupt.attach(&intcall, .01); // // // phaseA.write(0); // phaseB.write(pwmDuty); // phaseC.write(0); // // phaseAEN = 0; // phaseBEN = 1; // phaseCEN = 1; // // for(int i = 0; i < 4; i++) // { // i++; // led = !led; // wait(0.5); // } // interrupt.detach(); pwmDuty = pot.read() * pwmMax; phaseA.period_us(10); phaseB.period_us(10); phaseC.period_us(10); phaseA.write(0); phaseB.write(0); phaseC.write(0); phaseAEN = 0; phaseBEN = 0; phaseCEN = 0; //begin sensored mode hallA.fall(&Afall); hallA.rise(&Arise); hallB.fall(&Bfall); hallB.rise(&Brise); hallC.fall(&Cfall); hallC.rise(&Crise); int h1 = hallA.read(); int h2 = hallB.read(); int h3 = hallC.read(); //check where we start if(h1 == 0 && h2 == 1 && h3 == 1) //state1 { Crise(); Bfall(); } else if(h1 == 0 && h2 == 0 && h3 == 1) //state2 { Bfall(); Arise(); } else if(h1 == 1 && h2 == 0 && h3 == 1) //state3 { Arise(); Cfall(); } else if(h1 == 1 && h2 == 0 && h3 == 0) //state4 { Cfall(); Brise(); } else if(h1 == 1 && h2 == 1 && h3 == 0) //state5 { Brise(); Afall(); } else //state6 { Afall(); Crise(); } float ADCSum = 0;; int ADCCount = 0; while(1) { led = !led; ADCSum += pot.read(); ADCCount++; if(ADCCount == 20) { pwmDuty = (ADCSum/20) * pwmMax; ADCSum = 0; ADCCount = 0; } // pwmDuty = pot.read() * 0.7; wait(0.05); } }