カラクリの館

関西学院大学神戸三田キャンパスにて活動しているものづくり団体「機巧堂」です。メンバーが思い思いに綴ります。

c言語を再履修した俺でも分かる制御工学シリーズ-2

RC回路のP制御

 

c言語でわかる制御工学-その2:一次遅れのP制御

 

f:id:karakuridoh:20170211011346p:plain

こんにちは、第二回目は一次遅れの伝達関数を持つシステムをP制御してみたいと思います。

次回は一次遅れの伝達関数を持つシステムを極指定法でPI制御する予定です。

 

まずはプログラムを読んでみましょう。

 

これからプログラムの解説を始めます。と言っても前回からの変更点の説明のみです。

 

[前回のプログラム:rc-step.c]

一次遅れのステップ応答です。

入力の値は何があっても変化しません。ずっと単位ステップ入力Us(t)=1でした。

 

[今回のプログラム:rc-feed.c]

前回のプログラムに関数を一つ追加しました。

回路に印加する電圧、つまり入力は関数によって以下のように定義されます。

 

[入力] = [比例ゲイン] * ([目標値] - [出力])

 

そして、今回は比例ゲインは1、目標値は1に設定してありますので、

 

[入力] = 1 - [出力]

 

それでは、フィードバックした場合とフィードバックしない場合でどのような違いがあるのかを、シミュレーションを通して考えていきます。

 

まず今回のプログラムrc-feed.cRCの値は前回のrc-step.cと同じR=C=1.0です。

では実際に出力結果を見てみましょう。

 

 

[rc-feed.c]

TIME=0.100000,Vo=0.100000

TIME=0.200000,Vo=0.180000

TIME=0.300000,Vo=0.244000

TIME=0.400000,Vo=0.295200

TIME=0.500000,Vo=0.336160

TIME=0.600000,Vo=0.368928

TIME=0.700000,Vo=0.395142

TIME=0.800000,Vo=0.416114

TIME=0.900000,Vo=0.432891

TIME=1.000000,Vo=0.446313

TIME=1.100000,Vo=0.457050

TIME=1.200000,Vo=0.465640

TIME=1.300000,Vo=0.472512

--

TIME=5.700000,Vo=0.499999

TIME=5.800000,Vo=0.499999

TIME=5.900000,Vo=0.499999

TIME=6.000000,Vo=0.499999

TIME=6.100000,Vo=0.499999

TIME=6.200000,Vo=0.500000

TIME=6.300000,Vo=0.500000

TIME=6.400000,Vo=0.500000

TIME=6.500000,Vo=0.500000

 

 

 

 

結果をみると、定常値0.5、時定数0.5の一次遅れのステップ応答のように見えますね。

実際、一巡伝達関数L(s)を閉ループ伝達関数W(s)になおすと以下のとおりになります。

 

W(s) = L(s) / (L(s)+1)

 

では今回のL(s) = 1 / (s+1)を代入すると、

 

W(s) = 1 / (s+2) = 0.5 / (0.5s +1)

 

では、それをふまえて前回のプログラムrc-step.cを、制御量(出力)0.5倍、そしてR=0.5C=1.0に変更して実行し、本当にあっているか試してみます。

(注意:dVo=dVo/2.0とプログラムを書き直すとC=2.0と同じことになってしまうので間違いです。)

 

 

[rc-step.c]

TIME=0.100000,Vo=0.100000

TIME=0.200000,Vo=0.180000

TIME=0.300000,Vo=0.244000

TIME=0.400000,Vo=0.295200

TIME=0.500000,Vo=0.336160

TIME=0.600000,Vo=0.368928

TIME=0.700000,Vo=0.395142

TIME=0.800000,Vo=0.416114

TIME=0.900000,Vo=0.432891

TIME=1.000000,Vo=0.446313

TIME=1.100000,Vo=0.457050

TIME=1.200000,Vo=0.465640

TIME=1.300000,Vo=0.472512

--

TIME=5.700000,Vo=0.499999

TIME=5.800000,Vo=0.499999

TIME=5.900000,Vo=0.499999

TIME=6.000000,Vo=0.499999

TIME=6.100000,Vo=0.499999

TIME=6.200000,Vo=0.500000

TIME=6.300000,Vo=0.500000

TIME=6.400000,Vo=0.500000

TIME=6.500000,Vo=0.500000

 

