c言語を再履修した俺でも分かる制御工学シリーズ-2
c言語でわかる制御工学-その2:一次遅れのP制御
こんにちは、第二回目は一次遅れの伝達関数を持つシステムをP制御してみたいと思います。
次回は一次遅れの伝達関数を持つシステムを極指定法でPI制御する予定です。
まずはプログラムを読んでみましょう。
これからプログラムの解説を始めます。と言っても前回からの変更点の説明のみです。
[前回のプログラム:rc-step.c]
一次遅れのステップ応答です。
入力の値は何があっても変化しません。ずっと単位ステップ入力Us(t)=1でした。
[今回のプログラム:rc-feed.c]
前回のプログラムに関数を一つ追加しました。
回路に印加する電圧、つまり入力は関数によって以下のように定義されます。
[入力] = [比例ゲイン] * ([目標値] - [出力])
そして、今回は比例ゲインは1、目標値は1に設定してありますので、
[入力] = 1 - [出力]
それでは、フィードバックした場合とフィードバックしない場合でどのような違いがあるのかを、シミュレーションを通して考えていきます。
まず今回のプログラムrc-feed.cのRとCの値は前回の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.5、C=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制御です。パラメータは極指定法によって決めていこうと思います。ここまでお付き合いいただき、ありがとうございました。