STM32-F411RE ile BLDC motor sürmek

Başlatan sisifalix, 21 Mart 2015, 09:00:58

sisifalix

Öncelikle programlama ile ilgili fazla bilgim yok, fakat öğrenmeye çalışıyorum. Aşağıdaki kodun BLDC motor sürmek için uygunluğunu öğrenmek istiyorum. Ayrıca motor kontrol algoritması oluşturmak için nasıl başlamam gerekir? Yardımcı olursanız sevinirim.

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

PwmOut uH(PB_4);//high side 
PwmOut vH(PB_5);
PwmOut wH(PB_3);

PwmOut uL(PA_5);//low side
PwmOut vL(PA_6);
PwmOut wL(PA_7);

InterruptIn u(PA_0);//hole sensor
InterruptIn v(PA_1);
InterruptIn w(PA_4);

Serial pc(USBTX,USBRX);

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

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

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
    dir = 0;// 0/1 <=> CW/CCW
}

int main() {
    init();
    u.rise(&A);
    w.fall(&B);
    v.rise(&C);
    u.fall(&D);
    w.rise(&E);
    v.fall(&F);
    while(1) {
        mode(p);
        //wait_us(1);
        //pc.printf("%d\n",p);
    }
    return 0;
}

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