コンピュータ・電子工学講座 このページを見るときは固定等幅フォントを使用してください
PID 制御とは

PID制御とはP(比例),I(積分),D(積分)の各制御の意味です.
PID制御の前にまずはフィードバック制御について簡単に説明をします.


フィードバック制御

目標とする出力 yd を考えるとき,システムの出力 y(t) がその目標値ydに一致するような制御入力を与えることを考えます.
このとき y(t) と yd を一致させるには yd と y(t) との差(偏差)を何らかの形で入力として与えればよいことになります.
これがフィードバック制御の基本的な考え方です.

                    制御装置
            .........................
            :                       :
            :         +----------+  :         +----------+
            :+   e(t) | 制御入力 |  :  u(t)   | 制御対象 |   y(t)
目標値 yd -----O----->|  の決定  |----------->| システム |---+----> 出力
            :  A -    |   (K)    |  :         |   (CS)   |   |
            :  |      +----------+  :         +----------+   |
            .........................                        |
               |                                             |
               |        y(t) +----------+                    |
               +-------------|  検出器  |<-------------------+
                             +----------
ここで e(t) は目標に対する誤差になります.
また,制御対象システムに対する入力 u(t) は

  u(t) = k・{yd - y(t) }

で決定されることになります.
ここで,k はフィードバックゲイン(制御入力の決定の部分に相当)です.

偏差
偏差は目標値 yd と出力値 y(t) との差のことです.
下図はそれを図示したものです.


比例制御(P制御)

比例制御(P制御)の基本的な考え方は下図のようになります.

            +   e(t) +---+  u(t)  +----+ y(t)
目標値 yd ----O----->| K |------->| CS |------+-> 出力
            - A      +---+        +----+      |
              |                               |
              +-------------------------------+
                            y(t) 

  k  : フィードバックゲイン
  CS : 制御対象システム

これは制御対象システムに対する制御入力 u(t) は誤差信号 e(t) に比例させるということです.
式にすると

u(t) = k・e(t) ・・・・(1)

e(t) = yd - y(t) : (目標値 - 出力値) ・・・・(2)

これは目標値に近づいたら制御入力の値を小さくしてやることで出力の変化を抑えます.
システムに入力される値は式(1)で表すことができます.
単なる on/off の制御では入力する値は一定であり,その時間だけが変化するのみです.
よって単なる on/off 制御の場合には出力が振動することになりますが,比例制御を用いることで,制御量に関する無駄を省くことができます.

欠点としては応答速度が遅いということが挙げられます.
この応答速度を速めるためには,差を早く無くすことが必要であり,そのためにはフィードバックゲインを増す必要があります.
しかし,2次遅れ要素以上の制御対象システムに対しては不安定(振動する)となってしまうという問題があります.
よって,制御対象システムによってはうかつにゲインを上げるということはできません. 下図はそれを図示したものです.
(a) は一次遅れシステムの場合で,フィードバックゲイン(FG)を大きくすると応答速度は速くなる様子を示しています.
(b) は二次遅れシステムの場合ですが,フィードバックゲイン(FG)を大きくすると応答速度は速くなるものの,振動的になる様相です.
(c) は二次遅れシステム以上の場合で,フィードバックゲイン(FG)を大きくした場合で,最終的に発散してしまう様子を示しています.


比例−積分制御(PI制御)

比例−積分制御(PI制御)の基本的な考え方は下図のようになります.

            +   e(t)    +----+             u(t) +----+ y(t)
目標値 yd ----O-----+-->| Kp |-----------O----->| CS |------+--> 出力
            - A     |   +----+           A      +----+      |
              |     |                    |                  |
              |     |   +-----+  +----+  |                  |
              |     +-->|∫dt |->| Ki |--+                  |
              |         +-----+  +----+                     |
              |                                             |
              +---------------------------------------------+
                               y(t) 

  kp : フィードバックゲイン(比例要素)
  ki : フィードバックゲイン(積分要素)
  CS : 制御対象システム
 ∫dt: 積分項
ではなぜ積分項が必要なのでしょうか?
比例制御だけの場合,定常偏差を減らすにはフィードバックゲイン(Kp)を大きくする必要があります.
しかし,フィードバックゲインを大きくすると2次系以上の制御対象システムでは振動してしまう恐れがあり,最悪発散してしまいます.
そこで,目標と出力の差が0でも,定常偏差を減らすことを考えると,何らかの状態を制御装置に持つ必要があります.
よって,ある時間における差の状態を保持する機能,つまり,積分した値を持てばいいことになります.
下図はそれを図示したものです.

(a)の部分が操作量となり,システムに対してこの量を与えることで目標に近づくことができます.

