• 締切済み

c言語を用いた電流フィードバック回路

c言語プログラムについての質問です。画像のハーフブリッジインバータ回路で正弦波と三角波を用いたPWM制御で、抵抗の値関係なく目標電流値を出力するプログラムが作りたいのですがどうすればいいのでしょうか。 #include <math.h> #include <stdio.h> __declspec(dllexport) void simuser (t, delt, in, out) double t, delt; double *in, *out; { static double f1=10000,f2=60,v=0,n=0,h=0,c=0,x1=0,x2=0,s=0,im=0; double vout=0,k1,k2,vs,vtri,vt,pai=3.14,rad,vsin,i,j,k3,k4,va,vs1=0,vs2=0,iout,ts=0.0000025; 三角波 vtri=2; k1=1/delt; k2=(k1/f1)/2; vs=vtri/k2; h=h+1; if(h<=k2){ v=v+vs; }else if(h>=k2){ v=v-vs; }else{ v=v; } if(h>=(k2*2)){ h=0; } vt=v-(vtri/2); 正弦波 j=90; k3=1/delt; k4=(k3/f2)/4; i=j/k4; n=n+i; rad=(pai*n)/180; vsin=sin(rad); スイッチ制御1 if(vsin<vt){ x1=x1+delt; if(x1>=ts){ vs1=1; }else if(x1<ts){ vs1=0; }else{ x1=x1; } }else if(vsin>vt){ vs1=0; x1=0; }else{ vs1=vs1; } スイッチ制御2 if(vsin<vt){ vs2=0; x2=0; }else if(vsin>vt){ x2=x2+delt; if(x2>=ts){ vs2=1; }else if(x2<ts){ vs2=0; }else{ x2=x2; } }else{ vs2=vs2; } ここからが上手くいきません。 電流フィードバック iout=in[0]; im=1.5; if(im<iout){ vsin=vsin*0.09; }else if(im>iout){ vsin=vsin*1.01; }else if(im=iout){ vsin=vsin; } 出力 out[0]=vs1; out[1]=vs2; out[2]=vt; out[3]=vsin; } プログラムはこのようにしています。vsinの値を増減することで、出力電流は制御できます。プログラムとしては、出力電流値ioutをフィードバックし、目標値imと比べ、vsinの大きさを変えて、目標値に近づける、というものが作りたいです。自分で作ったものでは上手く動作しません。 c言語については初心者なので、どなたか教えていただけるとありがたいです。

みんなの回答

  • mtaka2
  • ベストアンサー率73% (867/1179)
回答No.1

ソースは全然詳しく見ていませんが、 ざっと見て気づいた点だけ。 > vsin=vsin*0.09; vsin*0.99では?