STM32F302R8 with Konrad's inverter boards for senior design.

Dependencies:   mbed

Fork of Blue_Board_Ticker by Brad VanderWilp

Committer:
BVanderWilp
Date:
Wed Apr 06 17:56:38 2016 +0000
Revision:
0:d445abf9a8e9
Child:
1:69c06d3676fd
first commit; expected code for sensored implementation

Who changed what in which revision?

UserRevisionLine numberNew contents of line
BVanderWilp 0:d445abf9a8e9 1 #include "mbed.h"
BVanderWilp 0:d445abf9a8e9 2
BVanderWilp 0:d445abf9a8e9 3 PwmOut phaseA(PA_8);
BVanderWilp 0:d445abf9a8e9 4 DigitalOut phaseAEN(PC_10);
BVanderWilp 0:d445abf9a8e9 5 PwmOut phaseB(PA_9);
BVanderWilp 0:d445abf9a8e9 6 DigitalOut phaseBEN(PC_11);
BVanderWilp 0:d445abf9a8e9 7 PwmOut phaseC(PA_10);
BVanderWilp 0:d445abf9a8e9 8 DigitalOut phaseCEN(PC_12);
BVanderWilp 0:d445abf9a8e9 9
BVanderWilp 0:d445abf9a8e9 10 InterruptIn button(USER_BUTTON);
BVanderWilp 0:d445abf9a8e9 11
BVanderWilp 0:d445abf9a8e9 12 DigitalOut redLed(PB_2);
BVanderWilp 0:d445abf9a8e9 13 DigitalOut led(LED1);
BVanderWilp 0:d445abf9a8e9 14 //actual 123?
BVanderWilp 0:d445abf9a8e9 15 //InterruptIn hallA(PA_15);
BVanderWilp 0:d445abf9a8e9 16 //InterruptIn hallB(PB_3);
BVanderWilp 0:d445abf9a8e9 17 //InterruptIn hallC(PB_10);
BVanderWilp 0:d445abf9a8e9 18 //attempt to mix and match
BVanderWilp 0:d445abf9a8e9 19 InterruptIn hallA(PB_3);
BVanderWilp 0:d445abf9a8e9 20 InterruptIn hallB(PB_10);
BVanderWilp 0:d445abf9a8e9 21 InterruptIn hallC(PA_15);
BVanderWilp 0:d445abf9a8e9 22
BVanderWilp 0:d445abf9a8e9 23
BVanderWilp 0:d445abf9a8e9 24 float pwmDuty = 0.3;
BVanderWilp 0:d445abf9a8e9 25 int stall = 0;
BVanderWilp 0:d445abf9a8e9 26 void activate()
BVanderWilp 0:d445abf9a8e9 27 {
BVanderWilp 0:d445abf9a8e9 28 stall = 1;
BVanderWilp 0:d445abf9a8e9 29 }
BVanderWilp 0:d445abf9a8e9 30
BVanderWilp 0:d445abf9a8e9 31 void Crise() //0 or 360 degrees, B+, C-
BVanderWilp 0:d445abf9a8e9 32 {
BVanderWilp 0:d445abf9a8e9 33 phaseAEN = 0;
BVanderWilp 0:d445abf9a8e9 34 phaseA.write(0);
BVanderWilp 0:d445abf9a8e9 35 phaseB.write(pwmDuty);
BVanderWilp 0:d445abf9a8e9 36 phaseBEN = 1;
BVanderWilp 0:d445abf9a8e9 37 redLed = !redLed;
BVanderWilp 0:d445abf9a8e9 38 }
BVanderWilp 0:d445abf9a8e9 39
BVanderWilp 0:d445abf9a8e9 40 void Afall() //60 degrees, B+, A-
BVanderWilp 0:d445abf9a8e9 41 {
BVanderWilp 0:d445abf9a8e9 42 phaseCEN = 0;
BVanderWilp 0:d445abf9a8e9 43 phaseAEN = 1;
BVanderWilp 0:d445abf9a8e9 44 redLed = !redLed;
BVanderWilp 0:d445abf9a8e9 45 }
BVanderWilp 0:d445abf9a8e9 46
BVanderWilp 0:d445abf9a8e9 47 void Brise() //120 degrees, C+, A-
BVanderWilp 0:d445abf9a8e9 48 {
BVanderWilp 0:d445abf9a8e9 49 phaseBEN = 0;
BVanderWilp 0:d445abf9a8e9 50 phaseB.write(0);
BVanderWilp 0:d445abf9a8e9 51 phaseC.write(pwmDuty);
BVanderWilp 0:d445abf9a8e9 52 phaseCEN = 1;
BVanderWilp 0:d445abf9a8e9 53 redLed = !redLed;
BVanderWilp 0:d445abf9a8e9 54 }
BVanderWilp 0:d445abf9a8e9 55
BVanderWilp 0:d445abf9a8e9 56 void Cfall() //180 degrees, C+, B-
BVanderWilp 0:d445abf9a8e9 57 {
BVanderWilp 0:d445abf9a8e9 58 phaseAEN = 0;
BVanderWilp 0:d445abf9a8e9 59 phaseBEN = 1;
BVanderWilp 0:d445abf9a8e9 60 redLed = !redLed;
BVanderWilp 0:d445abf9a8e9 61 }
BVanderWilp 0:d445abf9a8e9 62
BVanderWilp 0:d445abf9a8e9 63 void Arise() //240 degrees, A+, B-
BVanderWilp 0:d445abf9a8e9 64 {
BVanderWilp 0:d445abf9a8e9 65 phaseCEN = 0;
BVanderWilp 0:d445abf9a8e9 66 phaseC.write(0);
BVanderWilp 0:d445abf9a8e9 67 phaseA.write(pwmDuty);
BVanderWilp 0:d445abf9a8e9 68 phaseAEN = 1;
BVanderWilp 0:d445abf9a8e9 69 redLed = !redLed;
BVanderWilp 0:d445abf9a8e9 70 }
BVanderWilp 0:d445abf9a8e9 71
BVanderWilp 0:d445abf9a8e9 72 void Bfall() //300 degrees, A+, C-
BVanderWilp 0:d445abf9a8e9 73 {
BVanderWilp 0:d445abf9a8e9 74 phaseBEN = 0;
BVanderWilp 0:d445abf9a8e9 75 phaseCEN = 1;
BVanderWilp 0:d445abf9a8e9 76 redLed = !redLed;
BVanderWilp 0:d445abf9a8e9 77 }
BVanderWilp 0:d445abf9a8e9 78
BVanderWilp 0:d445abf9a8e9 79 int main() {
BVanderWilp 0:d445abf9a8e9 80 button.rise(&activate);
BVanderWilp 0:d445abf9a8e9 81 while(stall == 0) {
BVanderWilp 0:d445abf9a8e9 82 led = !led;
BVanderWilp 0:d445abf9a8e9 83 wait(2);
BVanderWilp 0:d445abf9a8e9 84 }
BVanderWilp 0:d445abf9a8e9 85 //NOTE: falls and rises are swapped because Hall sensors use NEGATIVE LOGIC
BVanderWilp 0:d445abf9a8e9 86 hallA.fall(&Arise);
BVanderWilp 0:d445abf9a8e9 87 hallA.rise(&Afall);
BVanderWilp 0:d445abf9a8e9 88 hallB.fall(&Brise);
BVanderWilp 0:d445abf9a8e9 89 hallB.rise(&Bfall);
BVanderWilp 0:d445abf9a8e9 90 hallC.fall(&Crise);
BVanderWilp 0:d445abf9a8e9 91 hallC.rise(&Cfall);
BVanderWilp 0:d445abf9a8e9 92
BVanderWilp 0:d445abf9a8e9 93 phaseA.period_us(10);
BVanderWilp 0:d445abf9a8e9 94 phaseB.period_us(10);
BVanderWilp 0:d445abf9a8e9 95 phaseC.period_us(10);
BVanderWilp 0:d445abf9a8e9 96
BVanderWilp 0:d445abf9a8e9 97 phaseA.write(0);
BVanderWilp 0:d445abf9a8e9 98 phaseB.write(pwmDuty);
BVanderWilp 0:d445abf9a8e9 99 phaseC.write(0);
BVanderWilp 0:d445abf9a8e9 100
BVanderWilp 0:d445abf9a8e9 101 phaseAEN = 0;
BVanderWilp 0:d445abf9a8e9 102 phaseBEN = 1;
BVanderWilp 0:d445abf9a8e9 103 phaseCEN = 1;
BVanderWilp 0:d445abf9a8e9 104
BVanderWilp 0:d445abf9a8e9 105 while(1) {
BVanderWilp 0:d445abf9a8e9 106 led = !led;
BVanderWilp 0:d445abf9a8e9 107 wait(0.2);
BVanderWilp 0:d445abf9a8e9 108 }
BVanderWilp 0:d445abf9a8e9 109 }