カラクリの館

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

渡邊組活動報告 その1

    どうも、ワタナベ改め組長です。

 

    外部の方向けに少し説明すると、

    渡邊組は、機巧堂の中でもロボットを作りたい人が集まっているグループです。

    当初渡邊組は、機巧堂の中でモノづくりへの情熱を燻らせていたメンバーの為に、

    当時(前の前)の代表が作った、いわば受け皿的なグループでした。

    しかし今では、新旧会計の二人を中心に、

    その熱情を日々ロボットに爆発させています。

 

    興味のある方は是非機巧堂へ!!

 

 

    活動報告します。

 

    渡邊組再起動時の会議で、

    二足歩行ロボット(とにかく歩くロボット)の作成を一つの目標にして

    動く事が決まりました。

 

    今日までに出来たことは、

    ・サーボモーターやRaspberry Piなど今後の活動に必要と思われる部品や道具の買い出し

    ・サーボモーターの初期化

    ・試作一号機の脚部の作成

    などです。 

 f:id:karakuridoh:20170223234239j:image                                f:id:karakuridoh:20170223233831j:image

   ↑Rasberry Piを動かしている様子                     ↑試作一号機の脚

 


両脚が動いた - YouTube

 

    また、ロボット作成の為の環境作りや遊びとして、

    ・Rasberry Piを使った簡易的なカメラの作成

    ・フィードバック制御の勉強

    なども行いました。

 


タクトスイッチでカメラ撮影 - YouTube

 

    やることは沢山あるので、また報告します。ドローンもできたらいいですね。

    これを機に、YouTubeへの動画アップロードもはじめてみました...   |ロ゜)ハッ!

 

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

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

 

RC回路のPI制御

 

こんにちは、今回はついにRC回路のPI制御です。一次遅れの伝達関数を持つシステムをPI制御しようと思います。

 

f:id:karakuridoh:20170211011346p:plain

それでは、PI制御について簡単に説明します。まずはプログラムを読んでみてください。

 

さて、まずはじめにPI制御の概要について説明します。入力は比例動作と積分動作の和になります。

 

[制御入力] = [比例動作] + [積分動作]

 

比例動作のゲインをPとすると、比例動作は偏差を比例ゲインで掛けたものになります。

 

[比例動作] = P*[偏差]

 

次に積分動作についてです。積分動作のゲインをIとすると、積分動作は入力を開始した時刻0から現在の時刻までの偏差の時間積分に、積分ゲインを掛けたものになります。

 

[積分動作] = I*[偏差の時間積分]

 

実際にゲインのパラーメーターを変更することで、応答にどのような変化が起こるのかを実験します。P=1.0, I=1.0, 目標値は前回同様1.0です。

 

この時、出力結果は、オーバーシュートなし、±5[%]の制定時間は3.00[s]でした。

 

TIME=3.00 Vo=0.950207

 

実は、この時の応答は、R=C=1.0のステップ応答にほぼ一致します。

(下の結果は第一回目のステップ応答のプログラムを0.01刻みに変更しています)

 

[ステップ応答]

TIME=1.000000 Vo=0.633968

 

[PI制御]

TIME=1.00 Vo=0.635809

 

これは零点と極が一致したために起こったことですが、これについて詳しくは次回にします。

 

次にP=1.0で固定して、Iの値を変化させることで、応答がどう変化するのかを実験してみましょう。

 

Iを大きくするとオーバーシュートが発生するので、Tdを行き過ぎ時間、P.Oをパセントオーバーシュートとして、応答を評価します。

 

GAIN_P=1.000000 GAIN_I=2.000000

Td=2.34 P.O=6.6109[%]

 

GAIN_P=1.000000 GAIN_I=3.000000

Td=1.77 P.O=13.6034[%]

 

GAIN_P=1.000000 GAIN_I=4.000000

Td=1.50 P.O=19.0387[%]

 

このように、I=1.0から少しずつIを大きくすると、Tdが小さくなり、P.Oは大きくなります。つまり、速応性は上がるものの、オーバーシュートは増加し不安定になります。

 

では逆にI=1.0から少しずつIを小さくすると、どをのように変化するのでしょうか試してみましょう。

 

GAIN_P=1.000000 GAIN_I=0.500000

オーバーシュートなし。±[5]制定時間8.00[s]

 

GAIN_P=1.000000 GAIN_I=0.100000

オーバーシュートなし。±[5]制定時間44.90[s]

 

このように、Iを小さくするとオーバーシュートはなくなり、応答は遅くなっていきます。

 

では、次にI=1.0に固定してPを大きくします。すると、オーバーシュートなくなり、応答が速くなります。これは一次遅れのステップ応答に似ているので、出力が63.2[%]になるまでにかかる時間で応答の特性を評価します。

 

GAIN_P=2.000000 GAIN_I=1.000000

TIME=0.60 Vo=0.634370

 

GAIN_P=3.000000 GAIN_I=1.000000

TIME=0.39 Vo=0.631785

 

GAIN_P=4.000000 GAIN_I=1.000000

