综合电子系统设计报告PID算法分析Word文件下载.docx
《综合电子系统设计报告PID算法分析Word文件下载.docx》由会员分享,可在线阅读,更多相关《综合电子系统设计报告PID算法分析Word文件下载.docx(15页珍藏版)》请在冰豆网上搜索。
5.3编程思想………………………………………………………………………………….11
5.4核心程序………………………………………………………………………………….12
参考文献…………………………………………………………………………………………..15
前言
在工业生产及我们平常的生活中对于温度高度自动化控制的需求越来越大。
许多传统的制造、农业生产以及当前的一些生活中对温度需求的场合都要求实现温度数据的测量与控制。
随着工业技术的高速发展,有更多的工作生产环节和日常生活场合对温度控制的精确度,稳定性以及可靠性等提出了了更高的需求。
传统的温度控制器控制精度和可靠性已经不能满足对温度要求更为精确的现代化社会。
温度的控制控制中,温度被控对象特性(惯性、滞后、非线性……)影响着温度控制系统的效果,使得控制性能难以提高,尤其在工业和农业生产过程其温度控制的好坏直接关系到产品的质量的好坏,在此情况下设计出一种能达到符合理想结果的温度控制系统是非常有重要性的。
我们这次的温度控制系统的设计正是基于此情况而设计,针对一些对温度精度需求较高的场合,为达到对其温度的良好控制,从实用的角度以C51为核心设计一套温度智能控制系统。
本系统将以C51单片机为核心部件,构建一个集温度的采集、处理、显示、控制为一体化的闭环控制系统。
利用单片机的外围扩展电路采集环境温度值,以数字量的形式存储和显示,它既能单独作为一种控制设备对温室温度进行高精度的控制,对控制对象发出各种控制命令,并能实时的显示当前温度值,自由设定目标控制的温度值。
同时,也可以作为数据采集装置,为上位机进行记录和运算提供数据来源。
该智能温度控制系统功耗低较,系统简单运行结果可靠并且经济实用。
能利用最少的资源对环境温度进行高精度的测量,性能可靠、操作简便,它能自动减小误差。
这种算法通过软件编程来完成,同时可以的获的准确可靠的结果,在实际的使用中能达到理想的效果。
本论文叙述了基于51单片机的智能温度控制系统的设计过程,当中运用数字传感技术、基于单片机的自动控制。
我们以C51为cpu,设计出了一套能实现封闭环境内的温度实时检测与控制的恒温控制系统。
该系统运用数字温度传感器获取环境温度,并通过程序设计来设定温度与设定的值有偏差时采取必要措施控制输出设备(加热器或冷凝器)调节环境温度,使环境内的温度维持在预设的温度的偏差内,其中要能满足生产或者日用需求,该系统在硬件设计上主要是通过传感器对温度进行检测。
单片机接收信息后进行运算处理,通过与预设值的比较输出高低电平来控制加热电路的工作与停止。
温度采集电路核心部件是DS18B20温度传感器。
它是美国DALLAS半导体公司推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。
关键词:
C51控制DS18B20
一、方案设计
1、方案设计比较
温度传感器模块设计
方案一:
采用热敏电阻pt100。
这种电阻输出的是模拟量,所以硬件结构较复杂,需要用到桥式电路将采集到的温度转化为电压输出,而且为了实现AD转化,还要加放大电路。
另外,这种测温系统难以实现多点测温,也要用到复杂的算法,一定程度上也增加了软件实现的难度。
方案二:
采用单总线数字温度传感器DS18B20测量温度,直接输出数字信号。
便于单片机处理及控制,节省硬件电路。
且该芯片的物理化学性很稳定,此元件线形性能好,在0—100摄氏度时,最大线形偏差小于1摄氏度。
DS18B20的最大特点之一采用了单总线的数据传输,由数字温度计DS18B20和微控制器AT89C51构成的温度装置,它直接输出温度的数字信号到微控制器。
每只DS18B20具有一个独有的不可修改的64位序列号,根据序列号可访问不同的器件。
这样一条总线上可挂接多个DS18B20传感器,实现多点温度测量,轻松的组建传感网络。
综上分析,我们选用第二种方案。
2、总体方案设计
按照系统设计功能的要求,确定系统由以下几个模块组成:
温度传感器采集温度、数码管显示电路、键盘电路、单片机调整单元以及驱动电路。
温度传感器采集温度,送到单片机,然后与键盘设定的温度进行比较,通过调整PID,输出PWM波,进而控制驱动电路进行加热或者不加热,由液晶显示屏来实时的观测温度变化。
总体的电路结构框图如图所示:
二、理论分析与计算
1、温度转换计算方法
例如当DS18B20采集到+125℃的实际温度后,输出为07D0H,则:
实际温度=07D0H╳0.0625=2000╳0.0625=1250C。
例如当DS18B20采集到-55℃的实际温度后,输出为FC90H,则应先将11位数据位取反加1得370H(符号位不变,也不作为计算),则:
实际温度=370H╳0.0625=880╳0.0625=550C。
2、稳定温度的方法:
PID算法调节
完整的公式如下:
u(t)=Kp*e(t)+Ki∑e(t)+Kd[e(t)–e(t-1)]+u0
在PID的调试过程中,我们应注意以下步骤:
1、关闭I和D,也就是设为0.加大P,使其产生振荡;
2、减小P,找到临界振荡点;
3、加大I,使其达到目标值;
4、重新上电看超调、振荡和稳定时间是否吻合要求;
5、针对超调和振荡的情况适当的增加一些微分项;
6、注意所有调试均应在最大争载的情况下调试,这样才能保证调试完的结果可以在全工作范围内均有效;
PID控制器参数整定
:
采用是临界比例法。
利用该方法进行PID控制器参数整定步骤如下:
(1)首先预选择一个足够短采样周期让系统工作;
(2)仅加入比例控制环节,直到系统对输入阶跃响应出现临界振荡,记下这时比例放大系数和临界振荡周期;
(3)一定控制度下公式计算到PID控制器参数。
三、硬件电路与程序设计
1、硬件电路各个部分
(1)、温度设置电路
利用矩阵键盘输入并移位数码管显示,即表示设置温度。
矩阵键盘扫描方式:
P1=0X0F与P1=0XF0反转扫描,交叉得到你想输入的数据。
键盘输入倒没怎么有难度,就是移位显示有点复杂,导致数码管显示有点暗。
(2)、数码管显示
(3)、温度采集电路
温度采集的核心器件是DS18B20芯片。
数字温度传感器DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。
电路图如下:
(4)、控制部分的最小系统
电路图如图所示:
(5)、输出电路
控制加热电路的方法是通过单片机的一个I/O口来控制继电器的吸合与断开从而达到对加热电路的工作与停止的,输出周期方波的基本原理是利用
单片机内部间的T0工作在方式一产生中断隔为0.5ms的定时中断,每产生一次中断,CPU把记录秒的变量count(计数器)自动加1,100次中断为一个工作周期
当count的值在占空比的工作时间内时
输出口P2.5输出高电平,使继电器吸合,
加热电路工作。
当count大于占空比数值时输出低电平
继电器断开,加热电路停止工作。
由于单片机的I/O口的输出的功率太小
电流达不到继电器线圈的要求
所以在输出口还要外接一个功率放大电路
,将P2.5接在三极管8050的基极,再串联一个3.3k的电阻,三极管的集电极与继电器线圈串联在Vcc,发射极接地
通常为了保护三极管,还要在继电器的两端反并联一个二极管。
控制端得电路图如下所示:
2、总电路设计图
四、软件设计
1、程序设计思路:
本系统的主要功能是实现对环境内部温度的采集,根据采集温度来调整加热电路工作占空比,使得环境内部温度达到设定的温度值。
在温度控制算法上采用的是是PID(比例-积分-微分)算法,它是一种闭环输出控制模型,在后面会具介绍。
总程序的主要有几个部分组成,显示程序,键盘扫描程序,温度读取程序,pid计算程序,中断程序。
程序框图如下:
总程序框图
2、温控部分的设计
系统的主要功能是实现对环境内部温度的控制。
温度控制程序的算法直接影响着系统的工作效果,为了得到理想的,最优的结果我在温度控制算法上采用的是是PID(比例-积分-微分)算法,它是一种最经典也是最常用的闭环输出的自动控制模型,他可以根据当前的温度差来调整输纠正误差。
PID是Proportional
Integral
Derivativel控制是比例、积分、微分控制的
简称,PID控制器由比例单元(P)、积分单元(I)和微分单元(D)组成。
PID控制器就是根据系统的误差,利用比例、积分、微分计算出控制量进行控
制的。
在模拟控制系统中,控制器中最常用的控制规律是PID控制。
PID控制器是一种线性控制器,它根据给定值与实际输出值构成控制偏差。
PID控制规律写成传递函数的形式为:
式中,PK为比例系数;
iK为积分系数;
dK为微分系数;
ipiKKT为积分时间常数;
pddKKT为微分时间常数;
简单来说,PID控制各校正环节的作用如下:
比例控制
比例控制是PID中最简单的控制方式。
比例部分数学表达式为:
其控制器的输出与输入误差信号成比例关系。
比例控制作用强弱取决于比例系数Kp,Kp越大,控制过程消耗的时间越短,最终结果的稳态误差也越小;
但Kp变大,超调量也越大,系统控制过程易产生振荡,这会使动态性能变差,很可能导致闭环系统不稳定。
积分控制
在积分控制中,控制器的输出与输入误差信号的积分成正比关系。
积分部分数学表达式为:
对于一个自动控制系统,在进入稳态后存在稳态误差,则称这个控制系统
是有稳态误差的简称有差系统。
为了最大程度减小稳态误差,在控制器中必须引入―积分项‖。
积分项对误差取决于时间的积分,随着时间的增加,积分项会增大。
这样,即便误差很小,积
分项也会随着时间的增加而加大,它推动控制器的输出增大使稳态误差进一步减小,直到等于零。
因此,比例+积分(PI)控制器,可以使系统在进入稳态后无稳态误差。
微分控制
如果控制器的输出与输入误差信号的微分(即误差的变化率)成正比关系,那么就叫做微分控制。
微分部分数学表达式为:
一般自动控制系统在消除误差、自动调节过程中,系统可能会出现振荡甚
至失稳。
其原因系统是存在有较大惯性环节或有滞后组件,具有抑制误差的作用,其变化总是落后于误差的变化。
解决的办法是让抑制误差的作用超前工作,就是在系统误差快要接近于零时,抑制误差就应该是零。
这就是说,在控制器中仅光入
―比例‖项往往是不够的,比例项的作用仅是放大误差的幅值,而目前需要增加的是―微分项‖,它能预测误差变化的趋势,这样,具有比例+微分的控制器,就能
够提前使抑制误差的控制作用等于零,甚至为负值,从而避免了被控量的严重超调。
微分控制得出偏差的变化趋势,微分控制作用可加快系统响应,减小超调量,减小振荡,系统更稳定性,但使系统抗干扰的能力变差。
微分部分的作用强弱由微分时间Td决定。
Td的值大,则它抑制e(t)变化的能力强,Td的值小,e(t)则它阻止变化的能力弱。
PID离散化
最终的算式如式所示离散变换得:
3、编程思想
对于已经离散化的pid公式,就可以程序来进行编写和实现,我们编写程序的思想是,构造一个循环函数,来实现pid的迭代运算。
首先我们将当前设定的温度定义为终点Set_Point,然后将单片机的定时中断装入合适的初值
这样每隔一个周期T单片机便将获取的环境温度送去与设定温度(Set_Point)进行比较,计算出温度误差U(k),将U(K)的值赋给Error,这时可以计算出比例项,Kp*Error
又过一个周期将计算出的U(k-1)的值赋给Next_Error,由Error-
Next_Error=dError,我们就可以得到微分项;
Kd*dError。
至于积分项,每当PID的循环算法执行一次,累积误差SumError变加上当前误差Error,SumError在不停的做一个累加运算,所以积分项为;
Ki*SumError。
每一个周期的PID计算程序执行完后,将当前的Next_Error的值赋给
Error,这样在下一个周期时Next_Error装入新的误差值,以便计算下一个dError的值,得出微分项,整个pid计算程序的流程图如下图所示:
4、部分核心算法如下:
(1)、键盘控制温度:
voidDigDisplay()
{
unsignedchari;
unsignedintj;
for(i=0;
i<
4;
i++)
{
wela=1;
switch(i)
{
case(0):
LSA=1;
LSB=1;
LSC=1;
LSD=0;
LSE=1;
LSF=1;
break;
case
(1):
LSC=0;
LSD=1;
case
(2):
LSB=0;
case(3):
LSA=0;
}
wela=0;
j=5;
while(j--);
duan=1;
P0=DisplayData[i];
P0=0x00;
duan=0;
//消隐
}
(2)、温度采集部分程序:
intDs18b20ReadTemp()
inttemp=0;
uchartmh,tml;
Ds18b20ChangTemp();
//先写入转换命令
Ds18b20ReadTempCom();
//然后等待转换完后发送读取温度命令
tml=Ds18b20ReadByte();
//读取温度值共16位,先读低字节
tmh=Ds18b20ReadByte();
//再读高字节
temp=tmh;
temp<
<
=8;
temp|=tml;
returntemp;
}
(3)、关于pid计算的程序:
定义PID结构体,由于节省编写量
将unsigned
int
变量define为
uint
struct
PID
{
SetPoint;
//
设定目标
Desired
Value
Proportion;
比例常数
Integral;
积分常数
Derivative;
微分常数
PrevError;
Error
LastError;
SumError;
Sums
of
Errors
};
spid;
Control
Structure
下面是PID的计算函数
PIDCalc(
*pp,
NextPoint
)
dError,Error;
pp->
SetPoint=set_temper;
=
SetPoint
-
NextPoint;
偏差
SumError
+=
Error;
积分
dError
LastError
当前微分
PrevError
return
(pp->
Proportion
*
比例项
+
积分项
Derivative
dError);
微分项
(4)、温度控制实现
通过温度的PID
运算,产生结果fOut,该参数决定是否加热,加热时间是多长。
该程序如下:
stPID.Proportion
2;
//设置PID
比例值
stPID.Integral
0;
积分值
stPID.Derivative
5;
微分值
fOut
PIDCalc
(
&
stPID,(int)(fT*10)
);
//PID
计算
if(fOut<
=0)
*P_IOA_Buffer
0xff7f;
//温度高于设定值,关闭加热器
else
|=
0x0080;
//温度低于设定值,打开加热器
参考文献:
《C语言程序设计基础》第四版,清华大学出版社
《单片机基础》第三版,北京航空航天大学出版