资源描述
摘要:
随着微机测量和控制技术迅速发展与广泛应用,以单片机为核心温度采集与控制系统研发与应用在很大限度上提高了生产生活中对温度控制水平。温度是工业控制中重要被控参数之一,特别是在冶金、化工、建材、食品、机械等工业中,具备举足重轻作用,因而,温度控制系统是典型控制系统。
本文简介了基于单片机AT89C51 温度控制系统设计方案与软硬件实现,阐述了一种以STC89C52单片机为主控制单元,以DS18B20为温度传感器温度自动控制系统。该控制系统可以依照设定温度,通过PID算法调节和控制pwm波输出,控制晶闸管导通时间从而控制水温自动调节,系统设计了有关硬件电路和有关应用程序。硬件电路重要涉及STC89C52单片机最小系统,DS18b20测温电路、键盘电路.LCD液晶显示电路,加热功率电路等。系统程序重要涉及主程序,温度解决子程序、按键解决程序、LCD显示程序等,pwm波输出程序。给出了系统总体框架、程序流程图和Proteus 仿真成果,并在硬件平台上实现了所设计功能。关
[核心词] 单片机;温度控制系统;温度传感器;PID控制算法。
目 录
1.选题背景----------------------------------------------------------2
2.设计规定----------------------------------------------------------2
2.1设计任务-----------------------------------------------------2
2.2设计规定----------------------------------------------------2
3.方案论证比--------------------------------------------------------3
3.1 温度检测电路方案选取-----------------------------------------3
3.2显示电路方案选取 --------------------------------------------3
3.3加热方案选取 ------------------------------------------------3
3.4控制办法方案选取 --------------------------------------------3
4.总体方案及工作原理----------------------------------------------4
5.系统硬件设计-----------------------------------------------------4
5.1温度传感器电路单元 ------------------------------------------5
5.2 输入电压单元 ------------------------------------------------6
5.3液晶显示单元-------------------------------------------------6
5.4温度上下限模块单元 ------------------------------------------7
5.5主控制单元设计 ----------------------------------------------7
6.系统软件设计 -----------------------------------------------------9
6.1 PID控制程序算法 --------------------------------------------9
6.2 PWM脉宽调制技术 --------------------------------------------12
6.3 控制系统程序 -----------------------------------------------13
7.设计结论及总结---------------------------------------------------19
参照文献资料-------------------------------------------------------21
1.选题背景
对于不同场合、不同工艺、所需温度高低 范畴不同、精度不同,则采用测温元件、测温办法以及对温度控制办法也将不同;产品工艺不同、控制温度精度不同、时效不同,则对数据采集精度和采用控制算法也不同,因而,对温度测控办法各种各样。
技术和微型计算机迅速发展,微机测量和控制技术也得到了迅速发展和广泛应用。运用微机对温度进行测控技术,也便随之而生,并得到日益发展和完善,越来越显示出其优越性。当前,单片微机已普遍地作用于生产过程自动控制领域中。单片机以其体积小、价格低廉、可用其构成计算机控制系统中智能控制单元和可靠性高等特点,受到广大工程技术人员注重。温度是生产过程中最常用物理量,许多生产过程是以温度作为其被控参数。因而,温度控制系统是典型控制系统
2.课题设计规定:
2.1设计任务
设计并制作一种水温自动控制系统,控制对象为300W或400W电阻炉,容器为薄壁不锈钢可以加温器皿。
2.2设计规定
2.2.1基本规定
(1)调温功能,水温可以在0~100℃范畴内由人工设定,人工设定温度后系统自动控制加热或降温,最社区别度为0.1℃,所测温度和实际温度偏差≤1℃。
(2)恒温功能,在环境温度变化时(例如用电电扇降温,电压波动)实现自动控制,以保持容器内依照设定温度保持基本不变。
(3)用LCD或LED显示:水设定温度、实际温度、工作时间等参数信息。
2.2.2发挥某些
(1)采用恰当控制办法,当设定温度突变(由70℃提高到90℃)时,减小系统调节时间和超调量。
(2)采用恰当控制办法,当突加凉水扰动时,减小系统调节时间和超调量。
(3)温度控制静态误差≤0.5℃。
3.方案论证比较
3.1温度检测电路方案选取:
方案一:用普通半导体温度传感器作为敏感元件,再结合电压放大器和AD转换器将感应到温度数值转换为数字量存储在某一单元内。但由于该方案所需元件较多,且电路较繁,调试起来较复杂,因此舍之不用。
方案二:使用数字温度传感器DS18B20检测温度,内含AD转换器,因而线路连接十分简朴,它无需其她外加电路,直接输出数字量,可直接与单片机通信,读取测温数据,电路十分简朴,它可以达到0.5℃固有辨别率,使用读取温度暂存寄存器办法还能达到0.2℃以上精度,应用以便,这样电路重要工作量就集中到了单片机软件编程上,故咱们选用该方案。
3.2显示电路方案选取:
方案一:使用数码管显示,通过数码管显示被测温度和设定温度。该方案程序简朴,但硬件占用单片机I/O口较多,对于尽量节约端口,让线路简朴来说不是好办法,并且显示也不够直观灵活,只能显示数字,不能显示中文显示功能提示,故不适合本次设计应用。
方案二:使用液晶屏lcd12864,可以显示字母,数字及中文,并且一次可以显示4行,显示很直观,通过字幕显示模式、温度、曲线。该方案程序较复杂,并且lcd12864价格昂贵,对于节约成本角度来说,咱们选取放弃选取方案二。
方案三:使用液晶屏1602显示,可以显示设定温度及测量温度,但显示时1602能显示两行能显示字符及数字,不能显示中文及曲线,完全满足本次设计规定,并且成本低廉,设计简朴可靠,故选取方案三。
3.3加热方案选取:
方案一:使用电热炉进行加热,控制电炉功率即可控制加热速度,当水温过高时,关掉电炉即可,但考虑到电炉成本较高,且精度不好控制,故不选用。
方案二:固态继电器控制加热器工作,固态继电器使用非常简朴,并且没有触点,无需外加光耦,自身就可以实现电气隔离,还可以频繁动作。可以使用类似pwm方式,通过控制固态继电器开,断时间比来达到控制加热器功率目,适合功率不大精度不高,简易水温控制系统。
方式三:是使用可控硅控制加热器工作。可控硅是一种半控器件,通过控制导通角方式来控制,对每个周期交流电进行控制,由于导通角持续可调,故控制精度较高,且元件便宜,易于制作,咱们选取方案三。
3.4控制办法选取方案:
方案一:采用普通控制办法,即随着水温变化调节温度,但局限性太小,由于水温变化快,且惯性大,不易控制精度,故采用普通控制办法显得力不从心。
方案二:采用PWM控制加PID算法,通过采用PWM可以产生一种PWM波形,而PWM波形占空比是通过PID算法调节,这样就可以调节加热棒功率进而控制温度变化,从而使精度提高,咱们选取方案二。
4.总体方案及工作原理
温度传感器 DS18B20 从设备环境不同位置采集温度,单片机 AT89S51 获取采集温度值,经解决后得到当前环境中一种比较稳定温度值,再依照当前设定温度上下限值,通过加热和降温对当前温度进行调节。当采集温度经解决后超过设定温度上限时,,当采集温度经解决后低于设定温度下时 ,单片机通过控制晶闸管启动升温设备 (加热器) 。
系统总体原理框图如下;
PC机
MAX232电平转换芯片
键盘电路
AT89S51
8BIT CPU
数据显示
DS18B20 温度芯片数据传播
输入电源
加热器
双向可控硅
系统工作原理框图
5.系统硬件设计
对题目进行进一步分析和思考,可以将整个系统硬件总体分为如下几种方面:
5.1 温度传感器电路单元
测温电路是使用DS18b20数字式温度传感器,它无需其她外加电路,直接输出数字量,可直接与单片机通信,读取测温数据,电路十分简朴。它可以达到0.5固有辨别率,使用读取温度暂存寄存器办法还能达到0.2以上精度。
DS18B20温度传感器只有三根外引线:单线数据传播总线端口DQ ,外供电源线VDD,共用地线GND。外部供电方式(VDD接+5V,且数据传播总线接4.7k上拉电阻。
综上,在本系统中我采用温度芯片DS18B20测量温度。该芯片物理化学性很稳定,它能用做工业测温元件,且此元件线形较好。在0—100摄氏度时,最大线形偏差不大于1摄氏度。该芯片直接向单片机传播数字信号,便于单片机解决及控制。
DS18B20接口电路 DS18B20实物图
5.2 输入电压单元
控制系统主控制某些电源需要用5V直流电源供电,其电路所示,把频率为50Hz、有效值为220V单相交流电压转换为幅值稳定5V直流电压。其重要原理是把单相交流电经 过电源变压器、整流电路、滤波电路、稳压电路转换成稳定直流电压。
由于输入电压为电网电压,普通状况下所需直流电压数值和电网电压有效值相差较大,因而电源变压器作用显现出来起到降压作用。降压后还是交流电压,因此需要整流电路把交流电压转换成直流电压。由于经整流电路整流后电压具有较大交流分量,会影响到负载电路正常工作。需通过低通滤波电路滤波,使输出电压平滑。稳压电路功能是使输出直流电压基本不受电网电压波动和负载电阻变化影响,从而获得稳定性足够高直流电压。本电路使用集成稳压芯片7805解决了电源稳压问题。
5.3 液晶显示单元
LCM1602 是2 行×16 个字符字符型LCD 显示屏,它由32 个字符点阵块构成,每个字符点阵块由5×7 或5×10 个点阵构成,可以显示ASCII 码表中所有可视字符。它内置了字符产生器ROM (Character Generator ROM,CGROM)、字符产生器RAM (CharacterGenerator RAM,CGRAM)和显示数据RAM(Data Display RAM,DDRAM)。CGROM 中内置了192个惯用字符字模,CGRAM 包括8 个字节RAM,可存储顾客自定义字符,DDRAM 就是用来寄存待显示字符代码。
P3.0、P3.1、P3.2接LCD1602三个控制引脚,P4口作为LCD1602数据接口。通过对控制引脚控制,从而实现温度显示功能。
5.4 温度上下限键盘设立模块
温度上下限设立模块涉及四个按键:(1)模式切换键:进行模式之间切换,模式涉及设立温度上限模式、设立温度下限模式,每次按下该键就在这两种模式之间切换。(2)温度上下限增长键:增长温度上下限值。(3)温度上下限减少键:减少温度上下限值。(4)温控开核心:是温控与非温控之间切换键。它用于设立与否进行温度控制即与否让越界温度值触发加热器启动
5.5 主控制单元设计:
AT89S51 是一种低功耗,高性能CMOS 8位单片机,片内含8k Bytes ISP(In-system programmable)可重复擦写1000次Flash只读程序存储器,器件采用ATMEL公司高密度、非易失性存储技术制造,兼容原则MCS-51指令系统及80C51引脚构造,芯片内集成了通用8位中央解决器和ISP Flash存储单元,功能强大微型计算机AT89S51可为许多嵌入式控制应用系统提供高性价比解决方案。AT89S51具备如下特点:40个引脚,4k Bytes Flash片内程序存储器,128 bytes随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定期计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。
此外,AT89S51设计和配备了振荡频率可为0Hz并可通过软件设立省电模式。空闲模式下,CPU暂停工作,而RAM定期计数器,串行口,外中断系统可继续工作,掉电模式冻结振荡器而保存RAM数据,停止芯片其他功能直至外中断激活或硬件复位。同步该芯片还具备PDIP、TQFP和PLCC等三种封装形式,以适应不同产品需求。
由于系统控制方案简朴 ,数据量也不大 ,考虑到电路简朴和成本等因素 ,因而在本设计中选用 A TMEL 公司 A T89S51单片机作为主控芯片。主控模块采用单片机最小系统是由于 A T89S51芯片内具有4 kB E2PROM ,无需外扩存储器 ,电路简朴可靠 ,其时钟频率为 0~24 MHz ,并且价格低廉 ,批量价在 10元以内。
其重要功能特性:
兼容MCS-51指令系统 4k可重复擦写(>1000次)ISP Flash ROM
32个双向I/O口 4.5-5.5V工作电压 2个16位可编程定期/计数器 时钟频率0-33MHz
全双工UART串行中断口线 128x8 bit内部RAM
2个外部中断源 低功耗空闲和省电模式
中断唤醒省电模式 3级加密位
看门狗(WDT)电路 软件设立空闲和省电功能
灵活ISP字节和分页编程 双数据寄存器指针
可以看出AT89S51提供如下原则功能:4K字节Flash闪速存储器,128字节内部RAM,32个I/O口线,看门狗(WDT),两个数据指针,两个16位定期器/计数器,一种5向量两级中断构造,一种全双工串行通信口,片内振荡器及时钟。同步,AT89S51可降至0Hz静态逻辑操作,并支持两种软件可选节电工作模式。空闲方式停止CPU工作,但容许RAM,定期/计数器,串行通信口及中断系统继续工作。掉电方式何在RAM中内容,但振荡器停止工作并禁止其他所有部件工作直接到一种硬件复位。
AT89S51单片机引脚图
6.系统软件设计
6.1 PID控制程序算法
6.1.1 PID算法简介
PID控制算法是控制理论中应用很广泛一种算法,对于普通控制系统来说,PID算法从某种意义来说具备通用性,对各种系统具备广泛合用性,通过现场参数调试,可以达到较好控制效果。
对于咱们这次水温控制系统设计,咱们同样也可以使用PID控制算法,详细算法如下:
e(i)=t测-t设
E=
(2)
算法中,u(i)为当时功率输出。T为采样时间,E为误差积累,KP为比例常数,Ti为积分常数,Td为微分常数。依照实际系统,调节这三个常数,可以达到较好效果。
大多数温度控制系统可以看作一阶纯滞后环节,由于本系统纯滞后时间较小,故可采用PID(比例、积分、微分)控制算法实行控制。
6.1.2 PID控制作用
PID是比例(P)、积分(I)和微分(D)3个控制作用组合。持续系统PID控制器微分方程为:y(t)= KPP[e(t)+] (4-1)
式中 y(t)为控制器输出;e(t)为控制器输入;KP比例放大系数;TI为控制器积分时间常数;TD为控制器微分时间常数。
显然,KP越大,控制器控制作用越强;只要e(t)不为0,积分项会因积分而使控制器输出变化;只要e(t)有变化趋势,控制器就会在微分作用下,在偏差浮现且偏差不大时提前给输出一种较强控制作用。
6.1.3 PID算法微机实现
由于微机控制系统是一种时间离散控制系统,故必要把微分方程离散化为差分方程,最后写出递推公式才干直接应用。
显然: (4-2)
(4-3)
于是, KP{e(n)++[e(n)-e(n-1)]} (4-4)
式中Δt=T,为采样周期;e(t)为第n次采样偏差值;e(n-1)为第(n-1)次采样时偏差值;n为采样序列,n=0,1,2,…。
由式(4-4)可以看出:计算一次Y(n),不但需要存储器空间大,并且计算量也很大,于是进一步写出递推公式:
由 Y(n-1)= KP {e(n-1)+ +[e(n-1)-e(n-2)]} (4-5)
由式(4)减去式(5)得:
ΔY(n)=Y(n)-Y(n-1)
=KP {[e(n)-e(n-1)]+[e(n)-2e(n-1)+e(n-2)]}
= KP[e(n)-e(n-1)]+ KI e(n)+KD[e(n)-2e(n-1)+e(n-2)] (4-6)
或 Y(n)=Y(n-1)+ KP[e(n)-e(n-1)]+ KI e(n)+KD[e(n)-2e(n-1)+e(n-2)](4-7)
式中 KI=KP,称为积分常数;KD=KP,称为微分常数。
6.1.4数字PID控制参数选取
一、数字PID参数原则规定和整定办法
1、原则规定:
被控过程是稳定,能迅速和精确地跟踪给定值变化,超调量小,在不同干下系统输出应能保持在给定值,操作变量不适当过大,在系统与环境参数发生变化控制应保持稳定。显然,要同步满足上述各项规定是困难,必要依照详细过程规定,满足重要方面,并兼顾其他方面。
2、PID参数整定办法:
理论计算法――依赖被控对象精确数学模型(普通较难做到)
工程整定法――不依赖被控对象精确数学模型,直接在控制系统中进行现场整定(简朴易行)
二、惯用简易工程整定法
1、扩充临界比例度法――合用于有自平衡特性被控对象
整定数字调节器参数环节是:
(1)选取采样周期为被控对象纯滞后时间十分之一如下。
(2)去掉积分作用和微分作用,逐渐增大比例度系数直至系统对阶跃输入响
应达到临界振荡状态(稳定边沿),记下此时临界比例系数及系统临界振荡
周期。
(3)选取控制度。
普通,当控制度为1.05时。就可以以为DDC与模仿控制效果相称。
(4)依照选定控制度,查表5-3-2求得T、KP、TI、TD值。
2、扩充响应曲线法――合用于多容量自平衡系统
参数整定环节如下:
(1)让系统处在手动操作状态,将被调量调节到给定值附近,并使之稳定下来,然后突然变化给定值,给对象一种阶跃输入信号。
(2)用记录仪表记录被调量在阶跃输入下整个变化过程曲线,如图所示。
(3)在曲线最大斜率处作切线,求得滞后时间τ,被控对象时间常数Tτ以及它们比值Tτ/τ。
(4)由求得τ、Tτ及Tτ/τ查表5-3-3,即可求得数字调节器关于参数KP、TI、TD及采样周期T。
3、归一参数整定法
令,,。则增量型PID控制公式简化为
变化KP,观测控制效果,直到满意为止。
5.4数字PID控制工程实现
6.2 PWM脉宽调制技术
脉宽调制(PWM)基本原理:控制方式就是对逆变电路开关器件通断进行控制,使输出端得到一系列幅值相等脉冲,用这些脉冲来代替正弦波或所需要波形。也就是在输出波形半个周期中产生各种脉冲,使各脉冲等值电压为正弦波形,所获得输出平滑且低次谐波少。按一定规则对各脉冲宽度进行调制,即可变化逆变电路输出电压大小,也可变化输出频率。
例如,把正弦半波波形提成N等份,就可把正弦半波当作由N个彼此相连脉冲所构成波形。这些脉冲宽度相等,都等于 ∏/n ,但幅值不等,且脉冲顶部不是水平直线,而是曲线,各脉冲幅值按正弦规律变化。如果把上述脉冲序列用同样数量等幅而不等宽矩形脉冲序列代替,使矩形脉冲中点和相应正弦等分中点重叠,且使矩形脉冲和相应正弦某些面积(即冲量)相等,就得到一组脉冲序列,这就是PWM波形。可以看出,各脉冲宽度是按正弦规律变化。依照冲量相等效果相似原理,PWM波形和正弦半波是等效。对于正弦负半周,也可以用同样办法得到PWM波形。
在PWM波形中,各脉冲幅值是相等,要变化等效输出正弦波幅值时,只要按同一比例系数变化各脉冲宽度即可,因而在交-直-交变频器中,整流电路采用不可控二极管电路即可,PWM逆变电路输出脉冲电压就是直流侧电压幅值。
依照上述原理,在给出了正弦波频率,幅值和半个周期内脉冲数后,PWM波形各脉冲宽度和间隔就可以精确计算出来。按照计算成果控制电路中各开关器件通断,就可以得到所需要PWM波形。
6.3控制系统程序
6.3.1系统主函数:
#include<reg52.h> //包括51单片机头文献
#include<math.h> //包括数学计算头文献
#include"Delay.h" //包括顾客头文献delay.h,作用:延时
#include"LCD1602.h" //包括顾客头文献LCD_1602.h,作用:驱动1602液晶显示屏显示
#include"DS18B20.h" //包括顾客头文献ds18b20.h,作用:驱动温度传感器测量当前温度
#include"KeyScan.h" //包括顾客头文献Keyscan.h,作用:键盘扫描,获取按键值
#define uchar unsigned char //用uchar代替unsigned char
#define uint unsigned int //用uint代替unsigned int
sbit kaitong = P2^0; //定义电热杯开通关断引脚
int PrevError = 0; //定义上上一次偏差值
int LastError = 0; //定义上一次偏差值
int Error = 0; //定义当前偏差值
int PError,IError,DError; //中间变量
int LastValue; //上一次输出值
int NowValue; //本次输出值
int Full,Part; //加热占空比调节参数
int SetValue=600; //初始化温度值60度
float Proportion = 0.5; //定义比例参数
float Integral = 0.1; //定义积分参数
float Derivative = 1; //定义微分参数
int PIDCalc(int NextValue) //增量式PID计算某些
{
PrevError = LastError; //将上一次偏差LastError赋给上上一次偏差PrevError
LastError = Error; //将当前偏差Error赋给上一次偏差LastError
Error = keyscan() - NextValue; //将新偏差赋给当前偏差Error 偏差是绝对值,有错
LastValue = NowValue; //将本次输出值赋给上一次输出值
if(Error >=100)
{
return(20);
}
else if((Error<100)&&(Error>=50))
{
return(14);
}
else if((Error<50)&&(Error>=0))
{
PError = Proportion *(Error - LastError);
IError = Integral *Error;
DError = Derivative *(Error - 2 * LastError + PrevError);
NowValue =PError + IError + DError + LastValue;
return NowValue;//计算PID控制值
}
else
return 0;
}
void main()
{
// uint ccc=100;
LCD_init(); //初始化LCD
setPosition(1,2); //从第1行第2个字符位开始显示“Welcom to”
prints("Welcom to");
setPosition(2,5); //从第1行第2个字符位开始显示“SUST”
prints("SUST");
delayl(1000); //延时,使欢迎界面在屏幕上停留半晌
LCD_init(); //初始化LCD
while(1)
{
Part = PIDCalc(readtemp());
Full++; //加1,
if(Full > 20) //如果full不不大于20,则复位为1
{
Full = 1;
}
if(Full <= Part) //判断PID计算值,如果Full不大于等于该值,则开通发热管;否则关断
kaitong = 0;
else
kaitong = 1;
/*从第2行第2字符位开始显示设定温度值*/
setPosition(1,0);
IntToStr(keyscan(),buffer,3); //解决温度值,以便显示
// prints("SV:"); //显示"SET:"
printc(buffer[0]); //显示十位
printc(buffer[1]); //显示个位
printc('.'); //显示小数点
printc(buffer[2]); //显示十分位
printc(0xDF); //显示摄氏度符号右上角小圆圈
printc('C'); //显示摄氏度符号“C”
/*从第1行第2字符位开始显示当前温度值*/
setPosition(1,8);
IntToStr(readtemp(),buffer,3); //解决温度值,以便显示
// prints("PV:"); //显示"CUR:"
printc(buffer[0]); //显示十位
printc(buffer[1]); //显示个位
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);
IntToStr(DError,buffer,3); //解决温度值,以便显示
printc(buffer[0]); //显示十位
printc(buffer[1]); //显示个位
printc(buffer[2]);
}
}
6.3.2 延时程序
#ifndef Delay
#define Delay
#define uint unsigned int
#define uchar unsigned char
void delayl(uint n) //长延时n毫秒
{
uint i,j;
for(i=n;i>0;i--)
for(j=114;j>0;j--);
}
void delays(uchar i)//短延时
{
while(i--);
}
#endif
6.3.3 LCD1602驱动程序
#ifndef LCD1602
#define LCD1602
#include"Delay.h"
/**
展开阅读全文