• ベストアンサー

PID制御のプログラミング2

先ほど、PID制御のプログラミングについて質問したのですが、もう少しわからないところがあるので教えてください。 1.ステップ応答から各パラメータを求める方法   http://www.picfun.com/motor05.htmlのページの一番下のほうに書かれており、   Kiの値=0.6~0.7/KL、Kdの値=0.3~0.45T/Kとなっています。   このLとTの単位は[sec]と考えていいのでしょうか。   KpはLとTで打ち消されて、単位を考える必要ないですが、KiとKdは単位により結果が違います。 2.サンプリングデータにより制御する場合のサンプリング時間について上記アドレスにPID制御のアルゴリズムの説明があるのですが、   サンプリング時間が考慮されていません。   サンプリング時間により前回の偏差との差や、積分の場合足しこむ回数が違ってくると思うのですが、どのように補正すればよいですか。   このときも単位を1[sec]秒として補正すればよいでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • chieda
  • ベストアンサー率100% (2/2)
回答No.1

ヒータで層の温度を一定にする系で、実際にやったことがあるのでアドバイスします。理論的なアドバイスでは有りませんが参考になればと思います。 2.について 参照先URLに紹介されている式では、I制御による変化量は、制御開始からずっと累積されてしまっているのがわかります。 系によると思いますが、おっしゃる通り、この式では積分時間やサンプリング時間を考慮していないので、この式をそのままプログラムに落とすのは、私の場合、あまり実用的では有りませんでした。 そこで、 ki=kp/Ti , kd=kp*Td ですので、  (Ti=積分時間、td=サンプル時間) n=Ti/Td  (n=サンプル回数) として、 ei= Σe/n (ei=積分時間あたりの偏差の平均) ed= en - en-1 (ed=前回偏差と今回偏差の差) とし、 M= kp*( en + ei + ed ) と、操作量を決めてあげました。 このやり方は直感的にわかりやすく使いやすいです。 実際、操作量には上限がありますし、負の値を取れない系もありますので、 早速プログラムを組み始まってしまうのも一つの手だと思います。 ジーグラとニコルズの最適値は、オーバシュート量が25%に達しますので、 私の場合、カットアンドトライで最適値を決める必要がありました。 やってみて気付くことはとても多かったです。 1.についてですが、 LとTの単位はサンプリング時間と同じにするとやりやすいと思います。サンプリング時間の単位が秒であれば、時定数や無駄時間の単位も秒にします。 しかし、実際に計算してみると、これでも時間の単位の違いによって、パラメータは大きく異なってしまうのがわかりますが、これも実際やってみると、秒がいいのか分がいいのか、わかってくると思います。

nanashisan_
質問者

お礼

回答ありがとうございます。 >ki=kp/Ti , kd=kp*Td ですので、  (Ti=積分時間、td=サンプル時間) >n=Ti/Td  (n=サンプル回数) として、 >ei= Σe/n (ei=積分時間あたりの偏差の平均) >ed= en - en-1 (ed=前回偏差と今回偏差の差) >とし、 >M= kp*( en + ei + ed ) の辺りで疑問なのですが、 サンプリング時間はCPUの処理速度などの都合から先に決まってしまうのに対し、 PID制御のパラメータTdは別に決めなければならない値だと思うのですが、 どうなのでしょうか。 ed= en - en-1もサンプリング時間が短ければ値が小さくなってしまうので、 制御がサンプリング時間に依存してしまうように思います。 あと、Kiの値=0.6~0.7/KL、Kdの値=0.3~0.45T/Kと決めてしまっている以上、 LやTの単位が秒なのか分なのか確定している必要があるように思いました。

nanashisan_
質問者

補足

