基于MATLAB的离散系统的数字PID控制仿真

您所在的位置:网站首页 MATLAB的PID仿真 基于MATLAB的离散系统的数字PID控制仿真

基于MATLAB的离散系统的数字PID控制仿真

2023-08-05 04:03| 来源: 网络整理| 查看: 265

基于MATLAB的离散系统的数字PID控制仿真 1 设计要求2 方案设计2.1 设计思路及总体方案框图2.2 PID算法的基本原理2.3 PID算法的离散化 3 总体方案的选择与设计3.1 增量式PID控制器的基本实现3.2 基于MATLAB的GUI界面的基本实现 4 GUI各种功能的实现4.1 任意离散系统的数字PID仿真4.2 曲线保存功能的实现4.3 界面背景的设计 5 总结   第一次写博客,拿去年的课设试试手,仅供参考,不喜勿喷。

1 设计要求

控制对象为: G ( s ) = 523500 s 3 + 87.35 s 2 + 10470 s G(s) = \frac{{523500}}{{{s^3} + 87.35{s^2} + 10470s}} G(s)=s3+87.35s2+10470s523500​   采样时间为1ms,针对离散系统的三角波信号、锯齿波信号和正弦波信号的位置响应,设计离散的增量式PID控制器。其中S为信号选择变量,S=1时为三角波跟踪,S=2时为锯齿波跟踪,S=3时为正弦波跟踪。对控制器的输出进行限幅:[-10,10]。 利用MATLAB 软件编写成可视化窗口实现如下功能: (1) 针对离散系统的三角波信号、锯齿波信号和正弦波信号的位置响应,设计离散的增量式PID 控制器。 (2) 可视化窗口实现由键盘输入任意系统的传递函数、可选择三种输入信号的类型以及画出输入信号曲线与离散化后的输出曲线等功能。

直接来最终效果图如下:

2 方案设计 2.1 设计思路及总体方案框图

  根据课题要求,可将可视化窗口分为以下两个部分实现: (1)离散增量式PID 控制器的设计以及MATLAB 语言实现其仿真; (2)可视化窗口的设计 总体方案框图如下图所示:

2.2 PID算法的基本原理

  常规PID控制器系统原理图如下图所示,这是一个典型的单位负反馈控制系统。系统由PID控制器和被控对象组成。   PID控制器是一种线性控制器,它根据给定输入值r(t)与实际输出值y(t)构成偏差:e(t)=r(t)-y(t)。将偏差的比例P、积分I和微分D通过线性组合构成控制量,对受控对象进行控制。其控制规律为: u ( t ) = K p [ e ( t ) + 1 T i ∫ 0 t e ( t ) d t + T d d e ( t ) d t ] = K p e ( t ) + K i ∫ 0 t e ( t ) d t + K d d e ( t ) d t {\rm{u}}(t) = {K_p}[e(t) + \frac{1}{{{T_i}}}\int_0^t {e(t)dt + {T_d}} \frac{{de(t)}}{{dt}}] = {K_p}e(t) + {K_i}\int_0^t {e(t)dt + {K_d}\frac{{de(t)}}{{dt}}} u(t)=Kp​[e(t)+Ti​1​∫0t​e(t)dt+Td​dtde(t)​]=Kp​e(t)+Ki​∫0t​e(t)dt+Kd​dtde(t)​   上式中 K p {K_p} Kp​为比例系数, T i {T_i} Ti​为积分时间常数, T d {T_d} Td​为微分时间常数; K i = K p T i {K_i} = \frac{{{K_p}}}{{{T_i}}} Ki​=Ti​Kp​​为积分系数, K d = K p ∗ T d {K_d} = {K_p}*{T_d} Kd​=Kp​∗Td​为微分系数, u ( t ) {\rm{u}}(t) u(t) 为控制器的输出, e ( t ) e(t) e(t)为控制器的输入。

2.3 PID算法的离散化

  由课设题目知,系统的采样周期为 T = 1 m s T = 1ms T=1ms,设系统进行第k次采样时刻,控制器的输出值为: u ( k ) u(k) u(k) 此时的偏差可以表示为:e(k)=r(k)-y(k),那么积分就可以表示为: e ( k ) + e ( k + 1 ) + . . . . e(k) + e(k + 1) + .... e(k)+e(k+1)+.... ;而微分可以表示为: ( e ( k ) − e ( k − 1 ) ) / T (e(k) - e(k{\rm{ - }}1))/T (e(k)−e(k−1))/T,于是,第k次采样时,PID算法的离散形式表示为: u ( k ) = K p e ( k ) + K i ∑ e ( k ) + K d ( e ( k ) − e ( k − 1 ) ) u(k) = {K_p}e(k) + {K_i}\sum\limits_{}^{} {e(k)} + {K_d}(e(k) - e(k - 1)) u(k)=Kp​e(k)+Ki​∑​e(k)+Kd​(e(k)−e(k−1))   则第k个采样周期的增量为: Δ u ( k ) = u ( k ) − u ( k − 1 ) \Delta u(k) = u(k) - u(k - 1) Δu(k)=u(k)−u(k−1) ,根据式⑵与式⑶可知增量型PID算法的公式为: Δ u ( k ) = K p ( e ( k ) − e ( k − 1 ) ) + K i e ( k ) + K d ( e ( k ) − 2 e ( k − 1 ) + e ( k − 2 ) ) \Delta u(k) = {K_p}(e(k) - e(k - 1)) + {K_i}e(k) + {K_d}(e(k) - 2e(k - 1) + e(k - 2)) Δu(k)=Kp​(e(k)−e(k−1))+Ki​e(k)+Kd​(e(k)−2e(k−1)+e(k−2))   因此,增量式PID控制器的输出为: u ( k ) = Δ u ( k ) + u ( k − 1 ) u(k) = \Delta u(k) + u(k - 1) u(k)=Δu(k)+u(k−1)

