akiyoshi oguro
/
Vector_sin_drive_F302R8_2
FOC sinewave drive ver2
main.cpp@1:e45063ee4be0, 2020-11-18 (annotated)
- Committer:
- oguro
- Date:
- Wed Nov 18 06:24:19 2020 +0000
- Revision:
- 1:e45063ee4be0
- Parent:
- 0:dcfc6150c1d6
Refine Vector Sine Wave 2
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
oguro | 0:dcfc6150c1d6 | 1 | #include "mbed.h" |
oguro | 0:dcfc6150c1d6 | 2 | #include "rtos.h" |
oguro | 0:dcfc6150c1d6 | 3 | #define TS1 0.2 |
oguro | 0:dcfc6150c1d6 | 4 | #include <math.h> |
oguro | 1:e45063ee4be0 | 5 | int q=0,START=10,i=0,s=0,vector; |
oguro | 0:dcfc6150c1d6 | 6 | float uii=0,ut=0,ut1=0,ut2=0,usi=0; |
oguro | 0:dcfc6150c1d6 | 7 | float vii=0,vt=0,vt1=0,vt2=0,vsi=0; |
oguro | 0:dcfc6150c1d6 | 8 | float wii=0,wt=0,wt1=0,wt2=0,wsi=0; |
oguro | 0:dcfc6150c1d6 | 9 | unsigned int ui=0,vi=0,wi=0,vect=0; |
oguro | 0:dcfc6150c1d6 | 10 | float su=0,sv=0,sw=0,suv=0,svv=0,swv=0; |
oguro | 0:dcfc6150c1d6 | 11 | float uci=0,uc=0; |
oguro | 0:dcfc6150c1d6 | 12 | float vst=0,vstt=0,vsti=0,vstf=0,Edw=0,PI=3.141592; |
oguro | 0:dcfc6150c1d6 | 13 | float Speed; |
oguro | 0:dcfc6150c1d6 | 14 | float w,Vqp; |
oguro | 0:dcfc6150c1d6 | 15 | float dth,phm,W,eth,therr,Em,PLL; |
oguro | 0:dcfc6150c1d6 | 16 | float uvect,vvect,wvect; |
oguro | 0:dcfc6150c1d6 | 17 | float sig=0; |
oguro | 0:dcfc6150c1d6 | 18 | PwmOut mypwmA(PA_8); //PWM_OUT 8 |
oguro | 0:dcfc6150c1d6 | 19 | PwmOut mypwmB(PA_9); //9 |
oguro | 0:dcfc6150c1d6 | 20 | PwmOut mypwmC(PA_10);//10 |
oguro | 0:dcfc6150c1d6 | 21 | |
oguro | 0:dcfc6150c1d6 | 22 | PwmOut Current_Ref(PB_4); |
oguro | 0:dcfc6150c1d6 | 23 | |
oguro | 0:dcfc6150c1d6 | 24 | DigitalOut Vector(PC_4); |
oguro | 0:dcfc6150c1d6 | 25 | DigitalOut EN1(PC_10); |
oguro | 0:dcfc6150c1d6 | 26 | DigitalOut EN2(PC_11); |
oguro | 0:dcfc6150c1d6 | 27 | DigitalOut EN3(PC_12); |
oguro | 0:dcfc6150c1d6 | 28 | |
oguro | 0:dcfc6150c1d6 | 29 | DigitalOut vcl(PC_8); |
oguro | 0:dcfc6150c1d6 | 30 | |
oguro | 0:dcfc6150c1d6 | 31 | InterruptIn HA(PA_15); |
oguro | 0:dcfc6150c1d6 | 32 | InterruptIn HB(PB_3); |
oguro | 0:dcfc6150c1d6 | 33 | InterruptIn HC(PB_10); |
oguro | 0:dcfc6150c1d6 | 34 | |
oguro | 0:dcfc6150c1d6 | 35 | //AnalogIn V_adc(PB_1); //volume |
oguro | 0:dcfc6150c1d6 | 36 | AnalogIn V_adc(PC_2); //Potention |
oguro | 0:dcfc6150c1d6 | 37 | |
oguro | 0:dcfc6150c1d6 | 38 | |
oguro | 0:dcfc6150c1d6 | 39 | AnalogIn Vshuntu(PA_1); |
oguro | 0:dcfc6150c1d6 | 40 | AnalogIn Vshuntv(PA_0); |
oguro | 0:dcfc6150c1d6 | 41 | AnalogIn Vshuntw(PB_0); |
oguro | 0:dcfc6150c1d6 | 42 | |
oguro | 0:dcfc6150c1d6 | 43 | AnalogIn BEMF1(PC_3);//C7_37 |
oguro | 0:dcfc6150c1d6 | 44 | AnalogIn BEMF2(PB_0);//C7_34 |
oguro | 0:dcfc6150c1d6 | 45 | AnalogIn BEMF3(PA_7);//C10_26 |
oguro | 0:dcfc6150c1d6 | 46 | |
oguro | 0:dcfc6150c1d6 | 47 | DigitalIn GPIO_BEMF(PC_9); |
oguro | 0:dcfc6150c1d6 | 48 | DigitalIn CPOUT(PA_12); |
oguro | 0:dcfc6150c1d6 | 49 | AnalogIn Curr_ui(PA_0); |
oguro | 0:dcfc6150c1d6 | 50 | AnalogIn Curr_vi(PC_1); |
oguro | 0:dcfc6150c1d6 | 51 | AnalogIn Curr_wi(PC_0); //PA_1 |
oguro | 0:dcfc6150c1d6 | 52 | Timer uT; |
oguro | 0:dcfc6150c1d6 | 53 | Timer vT; |
oguro | 0:dcfc6150c1d6 | 54 | Timer wT; |
oguro | 0:dcfc6150c1d6 | 55 | AnalogOut SWAVE(PA_4); |
oguro | 0:dcfc6150c1d6 | 56 | |
oguro | 0:dcfc6150c1d6 | 57 | Serial pc(USBTX,USBRX); |
oguro | 0:dcfc6150c1d6 | 58 | DigitalOut myled(LED1); |
oguro | 0:dcfc6150c1d6 | 59 | |
oguro | 0:dcfc6150c1d6 | 60 | float r2=sqrt(2.0f),r3=sqrt(3.0f); |
oguro | 0:dcfc6150c1d6 | 61 | float Cuvw[2][3]={{r2/r3,-1.0f/r2/r3,-1.0f/r2/r3}, |
oguro | 0:dcfc6150c1d6 | 62 | {0,1.0f/r2,-1.0f/r2}}; |
oguro | 0:dcfc6150c1d6 | 63 | float iuvw[3]; |
oguro | 0:dcfc6150c1d6 | 64 | float iab[2],iabi[2],Vab[2]; |
oguro | 0:dcfc6150c1d6 | 65 | float idq[2],idqi[2]; |
oguro | 0:dcfc6150c1d6 | 66 | float thave,th,thu,thv,thw,Ed,Vd,Vq,Vqi,West,Wz,Wo,Icom,Wcom; |
oguro | 0:dcfc6150c1d6 | 67 | float zet=sqrt(2.0f/3.0f),cos23=cos((2.0f/3.0f)*PI); |
oguro | 0:dcfc6150c1d6 | 68 | float cos43=cos((4.0f/3.0f)*PI),sin23=sin((2.0f/3.0f)*PI),sin43=sin((4.0f/3.0f)*PI); |
oguro | 0:dcfc6150c1d6 | 69 | float Curr_u,Curr_v,Curr_w; |
oguro | 0:dcfc6150c1d6 | 70 | float Xin,Xout; |
oguro | 0:dcfc6150c1d6 | 71 | float Idin,Vdout,Iqin,Vqout,Xsi; |
oguro | 0:dcfc6150c1d6 | 72 | int vstctle=0,vstctlz=0; |
oguro | 0:dcfc6150c1d6 | 73 | float Vr_adc=0.0f; |
oguro | 0:dcfc6150c1d6 | 74 | int adc,vtv=0; |
oguro | 0:dcfc6150c1d6 | 75 | |
oguro | 0:dcfc6150c1d6 | 76 | Ticker sinTime; |
oguro | 0:dcfc6150c1d6 | 77 | |
oguro | 0:dcfc6150c1d6 | 78 | void HAH(){ |
oguro | 0:dcfc6150c1d6 | 79 | |
oguro | 0:dcfc6150c1d6 | 80 | ut1=uT.read_us(); |
oguro | 0:dcfc6150c1d6 | 81 | ut=0; |
oguro | 0:dcfc6150c1d6 | 82 | ui=0; |
oguro | 0:dcfc6150c1d6 | 83 | // vect=0; |
oguro | 0:dcfc6150c1d6 | 84 | if(vector==0){ |
oguro | 0:dcfc6150c1d6 | 85 | EN1=1; |
oguro | 0:dcfc6150c1d6 | 86 | EN2=1; |
oguro | 0:dcfc6150c1d6 | 87 | EN3=0; |
oguro | 0:dcfc6150c1d6 | 88 | } |
oguro | 0:dcfc6150c1d6 | 89 | /*if(vector==0){ |
oguro | 0:dcfc6150c1d6 | 90 | mypwmA.write(su*Vr_adc); //0.5 |
oguro | 0:dcfc6150c1d6 | 91 | mypwmB.write(0); |
oguro | 0:dcfc6150c1d6 | 92 | mypwmC.write(0); |
oguro | 0:dcfc6150c1d6 | 93 | }*/ |
oguro | 0:dcfc6150c1d6 | 94 | } |
oguro | 0:dcfc6150c1d6 | 95 | void HAL(){ |
oguro | 0:dcfc6150c1d6 | 96 | |
oguro | 0:dcfc6150c1d6 | 97 | ut2=uT.read_us(); |
oguro | 0:dcfc6150c1d6 | 98 | uT.reset(); |
oguro | 0:dcfc6150c1d6 | 99 | if(Speed<=2500){ |
oguro | 0:dcfc6150c1d6 | 100 | // wait_us(100); |
oguro | 0:dcfc6150c1d6 | 101 | vect=0; //****** |
oguro | 0:dcfc6150c1d6 | 102 | } |
oguro | 0:dcfc6150c1d6 | 103 | |
oguro | 0:dcfc6150c1d6 | 104 | if(vector==0){ |
oguro | 0:dcfc6150c1d6 | 105 | EN1=1; |
oguro | 0:dcfc6150c1d6 | 106 | EN2=0; |
oguro | 0:dcfc6150c1d6 | 107 | EN3=1; |
oguro | 0:dcfc6150c1d6 | 108 | } |
oguro | 0:dcfc6150c1d6 | 109 | } |
oguro | 0:dcfc6150c1d6 | 110 | void HBH(){ |
oguro | 0:dcfc6150c1d6 | 111 | |
oguro | 0:dcfc6150c1d6 | 112 | vt1=vT.read_us(); |
oguro | 0:dcfc6150c1d6 | 113 | vi=0; |
oguro | 0:dcfc6150c1d6 | 114 | if(Speed>2500){ |
oguro | 0:dcfc6150c1d6 | 115 | vect=0; |
oguro | 0:dcfc6150c1d6 | 116 | } |
oguro | 0:dcfc6150c1d6 | 117 | if(vector==0){ |
oguro | 0:dcfc6150c1d6 | 118 | EN1=0; |
oguro | 0:dcfc6150c1d6 | 119 | EN2=1; |
oguro | 0:dcfc6150c1d6 | 120 | EN3=1; |
oguro | 0:dcfc6150c1d6 | 121 | } |
oguro | 0:dcfc6150c1d6 | 122 | /* if(vector==0){ |
oguro | 0:dcfc6150c1d6 | 123 | mypwmA.write(0); |
oguro | 0:dcfc6150c1d6 | 124 | mypwmB.write(sv*Vr_adc); |
oguro | 0:dcfc6150c1d6 | 125 | mypwmC.write(0); |
oguro | 0:dcfc6150c1d6 | 126 | }*/ |
oguro | 0:dcfc6150c1d6 | 127 | } |
oguro | 0:dcfc6150c1d6 | 128 | void HBL(){ |
oguro | 0:dcfc6150c1d6 | 129 | |
oguro | 0:dcfc6150c1d6 | 130 | vt2=vT.read_us(); |
oguro | 0:dcfc6150c1d6 | 131 | // vect=0; |
oguro | 0:dcfc6150c1d6 | 132 | vT.reset(); |
oguro | 0:dcfc6150c1d6 | 133 | if(vector==0){ |
oguro | 0:dcfc6150c1d6 | 134 | EN1=1; |
oguro | 0:dcfc6150c1d6 | 135 | EN2=1; |
oguro | 0:dcfc6150c1d6 | 136 | EN3=0; |
oguro | 0:dcfc6150c1d6 | 137 | } |
oguro | 0:dcfc6150c1d6 | 138 | |
oguro | 0:dcfc6150c1d6 | 139 | } |
oguro | 0:dcfc6150c1d6 | 140 | void HCH(){ |
oguro | 0:dcfc6150c1d6 | 141 | wt1=wT.read_us(); |
oguro | 0:dcfc6150c1d6 | 142 | wi=0; |
oguro | 0:dcfc6150c1d6 | 143 | //vect=0; |
oguro | 0:dcfc6150c1d6 | 144 | if(vector==0){ |
oguro | 0:dcfc6150c1d6 | 145 | EN1=1; |
oguro | 0:dcfc6150c1d6 | 146 | EN2=0; |
oguro | 0:dcfc6150c1d6 | 147 | EN3=1; |
oguro | 0:dcfc6150c1d6 | 148 | } |
oguro | 0:dcfc6150c1d6 | 149 | /* if(vector==0){ |
oguro | 0:dcfc6150c1d6 | 150 | mypwmA.write(0); |
oguro | 0:dcfc6150c1d6 | 151 | mypwmB.write(0); |
oguro | 0:dcfc6150c1d6 | 152 | mypwmC.write(sw*Vr_adc); |
oguro | 0:dcfc6150c1d6 | 153 | }*/ |
oguro | 0:dcfc6150c1d6 | 154 | } |
oguro | 0:dcfc6150c1d6 | 155 | |
oguro | 0:dcfc6150c1d6 | 156 | void HCL(){ |
oguro | 0:dcfc6150c1d6 | 157 | wt2=wT.read_us(); |
oguro | 0:dcfc6150c1d6 | 158 | // vect=0; |
oguro | 0:dcfc6150c1d6 | 159 | wT.reset(); |
oguro | 0:dcfc6150c1d6 | 160 | if(vector==0){ |
oguro | 0:dcfc6150c1d6 | 161 | EN1=0; |
oguro | 0:dcfc6150c1d6 | 162 | EN2=1; |
oguro | 0:dcfc6150c1d6 | 163 | EN3=1; |
oguro | 0:dcfc6150c1d6 | 164 | } |
oguro | 0:dcfc6150c1d6 | 165 | } |
oguro | 0:dcfc6150c1d6 | 166 | |
oguro | 0:dcfc6150c1d6 | 167 | void CPLT(){ |
oguro | 0:dcfc6150c1d6 | 168 | pc.printf("%.3f , %.3f \r" ,Speed ,Vr_adc); |
oguro | 0:dcfc6150c1d6 | 169 | } |
oguro | 0:dcfc6150c1d6 | 170 | |
oguro | 0:dcfc6150c1d6 | 171 | void timerTS1(void const*argument){ |
oguro | 0:dcfc6150c1d6 | 172 | CPLT(); |
oguro | 0:dcfc6150c1d6 | 173 | } |
oguro | 0:dcfc6150c1d6 | 174 | |
oguro | 0:dcfc6150c1d6 | 175 | Timer Timer1; |
oguro | 0:dcfc6150c1d6 | 176 | int main() { |
oguro | 0:dcfc6150c1d6 | 177 | |
oguro | 0:dcfc6150c1d6 | 178 | pc.baud(128000); |
oguro | 0:dcfc6150c1d6 | 179 | Timer1.start(); |
oguro | 0:dcfc6150c1d6 | 180 | EN1=1; |
oguro | 0:dcfc6150c1d6 | 181 | EN2=1; |
oguro | 0:dcfc6150c1d6 | 182 | EN3=1; |
oguro | 0:dcfc6150c1d6 | 183 | |
oguro | 0:dcfc6150c1d6 | 184 | mypwmA.period_us(20); //20 |
oguro | 0:dcfc6150c1d6 | 185 | |
oguro | 0:dcfc6150c1d6 | 186 | mypwmB.period_us(20); |
oguro | 0:dcfc6150c1d6 | 187 | |
oguro | 0:dcfc6150c1d6 | 188 | mypwmC.period_us(20); |
oguro | 0:dcfc6150c1d6 | 189 | |
oguro | 0:dcfc6150c1d6 | 190 | Current_Ref.period_us(15); |
oguro | 0:dcfc6150c1d6 | 191 | Current_Ref.write(0.6f); |
oguro | 0:dcfc6150c1d6 | 192 | uT.start(); |
oguro | 0:dcfc6150c1d6 | 193 | vT.start(); |
oguro | 0:dcfc6150c1d6 | 194 | wT.start(); |
oguro | 0:dcfc6150c1d6 | 195 | Timer1.start(); |
oguro | 0:dcfc6150c1d6 | 196 | |
oguro | 0:dcfc6150c1d6 | 197 | RtosTimer RtosTimerTS1(timerTS1); |
oguro | 0:dcfc6150c1d6 | 198 | RtosTimerTS1.start((unsigned int)(TS1*3000)); |
oguro | 0:dcfc6150c1d6 | 199 | Thread::wait(100); |
oguro | 0:dcfc6150c1d6 | 200 | |
oguro | 0:dcfc6150c1d6 | 201 | while(1) { |
oguro | 0:dcfc6150c1d6 | 202 | |
oguro | 0:dcfc6150c1d6 | 203 | /* if(CPOUT==1){ |
oguro | 0:dcfc6150c1d6 | 204 | vect=0; |
oguro | 0:dcfc6150c1d6 | 205 | }*/ |
oguro | 0:dcfc6150c1d6 | 206 | |
oguro | 0:dcfc6150c1d6 | 207 | Vr_adc=V_adc.read(); |
oguro | 0:dcfc6150c1d6 | 208 | |
oguro | 0:dcfc6150c1d6 | 209 | if((Vr_adc>0.08f)&&(q==0)){ |
oguro | 0:dcfc6150c1d6 | 210 | |
oguro | 0:dcfc6150c1d6 | 211 | while(q<10){ |
oguro | 1:e45063ee4be0 | 212 | #if 1 |
oguro | 0:dcfc6150c1d6 | 213 | mypwmA.write(0.5f); |
oguro | 0:dcfc6150c1d6 | 214 | mypwmB.write(0); |
oguro | 0:dcfc6150c1d6 | 215 | mypwmC.write(0); |
oguro | 0:dcfc6150c1d6 | 216 | wait_ms(START); |
oguro | 0:dcfc6150c1d6 | 217 | |
oguro | 0:dcfc6150c1d6 | 218 | mypwmA.write(0); |
oguro | 0:dcfc6150c1d6 | 219 | mypwmB.write(0.5f); |
oguro | 0:dcfc6150c1d6 | 220 | mypwmC.write(0.0); |
oguro | 0:dcfc6150c1d6 | 221 | wait_ms(START); |
oguro | 0:dcfc6150c1d6 | 222 | |
oguro | 0:dcfc6150c1d6 | 223 | mypwmA.write(0); |
oguro | 0:dcfc6150c1d6 | 224 | mypwmB.write(0.0); |
oguro | 0:dcfc6150c1d6 | 225 | mypwmC.write(0.5f); |
oguro | 0:dcfc6150c1d6 | 226 | wait_ms(START); |
oguro | 0:dcfc6150c1d6 | 227 | #endif |
oguro | 1:e45063ee4be0 | 228 | #if 0 |
oguro | 0:dcfc6150c1d6 | 229 | EN1=1; |
oguro | 0:dcfc6150c1d6 | 230 | EN2=1; |
oguro | 0:dcfc6150c1d6 | 231 | EN3=0; |
oguro | 0:dcfc6150c1d6 | 232 | |
oguro | 0:dcfc6150c1d6 | 233 | mypwmA.write(0.5f); //0.5 |
oguro | 0:dcfc6150c1d6 | 234 | mypwmB.write(0); |
oguro | 0:dcfc6150c1d6 | 235 | mypwmC.write(0); |
oguro | 0:dcfc6150c1d6 | 236 | wait_ms(START); |
oguro | 0:dcfc6150c1d6 | 237 | //wait_ms(START); |
oguro | 0:dcfc6150c1d6 | 238 | |
oguro | 0:dcfc6150c1d6 | 239 | EN1=1; |
oguro | 0:dcfc6150c1d6 | 240 | EN2=0; |
oguro | 0:dcfc6150c1d6 | 241 | EN3=1; |
oguro | 0:dcfc6150c1d6 | 242 | |
oguro | 0:dcfc6150c1d6 | 243 | wait_ms(START); |
oguro | 0:dcfc6150c1d6 | 244 | |
oguro | 0:dcfc6150c1d6 | 245 | EN1=0; |
oguro | 0:dcfc6150c1d6 | 246 | EN2=1; |
oguro | 0:dcfc6150c1d6 | 247 | EN3=1; |
oguro | 0:dcfc6150c1d6 | 248 | |
oguro | 0:dcfc6150c1d6 | 249 | mypwmA.write(0); |
oguro | 0:dcfc6150c1d6 | 250 | mypwmB.write(0.5f); |
oguro | 0:dcfc6150c1d6 | 251 | mypwmC.write(0); |
oguro | 0:dcfc6150c1d6 | 252 | |
oguro | 0:dcfc6150c1d6 | 253 | wait_ms(START); |
oguro | 0:dcfc6150c1d6 | 254 | |
oguro | 0:dcfc6150c1d6 | 255 | EN1=1; |
oguro | 0:dcfc6150c1d6 | 256 | EN2=1; |
oguro | 0:dcfc6150c1d6 | 257 | EN3=0; |
oguro | 0:dcfc6150c1d6 | 258 | |
oguro | 0:dcfc6150c1d6 | 259 | wait_ms(START); |
oguro | 0:dcfc6150c1d6 | 260 | |
oguro | 0:dcfc6150c1d6 | 261 | EN1=1; |
oguro | 0:dcfc6150c1d6 | 262 | EN2=0; |
oguro | 0:dcfc6150c1d6 | 263 | EN3=1; |
oguro | 0:dcfc6150c1d6 | 264 | |
oguro | 0:dcfc6150c1d6 | 265 | mypwmA.write(0); |
oguro | 0:dcfc6150c1d6 | 266 | mypwmB.write(0); |
oguro | 0:dcfc6150c1d6 | 267 | mypwmC.write(0.5f); |
oguro | 0:dcfc6150c1d6 | 268 | |
oguro | 0:dcfc6150c1d6 | 269 | wait_ms(START); |
oguro | 0:dcfc6150c1d6 | 270 | EN1=0; |
oguro | 0:dcfc6150c1d6 | 271 | EN2=1; |
oguro | 0:dcfc6150c1d6 | 272 | EN3=1; |
oguro | 0:dcfc6150c1d6 | 273 | #endif |
oguro | 0:dcfc6150c1d6 | 274 | q++; |
oguro | 0:dcfc6150c1d6 | 275 | |
oguro | 0:dcfc6150c1d6 | 276 | } |
oguro | 0:dcfc6150c1d6 | 277 | } |
oguro | 0:dcfc6150c1d6 | 278 | |
oguro | 0:dcfc6150c1d6 | 279 | /* HA.rise(&HAH); |
oguro | 0:dcfc6150c1d6 | 280 | HC.fall(&HCL); |
oguro | 0:dcfc6150c1d6 | 281 | HB.rise(&HBH); |
oguro | 0:dcfc6150c1d6 | 282 | HA.fall(&HAL); |
oguro | 0:dcfc6150c1d6 | 283 | HC.rise(&HCH); |
oguro | 0:dcfc6150c1d6 | 284 | HB.fall(&HBL);*/ |
oguro | 0:dcfc6150c1d6 | 285 | |
oguro | 0:dcfc6150c1d6 | 286 | HA.rise(&HAH); |
oguro | 0:dcfc6150c1d6 | 287 | HC.fall(&HCL); |
oguro | 0:dcfc6150c1d6 | 288 | HB.rise(&HBH); |
oguro | 0:dcfc6150c1d6 | 289 | HA.fall(&HAL); |
oguro | 0:dcfc6150c1d6 | 290 | HC.rise(&HCH); |
oguro | 0:dcfc6150c1d6 | 291 | HB.fall(&HBL); |
oguro | 0:dcfc6150c1d6 | 292 | |
oguro | 0:dcfc6150c1d6 | 293 | Speed=60*(1/(7.0*2.0*usi*1E-6)); |
oguro | 0:dcfc6150c1d6 | 294 | |
oguro | 0:dcfc6150c1d6 | 295 | if(Vr_adc < 0.05f){ |
oguro | 0:dcfc6150c1d6 | 296 | q=0; |
oguro | 0:dcfc6150c1d6 | 297 | Vr_adc=0; |
oguro | 0:dcfc6150c1d6 | 298 | vector=0; |
oguro | 0:dcfc6150c1d6 | 299 | vst=0; |
oguro | 0:dcfc6150c1d6 | 300 | i=0; |
oguro | 0:dcfc6150c1d6 | 301 | } |
oguro | 0:dcfc6150c1d6 | 302 | |
oguro | 0:dcfc6150c1d6 | 303 | ui=ui+1; |
oguro | 0:dcfc6150c1d6 | 304 | vi=vi+1; |
oguro | 0:dcfc6150c1d6 | 305 | wi=wi+1; |
oguro | 0:dcfc6150c1d6 | 306 | vect++; |
oguro | 0:dcfc6150c1d6 | 307 | /* if(Curr_ui>0.48){ //&&(vtv==0)){ |
oguro | 0:dcfc6150c1d6 | 308 | vect=0; |
oguro | 0:dcfc6150c1d6 | 309 | |
oguro | 0:dcfc6150c1d6 | 310 | vtv=1; |
oguro | 0:dcfc6150c1d6 | 311 | vcl=1; |
oguro | 0:dcfc6150c1d6 | 312 | }*/ |
oguro | 0:dcfc6150c1d6 | 313 | /* if((Curr_ui<=0.4)&&(vtv==0)){ |
oguro | 0:dcfc6150c1d6 | 314 | // vect=0; |
oguro | 0:dcfc6150c1d6 | 315 | vtv=1; |
oguro | 0:dcfc6150c1d6 | 316 | vcl=0; |
oguro | 0:dcfc6150c1d6 | 317 | }*/ |
oguro | 0:dcfc6150c1d6 | 318 | /*if(vect==100000){ |
oguro | 0:dcfc6150c1d6 | 319 | vtv=1; |
oguro | 0:dcfc6150c1d6 | 320 | }*/ |
oguro | 0:dcfc6150c1d6 | 321 | |
oguro | 0:dcfc6150c1d6 | 322 | if(vector==0){ |
oguro | 0:dcfc6150c1d6 | 323 | thu=2*PI*(1/(usi*1E-6))*ui*1.54E-4; //1.24E-4 |
oguro | 0:dcfc6150c1d6 | 324 | thv=2*PI*(1/(vsi*1E-6))*vi*1.54E-4; |
oguro | 0:dcfc6150c1d6 | 325 | thw=2*PI*(1/(wsi*1E-6))*wi*1.54E-4; |
oguro | 0:dcfc6150c1d6 | 326 | |
oguro | 0:dcfc6150c1d6 | 327 | thave=(thu+thv+thw)/3; |
oguro | 0:dcfc6150c1d6 | 328 | th=thu; |
oguro | 0:dcfc6150c1d6 | 329 | s=0; |
oguro | 0:dcfc6150c1d6 | 330 | } |
oguro | 0:dcfc6150c1d6 | 331 | if((vector==1)){ |
oguro | 0:dcfc6150c1d6 | 332 | if((Speed > 500)&&(Speed <=1000)){ |
oguro | 0:dcfc6150c1d6 | 333 | |
oguro | 0:dcfc6150c1d6 | 334 | Vqp=0.6*Vq; |
oguro | 0:dcfc6150c1d6 | 335 | th=W*vect*1.1E-4; |
oguro | 0:dcfc6150c1d6 | 336 | |
oguro | 0:dcfc6150c1d6 | 337 | } |
oguro | 0:dcfc6150c1d6 | 338 | if((Speed > 1000)&&(Speed <=1500)){//1000 |
oguro | 0:dcfc6150c1d6 | 339 | |
oguro | 0:dcfc6150c1d6 | 340 | Vqp=0.6*Vq; //0.5 |
oguro | 0:dcfc6150c1d6 | 341 | th=W*vect*1.1E-4; |
oguro | 0:dcfc6150c1d6 | 342 | |
oguro | 0:dcfc6150c1d6 | 343 | } |
oguro | 0:dcfc6150c1d6 | 344 | if((Speed > 1500)&&(Speed <=2000)){ |
oguro | 0:dcfc6150c1d6 | 345 | |
oguro | 0:dcfc6150c1d6 | 346 | Vqp=0.6*Vq; //0.65 |
oguro | 0:dcfc6150c1d6 | 347 | th=W*vect*1.1E-4; |
oguro | 0:dcfc6150c1d6 | 348 | |
oguro | 0:dcfc6150c1d6 | 349 | } |
oguro | 0:dcfc6150c1d6 | 350 | if((Speed > 2000)&&(Speed <=2500)){ |
oguro | 0:dcfc6150c1d6 | 351 | |
oguro | 0:dcfc6150c1d6 | 352 | Vqp=0.5*Vq; |
oguro | 0:dcfc6150c1d6 | 353 | th=W*vect*1.15E-4; |
oguro | 0:dcfc6150c1d6 | 354 | |
oguro | 0:dcfc6150c1d6 | 355 | } |
oguro | 0:dcfc6150c1d6 | 356 | if((Speed > 2500)&&(Speed <=3000)){ |
oguro | 0:dcfc6150c1d6 | 357 | |
oguro | 0:dcfc6150c1d6 | 358 | Vqp=0.6*Vq; |
oguro | 0:dcfc6150c1d6 | 359 | th=W*vect*1.2E-4; |
oguro | 0:dcfc6150c1d6 | 360 | |
oguro | 0:dcfc6150c1d6 | 361 | } |
oguro | 0:dcfc6150c1d6 | 362 | if((Speed > 3000)&&(Speed <=3500)){ |
oguro | 0:dcfc6150c1d6 | 363 | |
oguro | 0:dcfc6150c1d6 | 364 | Vqp=0.7*Vq; |
oguro | 0:dcfc6150c1d6 | 365 | th=W*vect*1.25E-4; |
oguro | 0:dcfc6150c1d6 | 366 | |
oguro | 0:dcfc6150c1d6 | 367 | } |
oguro | 0:dcfc6150c1d6 | 368 | if((Speed > 3500)&&(Speed <=4000)){ |
oguro | 0:dcfc6150c1d6 | 369 | |
oguro | 0:dcfc6150c1d6 | 370 | Vqp=0.8*Vq; |
oguro | 0:dcfc6150c1d6 | 371 | th=W*vect*1.3E-4; |
oguro | 0:dcfc6150c1d6 | 372 | |
oguro | 0:dcfc6150c1d6 | 373 | } |
oguro | 0:dcfc6150c1d6 | 374 | if((Speed > 4000)&&(Speed <=4500)){ |
oguro | 0:dcfc6150c1d6 | 375 | |
oguro | 0:dcfc6150c1d6 | 376 | Vqp=0.9*Vq; |
oguro | 0:dcfc6150c1d6 | 377 | th=W*vect*1.35E-4; |
oguro | 0:dcfc6150c1d6 | 378 | |
oguro | 0:dcfc6150c1d6 | 379 | } |
oguro | 0:dcfc6150c1d6 | 380 | if((Speed > 4500)&&(Speed <=5000)){ |
oguro | 0:dcfc6150c1d6 | 381 | |
oguro | 0:dcfc6150c1d6 | 382 | Vqp=1.0*Vq; |
oguro | 0:dcfc6150c1d6 | 383 | th=W*vect*1.4E-4; |
oguro | 0:dcfc6150c1d6 | 384 | |
oguro | 0:dcfc6150c1d6 | 385 | } |
oguro | 0:dcfc6150c1d6 | 386 | if((Speed > 5000)&&(Speed <= 6000)){ |
oguro | 0:dcfc6150c1d6 | 387 | |
oguro | 0:dcfc6150c1d6 | 388 | Vqp=1.2*Vq; |
oguro | 0:dcfc6150c1d6 | 389 | th=W*vect*1.45E-4; |
oguro | 0:dcfc6150c1d6 | 390 | |
oguro | 0:dcfc6150c1d6 | 391 | } |
oguro | 0:dcfc6150c1d6 | 392 | if((Speed > 6000)){ |
oguro | 0:dcfc6150c1d6 | 393 | |
oguro | 0:dcfc6150c1d6 | 394 | Vqp=1.3*Vq; |
oguro | 0:dcfc6150c1d6 | 395 | th=W*vect*1.5E-4; |
oguro | 0:dcfc6150c1d6 | 396 | |
oguro | 0:dcfc6150c1d6 | 397 | } |
oguro | 0:dcfc6150c1d6 | 398 | |
oguro | 0:dcfc6150c1d6 | 399 | // th=(W*((vst*1.0E-6))); //1.0E-4 @HAL |
oguro | 0:dcfc6150c1d6 | 400 | th=W*vect*0.75E-4; |
oguro | 0:dcfc6150c1d6 | 401 | } |
oguro | 0:dcfc6150c1d6 | 402 | |
oguro | 0:dcfc6150c1d6 | 403 | if(vector==0){ |
oguro | 0:dcfc6150c1d6 | 404 | su=sin(thu); |
oguro | 0:dcfc6150c1d6 | 405 | sv=sin(thv); |
oguro | 0:dcfc6150c1d6 | 406 | sw=sin(thw); |
oguro | 0:dcfc6150c1d6 | 407 | |
oguro | 0:dcfc6150c1d6 | 408 | mypwmA.write(su*Vr_adc); |
oguro | 0:dcfc6150c1d6 | 409 | mypwmB.write(sv*Vr_adc); |
oguro | 0:dcfc6150c1d6 | 410 | mypwmC.write(sw*Vr_adc); |
oguro | 0:dcfc6150c1d6 | 411 | } |
oguro | 0:dcfc6150c1d6 | 412 | if((vector==1)){ |
oguro | 0:dcfc6150c1d6 | 413 | EN1=1; |
oguro | 0:dcfc6150c1d6 | 414 | EN2=1; |
oguro | 0:dcfc6150c1d6 | 415 | EN3=1; |
oguro | 1:e45063ee4be0 | 416 | mypwmA.write(wvect); |
oguro | 0:dcfc6150c1d6 | 417 | mypwmB.write(vvect); |
oguro | 1:e45063ee4be0 | 418 | mypwmC.write(uvect); |
oguro | 0:dcfc6150c1d6 | 419 | } |
oguro | 0:dcfc6150c1d6 | 420 | |
oguro | 0:dcfc6150c1d6 | 421 | myled = !myled; |
oguro | 0:dcfc6150c1d6 | 422 | |
oguro | 0:dcfc6150c1d6 | 423 | Curr_u=(Curr_ui); |
oguro | 0:dcfc6150c1d6 | 424 | Curr_v=(Curr_vi); |
oguro | 0:dcfc6150c1d6 | 425 | Curr_w=(Curr_wi); |
oguro | 0:dcfc6150c1d6 | 426 | |
oguro | 0:dcfc6150c1d6 | 427 | float Itau=10.0E-6,Idt=1.0E-6; // Itau=1.0E-6,Idt=1.0E-6 |
oguro | 0:dcfc6150c1d6 | 428 | /****Filter Iu********/ |
oguro | 0:dcfc6150c1d6 | 429 | float Iu1,Iu2,Iu3,Iu4;//0.01 |
oguro | 0:dcfc6150c1d6 | 430 | Iu1=Idt*(Curr_u-iuvw[0])/Itau; |
oguro | 0:dcfc6150c1d6 | 431 | Iu2=Idt*(Curr_u-(iuvw[0]+Iu1/2.0))/Itau; |
oguro | 0:dcfc6150c1d6 | 432 | Iu3=Idt*(Curr_u-(iuvw[0]+Iu2/2.0))/Itau; |
oguro | 0:dcfc6150c1d6 | 433 | Iu4=Idt*(Curr_u-(iuvw[0]+Iu3))/Itau; |
oguro | 0:dcfc6150c1d6 | 434 | iuvw[0]=iuvw[0]+(Iu1+2.0*Iu2+2.0*Iu3+Iu4)/6.0; |
oguro | 0:dcfc6150c1d6 | 435 | /*************************************/ |
oguro | 0:dcfc6150c1d6 | 436 | /****Filter Iv********/ |
oguro | 0:dcfc6150c1d6 | 437 | float Iv1,Iv2,Iv3,Iv4;//0.01 |
oguro | 0:dcfc6150c1d6 | 438 | Iv1=Idt*(Curr_v-iuvw[1])/Itau; |
oguro | 0:dcfc6150c1d6 | 439 | Iv2=Idt*(Curr_v-(iuvw[1]+Iv1/2.0))/Itau; |
oguro | 0:dcfc6150c1d6 | 440 | Iv3=Idt*(Curr_v-(iuvw[1]+Iv2/2.0))/Itau; |
oguro | 0:dcfc6150c1d6 | 441 | Iv4=Idt*(Curr_v-(iuvw[1]+Iv3))/Itau; |
oguro | 0:dcfc6150c1d6 | 442 | iuvw[1]=iuvw[1]+(Iv1+2.0*Iv2+2.0*Iv3+Iv4)/6.0; |
oguro | 0:dcfc6150c1d6 | 443 | /*************************************/ |
oguro | 0:dcfc6150c1d6 | 444 | /****Filter Iw********/ |
oguro | 0:dcfc6150c1d6 | 445 | float Iw1,Iw2,Iw3,Iw4;//0.01 |
oguro | 0:dcfc6150c1d6 | 446 | Iw1=Idt*(Curr_w-iuvw[2])/Itau; |
oguro | 0:dcfc6150c1d6 | 447 | Iw2=Idt*(Curr_w-(iuvw[2]+Iw1/2.0))/Itau; |
oguro | 0:dcfc6150c1d6 | 448 | Iw3=Idt*(Curr_w-(iuvw[2]+Iw2/2.0))/Itau; |
oguro | 0:dcfc6150c1d6 | 449 | Iw4=Idt*(Curr_w-(iuvw[2]+Iw3))/Itau; |
oguro | 0:dcfc6150c1d6 | 450 | iuvw[2]=iuvw[2]+(Iw1+2.0*Iw2+2.0*Iw3+Iw4)/6.0; |
oguro | 0:dcfc6150c1d6 | 451 | /*************************************/ |
oguro | 0:dcfc6150c1d6 | 452 | |
oguro | 0:dcfc6150c1d6 | 453 | iabi[0]=(iuvw[0]+iuvw[1]*cos23+iuvw[2]*cos43)*zet; |
oguro | 0:dcfc6150c1d6 | 454 | iabi[1]=(iuvw[1]*sin23+iuvw[2]*sin43)*zet; |
oguro | 0:dcfc6150c1d6 | 455 | /****Filter Ia********/ |
oguro | 0:dcfc6150c1d6 | 456 | float Ia1,Ia2,Ia3,Ia4; |
oguro | 0:dcfc6150c1d6 | 457 | float Iatau= 3.0E-6,Iadt=1.0E-6; //2.0E-4 1.0E-6 |
oguro | 0:dcfc6150c1d6 | 458 | Ia1=Iadt*(iabi[0]-iab[0])/Iatau; |
oguro | 0:dcfc6150c1d6 | 459 | Ia2=Iadt*(iabi[0]-(iab[0]+Ia1/2.0))/Iatau; |
oguro | 0:dcfc6150c1d6 | 460 | Ia3=Iadt*(iabi[0]-(iab[0]+Ia2/2.0))/Iatau; |
oguro | 0:dcfc6150c1d6 | 461 | Ia4=Iadt*(iabi[0]-(iab[0]+Ia3))/Iatau; |
oguro | 0:dcfc6150c1d6 | 462 | iab[0]=iab[0]+(Ia1+2.0*Ia2+2.0*Ia3+Ia4)/6.0; |
oguro | 0:dcfc6150c1d6 | 463 | /*************************************/ |
oguro | 0:dcfc6150c1d6 | 464 | |
oguro | 0:dcfc6150c1d6 | 465 | /****Filter Ib********/ |
oguro | 0:dcfc6150c1d6 | 466 | float Ib1,Ib2,Ib3,Ib4;//0.01 |
oguro | 0:dcfc6150c1d6 | 467 | float Ibtau= 3.0E-6,Ibdt=1.0E-6; //2.0E-2 1.0E-6 |
oguro | 0:dcfc6150c1d6 | 468 | Ib1=Ibdt*(iabi[1]-iab[1])/Ibtau; |
oguro | 0:dcfc6150c1d6 | 469 | Ib2=Ibdt*(iabi[1]-(iab[1]+Ib1/2.0))/Ibtau; |
oguro | 0:dcfc6150c1d6 | 470 | Ib3=Ibdt*(iabi[1]-(iab[1]+Ib2/2.0))/Ibtau; |
oguro | 0:dcfc6150c1d6 | 471 | Ib4=Ibdt*(iabi[1]-(iab[1]+Ib3))/Ibtau; |
oguro | 0:dcfc6150c1d6 | 472 | iab[1]=iab[1]+(Ib1+2.0*Ib2+2.0*Ib3+Ib4)/6.0; |
oguro | 0:dcfc6150c1d6 | 473 | /*************************************/ |
oguro | 0:dcfc6150c1d6 | 474 | |
oguro | 0:dcfc6150c1d6 | 475 | idq[0]=cos(th)*iab[0]+sin(th)*iab[1]; |
oguro | 0:dcfc6150c1d6 | 476 | idq[1]=-sin(th)*iab[0]+cos(th)*iab[1]; |
oguro | 0:dcfc6150c1d6 | 477 | |
oguro | 0:dcfc6150c1d6 | 478 | /****Filter Id********/ |
oguro | 0:dcfc6150c1d6 | 479 | /* float Id1,Id2,Id3,Id4; |
oguro | 0:dcfc6150c1d6 | 480 | float Idtau= 2.0E-4,Iddt=1.0E-6; |
oguro | 0:dcfc6150c1d6 | 481 | Id1=Iddt*(idqi[0]-idq[0])/Idtau; |
oguro | 0:dcfc6150c1d6 | 482 | Id2=Iddt*(idqi[0]-(idq[0]+Id1/2.0))/Idtau; |
oguro | 0:dcfc6150c1d6 | 483 | Id3=Iddt*(idqi[0]-(idq[0]+Id2/2.0))/Idtau; |
oguro | 0:dcfc6150c1d6 | 484 | Id4=Iddt*(idqi[0]-(idq[0]+Id3))/Idtau; |
oguro | 0:dcfc6150c1d6 | 485 | idq[0]=idq[0]+(Id1+2.0*Id2+2.0*Id3+Id4)/6.0;*/ |
oguro | 0:dcfc6150c1d6 | 486 | /*************************************/ |
oguro | 0:dcfc6150c1d6 | 487 | |
oguro | 0:dcfc6150c1d6 | 488 | /****Filter Iq********/ |
oguro | 0:dcfc6150c1d6 | 489 | /* float Iq1,Iq2,Iq3,Iq4;//0.01 |
oguro | 0:dcfc6150c1d6 | 490 | float Iqtau= 2.0E-4,Iqdt=1.0E-6; //2.0E-2 1.0E-6 |
oguro | 0:dcfc6150c1d6 | 491 | Iq1=Iqdt*(idqi[1]-idq[1])/Iqtau; |
oguro | 0:dcfc6150c1d6 | 492 | Iq2=Iqdt*(idqi[1]-(idq[1]+Iq1/2.0))/Iqtau; |
oguro | 0:dcfc6150c1d6 | 493 | Iq3=Iqdt*(idqi[1]-(idq[1]+Iq2/2.0))/Iqtau; |
oguro | 0:dcfc6150c1d6 | 494 | Iq4=Iqdt*(idqi[1]-(idq[1]+Iq3))/Iqtau; |
oguro | 0:dcfc6150c1d6 | 495 | idq[1]=idq[1]+(Iq1+2.0*Iq2+2.0*Iq3+Iq4)/6.0;*/ |
oguro | 0:dcfc6150c1d6 | 496 | /*************************************/ |
oguro | 0:dcfc6150c1d6 | 497 | |
oguro | 0:dcfc6150c1d6 | 498 | /*****PID Id *****/ |
oguro | 0:dcfc6150c1d6 | 499 | Idin=0.1-idq[0]; // -0.2 |
oguro | 0:dcfc6150c1d6 | 500 | float adi,bdi,cdi,workdi[2]; |
oguro | 0:dcfc6150c1d6 | 501 | float kpdi=3.0,kidi=1.5,kddi=0.0; //0.3 0.1 0.0 |
oguro | 0:dcfc6150c1d6 | 502 | float dtdi=10.0E-6;//1E-5 |
oguro | 0:dcfc6150c1d6 | 503 | adi=Idin; |
oguro | 0:dcfc6150c1d6 | 504 | bdi=workdi[1]+(Idin+workdi[0])/2.0*dtdi; |
oguro | 0:dcfc6150c1d6 | 505 | cdi=(Idin-workdi[0])/dtdi; |
oguro | 0:dcfc6150c1d6 | 506 | workdi[0]=Idin; |
oguro | 0:dcfc6150c1d6 | 507 | workdi[1]=bdi; |
oguro | 0:dcfc6150c1d6 | 508 | Vd=adi*kpdi+bdi*kidi+cdi*kddi; |
oguro | 0:dcfc6150c1d6 | 509 | /**********************************/ |
oguro | 0:dcfc6150c1d6 | 510 | |
oguro | 0:dcfc6150c1d6 | 511 | /*****PID Iq *****/ |
oguro | 0:dcfc6150c1d6 | 512 | Iqin=(Vr_adc)-idq[1]; //kaisha 600 ie 500 |
oguro | 0:dcfc6150c1d6 | 513 | float aqi,bqi,cqi,workqi[2]; |
oguro | 0:dcfc6150c1d6 | 514 | float kpqi=2.0,kiqi=0.7,kdqi=0.0; // 1.0 0.7 |
oguro | 0:dcfc6150c1d6 | 515 | float dtqi=10.0E-6;//1E-2 |
oguro | 0:dcfc6150c1d6 | 516 | aqi=Iqin; |
oguro | 0:dcfc6150c1d6 | 517 | bqi=workqi[1]+(Iqin+workqi[0])/2.0*dtqi; |
oguro | 0:dcfc6150c1d6 | 518 | cqi=(Iqin-workqi[0])/dtqi; |
oguro | 0:dcfc6150c1d6 | 519 | workqi[0]=Iqin; |
oguro | 0:dcfc6150c1d6 | 520 | workdi[1]=bqi; |
oguro | 0:dcfc6150c1d6 | 521 | Vq=(aqi*kpqi+bqi*kiqi+cqi*kdqi); |
oguro | 0:dcfc6150c1d6 | 522 | /***************************************/ |
oguro | 0:dcfc6150c1d6 | 523 | usi=ut2-ut1; |
oguro | 0:dcfc6150c1d6 | 524 | vsi=vt2-vt1; |
oguro | 0:dcfc6150c1d6 | 525 | wsi=wt2-wt1; |
oguro | 0:dcfc6150c1d6 | 526 | |
oguro | 0:dcfc6150c1d6 | 527 | if(i<10000){ |
oguro | 0:dcfc6150c1d6 | 528 | vst=vsi; |
oguro | 0:dcfc6150c1d6 | 529 | vstf=vst; |
oguro | 0:dcfc6150c1d6 | 530 | } |
oguro | 0:dcfc6150c1d6 | 531 | else { |
oguro | 0:dcfc6150c1d6 | 532 | |
oguro | 0:dcfc6150c1d6 | 533 | |
oguro | 0:dcfc6150c1d6 | 534 | |
oguro | 0:dcfc6150c1d6 | 535 | vst=vstf; |
oguro | 0:dcfc6150c1d6 | 536 | i=10000; |
oguro | 0:dcfc6150c1d6 | 537 | |
oguro | 0:dcfc6150c1d6 | 538 | Wz=(2*PI)/(vst*1E-6); //vst |
oguro | 0:dcfc6150c1d6 | 539 | Ed= (Vq)-0.11f*idq[1]-Wz*0.018E-3*idq[0];//0.018E-3 0.11 |
oguro | 0:dcfc6150c1d6 | 540 | phm=Ed/(Wz); |
oguro | 0:dcfc6150c1d6 | 541 | dth=(Vd-0.11f*(idq[0])+Wz*0.018E-3*(idq[1]))/(Wz*phm); // Vd 0.018E-3 |
oguro | 0:dcfc6150c1d6 | 542 | eth=asin(dth); |
oguro | 0:dcfc6150c1d6 | 543 | |
oguro | 0:dcfc6150c1d6 | 544 | /*****PID θ *****/ |
oguro | 0:dcfc6150c1d6 | 545 | //PLL |
oguro | 0:dcfc6150c1d6 | 546 | float as,bs,cs,works[2]; |
oguro | 0:dcfc6150c1d6 | 547 | float kps=5.0,kis=2.0,kds=0.0; |
oguro | 0:dcfc6150c1d6 | 548 | float dts=1.0E-3;//1.0E-6 |
oguro | 0:dcfc6150c1d6 | 549 | Xsi=0.0-eth; |
oguro | 0:dcfc6150c1d6 | 550 | as=Xsi; |
oguro | 0:dcfc6150c1d6 | 551 | bs=works[1]+(Xsi+works[0])/2.0*dts; |
oguro | 0:dcfc6150c1d6 | 552 | cs=(Xsi-works[0])/dts; |
oguro | 0:dcfc6150c1d6 | 553 | works[0]=Xsi; |
oguro | 0:dcfc6150c1d6 | 554 | works[1]=bs; |
oguro | 0:dcfc6150c1d6 | 555 | therr=as*kps+bs*kis+cs*kds; |
oguro | 0:dcfc6150c1d6 | 556 | /*******PLL W ***********/ |
oguro | 0:dcfc6150c1d6 | 557 | if(therr>0.2){ //0.01 |
oguro | 0:dcfc6150c1d6 | 558 | W=(2*PI)/((vst*1E-6)+(therr/Wz)); //+ |
oguro | 0:dcfc6150c1d6 | 559 | } |
oguro | 0:dcfc6150c1d6 | 560 | if(therr<-0.01){ //0.01 |
oguro | 0:dcfc6150c1d6 | 561 | W=(2*PI)/((vst*1E-6)-(therr/Wz)); //- |
oguro | 0:dcfc6150c1d6 | 562 | } |
oguro | 0:dcfc6150c1d6 | 563 | /*****PID ω *****/ |
oguro | 0:dcfc6150c1d6 | 564 | Xin=6500*(1.25-Vr_adc)-vst; // 6500 1.15 |
oguro | 0:dcfc6150c1d6 | 565 | float a,b,c,work[2]; |
oguro | 0:dcfc6150c1d6 | 566 | float kp=1.1,ki=0.7,kd=0.0; // 1.2 0.7 0.0 |
oguro | 1:e45063ee4be0 | 567 | float dt=100E-6;//100E-6 |
oguro | 0:dcfc6150c1d6 | 568 | a=Xin; |
oguro | 0:dcfc6150c1d6 | 569 | b=work[1]+(Xin+work[0])/2.0*dt; |
oguro | 0:dcfc6150c1d6 | 570 | c=(Xin-work[0])/dt; |
oguro | 0:dcfc6150c1d6 | 571 | work[0]=Xin; |
oguro | 0:dcfc6150c1d6 | 572 | work[1]=b; |
oguro | 0:dcfc6150c1d6 | 573 | Xout=a*kp+b*ki+c*kd; |
oguro | 0:dcfc6150c1d6 | 574 | vstt=Xout; |
oguro | 0:dcfc6150c1d6 | 575 | /********************************/ |
oguro | 1:e45063ee4be0 | 576 | if(3000>abs(vst-vstt)){ //2000 |
oguro | 0:dcfc6150c1d6 | 577 | vsti=vstt; //vstt |
oguro | 0:dcfc6150c1d6 | 578 | vector=1; |
oguro | 0:dcfc6150c1d6 | 579 | } |
oguro | 0:dcfc6150c1d6 | 580 | else{ |
oguro | 0:dcfc6150c1d6 | 581 | vsti=vst; |
oguro | 0:dcfc6150c1d6 | 582 | vector=0; |
oguro | 0:dcfc6150c1d6 | 583 | } |
oguro | 0:dcfc6150c1d6 | 584 | /****Filter********/ |
oguro | 0:dcfc6150c1d6 | 585 | float dttt=100.0E-6;//100E-6 |
oguro | 0:dcfc6150c1d6 | 586 | float k11,k22,k33,k44,tau1=0.01;//0.01 |
oguro | 0:dcfc6150c1d6 | 587 | k11=dttt*(vsti-vstf)/tau1; |
oguro | 0:dcfc6150c1d6 | 588 | k22=dttt*(vsti-(vstf+k11/2.0))/tau1; |
oguro | 0:dcfc6150c1d6 | 589 | k33=dttt*(vsti-(vstf+k22/2.0))/tau1; |
oguro | 0:dcfc6150c1d6 | 590 | k44=dttt*(vsti-(vstf+k33/2.0))/tau1; |
oguro | 0:dcfc6150c1d6 | 591 | vstf=vstf+(k11+2.0*k22+2.0*k33+k44)/6.0; |
oguro | 0:dcfc6150c1d6 | 592 | /*************************************/ |
oguro | 0:dcfc6150c1d6 | 593 | |
oguro | 0:dcfc6150c1d6 | 594 | }//else kokomade |
oguro | 0:dcfc6150c1d6 | 595 | |
oguro | 0:dcfc6150c1d6 | 596 | |
oguro | 0:dcfc6150c1d6 | 597 | Vab[0]=cos(th)*Vd-sin(th)*Vqp;//Vqp |
oguro | 0:dcfc6150c1d6 | 598 | Vab[1]=sin(th)*Vd+cos(th)*Vqp; |
oguro | 0:dcfc6150c1d6 | 599 | |
oguro | 0:dcfc6150c1d6 | 600 | |
oguro | 0:dcfc6150c1d6 | 601 | uvect=(Vab[0]*zet); |
oguro | 0:dcfc6150c1d6 | 602 | vvect=((Vab[0]*cos23+Vab[1]*sin23)*zet); |
oguro | 0:dcfc6150c1d6 | 603 | wvect=((Vab[0]*cos43+Vab[1]*sin43)*zet); |
oguro | 0:dcfc6150c1d6 | 604 | |
oguro | 0:dcfc6150c1d6 | 605 | // SWAVE=Vd; |
oguro | 0:dcfc6150c1d6 | 606 | // SWAVE=th/4; |
oguro | 0:dcfc6150c1d6 | 607 | // SWAVE=Vq; |
oguro | 0:dcfc6150c1d6 | 608 | // SWAVE=West/5000; |
oguro | 0:dcfc6150c1d6 | 609 | //SWAVE=Wo/5000; |
oguro | 0:dcfc6150c1d6 | 610 | //SWAVE=Wz/5000; |
oguro | 0:dcfc6150c1d6 | 611 | // SWAVE=sin(svv); |
oguro | 0:dcfc6150c1d6 | 612 | // SWAVE=iab[0]+0.5; |
oguro | 0:dcfc6150c1d6 | 613 | //SWAVE=Ed; |
oguro | 0:dcfc6150c1d6 | 614 | // SWAVE=therr+0.5; |
oguro | 0:dcfc6150c1d6 | 615 | //SWAVE=idq[1]; |
oguro | 0:dcfc6150c1d6 | 616 | // SWAVE=Curr_v; |
oguro | 0:dcfc6150c1d6 | 617 | // SWAVE=iuvw[1]; |
oguro | 0:dcfc6150c1d6 | 618 | // SWAVE=vst/5000; |
oguro | 0:dcfc6150c1d6 | 619 | //SWAVE=Vab[1]; |
oguro | 0:dcfc6150c1d6 | 620 | SWAVE=iuvw[0]; |
oguro | 0:dcfc6150c1d6 | 621 | //SWAVE=vvect; |
oguro | 0:dcfc6150c1d6 | 622 | //SWAVE=BEMF1; |
oguro | 0:dcfc6150c1d6 | 623 | Vector=vector; |
oguro | 0:dcfc6150c1d6 | 624 | i++; |
oguro | 0:dcfc6150c1d6 | 625 | } |
oguro | 0:dcfc6150c1d6 | 626 | } |