まえがき
前回は伝達関数に含まれる粘性係数などのシミュレーション問題をやりました。
今回はちょっと実用的な、収束値などを~%以下にするにはなどをシミュレーションをします。
実行環境
・windows10
・scilab(6.1.0)64bit
問題
問題全体の前提
※時間軸は0秒~1秒まで0.01秒刻みで設定すること。
モータを単純比例フィードバック制御で動かすことを考える。
伝達関数はG(s)=k / ( Js+(B+k) )
問題d
定常偏差を0にするために積分器 1/s を導入する。
モータ制御の伝達関数に積分器を加えると、伝達関数は
G(s)=k / ( Js^2 + (B*s +k) ) になる。
Scilabを用いて以下のシミュレーションを行い、結果(波形)を記入せよ。
イナーシャ : J=0.05
粘性係数 : B=1
比例ゲイン : k=5
積分器が含まれていない伝達関数での出力波形A(黒)
積分器が含まれている伝達関数での出力波形B(青)
s =%s;
t=0:0.01:1;
J = [0.05 0.05]
B = [1 1]
Kp = [5 5]
Col = [1 2]
for i=1:1:2;
if i==1 then
// 積分器なし(黒)
P = (Kp(i)/(J(i)*s + B(i) + Kp(i)));
else
// 積分器あり(青)
P = ( Kp(i)/(J(i)*s^2 + B(i)*s + Kp(i)) );
end;
sys = syslin('c', P);
y = csim('step', t, sys);
plot2d(t, y, Col(i)), xgrid();
end;
問題e
Scilabを用いて以下のシミュレーションを行い、結果(波形)を記入せよ。
※ただし、時間軸を伸ばすため t=0:0.01:5 に変更
積分器 あり
イナーシャ : J=1
粘性係数 : B=5
比例ゲイン : k=5 → k=10 → k=20
s =%s;
t=0:0.01:5;
J = [1 1 1]
B = [5 5 5]
Kp = [5 10 20]
Col = [1 2 3]
for i=1:1:3;
P = ( Kp(i)/(J(i)*s^2 + B(i)*s + Kp(i)) );
sys = syslin('c', P);
y = csim('step', t, sys);
plot2d(t, y, Col(i)), xgrid();
end;
問題f
Scilabを用いて以下のシミュレーションを行い、結果(波形)から定常偏差の値を読み取れ。
積分器 なし
イナーシャ : J=0.4
粘性係数 : B=0.9
比例ゲイン : k=5
s =%s;
t=0:0.01:1;
J = [0.4]
B = [0.9]
Kp = [5 5]
Col = [1]
for i=1:1:2;
P = (Kp(i)/(J(i)*s + B(i) + Kp(i)));
sys = syslin('c', P);
y = csim('step', t, sys);
plot2d(t, y, Col(i)), xgrid();
end;
問題g
以下の条件を満たすために必要十分な比例ゲインの値を求めよ。
イナーシャ : J=2
粘性係数 : B=2
定常偏差 : 目標値1の10%以下
s =%s;
t=0:0.01:1;
J = [2 2 2]
B = [2 2 2]
Kp = [15 17 20]
Col = [1 2 3]
for i=1:1:3;
// 積分器なし
P = (Kp(i)/(J(i)*s + B(i) + Kp(i)));
sys = syslin('c', P);
y = csim('step', t, sys);
plot2d(t, y, Col(i)), xgrid();
end;
あとがき
基礎中の基礎はこれで抑えられたと思う。
ひさびさに使うときに思い出す用です^^