3 总体方案的选择与设计 3.1 增量式PID控制器的基本实现

  增量式PID是指数字控制器的输出只是控制量的增量 Δ u ( k ) \Delta u(k) Δu(k)。采用增量式PID算法时,计算输出的控制量 Δ u ( k ) \Delta u(k) Δu(k) 对应的是本次执行机构位置的增量,而不是执行机构得到实际位置,因此要求执行机构必须具有对控制量的累积功能,才能完成对被控对象的控制操作。执行机构的累积功能,才能完成对被控对象的控制操作。执行机构的累积功能可以采用硬件方法实现,也可以采用软件方法实现。   下面是离散增量式PID的MATLAB算法实现

%增量式PID调用程序 %增量式PID就是本次PID输出与上次PID输出的差值 %u(k)-u(k-1)=kp*(e(k)-e(k-1))+ki*e(k)+kd*(e(k-1)-2*e(k-1)+e(k-2)) function [out1,correlation_coefficien1]= PIDcontrol1(S,kp1,ki1,kd1,nums,dens) ts = 0.001; %采样时间 sys = tf(nums,dens); %使系统系数可变 dsys = c2d(sys,ts,'z'); %将采样系统z变换进行离散化 [num,den] = tfdata(dsys,'v'); %获取离散后的分子分母系数矩阵 x = [0,0,0]'; %将初始的P I D参数相乘的系数设置为0,x(1)=e(k)-e(k-1),x(2)=e(k),x(3)=e(k-1)-2*e(k-1)+e(k-2) m = length(den); %计算矩阵的长度,获得输入的系统的阶次 out1 = 0; %原始误差为0 for i = 1:m-1 %适用于不同阶次的系统,阶次=向量长度-常数项 u_(i) = 0; y(i) = 0; end error_last = 0; error_last_befor = 0; %迭代的6个参数初始值 for k = 1:1:6000; %采样次数 time(k) = k*ts; %采样时刻 %-------------设置跟踪的函数-----------------% if S == 1 %三角波 r(k) = 0.5*sawtooth(2*2*ts*k,0.5); elseif S == 2 %锯齿波 r(k) = 0.5*sawtooth(1.5*2*ts*k); elseif S == 3 %正弦波信号 r(k) = 0.5*sin(pi*k*ts); end du(k) = kp1*x(1)+ki1*x(2)+kd1*x(3); %控制控制器输出增量,根据离散PID表达式 u(k) = u_(1)+du(k); %限幅 if u(k) >= 10 u(k) = 10; end if u(k) '*.jpg';'*.bmp'},'save picture as'); if ~filename return else file = strcat(pathname,filename); switch fileindex %根据不同的选择保存为不同的类型 case 1 print(new_f_handle,'-djpeg',file); case 2 print(new_f_handle,'-dbmp',file); end if fileindex %保存成功对话框 helpdlg('保存成功','提示'); end end delete(new_f_handle); 4.3 界面背景的设计

  在菜单栏中增加了整个GUI界面的背景更改功能,包括系统自带的纯色背景颜色设置以及用户自定义的图片背景设置。 代码如下:

-------------------通过文件路径设置桌面背景------------------% function Background_Callback(hObject, eventdata, handles) % hObject handle to Background (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) %------------------设置背景--------------------% [filenm pathnm c] = uigetfile({'*.jpg';'*.bmp'},'选择背景图片'); new_path = strcat(pathnm,filenm); ha1 = axes('Parent',gcf,'units','normalized','pos',[0 0 1 1]); uistack(ha1,'bottom'); ii1 = imread(new_path); image(ii1); colormap gray set(ha1,'handlevisibility','off','visible','on'); % 没有这句话 会导致鼠标滚动 然后背景放大 set(gcf,'WindowStyle','normal'); % 哈哈哈哈 这样可以避免菜单栏被遮住 %----------------------------------------------------% % -------------------------------------------------------------------- function figure_Color_Callback(hObject, eventdata, handles) % hObject handle to figure_Color (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) c = uisetcolor; %使用1 c 返回颜色值 set(gcf,'Color',c); 5 总结

  本次课程设计是对PID算法以及MATLAB应用的初步掌握,通过将近一周时间自学了MATLAB GUI的设计,对PID算法有了进一步的认识。期间遇到过许多上述提到过的类似问题,虽然这些问题看似简单,但如若不亲自经历并寻求方法解决,下次遇到可能仍然不会解决。此外,通过此次课程设计,我也明白了自学能力的重要性,在今后的学习中,我们仍会遇到各种难题,这些都需要我们通过自学逐渐解决。最后,课程设计的结果固然重要,但是我认为这个过程才是更重要的,过程中培养的能力、掌握的经验会让我们受益终身。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3