AC_BLDC_MOTOR_Control
Embed:
(wiki syntax)
Show/hide line numbers
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
Generated on Fri Jul 22 2022 00:16:35 by
1.7.2