STM32F302R8 with Konrad's inverter boards for senior design.

Dependencies:   mbed

Fork of Blue_Board_Ticker by Brad VanderWilp

Revision:
0:d445abf9a8e9
Child:
1:69c06d3676fd
--- /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);
+    }
+}