半导体温控系统实验 创新自1101班 孙建建111119051612.docx
《半导体温控系统实验 创新自1101班 孙建建111119051612.docx》由会员分享,可在线阅读,更多相关《半导体温控系统实验 创新自1101班 孙建建111119051612.docx(16页珍藏版)》请在冰豆网上搜索。
半导体温控系统实验创新自1101班孙建建111119051612
实验报告
院系:
控制与计算机工程学院
实验名称:
基于单片机控制的半导体温控实验系统
指导教师:
陆会明
学生姓名:
孙建建
学号:
1111190516
班级:
创新自1101班
日期:
2015年1月19日
一、实验简介
本实验指导书旨在帮助学生掌握基于半导体的温度控制系统基本原理及系统设计方案实现,同时,通过控制器程序的设计实验,帮助学生深刻理解控制器在一个自动控制系统中的作用。
如图1-1所示一个常见的自动控制系统,主要包括了控制器、执行器、被控对象、反馈信号。
控制器的实质是根据反馈值与给定值计算得到偏差,按照控制器运算规律进行运算,其运算结果用以输出驱动执行器。
图1-1自动控制系统
与图1-1相对应的半导体温度控制系统如图1-2所示。
图1-2半导体温度控制系统
半导体温度控制系统中:
外围电路:
主要包括数码管显示,温度给定值设置,手自动控制方式切换;
控制器:
由单片机设计程序实现;
执行器:
由半导体制冷/热执行器实现;
被控对象:
密封箱体;
反馈信号:
温度传感器采集信号;
数码管:
显示反馈温度、设定温度;
温度设置:
通过按键设定给定值;
手自动切换:
按键实现手动、自动控制模式切换;
二、控制系统介绍
下面通过介绍半导体温度控制系统,掌握自动控制系统的控制过程。
如图2-1-1所示,半导体温度控制系统结构图。
图2-1-1半导体温度控制系统结构图
如图2-1-1所示,一个完整的自动控制系统,控制器程序由单片机实现,执行器对应半导体制冷/热,反馈信号对应温度传感器信号,被控对象对应密封箱体。
半导体制冷/热执行器内部电流方向变换时,执行器可以实现制热面与制冷面的切换,从而半导体温度控制系统通过半导体的制热与制冷配合,达到控制温度的目的。
半导体温度控制系统开发板电路与外围电路连接示意图,如图2-1-2所示。
图2-1-2半导体温度控制系统连接图
与图2-1-2所示控制系统相对应的硬件连接实体图,如图2-2所示。
图2-2半导体温度控制系统硬件连接图
半导体温度控制系统工作过程:
温度传感器采集被控对象中的温度参数传入单片机,单片机内部经过运算得到温度传感信号与给定值的偏差,偏差作为控制器的输入,若偏差大于0,控制器运算输出一个合适的制冷控制信号,通过单片机一个引脚输出,经过驱动器的作用,控制半导体制冷;若偏差小于0,控制器运算输出一个合适的制热控制信号,通过单片机另一个引脚输出(此时引脚输出信号时,半导体制冷/热执行器内部电流方向切换),经过驱动器的作用,控制半导体制热。
控制过程流程图如图2-3所示。
图2-3半导体控制系统控制过程
简单的理解,控制器就是一个自动控制系统的核心,温度反馈信号与给定值信号的偏差是它的输入量,控制器运算输出值是它的控制信号输出量。
如图2-4所示。
图2-4控制器信号流向
常规的PID控制器控制规律传递函数:
,其中Kp、Ti、Td分别为增益、积分时间和微分时间。
对于不同的被控对象,三个参数的选择大小是不同的。
偏差信号就是经过上述控制规律的运算,得到一个合适的控制量,最终输出驱动执行器控制被控对象。
三、数码管基础知识
3.1数码管
本次开发板使用的8位数码管,属于共阴极数码管,如图3-1所示。
图3-1共阴极数码管
由图3-1所示,数码管分为8段,a-g控制数码管的组合方式,可以控制显示数字0-9,dp为小数点。
如控制数码管b,c点亮时候,数码管显示数字1。
8段数码管a,b,c,d,e,f,dp分别连接单片机的P0口的8个输出引脚,通过两个锁存器的作用,控制8位数码管的点亮。
其中一个锁存器控制数码管的位选,另一个锁存器控制数码管的段选。
位选即选择8位数码管的哪一位被点亮,段选即选择被点亮的数码管显示哪个数字。
四、实验任务
1.实验目的
(1)熟悉并掌握基于半导体的温度控制系统原理及设计方法
(2)掌握单片机实现控制器(PID)程序的设计方法
2.实验要求
本次实验具体要求如下:
(1)掌握基于半导体的温度控制系统原理及设计实现方案
(2)通过单片机完成控制器程序的设计及实现
(3)通过按键实现控制器给定值的调整
(4)实现数码管显示控制器的给定输入值与输出值
3.实验器材
本次实验,实验器材包括:
51单片机开发板、STC89C52RC单片机、晶振、3V电池、USB转串口数据线、开发板电源线、温度传感器、半导体制冷/热执行器、驱动器。
4.实验准备
(1)单片机开发板的电源供电,有DC-5VPOWER,USB-POWER两种,两种方式选择一种即可,如图4-1所示(本实验选择USB供电方式)。
图4-1单片机开发板电源供电
5.实验步骤
(1)硬件电路连接
本次实验基于半导体温度控制系统,完整的硬件连接结构图如图4-9所示。
本次实验主要研究通过单片机完成控制器程序设计,掌握半导体温度控制系统的设计原理与实现方案,不涉及温度传感器电路和驱动电路、执行器的设计。
开发板已经准备完成,将晶振、3V电池、USB转串口线、USB供电线(或5V电源)连接完成即可。
图4-9半导体温度控制系统连接结构图
STC89C52RC单片机缺口方向朝数码管,切勿插反;
晶振:
开发板“晶振”二字上方,只插两侧的两个孔,中间留空;
串口线:
本次实验提供USB转串口线。
串口线USB口连接计算机USB口,串口线九针串口连接单片机开发板串口。
(前提是完成实验准备
(2)中USB转串口驱动安装)
电池:
安装3V电池,供时钟芯片保存信息;
独立按键,S4增加给定值,S5减少给定值;
开发板电源:
USB直接供电或5V直流电源。
电源开关不要打开,在程序下载工具下载程序至单片机之后才可以打开。
(开关处于弹起状态为打开)
(2)KeiluVision3设计控制器程序
KeiluVision3是开发单片机程序的编译器:
KeiluVision3编译器工程建立、设置,文件建立的工作完成后,下面可以在图4-21所示窗口设计编写控制器程序。
图4-21
程序代码输入完成后,通过编译查找问题。
点击主界面“工程”-“建立所有目标文件”,或者使用快捷按钮,如图4-22红色标记所示。
图4-22
编译成功后,使用(附件/STC_ISP程序下载工具/stc-ispv391/STC_ISP_V391.exe)程序下载工具,将HEX文件下载至单片机。
(3)程序调试
STC_ISP程序下载工具将HEX文件下载至单片机后,打开单片机开发板电源,通过按键S4,S5调节控制器给定值,观察数码管中给定值与控制器输出值的变化。
程序附录:
#include
#include
#include<51hei.H>
#defineuintunsignedint
#defineucharunsignedchar
sbitdula=P2^6;
sbitwela=P2^7;
sbitkey1=P3^6;
sbitkey2=P3^7;
sbitleds=P1^4;
ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
voiddelaygeiding(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=10;y>0;y--);
}
voiddisplayset(uinta)
{
dula=0;
P0=table[a];
dula=1;
dula=0;
wela=0;
P0=0xfe;
wela=1;
wela=0;
delaygeiding(50);
}
voiddisplayback(uintb)
{
dula=0;
P0=table[b];
dula=1;
dula=0;
wela=0;
P0=0x7f;
wela=1;
wela=0;
delaygeiding(50);
}
voiddisplayback2(uintb)
{
dula=0;
P0=table[b];
dula=1;
dula=0;
wela=0;
P0=0xbf;
wela=1;
wela=0;
delaygeiding(50);
}
voiddisplayback3(uintb)
{
dula=0;
P0=table[b];
dula=1;
dula=0;
wela=0;
P0=0xdf;
wela=1;
wela=0;
delaygeiding(50);
}
voiddisplayset1(uintb)
{
dula=0;
P0=table[b];
dula=1;
dula=0;
wela=0;
P0=0xfd;
wela=1;
wela=0;
delaygeiding(50);
}
voidmain()
{
ucharm,n,k,l,s1,s10;
uintierror;
uintproportion,integral,derivative;
uintlasterror1,lasterror2,out=0,dout;
m=1;
n=1;
k=0;l=0;
lasterror1=1;
lasterror2=0;
proportion=3;
integral=1;
derivative=1;
leds=1;
while
(1)
{
if(key1==0)
{
delaygeiding(10);
if(key1==0)
{
m++;
lasterror2=lasterror1;
lasterror1=ierror;
ierror=m;
dout=proportion*(ierror-lasterror1+integral*ierror+derivative*(ierror-2*lasterror1+lasterror2));
out+=dout;
l=out/100;
k=out%100/10;
n=out%100%10;//增量式PID
}
while(!
key1);
}
if(key2==0&&m!
=0)
{
delaygeiding(10);
if(key2==0)
{
m--;
lasterror2=lasterror1;
lasterror1=ierror;
ierror=m;
dout=proportion*(ierror-lasterror1+integral*ierror+derivative*(ierror-2*lasterror1+lasterror2));
out+=dout;
l=out/100;
k=out%100/10;
n=out%100%10;//增量式PID
}
while(!
key2);
}
s1=m%10;
s10=m/10;
displayset(s10);
displayset1(s1);
displayback(n);
displayback2(k);
displayback3(l);
delaygeiding(10);
}
}
实验结论
本次课设程序采用增量式的PID,数码管输入显示为两位,输出显示为三位。
且考虑到本程序输入输出都是unint型的变量,故增加判断,当输入为零时,不能减小输入量。
程序运行结果如下: