この人頭いいなと思ったエピソード

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言語については初心者なので、どなたか教えていただけるとありがたいです。

「c言語を用いた電流フィードバック回路」の質問画像

A 回答 (1件)

ソースは全然詳しく見ていませんが、


ざっと見て気づいた点だけ。

> vsin=vsin*0.09;

vsin*0.99では?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報