1、计算机控制课程设计专 业电气工程及其自动化班 级学 生指导教师题 目数字PID控制器设计设计时间2011年 6月 25 日 至 2011 年7 月 1 日 共 1 周设计要求设计任务: 数字PID控制器设计一设单位反馈系统的开环传递函数为,设计数字PID控制器,使系统的稳态误差不大于0.1,超调量不大于20%,调节时间不大于0.5s。并采用位置算法实现该PID控制器。方案设计:1. 采用Matlab完成控制系统的建立、分析、设计和模拟仿真;2. 选择元器件,完成电路设计,控制器采用MCS-51系列单片机(传感器、功率接口以及人机接口等可以暂不涉及),使用Protel绘制原理图;3. 控制算法采
2、用单片机汇编语言编程实现(应通过编译,无语法错误)。报告内容:1. 控制系统仿真和设计步骤,应包含Matlab仿真的性能曲线、采样周期T的选择、数字控制器脉冲传递函数和差分方程形式;2. 元器件选型过程,电路设计过程,绘制的Protel原理图;3. 算法流程图,含有详细注释的源程序;4. 设计工作总结及心得体会;5. 列出所查阅的参考资料。指导教师签字: 系(教研室)主任签字:2011年6月29日数字PID控制器设计一、设计目的 采用位置算法实现PID控制器二、设计要求 熟练 掌握 MATLAB 设计仿真 、protel 绘图以及单片机汇编语言编程三、设计任务 设单位反馈系统的开环传递函数为,
3、设计数字PID控制器,使系统的稳态误差不大于0.1,超调量不大于20%,调节时间不大于0.5s。并采用位置算法实现该PID控制器。四、设计原理:位置式PID控制算法: 由于计算机控制是一种采样控制,它只能根据采样时刻的偏差值计算控制量,需要进行离散化处理。现以一系列的采样时刻点kT代表连续时间t,以和式代替积分,以增量代替微分,则可以作近似变换: 离散的PID表达式为: 使用模拟控制器离散化的方法,将理想模拟PID控制器D(s)转化为响应的理想数字PID控制器D(z).采用后向差分法,得到数字控制器的脉冲传递函数 KpE(z)e(KT)+U(z)数字PID调节器原理方框图令为积分系数, 为微分
4、系数(T为采样周期),由则可得上式化为差分方程,可得令i=k-j,由初始条件i0时,e(j)=0,则可将上式写成标准数字控制算法上式给出的调节器输出u(k)是全量输出,也就是执行器要求到底的位置,故称为位置式PID五、Matlab仿真选择数字PID参数:扩充临界比例带法是以模拟PID调节器中使用的临界比例带法为基础的一种数字PID参数的整定方法,步骤如下1. 选择合适的采样周期T;2. 在纯比例的作用下,给定输入阶跃变化时,逐渐加大比例作用Kp(即减小比例带),直至系统出现等幅震荡,记录比例增益Kc,及振荡周期Tc 。Kc成为临界振荡比例增益(对应的临界比例带),Tc成为临界振荡周期. 在Ma
5、tlab中输入如下程序 G=tf(1,1/150,36/150,185/150,1);p=35:2:45; for i=1:length(p)G_c=feedback(p(i)*G,1);step(G_c),hold onend;axis(0,3,0,2.3)得到如下图形改变其中的参数p=35:2:45;为p=40:1:45进一步精确得Kc约为43,Tc约为0.5。扩充临界比例带法选择数字PID参数的计算公式查表;3.选择控制度控制度的定义为数字调节器和模拟调节所对应的国度过程的误差平方积分之比,即控制度=式中, 为数字调节器的控制误差;e为模拟调节器的控制误差.当控制度为1.05时,数字调节
6、器鱼模拟调节器的控制效果相当;当控制度为2时,数字调节器比模拟调节器的控制效果差一倍;在此选控制度为1.05。按选择的控制度指标及Tc,Kc实验测得值,由查表选择相应的计算公式计算采样周期T=0.007,Kp=27,=0.245,=0.07; =0.77,=270。 4.simulink模型建立 根据下式= 在Matlab-simulink中建立如下模型将Td=0.07; =0.77,=270代入。Scope中得到如下阶跃响应曲线由图可见超调量较大,调节时间较长减小Kp的值用试凑法得到一组数据:T=0.015,Kp=15,Ki=0.23 ,KD=250Scope中阶跃响应图形如下 由图可看出上
7、组数据满足了任务要求:系统的稳态误差不大于0.1,超调量不大于20%,调节时间不大于0.5s。六、MCS-51单片机实现控制器的设计控制系统结构框图如下1、器件选择 主控制器选用熟悉的AT89c51单片机。由于没有对精度的要求,选用常见的8位AD/DA芯片ADC0809和DAC0832。由于系统要求采样周期0.015ms,而上述AD、DA芯片转化时间很短(ADC0809约100us,DAC0832约1us),因此上述芯片满足要求。2、电路设计 单片机与AD、DA采用总线方式连接,锁存器74LS373进行地址锁存。采用统一编址方式访问。 控制器程序下载到单片机内部,经单片机处理,输出为数字信号,
8、通过DAC0832将数字量转换为模拟量,作为被控对象的输入,被控对象的输出也为模拟量,经过ADC0809处理,模拟量转换为数字量,送入单片机内,完成闭环控制。ADC0809与单片机连接如下ADD-A,ADD-B,ADD-C接地,此时进行模数转换的为IN-0口,其余模拟量输入口接地,选择IN-0时低位地址为08H。由于ADC0809为单极性输入,与被控对象反馈量之间加上加法电路转化。Fout=R15(Vcc/R16+Vin/R17)加法电路如下:DAC0832与单片机连接如下电流输出,经双运放转化,输出为双极性。模拟被控对象根据传递函数取K=1,可有三个一阶惯性环节构成。T1=RC=1s,T2=
9、0.2s,T3=0.033s由此确定惯性环节中电阻电容值。电路图如下1 程序设计 程序采用C语言编写主程序流程图、中断服务程序、PID算法流程图如下入口取给定值UR,反馈值Ui(K)求e(k)= Ui(k)-UR求Pi(k)=Ki*e(k)+Pi(k-1)求Pp=Kp*e(k)UK=Pp(k)+Pi(k)+Pd(k)计算Pd(k)=Kd*e(k)-e(k-1)存储e(k)-e(k-1)子程序返回源程序如下#include#define uchar unsigned charsbit EOC=P20; float uk=0.0; float uk_1=0.0;float ek=0.0;float
10、 ek_1=0.0;float UR=1.0; float Kp=15.0; float Ki=0.23; float Kd=230.0;float Ppk=0.0; float Pik=0.0;float Pik_1=0.0;float Pdk=0.0; void Init_Timer1(void); /产生15ms的延时 void main(void) Init_Timer1(); while(1) if(EOC=1) ek_1=ek; Pik_1=Pik; ek=P0; /保存数据 ek=ek-128; uk_1=uk; Ppk=Kp*ek; Pik=Ki*ek+Pik_1; Pdk=K
11、d*(ek-ek_1); uk=Ppk+Pik+Pdk; /转换公式 if(uk127)uk=127; if(uk-127) uk=-127; uk=uk+128; P0=(uchar)uk; /将uk输出给DA while(EOC=0);/等待转换结束 void Init_Timer1(void) TMOD=0x01;/设置T1为工作方式1,为16位定时器 TH0=0x0C; TL0=0x68;/装初值,设置定时时间为15ms EA=1;/开总中断 ET0=1;/允许T1溢出中断 TR0=1;/计数器1开始工作 void timer0()interrupt 1 TH0=0x0C; TL0=0
12、x68;/重装初值,设置定时时间为15ms 总电路图如下七、 设计工作总结及心得体会通过此次课程设计我们对matlab、protel等软件有了更深入的了解,对计算机控制、单片机、自动控制原理、现代控制原理等多门课程在实践中有了切身体验。短短七天,慢慢走来,回首时,看到的是一步步成长的轨迹。刚拿到设计题目时,小组内的所有人都手足无措,一个简单的PID控制在实际设计过程中既然如此费解。这一下让我们顿悟纸上学来终觉浅,绝知此事要躬行。很快我们做出了先收集PID控制资料的决定。经过对所收集的资料以及课本的学习,我们确定了一下步骤:1、先通过位置式PID的设计方法确定PID设计思路2、通过matlab仿真来获取相应的曲线,选取适当PID参数3、利用protel设计电路4、编写单片机程序根据这个步骤,我们很快的完成了课程设计任务经过此次课程设计,我们得到的不仅仅是专业知识上的锻炼,还有锻炼了我们的团结协作能力、信息检索能力以及动手操作能力。