- 実現したいこと
- Matlabのバージョン
- 必要なtoolbox
- ダウンロードURL
- フォルダ構成
- 実行方法
- Simulinkファイル(PI_D.slx)
- mファイルソースコード(Main_PI_D.m)
- 実行結果
- まとめ・考察
- 併せて確認推奨の過去記事
実現したいこと
- Simulinkとmファイルを用いたPI-D制御(微分先行型PID制御)シミュレータプログラムの構築
- SimulinkのPIDブロックを用いずに実現
- 各PIDゲインの特性を理解するためのプログラム
- 不完全微分が含まれない形式のPID制御 - PID制御とPI-D制御の比較(入力が過敏に反応しないか)
Matlabのバージョン
Matlab2021a
※ダウンロード形式として過去のバージョンも用意
必要なtoolbox
ダウンロードURL
【ダウンロードリンク】
※ご利用中のMatlabバージョンのフォルダをダウンロードしてください。
例:2021aバージョンであれば,上記リンクの「2021a」を選択
※上記プログラムの利用で生じたトラブルは一切の責任を負いかねます。
フォルダ構成
上記ダウンロードし展開。
(下記のようなフォルダ構成になっていることを確認)
実行方法
「Main_PI_D.m」を実行
Simulinkファイル(PI_D.slx)
mファイルソースコード(Main_PI_D.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 = 'PI_D.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制御則は下記の通り。
【PID制御則】
【PI-D制御則】
上記の通り,異なるのは下記の2点である。
- 右辺3項目の符号
- 右辺3項目 or の微分
は目標値変動が生じた場合に急激に変化する。
一方,は目標値変動に依存しない。
したがって,PI-D制御の方が入力の変動が小さくなる。
※下記の関連記事と比較することを推奨