お礼欄にはもう書けないためここに書きます。 回答内容をもう一度読み直してみて思ったのですが、 kd=kp*TdのTdと、td=サンプル時間のtdは別物でしょうか。 n=Ti/Tdで大文字のTdが出てきたので先のtdはTdの書き間違えと理解したのですが、 あとのTdをtdの書き間違えと考え、時間は全てサンプリング時間を基準に(サンプリング時間の何倍かと)考えると 全てつじつまが合い、計算式もそのまま適用できるではないかという気がしてきました。 Ki=0.6~0.7/KLやKd=0.3~0.45T/Kを導き方を解説したサイトが見つからないので確信はもてませんが、 どうせ最後はカットアンドトライとなることが予想されるので、そのまま進めてみようと思います。

その他の回答 (3)

  • chieda
  • ベストアンサー率100% (2/2)
回答No.4

#1に対して。 おっしゃる通り、Tdとtdは同じ物です。間違えました。 http://pelab.nagaokaut.ac.jp/kondolab/convenience/pdffiles/5apidcontrol.pdf を参考にしました。ゲインの決め方ではなく、積分時間とサンプリング時間の決め方が書いてあります。参考になれば。

nanashisan_
質問者

お礼

ありがとうございます。参考にさせていただきます。

回答No.3

> 制御周期毎にPID演算を実行して辻褄が合うためには、 > 制御パラメータを制御周期で補正(?)しなければならないような気がして その通りですね。 それが#2で述べた,積分器なら"*ΔT",微分器なら"/ΔT"の項です。 > 制御パラーメータを求める際に使用する時間を制御周期を基準に > (制御周期の何倍かを)代入すれば必要なパラメータが得られると > 解釈しました。その理解で正しいでしょうか。 これも良いと思います。 ただ#2では基準時間は何でも良いと書きましたが,いや実際それで間違いはないのですが, 素直に1[s]としておいた方がいろいろと混乱を避けられるのも確かです。 あと#1さんへの補足にあった > Ki=0.6~0.7/KLやKd=0.3~0.45T/Kを導き方 ですが,これらは経験則によって導かれたものですので,明快な導き方を示した資料はないのではないかと思います。

nanashisan_
質問者

お礼

ありがとうございます。参考にさせていただきます。

回答No.2

○積分器と微分器の実装方法が分かれば大方解決でしょうか。 いろいろ方法はありますが, 1. 積分器 ・区分求積法使用 ∫f(t)dt≒Σ{f(kΔT)*ΔT} とします(積分区間は省略)。 ここでΔTは制御周期(一般的にはサンプリング周期と同じ),f(kΔT)はk回目のサンプリングにおける信号値です。 ΔTが十分に小さければこれで十分な精度が得られます。 さらに高精度化を図るには台形公式で近似します。 2. 微分器 ・後退差分で近似 df(t)/dt≒(f(kΔT)-f((k-1)ΔT))/ΔT これらの式で制御周期毎にPID演算を実行すればよいです。 .....とここまで書いて前の質問に記載されていたもう一つのURLを見てみたら同じ式が書かれてますね。 ただどちらのURLの内容も質問者様には帯に短しな内容みたいですので,もう少し資料を探された方が良いかと思います。 書籍でもWebサイトでも,詳しいのはいくらでもありますよ。 ○単位について どんな単位を使っても構わないのですが,混乱を避けるために同じ次元の数値には違う単位を使わいことをお勧めします。 例えば時間なら全て[秒]で統一し,[分]や[時]などは机上検討でも極力使わないようにするなどです。 [10msec]や[0.1msec]などでも構いません。 単位の変換に線型性が成立つ限り,実装時の単位は実装者の都合のいいように決定すればよいです。

nanashisan_
質問者

お礼

いろいろアドバイスありがとうございます。 制御周期毎にPID演算を実行して辻褄が合うためには、制御パラメータを制御周期で補正(?)しなければならないような気がして質問したのですが、 制御パラーメータを求める際に使用する時間を制御周期を基準に(制御周期の何倍かを)代入すれば必要なパラメータが得られると解釈しました。 その理解で正しいでしょうか。

関連するQ&A