akiyoshi oguro / Mbed 2 deprecated Vector_Open_sin_2

Dependencies:   mbed mbed-rtos

Committer:
oguro
Date:
Fri Aug 21 01:35:16 2020 +0000
Revision:
0:0e03ba4a9509
Open sinewave Ver2

Who changed what in which revision?

UserRevisionLine numberNew contents of line
oguro 0:0e03ba4a9509 1 #include "mbed.h"
oguro 0:0e03ba4a9509 2 #include "rtos.h"
oguro 0:0e03ba4a9509 3 //#include "adc.h"
oguro 0:0e03ba4a9509 4 #include <math.h>
oguro 0:0e03ba4a9509 5 #define TS1 0.2
oguro 0:0e03ba4a9509 6
oguro 0:0e03ba4a9509 7 float PI=3.141592;
oguro 0:0e03ba4a9509 8 int t=0,q=0,i=0;
oguro 0:0e03ba4a9509 9 int START=7;
oguro 0:0e03ba4a9509 10 PwmOut mypwmA(PA_8);
oguro 0:0e03ba4a9509 11 PwmOut mypwmB(PA_9);
oguro 0:0e03ba4a9509 12 PwmOut mypwmC(PA_10);
oguro 0:0e03ba4a9509 13
oguro 0:0e03ba4a9509 14 PwmOut Current_Ref(PB_4);
oguro 0:0e03ba4a9509 15
oguro 0:0e03ba4a9509 16 DigitalOut Vector(PC_4);
oguro 0:0e03ba4a9509 17 DigitalOut EN1(PC_10);
oguro 0:0e03ba4a9509 18 DigitalOut EN2(PC_11);
oguro 0:0e03ba4a9509 19 DigitalOut EN3(PC_12);
oguro 0:0e03ba4a9509 20
oguro 0:0e03ba4a9509 21
oguro 0:0e03ba4a9509 22
oguro 0:0e03ba4a9509 23 //AnalogIn V_adc(PB_1); //volume
oguro 0:0e03ba4a9509 24 AnalogIn V_adc(PC_2); // Gaibu Potention
oguro 0:0e03ba4a9509 25
oguro 0:0e03ba4a9509 26 AnalogIn Vshuntu(PA_1);
oguro 0:0e03ba4a9509 27 AnalogIn Vshuntv(PA_0);
oguro 0:0e03ba4a9509 28 AnalogIn Vshuntw(PB_0);
oguro 0:0e03ba4a9509 29
oguro 0:0e03ba4a9509 30 AnalogIn BEMF1(PC_3);//C7_37
oguro 0:0e03ba4a9509 31 AnalogIn BEMF2(PB_0);//C7_34
oguro 0:0e03ba4a9509 32 AnalogIn BEMF3(PA_7);//C10_26
oguro 0:0e03ba4a9509 33
oguro 0:0e03ba4a9509 34 InterruptIn HA(PA_15);
oguro 0:0e03ba4a9509 35 InterruptIn HB(PB_3);
oguro 0:0e03ba4a9509 36 InterruptIn HC(PB_10);
oguro 0:0e03ba4a9509 37 Timer uT;
oguro 0:0e03ba4a9509 38 Timer vT;
oguro 0:0e03ba4a9509 39 Timer wT;
oguro 0:0e03ba4a9509 40
oguro 0:0e03ba4a9509 41 //AnalogIn VBUS(PA_1);
oguro 0:0e03ba4a9509 42
oguro 0:0e03ba4a9509 43 DigitalIn GPIO_BEMF(PC_9);
oguro 0:0e03ba4a9509 44 DigitalIn CPOUT(PA_12);
oguro 0:0e03ba4a9509 45 AnalogIn Curr_ui(PA_0);
oguro 0:0e03ba4a9509 46 AnalogIn Curr_vi(PC_1);
oguro 0:0e03ba4a9509 47 AnalogIn Curr_wi(PA_1);
oguro 0:0e03ba4a9509 48
oguro 0:0e03ba4a9509 49 AnalogOut SWAVE(PA_4);
oguro 0:0e03ba4a9509 50
oguro 0:0e03ba4a9509 51 Serial pc(USBTX,USBRX);
oguro 0:0e03ba4a9509 52
oguro 0:0e03ba4a9509 53 DigitalOut myled(LED1);
oguro 0:0e03ba4a9509 54 float sq32=sqrt(3.0f/2.0f);
oguro 0:0e03ba4a9509 55 float sq23=2.0f/sqrt(3.0f);
oguro 0:0e03ba4a9509 56 float sq3=1.0f/sqrt(3.0f);
oguro 0:0e03ba4a9509 57 float Vdlink=3.0f/5.0f;
oguro 0:0e03ba4a9509 58 float aVa;
oguro 0:0e03ba4a9509 59 float a3Vb;
oguro 0:0e03ba4a9509 60 float Vr_adc;
oguro 0:0e03ba4a9509 61
oguro 0:0e03ba4a9509 62 Timer Timer1;
oguro 0:0e03ba4a9509 63 float freq=0;
oguro 0:0e03ba4a9509 64 float z=0.5;
oguro 0:0e03ba4a9509 65 float Wt,Va,Vb,Vq,Vd;
oguro 0:0e03ba4a9509 66 float d1,d2,d3,d4,d5,d6,d07;
oguro 0:0e03ba4a9509 67 float du,dv,dw;
oguro 0:0e03ba4a9509 68 bool cu,cv,cw;
oguro 0:0e03ba4a9509 69 float ave=0,aveo=0,avsum=0;
oguro 0:0e03ba4a9509 70 float zet=sqrt(2.0f/3.0f),cos23=cos((2.0f/3.0f)*PI);
oguro 0:0e03ba4a9509 71 float cos43=cos((4.0f/3.0f)*PI),sin23=sin((2.0f/3.0f)*PI),sin43=sin((4.0f/3.0f)*PI);
oguro 0:0e03ba4a9509 72
oguro 0:0e03ba4a9509 73 float ut=0,ut1=0,ut2=0,usi=0;
oguro 0:0e03ba4a9509 74 float vt=0,vt1=0,vt2=0,vsi=0;
oguro 0:0e03ba4a9509 75 float wt=0,wt1=0,wt2=0,wsi=0;
oguro 0:0e03ba4a9509 76 float Speed;
oguro 0:0e03ba4a9509 77
oguro 0:0e03ba4a9509 78 void HAH(){
oguro 0:0e03ba4a9509 79
oguro 0:0e03ba4a9509 80 ut1=uT.read_us();
oguro 0:0e03ba4a9509 81 ut=0;
oguro 0:0e03ba4a9509 82
oguro 0:0e03ba4a9509 83 }
oguro 0:0e03ba4a9509 84 void HAL(){
oguro 0:0e03ba4a9509 85
oguro 0:0e03ba4a9509 86 ut2=uT.read_us();
oguro 0:0e03ba4a9509 87 uT.reset();
oguro 0:0e03ba4a9509 88
oguro 0:0e03ba4a9509 89 }
oguro 0:0e03ba4a9509 90 void HBH(){
oguro 0:0e03ba4a9509 91
oguro 0:0e03ba4a9509 92 vt1=vT.read_us();
oguro 0:0e03ba4a9509 93
oguro 0:0e03ba4a9509 94 }
oguro 0:0e03ba4a9509 95 void HBL(){
oguro 0:0e03ba4a9509 96
oguro 0:0e03ba4a9509 97 vt2=vT.read_us();
oguro 0:0e03ba4a9509 98
oguro 0:0e03ba4a9509 99 vT.reset();
oguro 0:0e03ba4a9509 100 }
oguro 0:0e03ba4a9509 101 void HCH(){
oguro 0:0e03ba4a9509 102 wt1=wT.read_us();
oguro 0:0e03ba4a9509 103
oguro 0:0e03ba4a9509 104 }
oguro 0:0e03ba4a9509 105
oguro 0:0e03ba4a9509 106 void HCL(){
oguro 0:0e03ba4a9509 107 wt2=wT.read_us();
oguro 0:0e03ba4a9509 108
oguro 0:0e03ba4a9509 109 wT.reset();
oguro 0:0e03ba4a9509 110 }
oguro 0:0e03ba4a9509 111
oguro 0:0e03ba4a9509 112
oguro 0:0e03ba4a9509 113
oguro 0:0e03ba4a9509 114 void CPLT(){
oguro 0:0e03ba4a9509 115 //pc.printf("%.3f , %.3f \r" ,Speed ,Vr_adc);
oguro 0:0e03ba4a9509 116 }
oguro 0:0e03ba4a9509 117
oguro 0:0e03ba4a9509 118 void timerTS1(void const*argument){
oguro 0:0e03ba4a9509 119 CPLT();
oguro 0:0e03ba4a9509 120 }
oguro 0:0e03ba4a9509 121
oguro 0:0e03ba4a9509 122 int main() {
oguro 0:0e03ba4a9509 123
oguro 0:0e03ba4a9509 124 Timer1.start();
oguro 0:0e03ba4a9509 125 EN1=1;
oguro 0:0e03ba4a9509 126 EN2=1;
oguro 0:0e03ba4a9509 127 EN3=1;
oguro 0:0e03ba4a9509 128
oguro 0:0e03ba4a9509 129 uT.start();
oguro 0:0e03ba4a9509 130 vT.start();
oguro 0:0e03ba4a9509 131 wT.start();
oguro 0:0e03ba4a9509 132
oguro 0:0e03ba4a9509 133 mypwmA.period_us(20);
oguro 0:0e03ba4a9509 134
oguro 0:0e03ba4a9509 135 mypwmB.period_us(20);
oguro 0:0e03ba4a9509 136
oguro 0:0e03ba4a9509 137 mypwmC.period_us(20);
oguro 0:0e03ba4a9509 138
oguro 0:0e03ba4a9509 139 pc.baud(128000);
oguro 0:0e03ba4a9509 140 /*RtosTimer RtosTimerTS1(timerTS1);
oguro 0:0e03ba4a9509 141 RtosTimerTS1.start((unsigned int)(TS1*5000)); //3000
oguro 0:0e03ba4a9509 142 Thread::wait(100); */
oguro 0:0e03ba4a9509 143
oguro 0:0e03ba4a9509 144 Vq=0.7;
oguro 0:0e03ba4a9509 145 Vd=0;
oguro 0:0e03ba4a9509 146
oguro 0:0e03ba4a9509 147 while(1) {
oguro 0:0e03ba4a9509 148
oguro 0:0e03ba4a9509 149
oguro 0:0e03ba4a9509 150
oguro 0:0e03ba4a9509 151
oguro 0:0e03ba4a9509 152 HA.rise(&HAH);
oguro 0:0e03ba4a9509 153 HC.fall(&HCL);
oguro 0:0e03ba4a9509 154 HB.rise(&HBH);
oguro 0:0e03ba4a9509 155 HA.fall(&HAL);
oguro 0:0e03ba4a9509 156 HC.rise(&HCH);
oguro 0:0e03ba4a9509 157 HB.fall(&HBL);
oguro 0:0e03ba4a9509 158 Speed=60*(1/(7.0*2.0*usi*1E-6));
oguro 0:0e03ba4a9509 159 usi=ut2-ut1;
oguro 0:0e03ba4a9509 160 vsi=vt2-vt1;
oguro 0:0e03ba4a9509 161 wsi=wt2-wt1;
oguro 0:0e03ba4a9509 162
oguro 0:0e03ba4a9509 163 float s = Timer1.read();
oguro 0:0e03ba4a9509 164 Vr_adc=V_adc.read();
oguro 0:0e03ba4a9509 165 myled = ((int)s) % 2 == 0; /* LED output(0.5Hz) */
oguro 0:0e03ba4a9509 166 if((Vr_adc>0.08f)&&(q==0)){
oguro 0:0e03ba4a9509 167
oguro 0:0e03ba4a9509 168 while(q<50){
oguro 0:0e03ba4a9509 169
oguro 0:0e03ba4a9509 170 mypwmA.write(0.5f);
oguro 0:0e03ba4a9509 171 mypwmB.write(0);
oguro 0:0e03ba4a9509 172 mypwmC.write(0);
oguro 0:0e03ba4a9509 173 wait_ms(START);
oguro 0:0e03ba4a9509 174
oguro 0:0e03ba4a9509 175 mypwmA.write(0);
oguro 0:0e03ba4a9509 176 mypwmB.write(0.5f);
oguro 0:0e03ba4a9509 177 mypwmC.write(0.0);
oguro 0:0e03ba4a9509 178 wait_ms(START);
oguro 0:0e03ba4a9509 179
oguro 0:0e03ba4a9509 180 mypwmA.write(0);
oguro 0:0e03ba4a9509 181 mypwmB.write(0.0);
oguro 0:0e03ba4a9509 182 mypwmC.write(0.5f);
oguro 0:0e03ba4a9509 183 wait_ms(START);
oguro 0:0e03ba4a9509 184 q++;
oguro 0:0e03ba4a9509 185
oguro 0:0e03ba4a9509 186 }
oguro 0:0e03ba4a9509 187 }
oguro 0:0e03ba4a9509 188 if(Vr_adc < 0.05f){
oguro 0:0e03ba4a9509 189 q=0;
oguro 0:0e03ba4a9509 190 Vr_adc=0;
oguro 0:0e03ba4a9509 191
oguro 0:0e03ba4a9509 192 }
oguro 0:0e03ba4a9509 193
oguro 0:0e03ba4a9509 194 aveo=Vr_adc;
oguro 0:0e03ba4a9509 195
oguro 0:0e03ba4a9509 196 if((aveo<=0.15)&&(aveo>0.1)){
oguro 0:0e03ba4a9509 197 Wt=fmodf(s * 50, 1) * PI* 2;
oguro 0:0e03ba4a9509 198 Vq=0.2;
oguro 0:0e03ba4a9509 199 }
oguro 0:0e03ba4a9509 200 if((aveo<=0.2)&&(aveo>0.15)){
oguro 0:0e03ba4a9509 201 Wt=fmodf(s * 55, 1) * PI* 2;
oguro 0:0e03ba4a9509 202 Vq=0.23;
oguro 0:0e03ba4a9509 203 }
oguro 0:0e03ba4a9509 204 if((aveo<=0.25)&&(aveo>0.2)){
oguro 0:0e03ba4a9509 205 Wt=fmodf(s * 60, 1) * PI* 2;
oguro 0:0e03ba4a9509 206 Vq=0.25;
oguro 0:0e03ba4a9509 207 }
oguro 0:0e03ba4a9509 208 if((aveo<=0.3)&&(aveo>0.25)){
oguro 0:0e03ba4a9509 209 Wt=fmodf(s * 65, 1) * PI* 2;
oguro 0:0e03ba4a9509 210 Vq=0.28;
oguro 0:0e03ba4a9509 211 }
oguro 0:0e03ba4a9509 212 if((aveo<=0.35)&&(aveo>0.3)){
oguro 0:0e03ba4a9509 213 Wt=fmodf(s * 70, 1) * PI* 2;
oguro 0:0e03ba4a9509 214 Vq=0.3;
oguro 0:0e03ba4a9509 215 }
oguro 0:0e03ba4a9509 216 if((aveo<=0.4)&&(aveo>0.35)){
oguro 0:0e03ba4a9509 217 Wt=fmodf(s * 80, 1) * PI* 2;
oguro 0:0e03ba4a9509 218 Vq=0.32;
oguro 0:0e03ba4a9509 219 }
oguro 0:0e03ba4a9509 220 if((aveo<=0.45)&&(aveo>0.4)){
oguro 0:0e03ba4a9509 221 Wt=fmodf(s * 90, 1) * PI* 2;
oguro 0:0e03ba4a9509 222 Vq=0.35;
oguro 0:0e03ba4a9509 223 }
oguro 0:0e03ba4a9509 224 if((aveo<=0.5)&&(aveo>0.45)){
oguro 0:0e03ba4a9509 225 Wt=fmodf(s * 100, 1) * PI* 2;
oguro 0:0e03ba4a9509 226 Vq=0.38;
oguro 0:0e03ba4a9509 227 }
oguro 0:0e03ba4a9509 228 if((aveo<=0.55)&&(aveo>0.5)){
oguro 0:0e03ba4a9509 229 Wt=fmodf(s * 110, 1) * PI* 2;
oguro 0:0e03ba4a9509 230 Vq=0.4;
oguro 0:0e03ba4a9509 231 }
oguro 0:0e03ba4a9509 232 if((aveo<=0.6)&&(aveo>0.55)){
oguro 0:0e03ba4a9509 233 Wt=fmodf(s * 120, 1) * PI* 2;
oguro 0:0e03ba4a9509 234 Vq=0.42;
oguro 0:0e03ba4a9509 235 }
oguro 0:0e03ba4a9509 236 if((aveo<=0.65)&&(aveo>0.6)){
oguro 0:0e03ba4a9509 237 Wt=fmodf(s * 130, 1) * PI* 2;
oguro 0:0e03ba4a9509 238 Vq=0.45;
oguro 0:0e03ba4a9509 239 }
oguro 0:0e03ba4a9509 240 if((aveo<=0.7)&&(aveo>0.65)){
oguro 0:0e03ba4a9509 241 Wt=fmodf(s * 140, 1) * PI* 2;
oguro 0:0e03ba4a9509 242 Vq=0.48;
oguro 0:0e03ba4a9509 243 }
oguro 0:0e03ba4a9509 244 if((aveo<=0.75)&&(aveo>0.7)){
oguro 0:0e03ba4a9509 245 Wt=fmodf(s * 150, 1) * PI* 2;
oguro 0:0e03ba4a9509 246 Vq=0.5;
oguro 0:0e03ba4a9509 247 }
oguro 0:0e03ba4a9509 248 if((aveo<=0.8)&&(aveo>0.75)){
oguro 0:0e03ba4a9509 249 Wt=fmodf(s * 160, 1) * PI* 2;
oguro 0:0e03ba4a9509 250 Vq=0.52;
oguro 0:0e03ba4a9509 251 }
oguro 0:0e03ba4a9509 252 if((aveo<=0.85)&&(aveo>0.8)){
oguro 0:0e03ba4a9509 253 Wt=fmodf(s * 170, 1) * PI* 2;
oguro 0:0e03ba4a9509 254 Vq=0.55;
oguro 0:0e03ba4a9509 255 }
oguro 0:0e03ba4a9509 256 if((aveo<=0.9)&&(aveo>0.85)){
oguro 0:0e03ba4a9509 257 Wt=fmodf(s * 180, 1) * PI* 2;
oguro 0:0e03ba4a9509 258 Vq=0.58;
oguro 0:0e03ba4a9509 259 }
oguro 0:0e03ba4a9509 260 if((aveo<=0.95)&&(aveo>0.9)){
oguro 0:0e03ba4a9509 261 Wt=fmodf(s * 190, 1) * PI* 2;
oguro 0:0e03ba4a9509 262 Vq=0.6;
oguro 0:0e03ba4a9509 263 }
oguro 0:0e03ba4a9509 264 if(aveo>0.95){
oguro 0:0e03ba4a9509 265 Wt=fmodf(s * 200, 1) * PI* 2;
oguro 0:0e03ba4a9509 266 Vq=0.63;
oguro 0:0e03ba4a9509 267 }
oguro 0:0e03ba4a9509 268
oguro 0:0e03ba4a9509 269 if(aveo<0.1){
oguro 0:0e03ba4a9509 270 mypwmA.write(0);
oguro 0:0e03ba4a9509 271 mypwmB.write(0);
oguro 0:0e03ba4a9509 272 mypwmC.write(0);
oguro 0:0e03ba4a9509 273
oguro 0:0e03ba4a9509 274 }
oguro 0:0e03ba4a9509 275 else{
oguro 0:0e03ba4a9509 276 Va=cos(Wt)*Vd-sin(Wt)*Vq;
oguro 0:0e03ba4a9509 277 Vb=sin(Wt)*Vd+cos(Wt)*Vq;
oguro 0:0e03ba4a9509 278
oguro 0:0e03ba4a9509 279 du=(Va*zet+0.5);
oguro 0:0e03ba4a9509 280 dv=((Va*cos23+Vb*sin23)*zet+0.5);
oguro 0:0e03ba4a9509 281 dw=((Va*cos43+Vb*sin43)*zet+0.5);
oguro 0:0e03ba4a9509 282
oguro 0:0e03ba4a9509 283 mypwmA.write(du);
oguro 0:0e03ba4a9509 284 mypwmB.write(dv);
oguro 0:0e03ba4a9509 285 mypwmC.write(dw);
oguro 0:0e03ba4a9509 286
oguro 0:0e03ba4a9509 287 pc.printf("%.3f,%.3f,%.3f \r" ,du,dv,dw);
oguro 0:0e03ba4a9509 288
oguro 0:0e03ba4a9509 289 SWAVE=dw;
oguro 0:0e03ba4a9509 290
oguro 0:0e03ba4a9509 291 }
oguro 0:0e03ba4a9509 292 }
oguro 0:0e03ba4a9509 293 }