このステップ応答の結果はC=R=1.0におけるrc-feed.cの結果と完全に一致しました。

 

というわけで今の実験をまとめると、

・あるシステムを目標値1で直結フィードバックにして実行してみた。

・一巡伝達関数を閉ループ伝達関数に直した。

・閉ループ伝達関数のステップ応答を求めると完全に一致した。

 

このようにフィードバック回路の等価変換が正しく行えたかを検証しました。

 

これでようやくP制御の前準備ができました。

 

あとはプログラムのGAIN_Pの値を変化させることで、どのように応答が変化するかを試してみましょう。

 

さて、rc-feed.cで目標値1、C=R=1.0として、GAIN_Pの値を変えて定常値と比例ゲインの関係を見てみましょう。

 

まず、比例ゲインを0.5,1.0,2.0,5.0と順に上げていった際の応答は、

 

[P=0.5]

TIME=0.1 Vo=0.050000 P=0.500000

TIME=0.2 Vo=0.092500 P=0.475000

TIME=0.3 Vo=0.128625 P=0.453750

TIME=0.4 Vo=0.159331 P=0.435688

TIME=0.5 Vo=0.185432 P=0.420334

TIME=0.6 Vo=0.207617 P=0.407284

TIME=0.7 Vo=0.226474 P=0.396192

TIME=0.8 Vo=0.242503 P=0.386763

TIME=0.9 Vo=0.256128 P=0.378748

TIME=1.0 Vo=0.267709 P=0.371936

TIME=1.1 Vo=0.277552 P=0.366146

TIME=1.2 Vo=0.285919 P=0.361224

TIME=1.3 Vo=0.293032 P=0.357040

TIME=1.4 Vo=0.299077 P=0.353484

TIME=1.5 Vo=0.304215 P=0.350462

TIME=1.6 Vo=0.308583 P=0.347892

TIME=1.7 Vo=0.312296 P=0.345709

TIME=1.8 Vo=0.315451 P=0.343852

TIME=1.9 Vo=0.318134 P=0.342274

TIME=2.0 Vo=0.320413 P=0.340933

TIME=2.1 Vo=0.322351 P=0.339793

TIME=2.2 Vo=0.323999 P=0.338824

TIME=2.3 Vo=0.325399 P=0.338001

TIME=2.4 Vo=0.326589 P=0.337301

TIME=2.5 Vo=0.327601 P=0.336705

TIME=2.6 Vo=0.328461 P=0.336200

TIME=2.7 Vo=0.329192 P=0.335770

TIME=2.8 Vo=0.329813 P=0.335404

TIME=2.9 Vo=0.330341 P=0.335094

TIME=3.0 Vo=0.330790 P=0.334830

TIME=3.1 Vo=0.331171 P=0.334605

TIME=3.2 Vo=0.331496 P=0.334414

TIME=3.3 Vo=0.331771 P=0.334252

TIME=3.4 Vo=0.332006 P=0.334114

TIME=3.5 Vo=0.332205 P=0.333997

TIME=3.6 Vo=0.332374 P=0.333898

TIME=3.7 Vo=0.332518 P=0.333813

TIME=3.8 Vo=0.332640 P=0.333741

TIME=3.9 Vo=0.332744 P=0.333680

TIME=4.0 Vo=0.332833 P=0.333628

TIME=4.1 Vo=0.332908 P=0.333584

TIME=4.2 Vo=0.332972 P=0.333546

TIME=4.3 Vo=0.333026 P=0.333514

TIME=4.4 Vo=0.333072 P=0.333487

TIME=4.5 Vo=0.333111 P=0.333464

TIME=4.6 Vo=0.333144 P=0.333444

TIME=4.7 Vo=0.333173 P=0.333428

TIME=4.8 Vo=0.333197 P=0.333414

TIME=4.9 Vo=0.333217 P=0.333402

TIME=5.0 Vo=0.333235 P=0.333391

TIME=5.1 Vo=0.333250 P=0.333383

TIME=5.2 Vo=0.333262 P=0.333375

TIME=5.3 Vo=0.333273 P=0.333369

TIME=5.4 Vo=0.333282 P=0.333364

TIME=5.5 Vo=0.333290 P=0.333359

TIME=5.6 Vo=0.333296 P=0.333355

TIME=5.7 Vo=0.333302 P=0.333352

TIME=5.8 Vo=0.333306 P=0.333349

