Brad VanderWilp
/
Blue_Board_Test_2
Senior design sensored code to run freescale motor with IM07M1
Diff: main.cpp
- Revision:
- 0:d445abf9a8e9
- Child:
- 1:69c06d3676fd
diff -r 000000000000 -r d445abf9a8e9 main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Wed Apr 06 17:56:38 2016 +0000 @@ -0,0 +1,109 @@ +#include "mbed.h" + +PwmOut phaseA(PA_8); +DigitalOut phaseAEN(PC_10); +PwmOut phaseB(PA_9); +DigitalOut phaseBEN(PC_11); +PwmOut phaseC(PA_10); +DigitalOut phaseCEN(PC_12); + +InterruptIn button(USER_BUTTON); + +DigitalOut redLed(PB_2); +DigitalOut led(LED1); +//actual 123? +//InterruptIn hallA(PA_15); +//InterruptIn hallB(PB_3); +//InterruptIn hallC(PB_10); +//attempt to mix and match +InterruptIn hallA(PB_3); +InterruptIn hallB(PB_10); +InterruptIn hallC(PA_15); + + +float pwmDuty = 0.3; +int stall = 0; +void activate() +{ + stall = 1; +} + +void Crise() //0 or 360 degrees, B+, C- +{ + phaseAEN = 0; + phaseA.write(0); + phaseB.write(pwmDuty); + phaseBEN = 1; + redLed = !redLed; +} + +void Afall() //60 degrees, B+, A- +{ + phaseCEN = 0; + phaseAEN = 1; + redLed = !redLed; +} + +void Brise() //120 degrees, C+, A- +{ + phaseBEN = 0; + phaseB.write(0); + phaseC.write(pwmDuty); + phaseCEN = 1; + redLed = !redLed; +} + +void Cfall() //180 degrees, C+, B- +{ + phaseAEN = 0; + phaseBEN = 1; + redLed = !redLed; +} + +void Arise() //240 degrees, A+, B- +{ + phaseCEN = 0; + phaseC.write(0); + phaseA.write(pwmDuty); + phaseAEN = 1; + redLed = !redLed; +} + +void Bfall() //300 degrees, A+, C- +{ + phaseBEN = 0; + phaseCEN = 1; + redLed = !redLed; +} + +int main() { + button.rise(&activate); + while(stall == 0) { + led = !led; + wait(2); + } + //NOTE: falls and rises are swapped because Hall sensors use NEGATIVE LOGIC + hallA.fall(&Arise); + hallA.rise(&Afall); + hallB.fall(&Brise); + hallB.rise(&Bfall); + hallC.fall(&Crise); + hallC.rise(&Cfall); + + phaseA.period_us(10); + phaseB.period_us(10); + phaseC.period_us(10); + + phaseA.write(0); + phaseB.write(pwmDuty); + phaseC.write(0); + + phaseAEN = 0; + phaseBEN = 1; + phaseCEN = 1; + + while(1) { + led = !led; + wait(0.2); + } +}