计算机课程设计(电热杯的恒温控制) 前言
1.1 温度控制系统的背景
温度是工业上常见的被控参数之一,恒温控制系统被广泛应用于加热炉,热处理炉,反应炉等。在一些温控系统电路中广泛采用的是通过热电偶,热电阻或PN结测温电路经过相应的信号调理电路,转换成A/D转换器能接收的模拟量,再经过采样保持电路进行A/D,最终送入单片机及其相应的外围电路,完成监控。但是由于传统的信号调理电路实现复杂,易受干扰,不易控制且精度不高。本次设计的单片机控制系统采用温度传感器(DS18B20)检测外部温度对水温进行恒温控制,精度保持在0、1摄氏度,范围保持在0、2摄氏度,不需要复杂的信号调理电路和A/D转换电路就能直接与单片机完成数据采集和处理,实现方便、高精度、适应性强的控制。也经常用到电烤箱、微波炉、电热水器、烘干箱等需要进行温度控制与检测控制的家用电器。采用单片机实现温度控制不仅具有温度控制方便、简单、灵活等优点,而且可以大幅提高被控温度的技术指标,从而大大提高了产品的质量。
陕西科技大学-自动化104-王运动
1
计算机控制系统课程设计
2. 总体设计方案
2.1 系统的总体框图
温度测量模块 51单片机最小系统(添加复位电路) 键盘模块
温度输出模块 LCD1602 显示模块 串 口通信
PC机
陕西科技大学-自动化104-王运动 2
计算机控制系统课程设计
2.2 总电路图
3. 硬件电路设计
3.1 温度测量与控制模块
U5DS18B20P00 GNDI/OVCC P01 VCCVCCR14.7KP14 P02 123
P03 3
陕西科技大学-自动化104-王运动
计算机控制系统课程设计
温度测量模块采用的是ASLLAS半导体公司的DS18B20温度传感器。该传感器与传统的热敏电阻相比,他能直接读出被测温度。这一部分主要完成对温度的采集和转换工作,有DS18B20数字温度传感器与其单片机接口部分组成。数字温度传感器把采集到的温度通过数据引脚传送到单片机的I/O,该模块由温度传感器,双向可控硅,光耦组成 。温度传感器负责温度的采集传送,由单片机程序判断处理后通过P 22、0口的高低电平变换控制经过光耦的隔离传输控制可控硅BAT06的开关,可控硅导通则电热杯接通220V电源进行加热。
3.2键盘模块
键盘模块设置有六个按键,接上拉电阻,分别由程序定义为控制目标温度的十位个位与十分位的加减1.
3.3 串口通信
单片机与PC机进行通信方便程序的烧制,尽管单片机有串行通信功能,但单片机提供的信号电平和RS232的标准不一样,因此要通过MAX232这种类似的芯片进行电平转换。MAX232是一种双组驱动器/接收器,片内含有一个电容性电压发生器以便在单5V电源供电EIA/TIA-232-E电平。 3.4 液晶显示模块
1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。
陕西科技大学-自动化104-王运动
4
计算机控制系统课程设计
市面上字符液晶大多数是基于HD44780液晶芯片的,控制原理是完全相同的,因此基于HD44780写的控制程序可以很方便地应用于市面上大部分的字符型液晶。1602采用标准的16脚接口,其中:第1脚:VSS为电源地第2脚:VCC接5V电源正极第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会 产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。第4脚:RS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。第5脚:RW为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作。第6脚:E(或EN)端为使能(enable)端,高电平(1)时读取信息,负跳变时执行指令。第7~14脚:D0~D7为8位双向数据端。第15~16脚:空脚或背灯电15背光正极,16脚背光负极。
4 PID控制
4.1 PID基本公式
在实际应用中,可以根据受控对象的特性和控制的性能要求,灵活地采用不同的控制组合,构成 比例(P)控制器
比例+积分(PI)控制器
陕西科技大学-自动化104-王运动
5
计算机控制系统课程设计
比例+积分+微分(PID)控制器
式中 或
式中
4.2 控制系统中的应用
在单回路控制系统中,由于扰动作用使被控参数偏离给定值,从而产生偏差。自动控制系统的调节单元将来自变送器的测量值与给定值相比较后产生的偏差进行比例、积分、微分(PID)运算,并输出统一标准信号,去控制执行机构的动作,以实现对温度、压力、流量、也为及其他工艺参数的自动控制。
比例作用P只与偏差成正比;积分作用I是偏差对时间的积累;微分作用D是偏差的变化率; 4.3 PID的独立介绍 比例(P)控制
比例控制能迅速反应误差,从而减少稳态误差。除了系统控制输入为0和系统过程值等于期望值这两种情况,比例控制都能给出稳态误差。当期望值有一个变化时,系统过程值将产生一个稳态误差。但
陕西科技大学-自动化104-王运动 6
计算机控制系统课程设计
是,比例控制不能消除稳态误差。比例放大系数的加大,会引起系统的不稳定。
图2比例(P)控制阶跃响应
积分(I)控制
在积分控制中,控制器的输出与输入误差信号的积分成正比关系。
为了减小稳态误差,在控制器中加入积分项,积分项对误差取决于时间的积分,随着时间的增加,积分项会增大。这样,即使误差很小,积分项也会随着时间的增加而加大,它推动控制器的输出增大使稳态误差进一步减少,直到等于零。
积分(I)和比例(P)通常一起使用,称为比例+积分(PI)控制器,可以使系统在进入稳态后无稳态误差。如果单独用积分(I)的话,由于积
陕西科技大学-自动化104-王运动
7
计算机控制系统课程设计
分输出随时间积累而逐渐增大,故调节动作缓慢,这样会造成调节不及时,使系统稳定裕度下降。
图3积分(I)控制和比例积分(PI)控制阶跃相应
微分(D)控制
在微分控制中,控制器的输出与输入误差信号的微分(即误差的变化率)成正比关系。
由于自动控制系统有较大的惯性组件(环节)或有滞后(delay)组件,在调节过程中可能出现过冲甚至振荡。解决办法是引入微分(D)控制,即在误差很大的时候,抑制误差的作用也很大;在误差接近零
陕西科技大学-自动化104-王运动 8
计算机控制系统课程设计
时,抑制误差的作用也应该是零。 图4微分 (D)控制和比例微分(PD)控制阶跃相应 增益常数(系数) Kp KI KD 上升时间 减少 减少 很小变化 过冲 增大 增大 减小 建立时间 很小变化 增加 减少 稳态误差 减小 消除 很小变化 5. 增量式PID算法原理 (2-4) 陕西科技大学-自动化104-王运动 9
计算机控制系统课程设计
增量式PID控制算法可以通过(2-4)推导得到控制器的第k-1个采样时刻的输出值为:
(2-5)
将(2-4)与(2-5)相减并整理,就可以得到增量式PID控制算法公式为:
(2-6)
其中
由(2-6)可以看出,如果计算机控制系统采用恒定的采样周期T,一旦确定A、B、C,只要使用前后三次测量的偏差值,就可以由(2-6)求出控制量。
陕西科技大学-自动化104-王运动
10
计算机控制系统课程设计
增量式PID控制算法与位置式PID算法(2-4)相比,计算量小得多,因此在实际中得到广泛的应用。
位置式PID控制算法也可以通过增量式控制算法推出递推计算公式:
(2-7)
(2-7)就是目前在计算机控制中广泛应用的数字递推PID控制算法。
6. 软件设计
程序
/*********************************************************************************
* 标题;基于单片机的温度控制实验 *
* *
* 描述:1.用温度传感器DS18B20测得温度值; *
陕西科技大学-自动化104-王运动 11
计算机控制系统课程设计
* 2.用LCD1602液晶显示器作为人机界面,其可以显示当前温度值,设定温度值等; * *
3.使用PID控制算法,控制水温,从而达到恒温。 *
* *
* 目的:1.学会DS18B20的驱动; *
*
2.学会LCD1602的驱动; *
*
3.理解PID控制原理; *
*********************************************************************************/
#include //包含51单片机头文件 //包含数学计算头文件 //包含用户头文件delay.h,作用:延时 //包含用户头文件 #include\"LCD1602.h\" LCD_1602.h,作用:驱动1602液晶显示器显示 #include\"DS18B20.h\" //包含用户头文件ds18b20.h,作 用:驱动温度传感器测量当前温度 陕西科技大学-自动化104-王运动 12 计算机控制系统课程设计 #include\"KeyScan.h\" //包含用户头文件Keyscan.h,作 用:键盘扫描,获取按键值 #define uchar unsigned char #define uint unsigned int sbit kaitong = P2^0; int PrevError = 0; int LastError = 0; int Error = 0; //定义电热杯开通关断引脚 //定义上上一次偏差值 //定义上一次偏差值 //定义当前偏差值 //中间变量 //上一次的输出值 //本次的输出值 //加热占空比调节参数 //初始化温度值60度 //用uchar代替unsigned char //用uint代替unsigned int int PError,IError,DError; int LastValue; int NowValue; int Full,Part; int SetValue=610; float Proportion = 0.44; float Integral = 0.005; //定义积分参数 float Derivative =5; /************************************************************************************** 陕西科技大学-自动化104-王运动 13 //定义微分参数 计算机控制系统课程设计 *名称: 增量式PID计算函数 * * * *描述: 增量式PID表达式如下 * * datau(k) = Kc*[e(k)-e(k-1)]+Ki*e(k)+Kd*[e(k)-2*e(k-1)+e(k-2)] * * 或 datau(k)=Kc*{e(t)-e(k-1)}+Kc*T*e(k)/Ti+Kd*Td*[e(t)-2*e(t-1)+e(t-2)]/T * * *说明:e(t)为设定值与实际值之差, * * Kc为比例系数 * * Ki = Kc*T/Ti积分系数 * * Kd = Kc*Td/T微分系数 * * T为采用周期 * * 14 陕西科技大学-自动化104-王运动 计算机控制系统课程设计 * * Ti为积分时间 * * Td为微分时间 * **************************************************************************************/ int PIDCalc(int NextValue) { PrevError = LastError; //将上一次偏差LastError赋 //增量式PID计算部分 给上上一次偏差PrevError LastError = Error; //将当前偏差Error赋给上 一次偏差LastError Error = keyscan() - NextValue; //将新的偏差赋给当前偏差 Error 偏差是绝对值,有错 LastValue = NowValue; //将本次输出值赋给上一次 输出值 if(Error >=100) { return(20); } else if((Error<100)&&(Error>=50)) 15 陕西科技大学-自动化104-王运动 计算机控制系统课程设计 { return(14); } else if((Error<50)&&(Error>=20)) { return(10); } else if((Error<20)&&(Error>0)) { PError = Proportion *(Error - LastError); IError = Integral *Error; DError = Derivative *(Error - 2 * LastError + PrevError); NowValue =PError + IError + DError + LastValue; return NowValue; //计算PID控制值 } else { PError = Proportion *(Error - LastError); IError = Integral *Error; DError = Derivative *(Error - 2 * LastError + PrevError); NowValue =PError + IError + DError + LastValue; return 0; 陕西科技大学-自动化104-王运动 1 6 计算机控制系统课程设计 } } /**************************************************************** * * * * * * 主函数 ****************************************************************/ void main() { uint ccc=100; LCD_init(); //从第1行第2个字符位开始显 setPosition(1,2); 示“Welcom to” prints(\"Welcom to\"); setPosition(2,5); //从第1行第2个字符位开始显 示“SUST” prints(\"SUST\"); 17 陕西科技大学-自动化104-王运动 计算机控制系统课程设计 delayl(1000); //延时,使欢迎界面在屏幕上停 留片刻 if(Full <= Part) //判断PID计算值,如果Full if(Full > 20) { } Full = 1; //如果dd大于20,则复位为1 write_com(0x01); while(1) { if(ccc==0) { { Full++; //加1,相当于dd = dd + 1 Part = PIDCalc(readtemp()); ccc=100; } for(;ccc>0;ccc--) //初始化LCD 小于等于该值,则开通发热管;否则关断 陕西科技大学-自动化104-王运动 18 计算机控制系统课程设计 kaitong = 0; else kaitong = 1; /*从第2行第2字符位开始显示设定温度值*/ setPosition(1,0); IntToStr(keyscan(),buffer,3); //处理温度值,以便显示 prints(\"S:\"); //显示\"SET:\" //显示十位 //显示个位 printc(buffer[0]); printc(buffer[1]); printc('.'); //显示小数点 //显示十分位 //显示摄氏度符号右上角的小 printc(buffer[2]); printc(0xDF); 圆圈 /*从第1行第2字符位开始显示当前温度值*/ setPosition(1,8); //处理温度值,以便显示 printc('C'); //显示摄氏度符号“C” IntToStr(readtemp(),buffer,3); prints(\"P:\"); //显示\"CUR:\" //显示十位 //显示个位 19 printc(buffer[0]); printc(buffer[1]); 陕西科技大学-自动化104-王运动 计算机控制系统课程设计 printc('.'); //显示小数点 //显示十分位 printc(buffer[2]); printc(0xDF); //显示摄氏度符号右上角的小圆圈 printc('C'); //显示摄氏度符号“C” setPosition(2,0); IntToStr(NowValue,buffer,3); //处理温度值,以便显示 printc(buffer[0]); //显示十位 printc(buffer[1]); //显示个位 printc(buffer[2]); setPosition(2,4); IntToStr(PError,buffer,3); //处理温度值,以便显示 printc(buffer[0]); //显示十位 printc(buffer[1]); //显示个位 printc(buffer[2]); setPosition(2,8); IntToStr(IError,buffer,3); //处理温度值,以便显示 printc(buffer[0]); //显示十位 printc(buffer[1]); //显示个位 printc(buffer[2]); setPosition(2,12); 陕西科技大学-自动化104-王运动 2 0 计算机控制系统课程设计 } } IntToStr(DError,buffer,3); //处理温度值,以便显示 printc(buffer[0]); printc(buffer[1]); printc(buffer[2]); } //显示十位 //显示个位 7. 总结 这次是在老师的带领下完成的,但自己上学期就接触到相关资 料,也进行过焊接与测试,所以这次课程设计显得比较轻松。由于板子是布好线的PCB,大大降低了设计的难度,主要的困难便落在了程序的编写与PID参数的调试。这次试验的很多时间也耗在了参数的调试,自己也总结了一定的经验,很好的完成了本次课程设计。 参考资料 1.林敏计算机控制技术及工程应用国防工业出版社,2005年出版 2.朱玉玺等编.计算机控制技术.电子工业出版社. 2005年出版 陕西科技大学-自动化104-王运动 21 计算机控制系统课程设计 目 录 1 前言………………………………………………………………………………1 2 总体设计方案……………………………………………………………………2 2.1系统的总体框图……………………………………………………………2 2.2总电路图 ……………………………………………………3 3 硬件电路设计……………………………………………………………………3 3.1 温度与测量模块 …………………………………………………………3 3.2 键盘 ……………………………………………………………….4 3.3 串口通信……………………………………………………………………4 3.4液晶显示模块 ……………………………………………………………4 4.PID控制 ……………………………………………………………….……5 4.1 PID基本公式 …………………………………………………………5 4.2 控制系统中的应用 …………………………………………………………6 4.3 PID独立介绍 …………………………………………………………6 5 增量式PID算法…………………………………………………………………9 6 软件设计…………………………………………………………………………10 参考文献……………………………………………………………………………21 陕西科技大学-自动化104-王运动 因篇幅问题不能全部显示,请点此查看更多更全内容