数字PID设计Word文档格式.docx
《数字PID设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《数字PID设计Word文档格式.docx(15页珍藏版)》请在冰豆网上搜索。
3.控制算法采用单片机汇编语言编程实现(应通过编译,无语法错误)。
报告内容:
1.控制系统仿真和设计步骤,应包含Matlab仿真的性能曲线、采样周期T的选择、数字控制器脉冲传递函数和差分方程形式;
2.元器件选型过程,电路设计过程,绘制的Protel原理图;
3.算法流程图,含有详细注释的源程序;
4.设计工作总结及心得体会;
5.列出所查阅的参考资料。
指导教师签字:
系(教研室)主任签字:
2011年6月29日
一、设计目的
采用位置算法实现PID控制器
二、设计要求
熟练掌握MATLAB设计仿真、protel绘图以及单片机汇编语言编程
三、设计任务
设单位反馈系统的开环传递函数为
四、设计原理:
位置式PID控制算法:
由于计算机控制是一种采样控制,它只能根据采样时刻的偏差值计算控制量,需要进行离散化处理。
现以一系列的采样时刻点kT代表连续时间t,以和式代替积分,以增量代替微分,则可以作近似变换:
离散的PID表达式为:
使用模拟控制器离散化的方法,将理想模拟PID控制器D(s)转化为响应的理想数字PID控制器D(z).采用后向差分法,得到数字控制器的脉冲传递函数
数字PID调节器原理方框图
令
为积分系数,
为微分系数(T为采样周期),由
则可得
上式化为差分方程,可得
令i=k-j,由初始条件i<
0时,e(j)=0,则可将上式写成标准数字控制算法
上式给出的调节器输出u(k)是全量输出,也就是执行器要求到底的位置,故称为位置式PID
五、Matlab仿真选择数字PID参数:
扩充临界比例带法是以模拟PID调节器中使用的临界比例带法为基础的一种数字PID参数的整定方法,步骤如下
1.选择合适的采样周期T;
2.在纯比例的作用下,给定输入阶跃变化时,逐渐加大比例作用Kp(即减小比例带
),直至系统出现等幅震荡,记录比例增益Kc,及振荡周期Tc。
Kc成为临界振荡比例增益(对应的临界比例带
),Tc成为临界振荡周期.
在Matlab中输入如下程序
G=tf(1,[1/150,36/150,185/150,1]);
p=[35:
2:
45];
fori=1:
length(p)
G_c=feedback(p(i)*G,1);
step(G_c),holdon
end;
axis([0,3,0,2.3])
得到如下图形
改变其中的参数p=[35:
为p=[40:
1:
45]进一步精确得Kc约为43,Tc约为0.5。
扩充临界比例带法选择数字PID参数的计算公式查表;
3.选择控制度
控制度的定义为数字调节器和模拟调节所对应的国度过程的误差平方积分之比,即控制度=
式中,
为数字调节器的控制误差;
e为模拟调节器的控制误差.当控制度为1.05时,数字调节器鱼模拟调节器的控制效果相当;
当控制度为2时,数字调节器比模拟调节器的控制效果差一倍;
在此选控制度为1.05。
按选择的控制度指标及Tc,Kc实验测得值,由查表选择相应的计算公式计算采样周期T=0.007,Kp=27,
=0.245,
=0.07;
=0.77,
=270。
4.simulink模型建立
根据下式
=
在Matlab-simulink中建立如下模型
将Td=0.07;
=270代入。
Scope中得到如下阶跃响应曲线
由图可见超调量较大,调节时间较长
减小Kp的值
用试凑法得到一组数据:
T=0.015,Kp=15,Ki=0.23,KD=250
Scope中阶跃响应图形如下
由图可看出上组数据满足了任务要求:
系统的稳态误差不大于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进行地址锁存。
采用统一编址方式访问。
控制器程序下载到单片机内部,经单片机处理,输出为数字信号,通过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=0.2s,T3=0.033s由此确定惯性环节中电阻电容值。
电路图如下
1程序设计
程序采用C语言编写
主程序流程图、中断服务程序、PID算法流程图如下
源程序如下
#include<
reg51.h>
#defineucharunsignedchar
sbitEOC=P2^0;
floatuk=0.0;
floatuk_1=0.0;
floatek=0.0;
floatek_1=0.0;
floatUR=1.0;
floatKp=15.0;
floatKi=0.23;
floatKd=230.0;
floatPpk=0.0;
floatPik=0.0;
floatPik_1=0.0;
floatPdk=0.0;
voidInit_Timer1(void);
//产生15ms的延时
voidmain(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=Kd*(ek-ek_1);
uk=Ppk+Pik+Pdk;
//转换公式
if(uk>
127)
uk=127;
if(uk<
-127)
uk=-127;
uk=uk+128;
P0=(uchar)uk;
//将uk输出给DA
while(EOC==0);
//等待转换结束
}
}
}
voidInit_Timer1(void)
{TMOD=0x01;
//设置T1为工作方式1,为16位定时器
TH0=0x0C;
TL0=0x68;
//装初值,设置定时时间为15ms
EA=1;
//开总中断
ET0=1;
//允许T1溢出中断
TR0=1;
//计数器1开始工作
voidtimer0()interrupt1
{
//重装初值,设置定时时间为15ms
}
总电路图如下
七、设计工作总结及心得体会
通过此次课程设计我们对matlab、protel等软件有了更深入的了解,对计算机控制、单片机、自动控制原理、现代控制原理等多门课程在实践中有了切身体验。
短短七天,慢慢走来,回首时,看到的是一步步成长的轨迹。
刚拿到设计题目时,小组内的所有人都手足无措,一个简单的PID控制在实际设计过程中既然如此费解。
这一下让我们顿悟——纸上学来终觉浅,绝知此事要躬行。
很快我们做出了先收集PID控制资料的决定。
经过对所收集的资料以及课本的学习,我们确定了一下步骤:
1、先通过位置式PID的设计方法确定PID设计思路
2、通过matlab仿真来获取相应的曲线,选取适当PID参数
3、利用protel设计电路
4、编写单片机程序
根据这个步骤,我们很快的完成了课程设计任务
经过此次课程设计,我们得到的不仅仅是专业知识上的锻炼,还有锻炼了我们的团结协作能力、信息检索能力以及动手操作能力。