自动控制原理水温控制系统实验报告文档格式.docx
《自动控制原理水温控制系统实验报告文档格式.docx》由会员分享,可在线阅读,更多相关《自动控制原理水温控制系统实验报告文档格式.docx(38页珍藏版)》请在冰豆网上搜索。
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();
write_bites(0xbe);
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;
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]];
P0=0xbf;
delay_ms
(1);
P0=sz[value[4]]+0x80;
DU=0;
P0=0xdf;
P0=sz[value[3]];
P0=0xef;
P0=sz[12];
P0=0xf7;
P0=sz[value[2]];
P0=0xfb;
P0=sz[value[1]]+0x80;
P0=0xfd;
P0=sz[value[0]];
P0=0xfe;
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)
if(key3==0)
key3)
{
if(value[1]==9)
value[1]=0;
value[0]++;
value[1]++;
}
if(key2==0)
if(key2==0)
key2)
if(value[2]==0)
value[2]=9;
if(value[1]==0)
{
value[0]--;
value[1]=9;
else
value[1]--;
value[2]--;
if(key1==0)
if(key1==0)
key1)
if(value[2]==9)
value[2]=0;
if(value[1]==9)
value[0]++;
value[1]=0;
value[1]++;
}
value[2]++;
第3章系统测试
3.1测试数据记录
初始温度:
38.5℃
设定温度:
44.7℃
加热电压:
15V
加热电阻:
10欧姆
全速加热功率:
19W
实验所测数据表格如表3.1所示:
时间t/分钟
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
11
12
13
14
15
16
17
18
19
20
21
表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章总结
本系统稳态误差小,超调量小,整体性能良好。
另外,系统还可以通过按键设置设定温度大小,设定温度和控制温度可精确到一位小数;
通过数码管动态实时显示设定温度和当前测量温度,人机交互界面良好。
但设计也有