- 実現したいこと
- Matlabのバージョン
- 必要なtoolbox
- ダウンロードURL
- フォルダ構成
- 実行方法
- Simulinkファイル(I_PD.slx)
- mファイルソースコード(Main_I_PD.m)
- 実行結果
- まとめ・考察
- 併せて確認推奨の過去記事
実現したいこと
- Simulinkとmファイルを用いたI-PD制御(比例微分先行型PID制御)シミュレータプログラムの構築
- SimulinkのPIDブロックを用いずに実現
- 各PIDゲインの特性を理解するためのプログラム
- 不完全微分が含まれない形式のPID制御 - PID制御,PI-D制御とI-PD制御の比較(入力が最も穏やかなのか)
Matlabのバージョン
Matlab2021a
※ダウンロード形式として過去のバージョンも用意
必要なtoolbox
ダウンロードURL
【ダウンロードリンク】
※ご利用中のMatlabバージョンのフォルダをダウンロードしてください。
例:2021aバージョンであれば,上記リンクの「2021a」を選択
※上記プログラムの利用で生じたトラブルは一切の責任を負いかねます。
フォルダ構成
上記ダウンロードし展開。
(下記のようなフォルダ構成になっていることを確認)
実行方法
「Main_I_PD.m」を実行
Simulinkファイル(I_PD.slx)
mファイルソースコード(Main_I_PD.m)
%% 初期化clc % コマンドウィンドウの初期化clear % ワークスペースの初期化close all % グラフを全部閉じる%% 変数宣言% ===== PIDゲイン =====Kp = 1; % PゲインKi = 1; % IゲインKd = 1; % Dゲイン% ===== 制御対象 =====K = 1;A = 1;B = 1;C = 1;% ===== 目標値 =====r_val = 10; % ステップ状の目標値% ===== Simulink関係 =====N_File = 'I_PD.slx'; % simulinkファイル名FinalTime = 30; % シミュレーション終了時刻[s]SamplingTime = 0.1; % サンプリング時間[s]%% Simulinkの実行open(N_File); % Simulinkを起動sim(N_File); % Simulinkの実行%% グラフ化% ===== Simulinkデータ格納 =====t = ScopeData.time; % 時刻情報y = ScopeData.signals(1).values(:, 1); % 出力r = ScopeData.signals(1).values(:, 2); % 目標値u = ScopeData.signals(2).values(:, 1); % 入力% ===== グラフ描画 =====% ----- y -----figure;subplot(211);plot(t,y);hold on;plot(t,r,'--');grid on;xlabel('$$ t {\rm [s]} $$', 'interpreter', 'latex');ylabel('$$ y(t) $$', 'interpreter', 'latex');legend('$$ y(t) $$', '$$ r(t) $$', 'interpreter', 'latex');% ----- u -----subplot(212);plot(t,u);hold on;grid on;xlabel('$ t {\rm [s]} $', 'interpreter', 'latex');ylabel('$ u(t) $', 'interpreter', 'latex');
実行結果
まとめ・考察
PID制御則,PI-D制御則,I-PD制御則は下記の通り。
【PID制御則】
【PI-D制御則】
【I-PD制御則】
上記の通り,PID制御則と比較し異なるのは下記の2点である。
- 右辺3項:符号
- 右辺3項: or の微分
- 右辺1項: or
は目標値変動が生じた場合に急激に変化する。
一方,は目標値変動に依存しない。
したがって,I-PD制御は,PID制御・PI-D制御と比較し,偏差変動による比例ゲインの入力への影響が小さくなり,入力が滑らかになる。
※下記の関連記事と比較することを推奨