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

main.cpp
- Committer:
- mxy7
- Date:
- 2014-07-23
- Revision:
- 1:0165e226b5af
- Parent:
- 0:3a3b03651663
File content as of revision 1:0165e226b5af:
#include "mbed.h"
DigitalOut l1(LED1);
DigitalOut l2(LED2);
DigitalOut l3(LED3);
PwmOut uH(p21);//high side
PwmOut vH(p22);
PwmOut wH(p23);
PwmOut uL(p24);//low side
PwmOut vL(p25);
PwmOut wL(p26);
InterruptIn u(p16);//hole sensor
InterruptIn v(p17);
InterruptIn w(p18);
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;
}
}
void out(float uh,float vh,float wh,float ul,float vl,float wl){
uL.write(ul);
vL.write(vl);
wL.write(wl);
uH.write(uh);
vH.write(vh);
wH.write(wh);
}
void LED(int i,int ii,int iii){
l1 = i;
l2 = ii;
l3 = iii;
}
void A(){
if(dir == 0)p = 1;
else p = 3;}
void B(){
if(dir == 0)p = 2;
else p = 4;}
void C(){
if(dir == 0)p = 3;
else p = 5;}
void D(){
if(dir == 0)p = 4;
else p = 6;}
void E(){
if(dir == 0)p = 5;
else p = 1;}
void F(){
if(dir == 0)p = 6;
else p = 2;}