TIME=5.9 Vo=0.333310 P=0.333347

TIME=6.0 Vo=0.333314 P=0.333345

TIME=6.1 Vo=0.333317 P=0.333343

TIME=6.2 Vo=0.333319 P=0.333342

TIME=6.3 Vo=0.333321 P=0.333340

TIME=6.4 Vo=0.333323 P=0.333339

TIME=6.5 Vo=0.333325 P=0.333338

TIME=6.6 Vo=0.333326 P=0.333338

TIME=6.7 Vo=0.333327 P=0.333337

TIME=6.8 Vo=0.333328 P=0.333336

 

[P=1.0]

TIME=0.1 Vo=0.100000 P=1.000000

TIME=0.2 Vo=0.180000 P=0.900000

TIME=0.3 Vo=0.244000 P=0.820000

TIME=0.4 Vo=0.295200 P=0.756000

TIME=0.5 Vo=0.336160 P=0.704800

TIME=0.6 Vo=0.368928 P=0.663840

TIME=0.7 Vo=0.395142 P=0.631072

TIME=0.8 Vo=0.416114 P=0.604858

TIME=0.9 Vo=0.432891 P=0.583886

TIME=1.0 Vo=0.446313 P=0.567109

TIME=1.1 Vo=0.457050 P=0.553687

TIME=1.2 Vo=0.465640 P=0.542950

TIME=1.3 Vo=0.472512 P=0.534360

TIME=1.4 Vo=0.478010 P=0.527488

TIME=1.5 Vo=0.482408 P=0.521990

TIME=1.6 Vo=0.485926 P=0.517592

TIME=1.7 Vo=0.488741 P=0.514074

TIME=1.8 Vo=0.490993 P=0.511259

TIME=1.9 Vo=0.492794 P=0.509007

TIME=2.0 Vo=0.494235 P=0.507206

TIME=2.1 Vo=0.495388 P=0.505765

TIME=2.2 Vo=0.496311 P=0.504612

TIME=2.3 Vo=0.497049 P=0.503689

TIME=2.4 Vo=0.497639 P=0.502951

TIME=2.5 Vo=0.498111 P=0.502361

TIME=2.6 Vo=0.498489 P=0.501889

TIME=2.7 Vo=0.498791 P=0.501511

TIME=2.8 Vo=0.499033 P=0.501209

TIME=2.9 Vo=0.499226 P=0.500967

TIME=3.0 Vo=0.499381 P=0.500774

TIME=3.1 Vo=0.499505 P=0.500619

TIME=3.2 Vo=0.499604 P=0.500495

TIME=3.3 Vo=0.499683 P=0.500396

TIME=3.4 Vo=0.499746 P=0.500317

TIME=3.5 Vo=0.499797 P=0.500254

TIME=3.6 Vo=0.499838 P=0.500203

TIME=3.7 Vo=0.499870 P=0.500162

TIME=3.8 Vo=0.499896 P=0.500130

TIME=3.9 Vo=0.499917 P=0.500104

TIME=4.0 Vo=0.499934 P=0.500083

TIME=4.1 Vo=0.499947 P=0.500066

TIME=4.2 Vo=0.499957 P=0.500053

TIME=4.3 Vo=0.499966 P=0.500043

TIME=4.4 Vo=0.499973 P=0.500034

TIME=4.5 Vo=0.499978 P=0.500027

TIME=4.6 Vo=0.499983 P=0.500022

TIME=4.7 Vo=0.499986 P=0.500017

TIME=4.8 Vo=0.499989 P=0.500014

TIME=4.9 Vo=0.499991 P=0.500011

TIME=5.0 Vo=0.499993 P=0.500009

TIME=5.1 Vo=0.499994 P=0.500007

TIME=5.2 Vo=0.499995 P=0.500006

TIME=5.3 Vo=0.499996 P=0.500005

TIME=5.4 Vo=0.499997 P=0.500004

TIME=5.5 Vo=0.499998 P=0.500003

TIME=5.6 Vo=0.499998 P=0.500002

TIME=5.7 Vo=0.499999 P=0.500002

TIME=5.8 Vo=0.499999 P=0.500001

TIME=5.9 Vo=0.499999 P=0.500001

TIME=6.0 Vo=0.499999 P=0.500001

TIME=6.1 Vo=0.499999 P=0.500001

TIME=6.2 Vo=0.500000 P=0.500001

