質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

0回答

1841閲覧

降圧チョッパ回路における負荷電圧波形が見たいです

horose

総合スコア6

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2018/02/12 10:53

前提・実現したいこと

降圧チョッパ回路の負荷電圧波形のプロットデータをC言語で出力したいです。
数値計算は4次のルンゲクッタ法を用いて、算出したいです。

発生している問題・エラーメッセージ

中々、求める波形が出力されないです。
PSIM上で同じ回路を同様の規格でシミュレーションしたものと同じにならないです。
間違えている箇所が分からないので、指摘して頂けると嬉しいです。

該当のソースコード

DCDC_Simulation_Runge_Kutta.c

1#include<stdio.h> 2#include<math.h> 3 4double func_ON_1(double IL,double VRout) { 5 6 double C = 1 * pow(10, -6); 7 double R = 2.27* pow(10, -3); 8 //double L = 0.00001; 9 10 double U = IL; 11 double Vo = VRout; 12 13 long double A = ((-1 * pow( R * C ,-1)) * Vo) + ( U * pow( C ,-1)); 14 printf("\n\n A = %lf\n", A); 15 16 return A; 17 18} 19 20double func_ON_2( double VRout) { 21 22 23 double L = 0.01;// *pow(10, -3); 24 25 double Vo = VRout; 26 27 long double B = ((200 - Vo) * 100);// pow(L, -1)); 28 printf("\n\n B = %lf\n", B); 29 30 return B; 31 32} 33 34double func_OFF_2( double VRout) { 35 36 37 double L = 0.01;// *pow(10, -3); 38 39 double Vo = VRout; 40 41 long double C = ((-1 * Vo) * 100);// pow(L, -1)); 42 printf("\n\n A = %lf\n", C); 43 44 return C; 45 46} 47 48int main(void) { 49 50 double VRout, t, step,IL, end,T; 51 double k1, k2, k3, k4; 52 double l1, l2, l3, l4; 53 int error,n; 54 FILE *fi; 55 56 //R = 2.27*(0.1)*(0.1)*(0.1); 57 //C = 0.0005; 58 n = 0; 59 T = 0.0; 60 step = 0.00002; 61 VRout = 0.0; 62 IL = 0.0; 63 end = 20; 64 65 if ((error = fopen_s(&fi, "DCDC_Curcuit_Simulation_Vr.txt", "w")) != 0) { 66 67 printf("\nThis file can't opened \n\n"); 68 69 return 0; 70 71 } 72 73 for (t = 0.0; t <= end; t = t + step) { 74 75 //fprintf(fi, "%f %f\n", t, VRout); 76 n = (int)(t / 0.002); 77 T = (double)(t - (n * 0.002)); 78 79 if ((T > 0) && (T < 0.0015)) { 80 81 k1 = step * func_ON_1(IL, VRout); 82 printf("\n k1 = %lf\n", k1); 83 84 l1 = step * func_ON_2( VRout); 85 printf("\n l1 = %lf\n", l1); 86 87 k2 = step * func_ON_1(IL +( step * (l1*0.5)), VRout + (step * (k1*0.5))); 88 //k2 = step * func_ON_1(IL, VRout + (k1*0.5)); 89 printf("\n k2 = %lf\n", k2); 90 91 l2 = step * func_ON_2( VRout + step * (l1*0.5)); 92 printf("\n l2 = %lf\n", l2); 93 94 k3 = step * func_ON_1(IL +( step * (l2*0.5)), VRout + (step * (k2*0.5))); 95 //k3 = step * func_ON_1(IL, VRout + (k2*0.5)); 96 printf("\n k3 = %lf\n", k3); 97 98 l3 = step * func_ON_2( VRout + ( step * (l2*0.5))); 99 printf("\n l3 = %lf\n", l3); 100 101 k4 = step * func_ON_1(IL + k3, VRout + k3); 102 //k4 = step * func_ON_1(IL, VRout + k3); 103 printf("\n k4 = %lf\n", k4); 104 105 l4 = step * func_ON_2( VRout + l3); 106 printf("\n l4 = %lf\n", l4); 107 108 VRout = VRout + (step *((k1 + (2.0*k2) + (2.0*k3) + k4) / 6.0)); 109 IL = IL + (step * ((l1 + (2.0*l2) + (2.0*l3) + l4) / 6.0)); 110 111 fprintf(fi, "%f %f\n", t, VRout); 112 113 k1 = 0, l1 = 0, k2 = 0, l2 = 0, k3 = 0, l3 = 0, k4 = 0, l4 = 0; 114 115 } 116 else { 117 118 k1 = step * func_ON_1(IL, VRout); 119 printf("\n k1 = %lf\n", k1); 120 121 l1 = step * func_OFF_2(VRout); 122 printf("\n l1 = %lf\n", l1); 123 124 k2 = step * func_ON_1(IL + (step * (l1*0.5)), VRout + (step * (k1*0.5))); 125 //k2 = step * func_ON_1(IL, VRout + (k1*0.5)); 126 printf("\n k2 = %lf\n", k2); 127 128 l2 = step * func_OFF_2(VRout + (step *(l1*0.5))); 129 printf("\n l2 = %lf\n", l2); 130 131 k3 = step * func_ON_1(IL + (step * (l2*0.5)), VRout + (step *(k2*0.5))); 132 //k3 = step * func_ON_1(IL, VRout + (k2*0.5)); 133 134 printf("\n k3 = %lf\n", k3); 135 l3 = step * func_OFF_2(VRout + (step *(l2*0.5))); 136 printf("\n l3 = %lf\n", l3); 137 138 k4 = step * func_ON_1(IL + k3, VRout + (step * k3)); 139 //k4 = step * func_ON_1(IL, VRout + k3); 140 printf("\n k4 = %lf\n", k4); 141 142 l4 = step * func_OFF_2(VRout + (step * l3)); 143 printf("\n l4 = %lf\n", l4); 144 145 VRout = VRout + (step *((k1 + (2.0*k2) + (2.0*k3) + k4) / 6.0)); 146 IL = IL + (step * ((l1 + (2.0*l2) + (2.0*l3) + l4) / 6.0)); 147 148 fprintf(fi, "%f %f\n", t, VRout); 149 150 k1 = 0, l1 = 0, k2 = 0, l2 = 0, k3 = 0, l3 = 0, k4 = 0, l4 = 0; 151 152 153 } 154 155 156 } 157 158 fclose(fi); 159 160 return 0; 161}

試したこと

LCの値を変化させたのですが、変わりませんでした。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問