さて,目標値と出力の差から制御入力を考えるとき,その差に比例する項だけでなく「差の積分値に比例する」という項を追加したのが「PI制御」 です.
ここで,積分項は

     t
Ki・∫e(t)dt
     0
となります.
よって,システムに入力される値 u(t) は

                       t
u(t) = Kp・e(t) + Ki・∫e(t)dt
                       0
で与えられます.
この式を図示したのが上のブロック図になります.

さて,積分項は時間と共に増大します.
もし,e(t)=0 のときでも Ki・∫e(t)dt はある値を保持していますので,除々にでも目標値へ近づくことができます.
ただし,Ki を大きくすると不安定になりますので,注意が必要になります.


比例−積分−微分制御(PID制御)

PI 制御は目標に近づくという点では特に問題はありません.
しかしながら,目標に近づくためにはある一定の時間が必要となりますので,応答速度が遅いということが言えます.
もし,外乱等によって目標値を外れた場合,PI制御ではすぐに元の目標値 yd に戻る事ができません.
そこで,偏差の変化量が大きくなった場合には操作量を大きくし,偏差の変化量が小さい時にはPI制御に近づけるようにすれば,外乱等が発生した場合でも,すぐに目標に近づき安定させることが可能となります.
この変化量は微分で検出させます.
微分は変化量の大きさを算出することができますので,ここでは微分を使うわけです.
この微分の項は

     d
Kd・---- e(t)
     dt
となります.
つまり,偏差における変化量を検出することになります.
比例−積分−微分制御(PID制御)の基本的な考え方は下図のようになります.

            +   e(t)    +----+             u(t) +----+ y(t)
目標値 yd ----O-----+-->| Kp |-----------O----->| CS |------+--> 出力
            - A     |   +----+           A      +----+      |
              |     |                    |                  |
              |     |   +-----+  +----+  |                  |
              |     +-->|∫dt |->| Ki |--O                  |
              |     |   +-----+  +----+  A                  |
              |     |                    |                  |
              |     |   +-----+  +----+  |                  |
              |     +-->| d/dt|->| Kd |--+                  |
              |         +-----+  +----+                     |
              |                                             |
              +---------------------------------------------+
                               y(t) 

  kp : フィードバックゲイン(比例要素)
  ki : フィードバックゲイン(積分要素)
  kd : フィードバックゲイン(微分要素)
  CS : 制御対象システム
 ∫dt: 積分項
 d/dt: 微分項
よって,システムに入力される値 u(t) は

                       t              d
u(t) = Kp・e(t) + Ki・∫e(t)dt + Kd・---- e(t)
                       0              dt
で与えられます.

さて,PID制御の表現をラプラス変換をして表現をしてみます.
ラプラス変換した積分は 1/TiS,微分は TdS で表現できますので,u(t) の伝達関数は

                 1
G(s) = Kp + Ki ----- + Kd・TdS
                TiS
となり,もし,Kp = Ki = Kd とするならば,

           (      1         )
G(s) = Kp・(1 + ----- + TdS )
           (     TiS        )
で表すことができます.
ここで,Ti は積分時間,そして Td は微分時間を表します.
これをブロック図で表すと下図のようになります.
                             G(s)
                  ..........................
                  :                        :
            +   e(t)    +----+     +----+  u(t) +----+ y(t)
目標値 yd ----O-----+-->| 1  |--O--| Kp |------>| CS |------+--> 出力
            - A   : |   +----+  A  +----+  :    +----+      |
              |   : |           |          :                |
              |   : |   +-----+ |          :                |
              |   : +-->|1/TiS|-O          :                |
              |   : |   +-----+ A          :                |
              |   : |           |          :                |
              |   : |   +-----+ |          :                |
              |   : +-->| TdS |-+          :                |
              |   :     +-----+            :                |
              |   ..........................                |
              +---------------------------------------------+
                               y(t) 


離散信号での比例−積分−微分制御(PID制御)

さて,これらはアナログ的な考え方です.
つまり,オペアンプとかトランジスタやRLCなどで回路を構成する場合です.
そこで,離散的な信号,つまりディジタル信号について考えてみましょう.
このときのPID制御は以下のように考えることができます.

操作量 = Kp・偏差 + Ki・偏差の累計 + Kd・前回の偏差との差

つまり,PID制御の式を,数値解析的に直したのが上の式と言えるでしょう.
よって,前回の操作量が分っている(またはあるとする)とすると,今回の操作量 u(t) は

u(t) = u(t-1) + Δu(t)

となります.
ここで 前回の操作量との差 Δu(t) は

Δu(t) = Kp・e(t) + Ki・e(t) + Kd・{e(t) - e(t-1) }

となります.
つまり,前回の操作量と偏差がわかれば,今回の操作量が算出可能となります.


前に戻る