);
}
在实际运算时,由于水具有很大的热惯性,而且PID 运算中的I(积分项)具有非常明显的延迟效应所以不能保留,我们必须把积分项去掉,相反D(微分项)则有很强的预见性,能够加快反应速度,抑制超调量,所以积分作用应该适当加强才能达到较佳的控制效果,系统最终选择PD 控制方案,下面C 代码所示为PD 控制的实现过程:
float PIDCalc( PID *pp, int NextPoint ) {
int dError,Error;
Error = pp->SetPoint*10 - NextPoint; // 偏差,设定值减去当前采样值 dError = Error-pp->LastError; // 当前微分,偏差相减 pp->PrevError = pp->LastError; // 保存 pp->LastError = Error;
return (pp->Proportion * Error // 比例项 - pp->Derivative * dError // 微分项 ); }
注:【例】:int a; int &ra=a; //定义引用ra,它是变量a的引用,即别名
引用声明完毕后,相当于目标变量名有两个名称,即该目标原名称和引用名,且不能再把该引用名作为其他变量名的别名。 ra=1; 等价于 a=1; (5)声明一个引用,不是新定义了一个变量,它只表示该引用名是目标变量名的一个别名,它本身不是一种数据类型,因此引用本身不占存储单元,系统也不给引用分配存储单元。故:对引用求地址,就是对目标变量求地址。&ra与&a相等
温度控制实现
通过温度的PID 运算,产生结果fOut,该参数决定是否加热,加热时间是多长。该程序如下:
stPID.Proportion = 2; //设置PID 比例值 stPID.Integral = 0; //设置PID 积分值 stPID.Derivative = 5; //设置PID 微分值
fOut = PIDCalc ( &stPID,(int)(fT*10) ); //PID 计算 if(fOut<=0)
*P_IOA_Buffer &= 0xff7f; //温度高于设定值,关闭加热器 else
*P_IOA_Buffer |= 0x0080; //温度低于设定值,打开加热器
加热时间由主函数计算,由TimerB 中断控制。主程序中通过PIDCalc 函数得到fOut 参数,如果该参数大于“0”,则开启加热器。IRQ2_TMB 中断一直处于允许状态,每进入一次IRQ2_TMB 中断,fOut 参数减1,直到fOut = 0,停止加热。如果PIDCalc 计算结果比较大说明离目标温度相差较大,则加热时间比较长,如果计算结果比较小,说明离目标温度
相差较小,加热时间相对较短。
基于PID算法和89C52单片机的温度控
制系统
作者:张艳艳 安徽电子信息职业技术学院 来源:现代电子技术 发布时间:2009-12-22 17:36:09 [收 藏]
[评 论]
基于PID算法和89C52单片机的温度控制系统
0 引 言
温控技术无论是在工业生产,还是日常生活中都起着非常重要的作用。在冶金、石油、化工、电力和现代农业等行业,温度是极为重要而又普遍的热工参数之一,在普通家庭里热水器、电饭煲、电烤箱等依赖
于温控技术的家电设备也是必不可少。可以说温度控制技术无处不在。
常规的温度控制方法以设定温度为临界点,超出设定允许范围即进行温度调控:低于设定值就加热,反之就停止或降温。这种方法实现简单、成本低,但控制效果不理想,控制温度精度不高、容易引起震荡,
达到稳定点的时间也长,因此,只能用在精度要求不高的场合。
而采用PID算法进行温度控制,它具有控制精度高,能够克服容量滞后的特点,特别适用于负荷变化大、
容量滞后较大、控制品质要求又很高的控制系统。
单片机作为控制系统中必不可少的部分,在各个领域得到了广泛的应用,用单片机进行实时系统数据处理和控制,保证系统工作在最佳状态,提高系统的控制精度,有利于提高系统的工作效率。本系统采用单
片机编程实现PID算法进行温度控制。
1 PID控制的原理和特点
在工程实际中,应用最为广泛的调节器控制规律为比例、积分、微分控制,简称PID控制,又称PID调节。PID控制器以其结构简单、稳定性好、工作可靠、调整方便而成为工业控制的主要技术之一。当被控对象的结构和参数不能完全掌握,或得不到精确的数学模型,控制理论的其他技术也难以采用,系统控制
器的结构和参数必须依靠经验和现场调试来确定时,应用PID控制技术最为方便。
PID控制器的参数整定是控制系统设计的核心内容。它是根据被控过程的特性确定PID控制器的比例系数、积分时问和微分时间的大小。PID控制器参数整定的方法概括起来有两大类:一是理论计算整定法。它主要是依据系统的数学模型,经过理论计算确定控制器参数。这种方法所得到的计算数据未必可以直接用,还必须通过工程实际进行调整和修改。二是工程整定方法,它主要依赖工程经验,直接在控制系统的
试验中进行,且方法简单、易于掌握,在工程实际中被广泛采用。
PID一般算式及模拟控制规律如式(1)所示:
式中:u(t)为控制器的输出;e(t)为偏差,即设定值与反馈值之差;KC为控制器的放大系数,即比例增益;TI为控制器的积分常数;TD为控制器的微分时间常数。PID算法的原理即调节KC,TI,TD三个参
数使系统达到稳定。
由于计算机控制是一种采样控制,它只能根据采样时刻的偏差值计算控制量。因此在计算机控制系统中,必须首先对式(1)进行离散化处理,用数字形式的差分方程代替连续系统的微分方程,此时积分项和微分项
可用求和及增量式表示:
将式(2)和式(3)代入式(1),则可得到离散的PID表达式:
式中:△t=T为采样周期,必须使T足够小,才能保证系统有一定的精度(采样定理);E(K)为第K次采
样时的偏差值;E(K-1)为第K-1次采样时的偏差值;P(K)为第K次采样是调节器的输出。
2 系统的硬件构成
本系统由传感器A/D采样输入、单片机控制、人机交互、控制信号输出四部分组成,其中温度传感部分由测试采样电路实现,人机交互由矩阵键盘和LCD液晶屏构成,PID控制算法由89C52单片机实现,控
制信号输出部分则由功率放大和开关控制电路组成。系统框图如图1所示。
3 主程序流程
软件程序是本控制系统的核心,它包括从温度采样到信号输出的整个流程控制,其示意图如图2所示。
程序功能主要由以下的几部分组成:
(1)初始化:设定各参数的初始值,设定各中断及定时器。
(2)接收/发射:此部分程序主要完成数据的控制及显示,主要通过89C52单片机的全双工串行口完成和
键盘部分的双向通信。
(3)PC机通信:此部分完成与微机控制接口RS 232的连接及通信的控制。
(4)数值转换子程序:由于主程序中用到了很多的数值转换及数值的运算(如十进制转换成十六进制、双
字节与单字节的除法运算等),为了程序调用的方便,特将其编写成子程序的形式。
(5)PID算法。
4 实验测试
系统的性能与稳定度需要通过具体实验测试完成。现用1 kW的电炉将电热杯中的1 L清水进行加热。
观测设定值和实测值之间的误差(当水温达到稳定时的值),计算绝对误差和相对误差,见表1。
设定温度为50℃,每隔30 s记录实测温度,如表2所示。
从表2中的数据可知,系统运行5 min时基本达到稳定。
5 结 语
由实验结果可以看出,系统的误差基本稳定在±0.3℃,可见系统的精度很好。此外,系统运行5 min时温度基本达到稳定,稳定所需时间较短。可以看出,基于PID算法的单片机温度控制系统具有较高的精确度和稳定性,在温度调节阶段平衡温度时间较短。因此本系统可以应用于各种对精度要求较高的温度控
制场合。
回复数:5,点击温度控制中,用PID算法得到的是一个数值,这个数值如何转换为占空比? 数:1528 【楼主位】 xuxianhai 积分:2 派别: 等级:------ 来自: 我在用MEGA16控制电加热调节水温时,采用PID算法,输出采用占空比通断控制。为求阶跃响应,我用15%占空比达到稳定后,将占空比调至30%,开始测量温度。得到阶跃响应曲线后,为求加热器的静态增益K,采用K=△Y/△X公式。我知道△Y用温度值的单位,但△X的单位该如何取呢?是用15,还是0.15? 另外,我用PID算法得到的是一个数值,这个数值如何转换为占空比?是要先设定一个较大的值吗?如果是的话,这个数值是否有一个经验值,大概取多少? 恳请各位高手帮忙看一下,谢谢! 2006-02-17,10:51:03 资料 邮件 回复 引用回复 ↑↑ ↓↓ 编辑 删除 【1楼】 sanol 哥们,我也做这个,交流下? 积分:8 派别: 等级:------ qq 940353508