Senior design censored code to run freescale motor with X-NUCLEO-IM07M1. REFACTORED

Dependencies:   mbed

Fork of Blue_Board_Test_2 by Brad VanderWilp

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);
    }
}