TIME=0.28 Vo=0.628745

 

このように、Pを大きくするほど出力が63.2[%]が小さくなるので、応答が速くなることがわかりました。

 

今度はP1より小さくするとオーバーシュートが発生します。

 

GAIN_P=0.500000 GAIN_I=1.000000

Td=4.01 P.O=3.4041[%]

 

GAIN_P=0.100000 GAIN_I=1.000000

Td=3.64 P.O=12.6041[%]

 

このように、Pを小さくするほどオーバーシュートは大きくなるが、行き過ぎ時間Tdは小さくなるため、速応性は上昇したとわかります。

 

この結果から、P1より大きくしても小さくしても速応性は上昇するという結果がわかりました。

 

内容が膨大になるため、今回の実験でなぜこのような結果になったのかは説明しませんでした。次回は今回の結果を、制御系全体の閉ループ伝達関数の極と零点から説明したいと思います。

菓子くり堂 チョコムース

やっほーバレンタイン
どうも、カラオケの十八番はハクナ・マタタ。現代表のじょなさんです。そのうち代表やめます。(ここまで挨拶)

 

f:id:karakuridoh:20170214230455p:plain

菓子くり堂と題しまして、製作物報告をしていこうと思います。

シリーズ化するかは未定です。
あくまで製作報告なのでレシピとしては載せません。

2月14日ですね。ということでチョコムース作りましたさっき。(20時現在)
私は遅筆なので書いている間に冷蔵庫の中でチョコムースが固まって完成するという算段です。

ではまず材料。
板チョコ
 主役。こいつを入れなかったらただのミルクムースとかになると思いますたぶん。
 バレンタインなので特価でした。
牛乳、生クリーム
 濃厚さを演出。量もこいつのおかげで増量されました。
卵白、卵黄
 卵とは書かない。
 卵白は泡立ててメレンゲに。ムースのふわふわ感要員。
 卵黄については知らないです。なんか入れました。
ラニュー糖
 砂糖。甘い。
 スティックシュガーを8本くらい使いました。
ゼラチン
 まとめ役。こいつを入れなければただの甘い泡です。

 

f:id:karakuridoh:20170214230531j:plain


製作開始
ゼラチンを先にふやかしたり、チョコを砕いたりします。
卵黄にグラニュー糖をスティックシュガー2本分くらい入れました。
この時点でもうすでに匂いが甘い。

牛乳を火にかけて沸騰しないくらいまで温めてからチョコを投入して溶かします。
たぶんミルクココアみたいな味になってそう。

f:id:karakuridoh:20170214230533j:plain

そして混ぜる。

 

メレンゲする。
ラニュー糖を入れてからの方が泡立ちがいいです。

f:id:karakuridoh:20170214230540j:plain

ハンドミキサー様々。

メレンゲができました。

このまま焼いてメレンゲクッキーにするのも好きです。

f:id:karakuridoh:20170214230555j:plain

 

続いて生クリームも泡立てます。

f:id:karakuridoh:20170214231010j:plain


ラニュー糖投入。砂糖を入れないとただただ濃厚な泡です。

 

角が立つまで。

f:id:karakuridoh:20170214230606j:plain

 

そしてチョコ・牛乳・卵黄・砂糖の混合物にメレンゲを投入。
f:id:karakuridoh:20170214231131j:plain

さっくりさっくり混ぜないとメレンゲが死にます。

このときやっとボールが小さかったことに気づきました。
この時点で8割方チョコムースです。

f:id:karakuridoh:20170214231523j:plain

 

生クリームに投入。

f:id:karakuridoh:20170214231214j:plain


この混ざりかけのマーブルにときめきを感じます。
同じくさっくりさっくり。

f:id:karakuridoh:20170214231224j:plain

 

混ぜ終わり。

f:id:karakuridoh:20170214231230j:plain
このまま冷やしてバケツチョコムースにするのもありですね。ロマン。

小分けにして冷蔵庫で固まるまで冷やします。
完成。

 f:id:karakuridoh:20170214231720j:plain

考察
 あんまい。

 とても甘い。食パンに塗って食べたいくらい甘い。

 超甘党の人には好かれると思われる。
 チョコレート板2枚とスティックシュガー8本分の甘さなだけある納得の甘さ。
 カップを小さめの紙コップにしてちょうどいい量だと思われる。
 クッキーやケーキにはこれ以上の量の砂糖が加えられているわけだが、小麦粉やバターの味が勝っているのだろうと思った。
 あとボールのサイズは後々を考えて選ぶべき。
 泡立てるときはやや小さめのボールの方が適している。

 

 

少し多く作ってしまったので、明日学校で会った人に適当に押し付けます。
余談ですが、製作中のBGMは「なんかのサナギ」でした。


「なんかのサナギ」

 

以上、解散。

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制御です。パラメータは極指定法によって決めていこうと思います。ここまでお付き合いいただき、ありがとうございました。

ドローン作成

 初投稿になります。昨年何か作りたいという意思だけでほとんどなにもしていなかったアンドリューです。

