AC_BLDC_MOTOR_Control

Dependencies:   mbed-rtos mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "rtos.h"
00003 #include <math.h>
00004 #define TS1 0.2
00005 int q=0,START=15; //10
00006 float ut1=0,ut2=0,usi=0;
00007 float vt1=0,vt2=0,vsi=0;
00008 float wt1=0,wt2=0,wsi=0;
00009 float ui=0,vi=0,wi=0;
00010 float su,sv,sw;
00011 float PI=3.141592;
00012 float t=2.26E-4; //2.26E-4
00013 float Speed;
00014 PwmOut mypwmA(PA_8); //PWM_OUT 8
00015 PwmOut mypwmB(PA_9); //9
00016 PwmOut mypwmC(PA_10);//10
00017 
00018 DigitalOut EN1(PC_10);
00019 DigitalOut EN2(PC_11);
00020 DigitalOut EN3(PC_12);
00021 
00022 InterruptIn  HA(PA_15);
00023 InterruptIn  HB(PB_3);
00024 InterruptIn  HC(PB_10);
00025 
00026 AnalogIn V_adc(PC_2);  //Potention
00027 //AnalogIn V_adc(PB_1);   // gaibu Volume
00028 Timer uT;
00029 Timer vT;
00030 Timer wT;
00031 AnalogOut SWAVE(PA_4);
00032 
00033 Serial pc(USBTX,USBRX);
00034 
00035 DigitalOut myled(LED1);
00036 
00037 float Vr_adc=0.0f;
00038     
00039  void HAH(){
00040     ut1=uT.read_us(); 
00041     ui=0; 
00042       }
00043  void HAL(){
00044     ut2=uT.read_us(); 
00045     uT.reset(); 
00046      }
00047  void HBH(){
00048     vt1=vT.read_us();
00049     vi=0;
00050      }
00051  void HBL(){
00052     vt2=vT.read_us();
00053     vT.reset();
00054      }
00055  void HCH(){
00056     wt1=wT.read_us();
00057     wi=0;
00058      } 
00059  void HCL(){
00060     wt2=wT.read_us();
00061     wT.reset();
00062      }   
00063      
00064 void CPLT(){
00065   pc.printf("%.3f , %.3f \r" ,Speed ,Vr_adc);
00066  }
00067      
00068 void timerTS1(void const*argument){
00069    CPLT();
00070  }
00071  
00072  
00073 int main() {
00074   
00075   pc.baud(128000); 
00076    
00077    EN1=1;
00078    EN2=1;
00079    EN3=1;
00080    
00081     mypwmA.period_us(20);
00082   
00083     mypwmB.period_us(20);
00084    
00085     mypwmC.period_us(20);
00086       
00087      uT.start();
00088      vT.start();
00089      wT.start();
00090      
00091      
00092      RtosTimer RtosTimerTS1(timerTS1);
00093      RtosTimerTS1.start((unsigned int)(TS1*3000));
00094      Thread::wait(100);
00095      
00096  while(1) {
00097       
00098       Vr_adc=V_adc.read();
00099       
00100 if((Vr_adc>0.15f)&&(q==0)){ 
00101       
00102  while(q<50){   //30
00103     
00104     mypwmA.write(0.5f); //0.5
00105     mypwmB.write(0);
00106     mypwmC.write(0);
00107     wait_ms(START);
00108            
00109     mypwmA.write(0);
00110     mypwmB.write(0.5f);
00111     mypwmC.write(0);
00112     wait_ms(START);
00113          
00114     mypwmA.write(0);
00115     mypwmB.write(0);
00116     mypwmC.write(0.5f);
00117     wait_ms(START);
00118     q++;
00119     
00120     }
00121    // q=31;
00122     }
00123         
00124         HA.rise(&HAH);
00125         HC.fall(&HCL);
00126         HB.rise(&HBH);
00127         HA.fall(&HAL);
00128         HC.rise(&HCH);
00129         HB.fall(&HBL);
00130        
00131     if(Vr_adc < 0.05f){ 
00132           q=0;
00133             
00134        }    
00135             
00136         ui=ui+1;
00137         vi=vi+1;
00138         wi=wi+1;
00139            
00140          usi=ut2-ut1;
00141          vsi=vt2-vt1;
00142          wsi=wt2-wt1;
00143          
00144     if(q>=31){       
00145          
00146          su=sin(2*PI*((1/(2*usi*1E-6))*ui*t)); 
00147          sv=sin(2*PI*((1/(2*vsi*1E-6))*vi*t));
00148          sw=sin(2*PI*((1/(2*wsi*1E-6))*wi*t));
00149 
00150          }      
00151          
00152          mypwmA.write(su*Vr_adc); 
00153          mypwmB.write(sv*Vr_adc); 
00154          mypwmC.write(sw*Vr_adc); 
00155          
00156          SWAVE=su;
00157        
00158          Speed=60*(1/(7.0*2.0*usi*1E-6));    
00159          
00160         myled = !myled;
00161       
00162     }
00163 }
00164 
00165