?作者簡介:熱愛科研的Matlab仿真開發(fā)者,修心和技術(shù)同步精進,matlab項目合作可私信。
??個人主頁:Matlab科研工作室
??個人信條:格物致知。
? 內(nèi)容介紹
增量式PID控制較常規(guī)PID更具優(yōu)勢,但有關(guān)其參數(shù)整定的方法很少,針對這種問題,介紹了增量式PID算法的原理及特點,基于MATLAB平臺,模擬擴充臨界比例度法對增量式PID參數(shù)的整定方法,整定過程簡單直觀,控制效果明顯改善,證實了該方法對增量式PID有較好的整定效果.
? 完整代碼
clear all;close all;clc
%% 獲取離散化模型
t_s = 0.001;? %采樣時間
T_f = 1;? ? ?%仿真時間
Step_simulate=T_f/t_s;
sys = tf([200],[1 50 1]);
%% 繪制傳遞函數(shù)的單位階躍響應(yīng)曲線
t=0:0.01:750;
figure(1);
c=step(sys,t);
plot(t,c);
%% 進行傳遞函數(shù)的離散化
dsys = c2d(sys,t_s,'z');
[num,den]=tfdata(dsys,'v');? ?%num為離散傳遞函數(shù)的分子系數(shù)矩陣,den為離散傳遞函數(shù)的分母系數(shù)矩陣
%% 設(shè)置增量式PID的校正參數(shù)
k_p=10;
k_i=0.12;
k_d=5;
%% 設(shè)置輸入信號數(shù)學(xué)表達(dá)式
y_d = ones(1,Step_simulate);? ?%輸入信號為階躍信號? ??
%% 增量式PID控制器算法模塊
y = zeros(1,Step_simulate);? ? %初始化輸出信號
y_feedback=0;? ? ? ? ? ? ? ? ? %反饋回來的信號,y_feedback=y
error = 0;? ? ? ? ? ? ? ? ? ? ? %信號差值
erro_1 = 0;? ? ? ? ? ? ? ? ? ? %上一時刻信號差值
erro_2 = 0;? ? ? ? ? ? ? ? ? ? %上上一時刻信號差值
y_1=0;? ? ? ? ? ? ? ? ? ? ? ? ?%上一時刻的輸出
y_2=0;? ? ? ? ? ? ? ? ? ? ? ? ?%上一上一時刻的輸出
pi_out=0;? ? ? ? ? ? ? ? ? ? ? %pid控制器的輸出,注意不是系統(tǒng)輸出
pi_out_1=0;? ? ? ? ? ? ? ? ? ? %上一時刻PID控制器的輸出,注意不是系統(tǒng)輸出
pi_out_2=0;? ? ? ? ? ? ? ? ? ? %上一上一時刻PID控制器的輸出,注意不是系統(tǒng)輸出
pi_out = 0;? ? ? ? ? ? ? ? ? ?%初始的PID控制輸出值
delta_pi_out = 0;? ? ? ? ? ? ?%初始的PID控制輸出增量值
for k=1:1:Step_simulate
? ? time(k)=k*t_s;? ? ? ? ? ? %存儲時間,用于后面畫圖
? ? error=y_d(k)-y_feedback;? %控制器誤差
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? %增量式PID的算法表達(dá)式
? ? delta_pi_out=k_p*(error-erro_1)+k_i*error+k_d*(error-2*erro_1+erro_2);
? ? pi_out =pi_out+delta_pi_out ;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? %增量式PID的算法表達(dá)式
? ? %對PID控制器的輸出進行限幅
? ? if? pi_out>=10
? ? ? ? pi_out =10;
? ? end
? ? if? pi_out<=-10
? ? ? ? pi_out =-10;
? ? end
? ?%y_1 上一時刻的輸出
? ?%y_2 上兩時刻的輸出
? ? y(k)=-den(2)*y_1-den(3)*y_2+num(2)* pi_out_1+num(3)*pi_out_2;%控制對象
? ? y_feedback=y(k);
? ? %更新系統(tǒng)輸出狀態(tài)
? ? y_2=y_1;
? ? y_1=y(k);
? ? %更新pid輸出狀態(tài)
? ? pi_out_2=pi_out_1;
? ? pi_out_1=pi_out;
? ? %更新信號差值狀態(tài)
? ? erro_2=erro_1;
? ? erro_1=error;
end
%畫圖
figure(2);
subplot(2,1,1);
plot(time,y_d,'b*',time,y,'go');
xlabel('time');ylabel('幅值');legend('期望輸出','實際輸出');
subplot(2,1,2);
plot(time,y_d-y);
xlabel('time');ylabel('幅值');legend('誤差');
? 運行結(jié)果
? 參考文獻
[1] 楊龍. 基于位置式PID算法的壓力控制設(shè)計及MATLAB仿真[J]. 電子技術(shù)與軟件工程, 2018(24):1.
[2] 王俊偉, 張帥, 溫榮. MATLAB的PID算法在溫室大棚中的溫濕度串級控制中的應(yīng)用研究[J]. 價值工程, 2016, 35(5):2.文章來源:http://www.zghlxwxcb.cn/news/detail-628814.html
[3] 曾豪勇, 周思柱, 易文君. 基于MATLAB的增量式PID參數(shù)整定[J]. 工業(yè)控制計算機, 2014, 000(006):69-70.文章來源地址http://www.zghlxwxcb.cn/news/detail-628814.html
??部分理論引用網(wǎng)絡(luò)文獻,若有侵權(quán)聯(lián)系博主刪除
?? 關(guān)注我領(lǐng)取海量matlab電子書和數(shù)學(xué)建模資料
到了這里,關(guān)于【PID】基于Matlab實現(xiàn)增量式PID算法的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!