基于单片机数字控温器实验报告.docx
- 文档编号:26246864
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:19
- 大小:146.56KB
基于单片机数字控温器实验报告.docx
《基于单片机数字控温器实验报告.docx》由会员分享,可在线阅读,更多相关《基于单片机数字控温器实验报告.docx(19页珍藏版)》请在冰豆网上搜索。
基于单片机数字控温器实验报告
重庆交通大学
课外实践报告
题目:
基于单片机数字控温器
姓名:
罗杰
专业:
电子信息工程
班级:
2011级4班
学号:
631106020405
指导老师:
王淑良
设计目的--------------------------------------------------------------------------1
设计要求--------------------------------------------------------------------------1
设计方案---------------------------------------------1
系统工作原理--------------------------------------------------------------------2
各部分电路的设计和芯片的结构功能作用--------------------------------2
单片机程序(C语言程序)------------------------------------------------------11
设计总结-------------------------------------------20
一、设计目的
1、系统地运用已学的理论知识解决实际问题的能力和查阅资料的能力。
培养一定的自学能力和独立分析问题、解决问题的能力,和团队协作能力,能通过独立思考、查阅工具书、参考文献,寻找解决方案。
2、能设计、安装和调试数显温度测试控制系统,并能利用模拟和数字电路和单片机的知识分析和解决设计、安装和调试中遇到的实际问题。
3、能熟练的设计并良好的印制PCB电路板。
4、对温度的控制要求尽量的高效,精确。
二、设计要求
1、
(1)温度控制范围为30度~100度之间;
(2)可键盘设置控制温度值,并显示;
(3)数字显示水的实际温度;
(4)设置温度控制值和检测值之间的误差在±1度;
2、发挥部分
(1)设计温度报警电路;
(2)升温或降温在5—10分钟之内完成;
三、设计方案
方案:
用控制器MCS-51系列单片机和数字传感器DS18B20来进行控制,并用七段数码显示管来显示温度,在程序中来设置温度的上下限,当温度超出上下限时,由单片机发出控制信号,外界控制电路接收信号并作相应的响应来调节温度。
此为全控制型,最为简便。
四、系统工作原理
1、系统的总体结构图如下:
2、工作原理
首先,由数字温度传感器感受出温度并将其数字信号传递给单片机的接口部分,单片机接收到信号后,对其进行处理(由导入单片机的程序设置处理过程及处理结果),并将处理后的结果通过端口传递给七段数码显示管让其显示出当前的温度值。
如果温度高于或者是低于所设置的温度上下限(上下限由程序进行设置),单片机以端口就向蜂鸣器和外接的控制装置发出信号,蜂鸣器接收信号后开始报警,外接控制装置接收信号后分析是上限信号还是下限信号(可调节),分析后控制升温或者是降温。
当温度恢复至所控制的范围后,数字温度传感器感受温度后将数字信号传递给单片机,单片机处理后则停止向蜂鸣器和外接的控制装置发信号,蜂鸣器和控制装置就停止动作等待下一次信号的到来。
此过程即完成了温度的测量和两点间的温度控制工作,完全自动控制,方便快捷(直流电机的旋转来模拟升温和降温)。
五、各部分电路的设计和芯片的结构功能作用
1、单片机STC89C52RC
(1)如上图所示,单片机能正常工作的条件,复位电路,和晶振电路,其中当按下按键开关REST,此时当处于震荡器工作的单片机RESET出现连续两个高电平,可使单片机回到初始状态。
为了提高系统的抗干扰能力,在电源的一端接上一个小电容。
(2)外接晶振引脚XTAL1和XTAL2
XTAL1(19脚)和XTAL2(18脚):
接外部石英晶振的一端,在单片机的内部,它是一个反相放大器的输入端,这个放大器构成了片内振荡器。
2、数字温度传感器DS18B20介绍
(1)DS18B20基本介绍
DS18B20是美国DALLAS半导体公司继DS1820之后最新推出的一种改进型智能温度传感器。
与传统的热敏电阻相比,他能够直接读出被测温度并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。
可以分别在93.75ms和750ms内完成9位和12位的数字量,并且从DS18B20读出的信息或写入DS18B20的信息仅需要一根口线(单线接口)读写,温度变换功率来源于数据总线,总线本身也可以向所挂接的DS18B20供电,而无需额外电源。
因而使用DS18B20可使系统结构更趋简单,可靠性更高。
(2)DS18B20简介
(1)独特的单线接口方式:
DS18B20与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。
(2)在使用中不需要任何外围元件。
(3)可用数据线供电,电压范围:
3.0"5.5V。
(4)测温范围:
-55~125℃。
固有测温分辨率为0.5℃。
(5)通过编程可实现9"12位的数字读数方式。
(6)用户可自设定非易失性的报警上下限值。
(7)支持多点组网功能,多个DS18B20可以并联在惟一的三线上,实现多点测温。
(8)负压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作。
(3)DS18B20的工作时序
DS18B20的工作时序包括初始化时序、写时序和读时序。
(1)初始化:
单片机将数据线的电平拉低480~960us后释放,等待15~60us,单总线器件即可输出一持续60~240us的低电平(存在脉冲)单片机收到此应答后即可进行操作。
(2)写时序:
当主机将数据线的电平从高拉到低时,形成写时序,有“0”和写“1”两种时序。
写时序开始后,DS18B20在15us~60us期间从数据线上采样。
如果采样到低电平,则向DS18B20写“0”;如果采样到高电平,则向DS18B20写“1”。
两个独立的时序间至少需要1us的恢复时间(拉高总线电平)。
(3)读时序:
当主机从DS18b20读取数时,产生时序。
此时,主机将数据线的电平从高拉到低使读时序被初始化。
如果此后15us内,主机总线上采样到低电平,则DS18B20读“0”;如果此后15us内,主机在总线上采样到高电平,则DS18B20读“1”。
(3)DS18B20的各个引脚与单片机连接图
5、七段数码显示管
七段数码显示管用于显示所测量的温度值,如下图所示:
此数码管的位选段由P2.0~P2.4进行控制选通,段选端则有P1八位口进行控制,利用其动态扫描,来显示四位不同的数字温度。
6、温度控制部分和报警蜂鸣器的连接电路
(1)蜂鸣器的工作,当温度高于上限温度或是低于下限温度时,单片机控制器的P0.7口的就输出高低电平的波形而使三极管集电极和积集导通从而让蜂鸣器发出报警的声音。
而当温度被控制在一个范围内时,单片机的P0.7口就发停止发出波形,而使蜂鸣器停止报警。
(2)外接温度控制部分,此部分为一个继电器,当温度低于下限温度时,单片机的P2.6口就发出低电平,从而是继电器的控制端通电导通,当继电器导通时,继电器的常闭触点变为常开触点,从而使C和B点连接导通,使加热装置通电,对被加热物体加热,使温度升高。
当温度高于上限温度时,单片机的P2.6口就停止发出低电平,三极管关短导致继电器控制端也关断,使常开触点变为常闭触点,C和A之间导通,使外部制冷装置工作从而使温度降低致所规定的范围。
7、HK4001继电器S3-5工作原理
(1)继电器是一种电子控制器件,它具有控制系统(又称输入回路)和被控制系统(又称输出回路),通常应用于自动控制电路中,它实际上是用较小的电流去控制较大电流的一种“自动开关”。
故在电路中起着自动调节、安全保护、转换电路等作用。
(2)电磁继电器一般由电磁铁,衔铁,弹簧片,触点等组成的,其工作电路由低压控制电路和高压工作电路两部分构成。
只要在线圈两端加上一定的电压,线圈中就会流过一定的电流,从而产生电磁效应,衔铁就会在电磁力吸引的作用下克服返回弹簧的拉力吸向铁芯,从而带动衔铁的动触点与静触点(常开触点)吸合。
当线圈断电后,电磁的吸力也随之消失,衔铁就会在弹簧的反作用力返回原来的位置,使动触点与原来的静触点(常闭触点)释放。
这样吸合、释放,从而达到了在电路中的导通、切断的目的。
对于继电器的“常开、常闭”触点,可以这样来区分:
继电器线圈未通电时处于断开状态的静触点,称为“常开触点”;处于接通状态的静触点称为“常闭触点”。
8、上下限温度调节按钮电路
按钮S13控制上限温度的选择,当按下S13按钮时,数码管上显示上限温度值。
按钮S14控制着下限温度的选择,当按下S14时,数码管显示下限温度值。
S15为温度上下限设置增加键,S16为上下限温度设置减少键。
通过此四个按键可以任意设置上下限温度。
六、单片机程序如下(C语言程序)
温度可控恒温箱程序
/**************************************************************/
DS18B20的读写程序
最大转化时间750微秒,显示温度-55.0到+99.9度,显示精度
为0.1度,显示采用3位LED共阳显示测温值
P1口为段码输入,晶振为12MHZ
/**************************************************************/
#include
#include
#defineuintunsignedint
#defineucharunsignedchar
uinta=250;
uintb=200;
sbitDQ=P3^0;//温度输入口
sbitP20=P2^0;
sbitP21=P2^1;
sbitP22=P2^2;
sbitP23=P2^3;
sbitP17=P1^7;
sbitP25=P2^5;
sbitP26=P2^6;
sbitS1=P3^4;
sbitS2=P3^5;
sbitS3=P3^6;
sbitS4=P3^7;
unsignedinth,n=0;
unsignedinttemp;
/*ucharcodetable[]={0x40,0xf9,0xa4,
0xb0,0x99,0x92,0x82,0xf8,0x80,
0x90,0x88,0x80,0xc6,0xa1,0x86,
0x8e};*/
//温度小数部分用查表法
unsignedchardatatemp_data[2]={0x00,0x00};//读出温度暂放
unsignedchardatadisplay[5]={0x00,0x00,0x00,0x00,0x00};//显示单元数据,共4个数据和一个运算暂用
//11us延时函数
voiddelay(unsignedintt)
{
for(;t>0;t--);
}
//
//延时882us
voiddelay882us(void)
{
unsignedchari;
for(i=0;i<255;i++);
{
_nop_();
}
}
//消震除延时程序
voiddelay1(uintz)
{
intx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
//DS18B20复位函数
ow_reset(void)
{
charpresence=1;
while(presence)
{
while(presence)
{
DQ=1;_nop_();_nop_();//从高拉倒低
DQ=0;
delay(50);//550us
DQ=1;
delay(6);//66us
presence=DQ;//presence=0复位成功,继续下一步
}
delay(45);//延时500us
presence=~DQ;
}
DQ=1;//拉高电平
}
//DS18B20写命令函数
//向1-WIRE总线上写1个字节
voidwrite_byte(unsignedcharval)
{
unsignedchari;
for(i=8;i>0;i--)
{
DQ=1;_nop_();_nop_();//从高拉倒低
DQ=0;_nop_();_nop_();_nop_();_nop_();//5us
DQ=val&0x01;//最低位移出
delay(6);//66us
val=val/2;//右移1位
}
DQ=1;
delay
(1);
}
//DS18B20读1字节函数
//从总线上取1个字节
unsignedcharread_byte(void)
{
unsignedchari;
unsignedcharvalue=0;
for(i=8;i>0;i--)
{
DQ=1;_nop_();_nop_();
value>>=1;
DQ=0;_nop_();_nop_();_nop_();_nop_();//4us
DQ=1;_nop_();_nop_();_nop_();_nop_();//4us
if(DQ)value|=0x80;
delay(6);//66us
}
DQ=1;
return(value);
}
//读出温度函数
unsignedintread_temp()
{
ow_reset();//总线复位
delay(200);
write_byte(0xcc);//发命令
write_byte(0x44);//发转换命令
ow_reset();
delay
(1);
write_byte(0xcc);//发命令
write_byte(0xbe);
temp_data[0]=read_byte();//读温度值的低字节
temp_data[1]=read_byte();//读温度值的高字节
temp=temp_data[1];
temp<<=8;
temp=temp|temp_data[0];//两字节合成一个整型变量。
if(temp>6348)
{
temp=65536-temp;
n=1;
}
display[4]=temp&0x0f;//取小数部分的值
temp=temp>>4;//取中间八位,即整数部分的值
temp=temp*10+display[4];
returntemp;//返回温度值
}
//数码管扫描
voidx8led(unsignedlongddd)
{
unsignedcharl[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x7f};
unsignedcharxx[4]={0,0,0,0};
xx[0]=ddd%10;
xx[2]=ddd/10%10;
xx[1]=ddd/100%10;
xx[3]=ddd/1000%10;
P20=0;
P1=l[xx[0]];
delay882us();
P20=1;
P21=0;
P1=l[xx[1]];
delay882us();
P21=1;
P22=0;
P1=l[xx[2]];
P17=0;
delay882us();
P22=1;
P23=0;
P1=l[xx[3]];
delay882us();
P23=1;
}
voidbaojing()
{
BEEP=~BEEP;
delay(40);
}
//主函数
voidmain()
{
P0=0xff;//初始化端口
P2=0xff;
for(h=0;h<4;h++)
{display[h]=0};
ow_reset();//开机先转换一次
write_byte(0xcc);//SkipROM
write_byte(0x44);//发转换命令
for(h=0;h<20;h++)//开机显示"000"
{x8led(0)};
while
(1)
{
temp=read_temp();//处理温度数
if(S2==0)
{
delay1(150);
break;
}
}
}
if(b>=a)//当上限温度低于下限温度时报警
{
baojing();
}
if(temp>a)
{
baojing();
P25=0;
}
elseif(temp
{
baojing();
P26=0;
}
x8led(temp);//显示温度值
}
}
七、整体电路图
见附图
八、设计进程及设计总结
1、设计进程
由于前期准备不足,和个人的认真程度不够。
造成PCB封装没有按照给定的元器件直板,经多次修改才有比较完整较理想的PCB电路图。
但因为近日没有找到老师领取铜板,现在还没有印制。
现在硬件的设计和软件的仿真都测试完成。
2、设计过程中的收获
怀着对电子设计的浓厚兴趣,我们充满信心的参加了这次培训,通过这段时间的培训,不仅使我们收获了很多以前不知道的知识,同时,在学习的过程中,也使我们收获了很多的快乐。
这段时间,我们又重新看了一遍Protel2004的教学视频,使我们对这个软件又有了更深一步的了解,现在我们已经熟练掌握了用这个软件绘图,布线,制作元件封装,印制电路板等。
我们还看了郭天祥的单片机教学视频,对用C语言编程有了更深刻的认识和理解,并熟悉Multisim电路设计仿真软件。
在学习的过程中,我们也曾遇到过很多难题,但都经过我们的不断努力克服掉了。
在基础学习阶段,我们从基础开始学习,把以前学习的模电、数电、单片机、Protel等课程从新复习了一遍。
同时我们也注重个人能力的提高和培养,有武卫星和姜迎春同学注重学习程序的编译,王伟勋同学负责硬件的开发学习。
这段时间让我们认识到了团队合作,自主学习,实践创新,吃苦耐劳的的重要性。
我们会不断的努力学习,提高自己。
附图1:
PCB印制电路板
附图2:
原理图
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 数字 控温器 实验 报告