PID補償器の設計

PID補償器の設計

古典的なループ整形法であるゲイン・位相進み補償の考え方に基づいた簡単なPID補償器の設計法を以下に紹介します.

[1] 吉田和信:ループ整形法によるPID補償器の設計,第52回システム制御情報学会研究発表講演会,pp.715-716, 2008.5.18(PDF)

[2] 吉田和信:プラントの伝達関数形を考慮したループ整形法によるPID補償器の設計,第53回システム制御情報学会研究発表講演会予稿集,pp.693-694, 2009.5(PDF)

また,以下は[1]の数値例で使用したScilabプログラムです.Scilabの使い方の説明が「Scilabによる古典制御計算」にあります.
Matlabプログラム(むだ時間の近似なし)も以下に掲載します.

[2]の方法は,次の二つの場合に適した設計法を与えます.
1. 1次遅れ+むだ時間系(目標値応答)
2. 積分器+むだ時間系(外乱応答)


pid.sce

// PID controller design by Kazunobu Yoshida 2008/05/11
function [gain,phasedeg,w] = bode1(G,wmin,wmax,n)
// gain and phase for bode plot
w=logspace(wmin,wmax,n)
Gjw=horner(G,%i*w)
gain=20*log10(abs(Gjw))
phasedeg=phasemag(Gjw,'c')
endfunction

s=%s;
L0=1; // delay
k0=2;
G=k0/(1+s)^4*(12-6*L0*s+L0^2*s^2)/(12+6*L0*s+L0^2*s^2); // plant
G1=G/s;
Kpt=0.12
Kpt=input('Enter Kpt'); // Kp tilde
L=Kpt*G1;
[p,fr]=p_margin(L);
wp=fr*2*%pi;
pm=180+p;
phi_M=65
phi_M=input('Enter phi_M'); // specified phase margin
phia=(phi_M-pm)*%pi/180;
if phia > 0 then
Td=tan(phia/2)/wp;
else
Td=0;
end
Kp1=Kpt/abs(1+%i*wp*Td)^2
C=Kp1*(1+Td*s)^2/s; // designed controller
L=C*G; // loop transfer function
[p,fr]=p_margin(L);
wp=fr*2*%pi // gain crossover frequency
pm=180+p // phase margin

S=1/(1+L); // sensitivity function
T=1-S; // complementary sensitivity function
Gyr=T; // transfer function from r to y
Gyd=G*S; // transfer function from d to y
Gur=C*S; // transfer function from r to u
Gud=-C*G*S; // transfer function from d to u

[gain,phasedeg,w]=bode1(L,-2,4,400);
xset('window',0)
xsetech([0,0,1,0.5])
plot2d(w,gain,5,logflag='ln') // gain characteristic of L
xgrid(4)
xsetech([0,0.5,1,0.5])
plot2d(w,phasedeg,5,logflag='ln') // phase characteristic of L
xgrid(4)

MS=h_norm(S); // peak value of |S|

syr=syslin('c',Gyr);
syd=syslin('c',Gyd);
sur=syslin('c',Gur);
sud=syslin('c',Gud);

t=0:0.02:20;
// step responses
yr=csim('step',t,syr);
yd=csim('step',t,syd);
ur=csim('step',t,sur);
ud=csim('step',t,sud);

xset('window',1)
plot2d(t,yr,6)
xgrid(4)
xset('window',2)
xgrid(4)
plot2d(t,yd,6)
xset('window',3)
plot2d(t,ur,6)
xset('window',4)
plot2d(t,ud,6)

wp
pm
MS

実行方法

上記のプログラムを例えば
C:\scilab\control\pid.sce
に保存し,Scilabのコマンドウィンドウで次のように入力します.
-->chdir('C:\scilab\control');
-->exec pid.sce


Matlabプログラム pid.m

L0=1; % delay
k0=2;
s=tf('s');
Gp=k0/(1+s)^4;
Gp.inputd=L0; % plant
Gp1=Gp/s;
Kpt=0.12
Kpt=input('Enter Kpt '); % Kp tilde
L=Kpt*Gp1;
[gm,pm,wq,wp]=margin(L)
phi_M=65
phi_M=input('Enter phi_M '); % specified phase margin
phia=(phi_M-pm)*pi/180;
if phia > 0
Td=tan(phia/2)/wp;
else
Td=0;
end
Kp1=Kpt/abs(1+j*wp*Td)^2
s1=s/(1+0.01*s); % approximate differentiator
C=Kp1*(1+Td*s1)^2/s; % designed controller
L=C*Gp; % loop transfer function
[gm,pm,wq,wp]=margin(L)
P=ss(Gp);
Gyr=feedback(P*C,1); % transfer function from r to y
Gyd=feedback(P,C); % transfer function from d to y
t=0:0.01:20;
figure(1)
step(Gyr,t)
figure(2)
step(Gyd,t)

実行方法

上記のプログラム(pid.m)を作業ディレクトリに保存し,Matlabのコマンドウィンドウで次のように入力します.
>> pid


RC回路系を用いたPID制御実験

本研究室で製作したRC回路系実験装置を紹介します.パソコンとDSP(エムティティ s-BOX)をコントローラとして使用し,プログラミング言語は,DSP付属のC言語を用いました.PID制御などによって出力電圧(コンデンサ間の電圧)を制御する制御実験ができます.



図1 RC回路系実験装置

図2 RC回路系実験装置(回路部)


1次遅れ+むだ時間系に対するPID補償器の設計例(PDFファイル) [2]の方法によってRC回路系を制御する実験を行いました.

設計用サンプルプログラム(pid_lagdelay.sce) 同実験で用いた設計用のScilabプログラムです.

RC回路系制御サンプルプログラム(pid_sample.c) 同実験で用いたs-BOX用のCプログラムです.


最終更新日:2009年08月02日
戻る