STM32F302R8 with Konrad's inverter boards for senior design.
Fork of Blue_Board_Ticker by
main.cpp
- Committer:
- BVanderWilp
- Date:
- 2016-04-06
- Revision:
- 0:d445abf9a8e9
- Child:
- 1:69c06d3676fd
File content as of revision 0:d445abf9a8e9:
#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); } }