自动控制原理水温控制系统实验报告.docx
《自动控制原理水温控制系统实验报告.docx》由会员分享,可在线阅读,更多相关《自动控制原理水温控制系统实验报告.docx(38页珍藏版)》请在冰豆网上搜索。
![自动控制原理水温控制系统实验报告.docx](https://file1.bdocx.com/fileroot1/2023-2/2/6f3f6ce9-1281-44a3-bb6f-e6ca76ba3903/6f3f6ce9-1281-44a3-bb6f-e6ca76ba39031.gif)
自动控制原理水温控制系统实验报告
恒温控制系统
设计报告
学院:
电子信息学院
班级:
12级电子信息工程
指导老师:
xxx
姓名:
zzz
学号:
1228******
前言
水温控制无论是在工业生产中,还是在日常生活中都起着非常重要的作用,过低的温度或过高的温度都会使水资源失去应有的作用,从而造成水资源的巨大浪费。
为了保证生产过程正常安全地进行,提高产品的质量和数量,以及减轻工人的劳动强度、节约能源,要求对水温进监测、显示、控制,使之达到工艺标准,满足需要。
由于电子行业的迅猛发展,计算机技术和传感器技术的不断改进,而且计算机和传感器的价格也日益降低,可靠性逐步提高,用信息技术来实现水温控制并提高控制的精确度不仅是可以达到的而且是容易实现的。
其发展必将带来新一轮的工业化的革命和社会发展的飞跃。
在计算机没有发明之前,这些控制都是我们难以想象的。
而当今,随着电子行业的迅猛发展,计算机技术和传感器技术的不断改进,而且计算机和传感器的价格也日益降低,可靠性逐步提高,用信息技术来实现水温控制并提高控制的精确度不仅是可以达到的而且是容易实现的。
用高新技术来解决工业生产问题, 排除生活用水问题实施对水温的控制已成为我们电子行业的任务,以此来加强工业化建设,提高人民的生活水平。
采用PID算法进行温度控制,它具有控制精度高,能够克服容量滞后的特点,特别适用于负荷变化大、容量滞后较大、控制品质要求又很高的控制系统。
因此,我们在此基础上运用PID控制器方案制作温度控制器。
前言
摘要………………………………………………………………3
第1章设计方案论证……………………………………….3
1.1主控芯片的选择………………………………………2
1.2温度控制模块……………………………….…………3
1.3温度采集模块………………………………….………4
1.4温度显示模块……………………………..……………4
第2章系统设计…………………………………….………..5
2.1总体方案设计………………………………..…………5
2.2硬件电路设计…………………………………..………5
2.2.1stc89c52最小系统模块………...…………..5
2.2.2温度控制模块…………………………….…….6
2.2.3温度采集模块…………………………………..7
2.2.4温度显示模块…………………………………..8
2.2.5键盘输入模块………………………….……….9
2.3软件设计…………………………………..…………...10
2.3.1程序流程图……………………………...…….10
2.3.2PWM输出程序设计…………………………11
2.3.3PID程序设计……………………………...…..11
2.3.4DS18B20温度采集程序设计………...…..12
2.3.5数码管显示程序设计………………...……...13
2.3.6独立按键扫描程序设计…………….…….…15
第3章系统测试………………………………………….….17
3.1测试数据记录……………………………………….…17
3.2数据分析与结论……………………………………....18
第4章总结……………………………………………….…..18
参考文献…………………………………………………..…….19
附录…………………………………………………………..…..19
附录1主要元器件明细表
附录2仪器设备清单
附录3程序设计
摘要:
本设计基于STC89C52RC单片机水温测量及控制系统的设计。
系统硬件部分由单片机电路、温度采集电路、键盘电路、LED显示电路、MOS管控制电路等组成。
本系统采用数字式温度传感器DS18B20作为温度传感器,简易实用,方便拓展。
软件设计中由两个定时器产生一个PWM波,并通过PID控制PWM波的占空比从而控制MOS管的通断时间以控制加热功率。
本系统可实现水温的动态平衡,稳态温差0.1摄氏度。
关键词:
STC89C52占空比PID
第1章设计方案论证
1.1主控芯片的选择
方案一:
STC89C52RC
STC89C52RC单片机是宏晶科技推出的新一代高速/低功耗/超强抗干扰的单片机,指令代码完全兼容传统8051单片机,STC89C52为8位通用微处理器,采用工业标准的C51内核。
内部含有两个16位定时器模块,两个外部中断,8k字节flash闪速存储器,256字节RAM,支持位操作指令
方案二:
MSP430F149
Msp430f149是TI公司推出的超低功耗处理器,工作电压3.6V~1.8V,正常工作模式280μA@1MHz,2.2V,待机模式1.6μA,RAM数据保存的掉电模式下0.1μA。
五级节电模式。
内部含有2个16位计数器,16个外部中断,60k字节flash闪速存储器,2k字节RAM。
由于温度具有很强的滞后性,所以对处理器的速度要求不高;又因为单片机功耗与加热功耗相比非常小,所以我们选择操作简单,价格便宜的STC89C52RC单片机作为主控芯片。
1.2温度控制模块
方案一:
采用可控硅来控制加热器有效功率。
可控硅是一种半控器件,应用于交流电的功率控制有两种形式:
控制导通的交流周期数达到控制功率的目的;控制导通角的控制交流功率。
由交流过零检测电路输出方波经适当延时控制双向可控硅的导通角,延时时间即移相偏移量由温度误差计算得到。
可以实现对交流电单个周期有效值周期性控制,保证系统的动态性能指标。
该方案电路稍复杂,需使用光耦合驱动芯片以及变压器等器件。
但该方案可以实现功率的连续调节,因此反应速度快,控制精度高。
方案二:
采用继电器控制。
使用继电器可以很容易地实现通过较高的电压和电流,在正常条件下,工作十分可靠。
继电器无需外加光耦,自身即可实现电气隔离。
这种电路无法精确实现电热丝功率控制,电热丝只能工作在最大功率或零功率,对控制精度将造成影响。
但可以由多路加热丝组成功率控制,由单片机对温差的处理实现分级功率控制提高系统动态性能。
方案三:
采用MOS管控制
MOS管(FieldEffectTransistor缩写(FET))简称场效应管。
由多数载流子参与导电,也称为单极型晶体管。
它属于电压控制型半导体器件。
具有输入电阻高(10^8~10^9Ω)、噪声小、功耗低、动态范围大、易于集成、没有二次击穿现象、安全工作区域宽等优点,场效应管能在很小电流和很低电压的条件下工作,而且它的制造工艺可以很方便地把很多场效应管集成在一块硅片上,因此场效应管在大规模集成电路中得到了广泛的应用。
可控硅电路过载能力小,尤其是短路时必须要由快速熔短器来保护,安全性能差;继电器无法精确实现电热丝功率控制;所以我们选择方案三
1.3温度采集模块
方案一:
选用Harris公司生产的采用激光修正的精密集成温度传感器AD590。
AD590的岑温范围是-55~+150℃,最大非线性误差为±0.3℃,响应时间为20us,重复性误差低至±0.05℃,功耗低,仅为2mW。
方案二:
采用热敏电阻。
选用此类元件的优点价格便宜,但由于热敏电阻的非线性特性会带来较大的误差。
方案三:
使用带有A/D(模数转换)单片集成的DS18B20传感器。
DS18B20数字温度计是DALLAS公司生产的即单总线器件,无需其他外加电路,直接输出数字量。
可直接与单片机通信,读取测温数据。
具有线路简单,性能稳定体积小的特点。
比较以上方案,结合设计精度要求最小区分度为1℃,所以选择方案三。
1.4温度显示模块
方案一:
采用8个LED八段数码管分别显示温度的十位、个位和小数位。
数码管具有低能耗,低损耗,寿命长,耐老化,对外界环境要求低。
但LED八度数码管引脚排列不规则,动态显示时要加驱动电路,硬件电路复杂。
方案二:
采用带有字库的12864液晶显示屏。
12864液晶显示屏(LCD)具有功耗低、轻薄短小无辐射危险,平面显示及影像稳定,不闪烁,可视面积大,画面效果好,抗干扰能力强。
同时,12864带有字库,编程容易,且具有多种功能:
光标显示、画面移位、睡眠模式,增加可读性,降低功耗。
由于要显示只有设定和测量的两个温度值,8位数码管足够使用,所以我们选择方案一。
第2章系统设计
2.1总体方案设计
2.2硬件电路设计
2.2.1stc89c52最小系统模块
STC89C52RC单片机是宏晶科技推出的新一代高速/低功耗/超强抗干扰的单片机,指令代码完全兼容传统8051单片机,12时钟/机器周期和6时钟/机器周期可以任意选择。
主要特性如下:
1、兼容MCS51指令系统;
2、8kB可反复擦写(大于1000次)FlashROM;
3、32个双向I/O口;
4、256x8bit内部RAM;
5、3个16位可编程定时/计数器中断;
6、时钟频率0-24MHz;
7、2个串行中断,可编程UART串行通道;
8、2个外部中断源,共8个中断源;
9、2个读写中断口线,3级加密位;
10、低功耗空闲和掉电模式,软件设置睡眠和唤醒功能;
11、有PDIP、PQFP、TQFP及PLCC等几种封装形式,以适应不同产品的需求。
AT89C52为8位通用微处理器,采用工业标准的C51内核。
主要管脚有:
XTAL1(19脚)和XTAL2(18脚)为振荡器输入输出端口,外接12MHz晶振。
RST/Vpd(9脚)为复位输入端口,外接电阻电容组成的复位电路。
VCC(40脚)和VSS(20脚)为供电端口,分别接+5V电源的正负端。
P0端口(第39-32脚):
双向信号,多功能端口。
它是八位漏极开路的双向I/O端口;
在拓展外部总线时,分时作为低八位总线和八位双向数据总线。
P0端口可驱动八个LSTTL负载。
P0口漏极开路,即高阻状态,适用于输入/输出,可独立输入/输出低电平和高阻状态,若需要输出高电平,则需使用外部上拉电阻。
P1端口(第1-8脚):
双向信号,具有内部上拉电阻的8位准双向I/O端口,可驱动四个LSTTL负载。
P2端口(第21-28脚):
双向信号,多功能端口,具有内部上拉电路的8位准双向I/O端口;在拓展外部总线时,用作高八位地址总线,可驱动四个LSTTL负载。
P3端口(第10-17脚):
双向信号,多功能端口,具有内部上拉电路的8位准双向I/O端口,可驱动四个LSTTL负载;该端口的每一位都可以作为其他功能模块的输入/输出及控制引脚使用。
图2.2.1STC89C52RC最小系统
2.2.2温度控制模块
此部分电路主要由MOS管控制。
MOS管源极接地;漏极接一个50W,10欧姆的加热电阻接15V直流电;栅极接单片机PWM波输出端口。
单片机通过输出PWM波的占空比控制MOS管的闭合时间来控制加热功率;控制部分电路图如图2.2.2所示:
图2.2.2温度控制电路
2.2.3温度采集模块
温度采集模块选用高度集成芯片DS18B20。
DS18B20为单总线结构,总共有三个引脚VCC、GND和信号线。
电路连接简单方便,只需格外接少量的电阻电容。
硬件电路图如图2.2.3所示:
图2.2.3DS18B20硬件连接图
2.2.4温度显示模块
温度显示模块采用8个八位共阴极数码管,通过8位锁存器MC74HC573完成段选和位选,节省IO口的使用。
硬件连接电路图如图2.2.4所示:
图2.2.4数码管显示电路
2.2.5键盘输入模块
按键输入模块选用四个独立按键,通过独立按键扫描方式输入设定值。
硬件电路图如图2.2.5所示:
图2.2.5独立按键硬件连接图
2.3软件设计
2.3.1程序流程图
Yes
No
图2.3.1程序流程图
2.3.2PWM输出程序设计
本模块通过STC89C52RC两个定时器协调工作输出一个频率为50Hz,占空比可调的PWM波形,并通过P2.0口输出以控制MOS管。
其中定时器1初始值恒定为0xb800,精确定时0.02ms。
通过改变定时器0的初始值改变占空比的大小,程序每执行一个循环重新装载一次定时器0的初始值。
程序如下:
voidinit_time(void)
{
TMOD|=0X01;TMOD|=0X10;
TH1=0Xb8;TL1=0X00;
ET0=1;ET1=1;
EA=1;PT1=0;
PT0=0;TR1=1;
}
//定时器0中断服务函数
voidtime0(void)interrupt1//
{
PWM_OUT=0;
TR0=0;
}
//定时器1中断服务函数
voidtime1()interrupt3
{
TH1=0Xb8;
TL1=0X00;
PWM_OUT=1;
TH0=th0;
TL0=tl0;
TR0=1;
}
2.3.3PID程序设计
PID是比例(P)、积分(I)、微分(D)控制算法,计算公式为dout=kp*e+ki*se+kd*de;比例(P)、积分(I)、微分(D)控制算法各有作用:
比例,反应系统的基本(当前)偏差e(t),系数大,可以加快调节,减小误差,但过大的比例使系统稳定性下降,甚至造成系统不稳定;
积分,反应系统的累计偏差,使系统消除稳态误差,提高无差度,因为有误差,积分调节就进行,直至无误差;
微分,反映系统偏差信号的变化率e(t)-e(t-1),具有预见性,能预见偏差变化的趋势,产生超前的控制作用,在偏差还没有形成之前,已被微分调节作用消除,因此可以改善系统的动态性能。
但是微分对噪声干扰有放大作用,加强微分对系统抗干扰不利。
积分和微分都不能单独起作用,必须与比例控制配合。
PID算法程序如下:
voidpid(void)
{
floatt0,zkb;
uintt0_value;
floate=0,de=0,dout=0;
e=set_value-test_value;
se=se+e;
de=e-le;
dout=kp*e+ki*se+kd*de;
le=e;
zkb=15+dout;
if(zkb<2)
zkb=2;
elseif(zkb>80)
zkb=80;
t0=184.31*zkb;
t0=65535-t0;
t0_value=(uint)t0;
th0=(t0_value&0xff00)>>8;
tl0=(t0_value&0x00ff);
}
2.3.4DS18B20温度采集程序设计
DS18B20是单总线结构,最高精度0.0625摄氏度。
要读取温度时首先通过单总线向DS18B20发送跳过ROM指令,然后发送温度转换命令,等待温度转换完成后向DS18B20发送读取温度命令,然后就可以读取DS18B20的12位采样值。
程序如下:
//18b20温度转换与读温度操作函数
voidread_18b20()
{
shortwendu;
shorta;
shortb;
uintwd;
init_18b20();
display_value();
keyscan();
write_bites(0xcc);
write_bites(0x44);
delay_750ms();
init_18b20();
display_value();
keyscan();
write_bites(0xcc);
write_bites(0xbe);
display_value();
a=read_bites();
b=read_bites();
wendu=b*256+a;
test_value=wendu*0.0625;
wd=wendu*0.625;
value[3]=wd/100;
value[4]=wd/10%10;
value[5]=wd%10;
display_value();
}
2.3.5数码管显示程序设计
数码管显示程序采用8个共阴极数码管动态刷新模式进行,通过8位锁存器MC74HC573完成段选和位选,节省IO口的使用。
程序如下:
voiddisplay_value(void)
{
P0=sz[12];
DU=1;DU=0;
P0=0x7f;
WE=1;WE=0;
delay_ms
(1);
P0=sz[value[5]];
DU=1;DU=0;
P0=0xbf;
WE=1;WE=0;
delay_ms
(1);
P0=sz[value[4]]+0x80;
DU=1;DU=0;
P0=0xdf;
WE=1;WE=0;
delay_ms
(1);
P0=sz[value[3]];
DU=1;DU=0;
P0=0xef;
WE=1;WE=0;
delay_ms
(1);
P0=sz[12];
DU=1;DU=0;
P0=0xf7;
WE=1;WE=0;
delay_ms
(1);
P0=sz[value[2]];
DU=1;DU=0;
P0=0xfb;
WE=1;WE=0;
delay_ms
(1);
P0=sz[value[1]]+0x80;
DU=1;DU=0;
P0=0xfd;
WE=1;WE=0;
delay_ms
(1);
P0=sz[value[0]];
DU=1;DU=0;
P0=0xfe;
WE=1;WE=0;
delay_ms
(1);
}
2.3.6独立按键扫描程序设计
独立按键扫描程序采用4个独立按键不间断扫描方式进行,当独立按键按下后,对应IO口会变成低电平,消抖后通过判断对应IO口是否为低电平来判断按键是否按下。
四个按键中,key1的功能为设定温度整数部分-1,key2功能为设定温度整数部分+1,key3的功能为设定温度小数部分-1,key4功能为设定温度小数部分+1,程序设计如下:
voidkeyscan(void)
{
if(key4==0)
{
display_value();
if(key4==0)
{
while(!
key4)//等待按键松开
{
display_value();
}
if(value[1]==0)
{
value[1]=9;
value[0]--;
}
else
{
value[1]--;
}
set_value=value[0]*10+value[1]+value[2]*0.1;
}
}
if(key3==0)
{
display_value();
if(key3==0)
{
while(!
key3)
{
display_value();
}
if(value[1]==9)
{
value[1]=0;
value[0]++;
}
else
{
value[1]++;
}
set_value=value[0]*10+value[1]+value[2]*0.1;
}
}
if(key2==0)
{
display_value();
if(key2==0)
{
while(!
key2)
{
display_value();
}
if(value[2]==0)
{
value[2]=9;
if(value[1]==0)
{
value[0]--;
value[1]=9;
}
else
{
value[1]--;
}
}
else
{
value[2]--;
}
set_value=value[0]*10+value[1]+value[2]*0.1;
}
}
if(key1==0)
{
display_value();
if(key1==0)
{
while(!
key1)
{
display_value();
}
if(value[2]==9)
{
value[2]=0;
if(value[1]==9)
{
value[0]++;
value[1]=0;
}
else
{
value[1]++;
}
}
else
{
value[2]++;
}
set_value=value[0]*10+value[1]+value[2]*0.1;
}
}
}
第3章系统测试
3.1测试数据记录
初始温度:
38.5℃
设定温度:
44.7℃
加热电压:
15V
加热电阻:
10欧姆
全速加热功率:
19W
实验所测数据表格如表3.1所示:
时间t/分钟
0
1
2
3
4
5
6
7
8
9
10
测量温度/摄氏度
38.5
40.8
41.9
43
43.6
44.1
44.5
44.6
44.6
44.6
44.6
时间t/分钟
11
12
13
14
15
16
17
18
19
20
21
测量温度/摄氏度
44.6
44.6
44.6
44.6
44.6
44.6
44.6
44.6
44.6
44.6
44.6
表3.1时间、温度记录表
3.2数据分析与结论
由实验所测数据表格绘制如图3.2所示温度测量曲线图:
图3.2温度测量曲线图
由温度测量曲线图可以看出系统从设定温度38.5℃逐渐靠近设定温度44.7℃,并最终稳定在44.6℃不变。
当系统稳定在44.6℃时,输出占空比为40.5%,加热功率为9.6W。
另实验时观察输出占空比发现占空比在缓慢增加,当占空比缓慢增加到一定程度,系统将稳定在44.7℃。
在程序中可适当的增加PID中的积分参数I的大小以使温度更快的稳定在设定温度。
由温度测量曲线图可以看出本水温控制系统稳态误差为0.1℃,系统上升时间7分钟。
因此该水温控制系统很好的完成了设计要求。
第4章总结
本系统稳态误差小,超调量小,整体性能良好。
另外,系统还可以通过按键设置设定温度大小,设定温度和控制温度可精确到一位小数;通过数码管动态实时显示设定温度和当前测量温度,人机交互界面良好。
但设计也有