TIME=6.3 Vo=0.500000 P=0.500000

 

[P=2.0]

TIME=0.1 Vo=0.200000 P=2.000000

TIME=0.2 Vo=0.340000 P=1.600000

TIME=0.3 Vo=0.438000 P=1.320000

TIME=0.4 Vo=0.506600 P=1.124000

TIME=0.5 Vo=0.554620 P=0.986800

TIME=0.6 Vo=0.588234 P=0.890760

TIME=0.7 Vo=0.611764 P=0.823532

TIME=0.8 Vo=0.628235 P=0.776472

TIME=0.9 Vo=0.639764 P=0.743531

TIME=1.0 Vo=0.647835 P=0.720471

TIME=1.1 Vo=0.653484 P=0.704330

TIME=1.2 Vo=0.657439 P=0.693031

TIME=1.3 Vo=0.660207 P=0.685122

TIME=1.4 Vo=0.662145 P=0.679585

TIME=1.5 Vo=0.663502 P=0.675710

TIME=1.6 Vo=0.664451 P=0.672997

TIME=1.7 Vo=0.665116 P=0.671098

TIME=1.8 Vo=0.665581 P=0.669768

TIME=1.9 Vo=0.665907 P=0.668838

TIME=2.0 Vo=0.666135 P=0.668187

TIME=2.1 Vo=0.666294 P=0.667731

TIME=2.2 Vo=0.666406 P=0.667411

TIME=2.3 Vo=0.666484 P=0.667188

TIME=2.4 Vo=0.666539 P=0.667032

TIME=2.5 Vo=0.666577 P=0.666922

TIME=2.6 Vo=0.666604 P=0.666845

TIME=2.7 Vo=0.666623 P=0.666792

 

[P=5.0]

TIME=0.1 Vo=0.500000 P=5.000000

TIME=0.2 Vo=0.700000 P=2.500000

TIME=0.3 Vo=0.780000 P=1.500000

TIME=0.4 Vo=0.812000 P=1.100000

TIME=0.5 Vo=0.824800 P=0.940000

TIME=0.6 Vo=0.829920 P=0.876000

TIME=0.7 Vo=0.831968 P=0.850400

TIME=0.8 Vo=0.832787 P=0.840160

TIME=0.9 Vo=0.833115 P=0.836064

TIME=1.0 Vo=0.833246 P=0.834426

TIME=1.1 Vo=0.833298 P=0.833770

TIME=1.2 Vo=0.833319 P=0.833508

TIME=1.3 Vo=0.833328 P=0.833403

TIME=1.4 Vo=0.833331 P=0.833361

TIME=1.5 Vo=0.833332 P=0.833345

TIME=1.6 Vo=0.833333 P=0.833338

TIME=1.7 Vo=0.833333 P=0.833335

TIME=1.8 Vo=0.833333 P=0.833334

TIME=1.9 Vo=0.833333 P=0.833334

TIME=2.0 Vo=0.833333 P=0.833333

 

こういうわけで実験で得た値をまとめると、

[P=0.5]

定常値0.33 時定数0.6-0.7

[P=1.0]

定常値0.50 時定数0.5

[P=2.0]

定常値0.66 時定数0.3

[P=5.0]

定常値0.83 時定数0.1

 

 

R=C=1.0として比例ゲインPと応答の関係をまとめました。

 

定常値:P/(P+1)

時定数:RC / (P+1) = 1 / (P+1)

 

これに実験で使ったPの値を代入して確認してみます。

[P=0.5]

定常値0.33 時定数0.66

[P=1.0]

定常値0.50 時定数0.50

[P=2.0]

定常値0.66 時定数0.33

[P=5.0]

定常値0.83 時定数0.16

 

このように計算値と実験値はだいたい一致しました。0.1刻みでシミュレーヨンしているので完全には一致しません。

 

結果をまとめます。

一次遅れについて、P制御で比例ゲインを大きくすることで時定数が小さくなり、定常値が目標値に近づく。つまり、速応性がよくなり定常偏差が小さくなりました。

 

ここまでの事は基礎的なことなので、制御の教科書にたいてい詳しい説明が書いてあります。

もしわからなければ教科書を読んでみてください。

 

では次回はようやくRC回路のPI制御です。パラメータは極指定法によって決めていこうと思います。ここまでお付き合いいただき、ありがとうございました。