kazuyoshi makisumi / Mbed 2 deprecated BLDC

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 
00003 DigitalOut l1(LED1);
00004 DigitalOut l2(LED2);
00005 DigitalOut l3(LED3);
00006 
00007 PwmOut uH(p21);//high side 
00008 PwmOut vH(p22);
00009 PwmOut wH(p23);
00010 
00011 PwmOut uL(p24);//low side
00012 PwmOut vL(p25);
00013 PwmOut wL(p26);
00014 
00015 InterruptIn u(p16);//hole sensor
00016 InterruptIn v(p17);
00017 InterruptIn w(p18);
00018 
00019 Serial pc(USBTX,USBRX);
00020 
00021 int p,dir;
00022 float period = 1;
00023 float pulse = period / 10;
00024 
00025 void mode(int);
00026 void out(float,float,float,float,float,float);
00027 void A();void B();void C();
00028 void D();void E();void F();
00029 void LED(int,int,int);
00030 
00031 void init(){
00032     u.mode(PullUp);
00033     v.mode(PullUp);
00034     w.mode(PullUp);
00035     
00036     uH.period_us(period);
00037     vH.period_us(period);
00038     wH.period_us(period);
00039     uH.pulsewidth_us(pulse);
00040     vH.pulsewidth_us(pulse);
00041     wH.pulsewidth_us(pulse);
00042     
00043     uL.period_us(period);
00044     vL.period_us(period);
00045     wL.period_us(period);
00046     uL.pulsewidth_us(pulse);
00047     vL.pulsewidth_us(pulse);
00048     wL.pulsewidth_us(pulse);
00049 
00050     p = 0;//start
00051     dir = 0;// 0/1 <=> CW/CCW
00052 }
00053 
00054 int main() {
00055     init();
00056     u.rise(&A);
00057     w.fall(&B);
00058     v.rise(&C);
00059     u.fall(&D);
00060     w.rise(&E);
00061     v.fall(&F);
00062     while(1) {
00063         mode(p);
00064         //wait_us(1);
00065         //pc.printf("%d\n",p);
00066     }
00067     return 0;
00068 }
00069 
00070 void mode(int p){
00071     switch(p){
00072         case 0:
00073             out(1,1,1,0,0,0);
00074             LED(1,1,1);
00075             break;
00076         case 1:
00077             out(0,1,1,0,1,0);
00078             LED(1,0,0);
00079             break;
00080         case 2:
00081             out(0,1,1,0,0,1);
00082             LED(1,0,0);
00083             break;
00084         case 3:
00085             out(1,0,1,0,0,1);
00086             LED(0,1,0);
00087             break;
00088         case 4:
00089             out(1,0,1,1,0,0);
00090             LED(0,1,0);
00091             break;
00092         case 5:
00093             out(1,1,0,1,0,0);
00094             LED(0,0,1);
00095             break;
00096         case 6:
00097             out(1,1,0,0,1,0);
00098             LED(0,0,1);
00099             break;
00100         default:
00101             out(1,1,1,0,0,0);
00102             LED(0,0,0);
00103             break;
00104     }
00105 }
00106 
00107 void out(float uh,float vh,float wh,float ul,float vl,float wl){
00108     uL.write(ul);
00109     vL.write(vl);
00110     wL.write(wl);
00111     uH.write(uh);
00112     vH.write(vh);
00113     wH.write(wh);
00114 }
00115 
00116 void LED(int i,int ii,int iii){
00117     l1 = i;
00118     l2 = ii;
00119     l3 = iii;
00120 } 
00121 
00122 void A(){
00123     if(dir == 0)p = 1;
00124     else p = 3;}
00125 void B(){
00126     if(dir == 0)p = 2;
00127     else p = 4;}
00128 void C(){
00129     if(dir == 0)p = 3;
00130     else p = 5;}
00131 void D(){
00132     if(dir == 0)p = 4;
00133     else p = 6;}
00134 void E(){
00135     if(dir == 0)p = 5;
00136     else p = 1;}
00137 void F(){
00138     if(dir == 0)p = 6;
00139     else p = 2;}
00140