EXCELでPID制御をシミュレーション

Pocket

 PID制御をEXCELでシミュレーションする方法を紹介します。といっても細かな運動式はだいぶ手を抜いていますし、シミュレーションといってもゲインによる変化をEXCELグラフで可視化しているだけです。

 

 今回はEXCEL表計算を中心に解説します。PID制御に知見のある方が見たらつっこみたいところが多々あるかと思いますが、PID制御の雰囲気だけでも伝われば良いかと思います。

 

 イメージしやすいように馴染みやすそうな例題で行ってみます。

 前方の車と自分の車(後方)がともに時速30km/h、車間距離30mで走行中という状況。アクセル操作を制御して、車間距離5mまで詰めて走行するというPID制御を行ってみます。人の操作であれば簡単ですね。アクセル踏み込んで距離が近づいてきたら徐々にアクセルを緩めて走行。近づきすぎたらアクセル離して(もしくはブレーキで)減速するといった具合でしょうか。

 

 細かい説明は置いといて、さっそくEXCEL表計算の準備です。まず定数を入力▼

 A1セルから順に上記のように入力しておきます。A列は好きな言葉で。B列はベタ打ちで問題ありません。

「制御間隔」は0.5sで設定してます。
「目標値」は目標とする車間距離5m。
「初期値」は最初の車間距離30mです。
「加速度」はアクセルを100%踏み込んだ時の車の加速度、0.3G(3.27m/s^2)としてます。
「前方車両速度」は30km/h。単位をm/sに変えて≒8.33m/s
「初期車両速度」は自分の車の初期速度です。同様に30km/h(≒8.33m/)

 

▼次にゲインも入力しておきます▼

 A8セルから順に比例、積分、微分のゲインを入力しておきます。取り合えず、比例項を「1」それ以外を「0」にしておきます。

 

 では順番にEXCELで表計算していきます。

▼まず時刻です▼

 D列に時間経過を計算しておきます。今回は制御間隔を0.5sとしたため単純に0.5sを足し続けているだけです。上写真の計算例ではセルの行番号から時刻を計算してます。100秒くらい(102行程度)までドラッグ(作成)しておきます。ここからの作業はベタ打ちはきついかと思います。EXCEL表計算を十分に発揮します。

 

▼次に前方車両の位置を計算します▼

 E列に前方車両の位置を計算します。単純に速度×時間です。前方車両は自分の30m先にいる想定ですので初期(時刻0s)は30mからスタートです。この列も時刻同様、100秒くらいまで計算しておきます。ちなみに60秒後は530mです。小学生の算数です。前方車両はずっと時速30km/h(≒8.33m/s)で走行する想定です。

 

 E2セルに計算式を入力してから選択セル枠右下隅の黒点をダブルクリックすると隣のセル値があるところまでいっきに計算します。。何気に便利です。ドラッグする必要がありません。最近知りました。

 

▼続いて自分の車位置及び車間距離の列を準備します▼

 まずF2セルに「0」を入れておきます。自分の0s時点の位置です。G2セルには車間距離。「前方車両位置」-「自分の位置」となりますので、=E2-F2を入れておきます。

 

 

▼比例項、積分項、微分項の計算▼

 H、I、J列にそれぞれ比例[P]、積分[I]、微分[D]の表計算を入れます。まずH列の比例項[P]には現在の車間距離[G2]セルから目標距離の5mを引いた偏差を入力しておきます。EXCEL表計算では=G2-$B$2です。積分項と微分項は0s時点なので2行目は「0」を入れておきます。

 

<スポンサーリンク>

▼操作量と変化量を計算します▼

 サンプリング方式のPID制御の基本式をK2に入力します。「操作量=Kp×偏差+Ki×偏差の積分+Kd×偏差の微分」から=H2*$B$8+I2*$B$9+J2*$B$10と入力しておきます。今回、制御量(操作量)はアクセルを踏み込む割合[%]としてます。

 

 L列では、アクセルの踏み込み具合による、車両の加速度を入力します。今回、「アクセルの踏み込む割合」と「車の加速」は比例するとして、L2セルには、=K2*$B$4/100を入力します。

 

 速度、距離のM、N列には加速度の積分、速度の積分をそれぞれ順に計算し入力しておきます。速度は初期速度30km/hから変化するようにします。最終N列にて計算される距離が、設定した制御間隔[0.5s]での移動量となります。ですので[0.5s]後の車両位置F3セルには=F2+N2と入力して現在の車両位置を計算させておきます。

 

 [0.5s]後の車間距離が計算できますので、3行目の計算を順に埋めることができます。車間距離、比例項と先ほどと同様に計算。偏差の積分[I]と偏差の微分[D]も計算できますので入力します。

 

「I」項は「P」項の積分となるため、I3セルは「=I2+H3*$B$1」となります。「D」項は「P」項の微分となるため、J3セルは「=(H3-H2)/$B$1」と入力しておきます。ともに時間で除していますが、ゲインが掛けられて、定数として纏まってしまいますので時間で除さなくてもどっちでもいいかと・・。

 

 で操作量が計算され、車両の加速度、速度、移動量が順に計算できると思います。

 

 この要領で3行目以降も計算すれば完成です。(基本ドラッグすれば完了するはずです)

 

