Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of Vector_Open_SVPWM by
Revision 0:e72e6efebdd3, committed 2017-12-21
- Comitter:
- oguro
- Date:
- Thu Dec 21 04:10:39 2017 +0000
- Child:
- 1:e42c15be2dda
- Commit message:
- Open Loop Vector SVPWM
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Thu Dec 21 04:10:39 2017 +0000
@@ -0,0 +1,345 @@
+#include "mbed.h"
+#include "rtos.h"
+#include <math.h>
+#define TS1 0.2
+
+float PI=3.141592;
+int t=0,q=0,i=0;
+int START=7;
+PwmOut mypwmA(PA_8); //PA_8
+PwmOut mypwmB(PA_9); //9
+PwmOut mypwmC(PA_10);//10
+
+PwmOut Current_Ref(PB_4);
+
+DigitalOut Vector(PC_4);
+DigitalOut EN1(PC_10);
+DigitalOut EN2(PC_11);
+DigitalOut EN3(PC_12);
+
+
+
+//AnalogIn V_adc(PB_1); //volume
+AnalogIn V_adc(PC_2); // Gaibu Potention
+
+AnalogIn Vshuntu(PA_1);
+AnalogIn Vshuntv(PA_0);
+AnalogIn Vshuntw(PB_0);
+
+AnalogIn BEMF1(PC_3);//C7_37
+AnalogIn BEMF2(PB_0);//C7_34
+AnalogIn BEMF3(PA_7);//C10_26
+
+DigitalIn GPIO_BEMF(PC_9);
+DigitalIn CPOUT(PA_12);
+AnalogIn Curr_ui(PA_0);
+AnalogIn Curr_vi(PC_1);
+AnalogIn Curr_wi(PA_1);
+
+InterruptIn HA(PA_15);
+InterruptIn HB(PB_3);
+InterruptIn HC(PB_10);
+Timer uT;
+Timer vT;
+Timer wT;
+
+AnalogOut SWAVE(PA_4);
+
+Serial pc(USBTX,USBRX);
+
+DigitalOut myled(LED1);
+float sq32=sqrt(3.0f/2.0f);
+float sq23=2.0f/sqrt(3.0f);
+float sq3=1.0f/sqrt(3.0f);
+float VDC=1.8;
+float Vdlink=1/VDC;
+float aVa;
+float a3Vb;
+float Vr_adc;
+
+Timer Timer1;
+float freq=0;
+float z=1.0; //0.5
+float Wt,Va,Vb,Vq,Vd;
+float d1,d2,d3,d4,d5,d6,d07;
+float du,dv,dw;
+bool cu,cv,cw;
+float ave=0,aveo=0,avsum=0;
+
+float ut=0,ut1=0,ut2=0,usi=0;
+float vt=0,vt1=0,vt2=0,vsi=0;
+float wt=0,wt1=0,wt2=0,wsi=0;
+float Speed;
+
+void HAH(){
+
+ ut1=uT.read_us();
+ ut=0;
+
+ }
+ void HAL(){
+
+ ut2=uT.read_us();
+ uT.reset();
+
+ }
+ void HBH(){
+
+ vt1=vT.read_us();
+
+ }
+ void HBL(){
+
+ vt2=vT.read_us();
+
+ vT.reset();
+ }
+ void HCH(){
+ wt1=wT.read_us();
+
+ }
+
+ void HCL(){
+ wt2=wT.read_us();
+
+ wT.reset();
+ }
+
+
+
+void CPLT(){
+ pc.printf("%.3f , %.3f \r" ,Speed ,Vr_adc);
+ }
+
+ void timerTS1(void const*argument){
+ CPLT();
+ }
+int main() {
+ Timer1.start();
+ EN1=1;
+ EN2=1;
+ EN3=1;
+ uT.start();
+ vT.start();
+ wT.start();
+
+ mypwmA.period_us(20);
+
+ mypwmB.period_us(20);
+
+ mypwmC.period_us(20);
+
+ pc.baud(128000);
+ RtosTimer RtosTimerTS1(timerTS1);
+ RtosTimerTS1.start((unsigned int)(TS1*5000)); //3000
+ Thread::wait(100);
+
+
+ while(1) {
+
+ HA.rise(&HAH);
+ HC.fall(&HCL);
+ HB.rise(&HBH);
+ HA.fall(&HAL);
+ HC.rise(&HCH);
+ HB.fall(&HBL);
+ Speed=60*(1/(7.0*2.0*usi*1E-6));
+ usi=ut2-ut1;
+ vsi=vt2-vt1;
+ wsi=wt2-wt1;
+ Vd=0;
+
+ float s = Timer1.read();
+ Vr_adc=V_adc.read();
+ myled = ((int)s) % 2 == 0; /* LED output(0.5Hz) */
+
+
+if((Vr_adc>0.08f)&&(q==0)){
+while(q<30){
+
+ mypwmA.write(0.5f);
+ mypwmB.write(0);
+ mypwmC.write(0);
+ wait_ms(START);
+
+ mypwmA.write(0);
+ mypwmB.write(0.5f);
+ mypwmC.write(0.0);
+ wait_ms(START);
+
+ mypwmA.write(0);
+ mypwmB.write(0.0);
+ mypwmC.write(0.5f);
+ wait_ms(START);
+ q++;
+
+ }
+ }
+ if(Vr_adc < 0.05f){
+ q=0;
+ Vr_adc=0;
+
+ }
+
+ aveo=Vr_adc;
+
+ if((aveo<=0.15)&&(aveo>0.1)){
+ Wt=fmodf(s * 50, 1) * PI* 2;
+ Vq=0.4;
+ }
+ if((aveo<=0.2)&&(aveo>0.15)){
+ Wt=fmodf(s * 55, 1) * PI* 2;
+ Vq=0.45;
+ }
+ if((aveo<=0.25)&&(aveo>0.2)){
+ Wt=fmodf(s * 60, 1) * PI* 2;
+ Vq=0.5;
+ }
+ if((aveo<=0.3)&&(aveo>0.25)){
+ Wt=fmodf(s * 70, 1) * PI* 2;
+ Vq=0.55;
+ }
+ if((aveo<=0.35)&&(aveo>0.3)){
+ Wt=fmodf(s * 80, 1) * PI* 2;
+ Vq=0.6;
+ }
+ if((aveo<=0.4)&&(aveo>0.35)){
+ Wt=fmodf(s * 90, 1) * PI* 2;
+ Vq=0.65;
+ }
+ if((aveo<=0.45)&&(aveo>0.4)){
+ Wt=fmodf(s * 100, 1) * PI* 2;
+ Vq=0.7;
+ }
+ if((aveo<=0.5)&&(aveo>0.45)){
+ Wt=fmodf(s * 110, 1) * PI* 2;
+ Vq=0.7;
+ }
+ if((aveo<=0.55)&&(aveo>0.5)){
+ Wt=fmodf(s * 120, 1) * PI* 2;
+ Vq=0.7;
+ }
+ if((aveo<=0.6)&&(aveo>0.55)){
+ Wt=fmodf(s * 130, 1) * PI* 2;
+ Vq=0.7;
+ }
+ if((aveo<=0.65)&&(aveo>0.6)){
+ Wt=fmodf(s * 140, 1) * PI* 2;
+ Vq=0.7;
+ }
+ if((aveo<=0.7)&&(aveo>0.65)){
+ Wt=fmodf(s * 150, 1) * PI* 2;
+ Vq=0.8;
+ }
+ if((aveo<=0.75)&&(aveo>0.7)){
+ Wt=fmodf(s * 160, 1) * PI* 2;
+ Vq=0.8;
+ }
+ if((aveo<=0.8)&&(aveo>0.75)){
+ Wt=fmodf(s * 170, 1) * PI* 2;
+ Vq=0.8;
+ }
+ if((aveo<=0.85)&&(aveo>0.8)){
+ Wt=fmodf(s * 180, 1) * PI* 2;
+ Vq=0.8;
+ }
+ if((aveo<=0.9)&&(aveo>0.85)){
+ Wt=fmodf(s * 190, 1) * PI* 2;
+ Vq=0.9;
+ }
+ if((aveo<=0.95)&&(aveo>0.9)){
+ Wt=fmodf(s * 200, 1) * PI* 2;
+ Vq=0.9;
+ }
+ if(aveo>0.95){
+ Wt=fmodf(s * 210, 1) * PI* 2;
+ Vq=0.9;
+ }
+
+if(aveo<0.1){
+ mypwmA.write(0);
+ mypwmB.write(0);
+ mypwmC.write(0);
+
+}
+else{
+ Va=cos(Wt)*Vd-sin(Wt)*Vq;
+ Vb=sin(Wt)*Vd+cos(Wt)*Vq;
+ aVa=abs(Va);
+ a3Vb=abs(sq3*Vb);
+
+ if((Va>=0)&&(Vb>=0)&&(aVa>=a3Vb)){ //sect 0
+
+ d1=sq32*(Va-sq3*Vb)*Vdlink;
+ d2=sq32*(sq23*Vb)*Vdlink;
+ d07=(z-(d1+d2))*0.5;
+ // d07=0;
+ du=d1+d2+d07;
+ dv=d2+d07;
+ dw=d07;
+
+ }
+ if((aVa<=sq3*Vb)){ //sect 1
+
+ d3=sq32*(-Va+sq3*Vb)*Vdlink;
+ d2=sq32*(Va+sq3*Vb)*Vdlink;
+ d07=(z-(d2+d3))*0.5;
+ //d07=0;
+ du=d2+d07;
+ dv=d2+d3+d07;
+ dw=d07;
+ }
+
+ if((Va<=0)&&(Vb>=0)&&(aVa>=a3Vb)){ //sect 2
+
+ d3=sq32*sq23*Vb*Vdlink;
+ d4=sq32*(-Va-sq3*Vb)*Vdlink;
+ d07=(z-(d3+d4))*0.5;
+ // d07=0;
+ du=d07;
+ dv=d3+d4+d07;
+ dw=d4+d07;
+ }
+
+ if((Va<=0)&&(Vb<=0)&&(aVa>=a3Vb)){ //sect 3
+
+ d5=-sq32*sq23*Vb*Vdlink;
+ d4=sq32*(-Va+sq3*Vb)*Vdlink;
+ d07=(z-(d4+d5))*0.5;
+ //d07=0;
+ du=d07;
+ dv=d4+d07;
+ dw=d4+d5+d07;
+ }
+
+ if((aVa<=-sq3*Vb)){ //sect 4
+
+ d5=sq32*(-Va-sq3*Vb)*Vdlink;;
+ d6=sq32*(Va-sq3*Vb)*Vdlink;
+ d07=(z-(d5+d6))*0.5;
+ //d07=0;
+ du=d6+d07;
+ dv=d07;
+ dw=d5+d6+d07;
+ }
+
+ if((Va>=0)&&(Vb<=0)&&(aVa>=a3Vb)){ //sect 5
+
+ d1=sq32*(Va+sq3*Vb)*Vdlink;;
+ d6=-sq32*sq23*Vb*Vdlink;;
+ d07=(z-(d1+d6))*0.5;
+ //d07=0;
+ du=d1+d6+d07;
+ dv=d07;
+ dw=d6+d07;
+ }
+
+ mypwmA.write(du);
+ mypwmB.write(dv);
+ mypwmC.write(dw);
+ }
+
+ SWAVE=dw;
+
+ }
+ }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed-rtos.lib Thu Dec 21 04:10:39 2017 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed-rtos/#5713cbbdb706
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Thu Dec 21 04:10:39 2017 +0000 @@ -0,0 +1,1 @@ +https://os.mbed.com/users/mbed_official/code/mbed/builds/fb8e0ae1cceb \ No newline at end of file
