PID控制课程设计.doc_第1页
PID控制课程设计.doc_第2页
PID控制课程设计.doc_第3页
PID控制课程设计.doc_第4页
PID控制课程设计.doc_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

大 连 海 事 大 学课 程 设 计课 程 控制工程软件课程设计 题 目 离散系统的数字PID控制仿真 院 系 信息科学技术学院 专业班级 自动化一班 学生姓名 张亚婷 学生学号 2220142511 指导教师 徐慧朴 2016年 1月 13日大连海事大学课程设计任务书课程 控制工程软件课程设计 题目 离散系统的数字PID控制仿真 专业 自动化一班 姓名 张亚婷 学号 2220142511 主要内容: 控制对象为采样时间为1ms,针对离散系统的阶跃信号、正弦信号和方波信号的位置响应,设计离散的位置式PID控制器。其中S为信号选择变量,并对控制器的输出进行进行限幅:-10,-10。基本要求:(1) 设计可视化窗口实现; (2)系统输入信号可选择,完成对PID参数,系统阶次的调节;(3)显示误差大小;(4)完成全系统的详细分析设计报告。参考资料: 1 郑阿奇,曹戈.MATLAB实用教程(第三版)M.北京:电子工业出版社 2 网上查找离散系统的PID参数调节相关资料完成时间 2016.1.32016.1.13 学生 (签名) 指导教师 (签名)专业负责人 (签名)2016年1月 13 日目录1设计要求12方案设计12.1设计思路12.2总体方案方框图12.3基本原理23位置式PID算法及其仿真33.1位置式PID算法原理33.2不同输入下的仿真界面结果显示64增量式PID算法及其仿真74.1增量式PID算法原理74.2 不同输入下的仿真界面结果显示85调节PID参数得到最优解106位置式PID和增量式PID比较127 总结13参考文献14附录15系统设计报告1设计要求控制对象为采样时间为1ms,针对离散系统的阶跃信号、正弦信号和方波信号的位置响应,设计离散的位置式PID控制器。其中S为信号选择变量,S=1时为阶跃跟踪,S=2时为方波跟踪,S=3为正弦跟踪。对控制器的输出进行限幅:-10,10。要求:(1)系统的阶次和系数可调;(2)PID参数可调;(3)用两种方式显示离散系统的数字PID控制仿真,并显示误差; (4)用MATLAB编写成为可视化窗口实现上述功能;2方案设计2.1设计思路(1) 根据设计要求,理解PID控制的原理,确定控制仿真的方式为位置式和增量式两种典型形式。(2) 建立可视化窗口界面,设计显示界面,产生对应的脚本,编辑回调函数,首先获得可变的PID参数,再获得可变的分子分母系数。(3) 最后编辑显示误差值。优化显示界面,并调节拟合程度最好的PID参数。2.2总体方案方框图比例yout(k)被控对象ran(k) Y(k)ff积分 微分图1 基本原理框图2.3基本原理总体基本原理框图如图1所示。PID控制器是一种线性控制器,它根据给定值rin(t)与实际的输出值yout(t)构成偏差 PID的控制规律为 或写成传递函数的形式为式中,比例系数;积分时间常数;微分时间常数。PID控制器各个校正环节的作用如下:(1) 比例环节:成比例的反应控制系统的偏差信号。偏差一旦产生,控制器立即产生控制作用,以减少偏差。(2) 积分环节:主要用于消除静差,提高系统的无差度。积分作用的强弱主要取决于积分时间常数,越大,积分作用越弱,反之则越强。(3) 微分环节:反应偏差信号的变化趋势(变化速率),并能在偏差信号变得太大之前,在系统中引入一个有效的早期修正信号。从而加快系统的动作速率,减少调节时间。3 位置式PID控制算法及其仿真3.1位置式PID算法原理yuer受控对象PID位置算法 + 位置式PID控制算法的简化示意图 d dteu上图传递函数为: 在时域的传递函数表达式 对上式中的微分和积分进行近似: 式中n是离散点的个数于是传递函数可以简化为: 其中 u(n)第k个采样时刻的控制:比例放大系数;积分放大系数;微分放大系数;T 采样周期。如果采样周期足够小,则近似计算可以得到足够精确的结果,离散控制结果和连续系统十分接近。它表示的控制算法直接按所给的PID控制规律定义进行计算的,所以它给出了全部控制量的大小,因此被称为位置式PID控制算法。控制对象为 采样时间为1ms,采用z变换进行离散化,经过z变换后的离散化对象为 控制算法程序框图可如下所示:开始 参数初始化 采入rin(k)和yout(k) 计算偏差值 计算控制器输出 参数更新 返回程序及其批注见附录所示。3.2不同输入下的仿真界面结果显示S=1时输入为阶跃的结果S=2时输入为方波的结果S=3时输入为正弦的结果4增量式PID算法及其仿真4.1增量式PID算法原理当我们把离散系统看做相等的增量值时间增加时,可以用增量式PID控制算法根据递推原理可得 增量式PID控制算法 我们可以看出,如果我们采用恒定的采样周期T,只要只用前后三次测量的偏差,就可以得到控制量。PID算法的流程图如下所示 开始读取给定值r(k) 计算偏差e(k)=r(k)-y(k)计算 存以备输出参数传递 返回程序以及注释见附录4.2不同输入下的界面仿真显示S=1时阶跃输入S=2方波输入时S=3正弦输入时5. 调节PID控制器参数得到最优解比例控制:就是对偏差进行控制,偏差一旦产生,控制器立即就发生作用即调节控制输出,使被控量朝着减小偏差的方向变化,偏差减小的速度取决于比例系数Kp, Kp越大偏差减小的越快,但是很容易引起振荡,尤其是在迟滞环节比较大的情况下,Kp减小,发生振荡的可能性减小但是调节速度变慢。但单纯的比例控制存在静差不能消除的缺点。这里就需要积分控制。积分控制:实质上就是对偏差累积进行控制,直至偏差为零。积分控制作用始终施加指向给定值的作用力,有利于消除静差,其效果不仅与偏差大小有关,而且还与偏差持续的时间有关。简单来说就是把偏差积累起来,一起来运算。 微分控制:它能敏感出误差的变化趋势,可在误差信号出现之前就起到修正误差的作用,有利于提高输出响应的快速性,减小被控量的超调和增加系统的稳定性。但微分作用很容易放大高频噪声,降低系统的信噪比,从而使系统抑制干扰的能力下降。因此,在实际应用中,应慎用微分控制。 调节的过程中首先使得积分和微分系数为0,首先调节比例系数,得到临界震荡的Kp,再调节Ki由大到小调节,消除静差,最后调节Kd,减小调节时间,最后得到最优的控制器参数,其误差不一定最小。以下为阶跃输入下调节的最优参数位置式增量式6. 位置式PID和增量式PID的比较整体图形用户界面如下所示:位置式PID控制算法的缺点:当前采样时刻的输出与过去的各个状态有关,计算时要对e(k)即误差进行累加,运算量大;而且控制器的输出u(k)对应的是执行机构的实际位置,如果计算机出现故 障,u(k)的大幅度变化会引起执行机构位置的大幅度变化。增量式PID是数字控制器的输出只是控制量的增量u(k)。采用增量式算法时,计算机输出的控制量u(k)对应的是本次执行机构位置的增量,而不是对应执行机构的实际位置,因此要求执行机构必须具有对控制量增量的累积功能,才能完成对被控对象的控制操作。 增量式算法优点:算式中不需要累加。控制增量u(k)的确定仅与最近3次的采样值有关,容易通过加权处理获得比较好的控制效果;计算机每次只输出控制增量,即对应执行机构位置的变化量,故机器发生故障时影响范围小、不会严重影响生产过程;手动自动切换时冲击小。当控制从手动向自动切换时,可以作到无扰动切换。7 总结1. 就实现要求的用户图形界面来说,设计整体布局,以及实现需要的功能需要的图形对象面板工具常用控件的选择,虽然选择是比较自由的,方式也是多样的,第一次做位置式时我选择了一组按钮,来切换输入信号。在做第二种增量式时,希望得到更多的方式或者学到不同常用控件的实用方法,我选择了设定一组单选按钮,用了两种语句来实现,一种是ifelse语句,一种是switch语句,两种方法都可以实现单选按钮的功能。2. 就PID控制系统而言,除了自动控制原理课堂上的,通过这次课程设计对于PID有了更加深刻的认识,对于其在矫正系统功能方面有了更加系统的认知,也进一步揭开了其常被应用的面纱。3. 离散系统的分析源自于连续系统的离散,首先进行离散化z变换,知道了位置式和增量式的区别最重要的在于位置式的变化和之前的每一个时刻都有关系,而增量式的只和最近三次的增量有关系。4. 这个课程设计锻炼了我的思考和查阅资料的能力。- 14 - 参考文献1 郑阿奇,曹戈.MATLAB实用教程(第三版)M.北京:电子工业出版社 附录主程序:function varargout = PID(varargin)gui_Singleton = 1;gui_State = struct(gui_Name, mfilename, . gui_Singleton, gui_Singleton, . gui_OpeningFcn, PID_OpeningFcn, . gui_OutputFcn, PID_OutputFcn, . gui_LayoutFcn, , . gui_Callback, );if nargin & ischar(varargin1) gui_State.gui_Callback = str2func(varargin1);endif nargout varargout1:nargout = gui_mainfcn(gui_State, varargin:);else gui_mainfcn(gui_State, varargin:);endfunction PID_OpeningFcn(hObject, eventdata, handles, varargin)handles.output = hObject;guidata(hObject, handles);function varargout = PID_OutputFcn(hObject, eventdata, handles) varargout1 = handles.output;function jieyue_Callback(hObject, eventdata, handles)kp=str2double(get(handles.Kp,String);ki=str2double(get(handles.Ki,String);kd=str2double(get(handles.Kd,String);axes(handles.tu1); %选坐标轴1作图nums=str2num(get(handles.num,String);dens=str2num(get(handles.den,String);out=PIDcontrol(1,kp,ki,kd,nums,dens);set(handles.error,String,num2str(out);function fangbo_Callback(hObject, eventdata, handles)kp=str2double(get(handles.Kp,String); ki=str2double(get(handles.Ki,String);kd=str2double(get(handles.Kd,String);axes(handles.tu1);%选坐标轴1作图nums=str2num(get(handles.num,String);dens=str2num(get(handles.den,String);out=PIDcontrol(2,kp,ki,kd,nums,dens);set(handles.error,String,num2str(out);function zhengxian_Callback(hObject, eventdata, handles)kp=str2double(get(handles.Kp,String);ki=str2double(get(handles.Ki,String);kd=str2double(get(handles.Kd,String);axes(handles.tu1);%选坐标轴1作图nums=str2num(get(handles.num,String);dens=str2num(get(handles.den,String);out=PIDcontrol(3,kp,ki,kd,nums,dens);set(handles.error,String,num2str(out);function Kp_Callback(hObject, eventdata, handles)function Kp_CreateFcn(hObject, eventdata, handles)if ispc & isequal(get(hObject,BackgroundColor), get(0,defaultUicontrolBackgroundColor) set(hObject,BackgroundColor,white);endfunction Ki_Callback(hObject, eventdata, handles)function Ki_CreateFcn(hObject, eventdata, handles)if ispc & isequal(get(hObject,BackgroundColor), get(0,defaultUicontrolBackgroundColor) set(hObject,BackgroundColor,white);endfunction Kd_Callback(hObject, eventdata, handles)function Kd_CreateFcn(hObject, eventdata, handles)if ispc & isequal(get(hObject,BackgroundColor), get(0,defaultUicontrolBackgroundColor) set(hObject,BackgroundColor,white);endfunction error_Callback(hObject, eventdata, handles)function error_CreateFcn(hObject, eventdata, handles)if ispc & isequal(get(hObject,BackgroundColor), get(0,defaultUicontrolBackgroundColor) set(hObject,BackgroundColor,white);endfunction den_Callback(hObject, eventdata, handles)function den_CreateFcn(hObject, eventdata, handles)if ispc & isequal(get(hObject,BackgroundColor), get(0,defaultUicontrolBackgroundColor) set(hObject,BackgroundColor,white);endfunction num_Callback(hObject, eventdata, handles)function num_CreateFcn(hObject, eventdata, handles)if ispc & isequal(get(hObject,BackgroundColor), get(0,defaultUicontrolBackgroundColor) set(hObject,BackgroundColor,white);endfunction tuichu_Callback(hObject, eventdata, handles)ss=questdlg(你真的要退出吗?,退出窗口,不,我还想看看!,是的,我要退出!,是的,我要退出!);switch sscase 是的,我要退出!delete(handles.figure1);endfunction Kp1_Callback(hObject, eventdata, handles)function Kp1_CreateFcn(hObject, eventdata, handles)if ispc & isequal(get(hObject,BackgroundColor), get(0,defaultUicontrolBackgroundColor) set(hObject,BackgroundColor,white);endfunction Ki1_Callback(hObject, eventdata, handles)function Ki1_CreateFcn(hObject, eventdata, handles)if ispc & isequal(get(hObject,BackgroundColor), get(0,defaultUicontrolBackgroundColor) set(hObject,BackgroundColor,white);endfunction Kd1_Callback(hObject, eventdata, handles)function Kd1_CreateFcn(hObject, eventdata, handles)if ispc & isequal(get(hObject,BackgroundColor), get(0,defaultUicontrolBackgroundColor) set(hObject,BackgroundColor,white);endfunction error1_Callback(hObject, eventdata, handles)function error1_CreateFcn(hObject, eventdata, handles)if ispc & isequal(get(hObject,BackgroundColor), get(0,defaultUicontrolBackgroundColor) set(hObject,BackgroundColor,white);endfunction jieyue1_Callback(hObject, eventdata, handles)function fangbo1_Callback(hObject, eventdata, handles)function zhengxian1_Callback(hObject, eventdata, handles)function uibuttongroup2_SelectionChangedFcn(hObject, eventdata, handles)kp1=str2double(get(handles.Kp1,String);ki1=str2double(get(handles.Ki1,String);kd1=str2double(get(handles.Kd1,String);nums=str2num(get(handles.num,String);dens=str2num(get(handles.den,String);S_3=get(handles.zhengxian1,Value);S_2=get(handles.fangbo1,Value);S_1=get(handles.jieyue1,Value);axes(handles.tu2); %选坐标轴2作图if S_3=1 out1=PIDcontrol1(3,kp1,ki1,kd1,nums,dens);elseif S_2=1 out1=PIDcontrol1(2,kp1,ki1,kd1,nums,dens);elseif S_1=1 out1=PIDcontrol1(1,kp1,ki1,kd1,nums,dens);end set(handles.error1,String,num2str(out1);% axes(handles.tu2); %选坐标轴2作图% kp1=str2double(get(handles.Kp1,String);% ki1=str2double(get(handles.Ki1,String);% kd1=str2double(get(handles.Kd1,String);% nums=str2num(get(handles.num,String);% dens=str2num(get(handles.den,String);% n = get(handles,Tag);% switch n% case jieyue1% out1=PIDcontrol1(1,kp1,ki1,kd1,nums,dens);% case fangbo1% out1=PIDcontrol1(2,kp1,ki1,kd1,nums,dens);% case zhengxian1% out1=PIDcontrol1(3,kp1,ki1,kd1,nums,dens);% end% set(handles.error1,String,num2str(out1);位置式调用程序:function out=PIDcontrol(S,kp,ki,kd,nums,dens)ts=0.001; %采样时间sys=tf(nums,dens);dsys=c2d(sys,ts,z); %将系统离散化num,den=tfdata(dsys,v); %获取离散后的分子分母系数n=length(den);for i=1:(n-1) u_(i)=0;y_(i)=0;endx=0,0,0;error_1=0; %初始偏差设置为0out=0; %初始误差和为0for k=1:1000; time(k)=k*ts; %采样时刻 if S=1 %阶跃信号 rin(k)=1; els

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论