▼こんな感じになります▼

 

 

 D列(時刻)とG列(車間距離)、M列(速度)くらいをグラフ化してみます。

 Ki、Kdゲインが「0」ですので上記ではただの比例制御です。車間距離が振動を起こしてます。マイナスの車間距離が出てますね。追い越してしまってます。

 

 徐々にKdゲイン(微分項)を効かせていきます。「8」くらいにすると下図のように収束すると思います。▼

 車間距離が目標の5mに収束してます。当然車両速度も前方車両と同様の30km/h(≒8.33m/s)で安定します。今回の例では積分項[I]は全く意味がありません。例題(計算)が悪かったですね。ゲインを弄ってみると楽しいことになります。

 

いろいろゲインを弄って見てみましょう。比例、積分、微分制御の効き方がイメージしやすくなるかと思います。

 

 今回の例では、計算内容はずいぶん適当です。車の慣性や、加減速の仕方などなど、そのほか、本来であればもっと細かくみる必要があると思いますが、難しいので省きました。雰囲気だけでも伝わればと思います。

 Arduinoでドローンの自作

 

Pocket

<スポンサーリンク>


この投稿へのコメント

  1. 匿名 said on 2018-01-14 at 00:15

    以前ジャイロセンサーについて質問したものです。
    今度はPID制御について勉強していたらまたこのサイトに来ました。
    いやーすごい知識量ですね。
    また初歩的な質問なのですが、I成分・D成分の計算式I2項・J2項は
    どう記述したらいいのでしょうか。教えていただけませんか。

    • imo said on 2018-01-14 at 08:19

       匿名さん、こんにちは。コメント有難う御座います。
      広く浅いだけです・・。学生時代にもっと勉強しておけば、と良くある後悔してます。
       さて質問の内容ですが、I成分はP項についての積分計算となります。D成分は微分計算になります。

  2. 匿名 said on 2018-01-14 at 21:12

    早速の回答ありがとうございました。
    答えを見ると「あーなるほどな」と思うんですが...
    昨晩なんであんなに悩んだのか...トンチンカンな計算をしていました。
    ただデータをいただいたので、ほかにも勘違いしている個所を見つけることができました。
    さらに勉強を進めていきます。ありがとうございました。

  3. 匿名 said on 2018-02-03 at 18:26

    はじめまして。
    制御系の勉強を始めた者です。
    PID制御の概要が、きちんとまとまっていて、さらにExcelのサンプルもあり、勉強になります。
    仲間内で、制御に関係する勉強会のような事をやっているのですが、
    このHPの内容を使わせていただいてもよろしいでしょうか。

    • imo said on 2018-02-03 at 19:56

      匿名さん、はじめまして。
      わざわざ連絡頂き有難うございます。ご自由にお使い下さい。

      • 匿名 said on 2018-02-03 at 20:21

        ありがとうございます。
        活用させていただきます。

  4. さるさる said on 2018-03-23 at 12:55

    はじめまして。

    PIDパラメータ調整のコツをつかみたいと思い、エクセル等でシミュレーションできるものを探してこのページにたどり着きました。内容がわかりやすく、とても参考になります。

    このページの内容を真似して見たのですが、私もI成分、D成分の計算でつまづいてしまいました。

    差し支えなければデータを頂けないでしょうか?

    • imo said on 2018-03-23 at 19:05

      さるさるさん。はじめまして。
      参考にして下さい。

  5. やん said on 2018-07-18 at 13:05

    はじめまして。
    PID制御について、勉強してる素人です

    大変わかりやすい説明ありがとうございます、

    差し支えなければ、私にもI.d成分の式をご教示していただけないでしょうか

    • imo said on 2018-07-18 at 14:51

      やんさん、はじめまして。
      「I」項は「P」項の積分となるため、I3セルは「=I2+H3*$B$1」となります。「D」項は「P」項の微分となるため、J3セルは「=(H3-H2)/$B$1」と入力しておきます
      本文にも追記しておきました。

      • 匿名 said on 2018-07-18 at 15:36

        わかりやすい解説ありがとうございます!!

  6. 匿名 said on 2018-11-23 at 20:15

    初めまして。
    最近、PID制御の勉強を始めました。
    このサイトのPIDの制御を参考にしましたがL,M,Nがうまく行かないです。
    よろしければデーターを頂けないでしょうか?

    • imo said on 2018-11-24 at 06:57

      はじめまして。
      加速度、速度、位置の運動方程式ですが、
      Excelでは単純に積み上げ計算してるだけです。
      参考にして下さい。暫く置いておきます。
      >>Excelサンプル

コメントを残す

メールアドレスが公開されることはありません。

この投稿へのトラックバック

トラックバックはありません。

トラックバック URL