Senior design censored code to run freescale motor with X-NUCLEO-IM07M1. REFACTORED
Fork of Blue_Board_Test_2 by
main.cpp
- Committer:
- BVanderWilp
- Date:
- 2016-04-06
- Revision:
- 2:0fbba327c44f
- Parent:
- 1:69c06d3676fd
- Child:
- 3:2bcc36fe4de5
File content as of revision 2:0fbba327c44f:
#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); 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 pwmDuty = 0.5; int stall = 0; void activate() { stall = 1; } void Crise() //state1, A0 B- C+ { phaseAEN = 0; phaseBEN = 1; redLed = ! redLed; } void Bfall() //state2, A+ B- C0 { phaseCEN = 0; phaseC.write(0); phaseA.write(pwmDuty); phaseAEN = 1; } void Arise() //state3, A+ B0 C- { phaseBEN = 0; phaseCEN = 1; } void Cfall() //state4, A0 B+ C- { phaseAEN = 0; phaseA.write(0); phaseB.write(pwmDuty); phaseBEN = 1; redLed = ! redLed; } void Brise() //state5, A- B+ C0 { phaseCEN = 0; phaseAEN = 1; } void Afall() //state5, A- B0 C+ { phaseBEN = 0; phaseB.write(0); phaseC.write(pwmDuty); phaseCEN = 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(2); } //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(); //begin sensored mode // hallA.fall(&Arise); // hallA.rise(&Afall); // hallB.fall(&Brise); // hallB.rise(&Bfall); // hallC.fall(&Crise); // hallC.rise(&Cfall); hallA.fall(&Afall); hallA.rise(&Arise); hallB.fall(&Bfall); hallB.rise(&Brise); hallC.fall(&Cfall); hallC.rise(&Crise); while(1) { led = !led; wait(0.2); } }