ホールセンサの値を見てBLDCモータを回す。

Dependencies:   mbed

/media/uploads/mxy7/half_bridge.jpg /media/uploads/mxy7/high_side.jpg /media/uploads/mxy7/low_side.jpg

main.cpp

Committer:
mxy7
Date:
2014-07-22
Revision:
0:3a3b03651663
Child:
1:0165e226b5af

File content as of revision 0:3a3b03651663:

#include "mbed.h"

DigitalOut l1(LED1);
DigitalOut l2(LED2);
DigitalOut l3(LED3);

PwmOut uH(p21);
PwmOut vH(p22);
PwmOut wH(p23);

PwmOut uL(p24);
PwmOut vL(p25);
PwmOut wL(p26);

InterruptIn u(p16);
InterruptIn v(p17);
InterruptIn w(p18);

int p;
float period = 1;
float pulse = period / 10;

void mode(int);
void out(int,int,int,int,int,int);
void A();void B();void C();
void D();void E();void F();

void init(){
    u.mode(PullUp);
    v.mode(PullUp);
    w.mode(PullUp);
    
    uH.period_us(period);
    vH.period_us(period);
    wH.period_us(period);
    uH.pulsewidth_us(pulse);
    vH.pulsewidth_us(pulse);
    wH.pulsewidth_us(pulse);
    
    uL.period_us(period);
    vL.period_us(period);
    wL.period_us(period);
    uL.pulsewidth_us(pulse);
    vL.pulsewidth_us(pulse);
    wL.pulsewidth_us(pulse);

    p = 0;//start
}

int main() {
    init();
    while(1) {
        u.rise(&A);
        w.fall(&B);
        v.rise(&C);
        u.fall(&D);
        w.rise(&E);
        v.fall(&F);
        mode(p);
    }
    return 0;
}

void mode(int p){
    switch(p){
        case 0:
            out(1,1,1,0,0,0);
            break;
        case 1:
            out(0,1,1,0,1,0);
            break;
        case 2:
            out(0,1,1,0,0,1);
            break;
        case 3:
            out(1,0,1,0,0,1);
            break;
        case 4:
            out(1,0,1,1,0,0);
            break;
        case 5:
            out(1,1,0,1,0,0);
            break;
        case 6:
            out(1,1,0,0,1,0);
            break;
        default:
            out(1,1,1,0,0,0);
            break;
    }
}

void out(int uh,int vh,int wh,int ul,int vl,int wl){
    uL.write(ul);
    vL.write(vl);
    wL.write(vl);
    uH.write(uh);
    vH.write(vh);
    wH.write(wh);
}

void A(){p = 1;}
void B(){p = 2;}
void C(){p = 3;}
void D(){p = 4;}
void E(){p = 5;}
void F(){p = 6;}