初めてなのでどこまでできるかわからないですが、とりあえずドローン作っていきたいと思っています。

最初はあまり手を加えずに参考書籍通りに作っていこうと思います。

というわけで部品等を見てみると合計で4万くらいいきそうです。個人的にはそれでも作ってみたくて、この時間のある春休み中にはある程度形にできればと思っています。

もし協力してくださる方がいれば是非お願いします( ̄^ ̄)ゞ

 

追記

協力してくださる方はコメント欄にコメントしてください

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

RC回路のステップ応答

c言語でわかる制御工学-その1

 

こんにちは、c言語でわかる制御工学シリーズを始めようと思います。

このシリーズは、制御工学の教科書でよくある「MATLAB」を用いた教科書にMATLABなんてもってないわ!っというツッコミを入れた人向けのシリーズです。また、c言語でPID制御のプログラムってどうやって書くの?っていう人の手助けにもなるかも知れません。

 

必要なものは、c言語を実行できるPCと、高校卒業レベルの物理とラプラス変換の知識です。

 

さて、第一回はRC回路の単位ステップ応答のシミュレーションです。

RC回路とは抵抗とコンデンサーからなる電気回路のことです。今回はR=1.0,C=1.0としています。

この回路に入力としてVi=1[V]を入力します。またコンデンサーにおける電位差Vo[V]を出力とします。

 

f:id:karakuridoh:20170211011346p:plain

 

まずはプログラムを読んでみてください。物理が得意な方はすぐに理解できるかもしれません。ピンとこない方はこれから下の説明を読んでみてください。ちなみに厳密な説明ではありませんのであしからず。

 

ではコンデンサーにおける電位差が出力であるので、これを求める方法を考えてみましょう。

 

まず、キルヒホッフの第二法則から以下のことが成り立ちます。

[入力電圧] = [抵抗における電位差] + [コンデンサーにおける電位差]

 

それでは、各素子における電流と電位差について考えてみましょう。

 

[その1]

抵抗における電流は、抵抗における電位差によって定義される。

これはI=V/Rのことです。

 

[その2]

コンデンサーに溜まった電気量は、流れた電流の総和である。

つまり、Q = [電流i(t)の時間積分]

 

[その3]

コンデンサーにおける電位差は、溜まった電気量がわかればわかる。

これはV=Q/Cの事です。

 

つまり、すべての時刻における回路に流れる電流がわかれば、すべての素子における電位差もわかるということがわかりますね。とにかく電流が知りたいわけです。

 

では初期条件から時刻0.0の時に回路にどのような電流が流れるのかを考えてみます。

時刻0.0において、コンデンサーにおける電荷dQ=0であるので、当然コンデンサーにおける電位差はdVo=0です。

 

では抵抗における電位差をVrとします。

Vr = Vi – dVo = Vi – 0 = Vi

 

ということでt=0.0において回路に流れる電流I(t)は、

I(0.0) = Vr/R = Vi/R = 1/R

 

さて、時刻t=0.0からt=0.1までの間、電流Iコンデンサーを流れるのでコンデンサーに溜まった電気量は、

dQ = dQ + I*0.1

 

では時刻t=0.1の時、コンデンサーにおける電位差は

dVo = dQ/C

 

というわけで、抵抗における電位差Vr

Vr = Vi – dVo

 

よって抵抗に流れる電流は

I = Vr/R

 

さて、時刻t=0.1からt=0.2までの間、電流Iコンデンサーを流れるのでコンデンサーに溜まった電気量は、

dQ = dQ + I*0.1

 

…こうして時刻50.0までfor文が回ります。

 

このプログラム本当に正しいの?という疑問もあると思うの手計算で確認してみましょう。

このへんはどの制御工学の教科書にも書いてある内容なので詳しくは説明しません。

 

まず、回路の微分方程式

Vi(t) = RC*dVo/dt(t) + Vo(t)

 

ラプラス変換して

Vi(s) = (RCs+1)*Vo(s)

 

伝達関数

G(s) = 1/(RCs+1)

 

このシステムに単位ステップ入力Us(t)=1を入力すると、

y(t)=ラプラス[y(s)]=1-exp((-1/RC)*t)

 

これによりy(t)63.2%の出力になる時の時刻が時定数であるから、時定数T=RC=1.0であることがわかります。では実際の出力結果を見てみましょう。

 

TIME=1.000000,Vo=0.651322

 

本当はVo=0.632となってほしいところですが、0.1刻みで近似積分しているのでこんなものでしょう。

 

第一回目は一次遅れのステップ応答のシミュレーションでした、次回は一次遅れのP制御についてc言語でシミュレーションする方法について紹介します。

日本橋買い出し

こんばんは。ワタナベです。

今日は日本橋の「シリコンハウス」に買い出しに行きました。
f:id:karakuridoh:20170209210452j:image

 

サーボモーターやラズパイを買うのにだいぶお金を使いました。万が一誰も使わないなら……今後もどんどん使うと思います。