基于单片机的温度控制智能电风扇.docx
- 文档编号:29584700
- 上传时间:2023-07-24
- 格式:DOCX
- 页数:45
- 大小:337.32KB
基于单片机的温度控制智能电风扇.docx
《基于单片机的温度控制智能电风扇.docx》由会员分享,可在线阅读,更多相关《基于单片机的温度控制智能电风扇.docx(45页珍藏版)》请在冰豆网上搜索。
基于单片机的温度控制智能电风扇
摘要
风扇和空调的降温效果不同——空调有强大的制冷功能,可以快速有效地降低环境温度,但电风扇的风更温和,更加适合老人儿童和体质较弱的人使用;电风扇有价格优势,价格低廉而且相对省电,安装和使用都非常简单。
传统电风扇还是有许多地方应当进行改良的,最突出的缺点是它不能根据温度的变化适时调节风力大小,对于夜间温差大的地区,人们在夏夜使用电风扇时可能遇到这样的问题:
当凌晨降温的时候电风扇依然在工作,可是人们因为熟睡而无法察觉,既浪费电资源又容易引起感冒,传统的机械定时器虽然能够控制电风扇在工作一定后关闭,但定时范围有限,且无法对温度变化灵活处理。
本设计以AT89C51单片机为核心,通过温度传感器对环境温度进行数据采集,从而建立一个控制系统,使电风扇随温度的变化而自动变换档位,实现“温度高,风力大,温度低,风力弱”的性能。
另外,通过键盘控制面板,用户可以在一定范围内设置电风扇的最低工作温度,当温度低于所设置温度时,电风扇将自动关闭,当高于此温度时电风扇又将重新启动。
关键词:
单片机、程序控制、自动调温、智能调速
1设计任务
本设计以AT89C51单片机为核心,通过温度传感器对环境温度进行数据采集,从而建立一个控制系统,使电风扇随温度的变化而自动变换档位,实现“温度高,风力大,温度低,风力弱”的性能。
另外,通过键盘控制面板,用户可以在一定范围内设置电风扇的最低工作温度,当温度低于所设置温度时,电风扇将自动关闭,当高于此温度时电风扇又将重新启动。
1.1设计主要内容
本设计主要内容如下:
①风速设为从高到低5个档位,可由用户通过键盘手动设定。
②当温度每降低2℃则电风扇风速自动下降一个档位。
③当温度每升高2℃则电风扇风速自动上升一个档位。
④用户可设定电风扇最低工作温度,当低于该温度时,电风扇自动停转。
2总体设计方案
2.1.总体硬件设计
系统总体设计框图如图2.1所示
图2.1系统框图
对于单片机中央处理系统的方案设计,根据要求,我们可以选用AT89C51单片机作为中央处理器。
作为整个控制系统的核心,单片机内部已包含了定时器、程序存储器、数据存储器等硬件,其硬件能符合整个控制系统的要求,不需要外接其他存储器芯片和定时器件,方便地构成一个最小系统。
整个系统结构紧凑,抗干扰能力强,性价比高,是比较合适的方案。
本系统实现风扇的温度控制,需要有较高的温度变化分辨率和稳定可靠的换
档停机控制部件。
2.2芯片及主要器件选择
2.2.1控制核心的选择
采用8051单片机作为控制核心。
以软件编程的方法进行温度判断,并在
端口输出控制信号。
以单片机作为控制器,通过编写程序不但能将传感器感测到的
温度通过显示电路显示出来,而且用户能通过键盘接口,自由设置上下限动作温
度值,满足全方位的需求.并且通过程序判断温度具有极高的精准度,能精确把
握环境稳度的微小变化。
2.2.2温度传感器的选用
采用数字式集成温度传感器DS18B20作为感测温度的核心元件,直
接输出数字温度信号供单片机处理
2.2.3显示电路
采用液晶显示屏LCD显示温度
液晶体显示屏具有显示字符优美,不但能显示数字还能显示字
符甚至图形的优点,这是LED数码管无法比拟的。
但是液晶显示模块价格昂贵,
驱动程序复杂。
2.3芯片及器件介绍
2.3.1AT89C51单片机
AT89C51是美国Atmel公司生产的低电压、高性能CMOS8位单片机,片内含8KB的可反复檫写的程序存储器和12B的随机存取数据存储器(RAM),器件采用Atmel公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内配置通用8位中央处理器(CPU)和Flash存储单元,功能强大的AT89C52单片机可灵活应用于各种控制领域。
AT89C52单片机属于AT89C51单片机的增强型,与Intel公司的80C52在引脚排列、硬件组成、工作特点和指令系统等方面兼容。
其主要工作特性是:
片内程序存储器内含8KB的Flash程序存储器,可擦写寿命为1000次;
片内数据存储器内含256字节的RAM;
具有32根可编程I/O口线;
具有3个可编程定时器;
中断系统是具有8个中断源、6个中断矢量、2个级优先权的中断结构;
串行口是具有一个全双工的可编程串行通信口;
具有一个数据指针DPTR;
低功耗工作模式有空闲模式和掉电模式;
具有可编程的3级程序锁定位;
AT89C51工作电源电压为5(1+0.2)V,且典型值为5V;
AT89C51最高工作频率为24MHz。
单片机正常工作时,都需要有一个时钟电路和一个复位电路。
本设计中选择了内部时钟方式和按键电平复位电路,来构成单片机的最小电路。
功能特性描述
AT89C51是一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash
存储器。
使用Atmel公司高密度非易失性存储器技术制造,与工业80C51产品指令
和引脚完全兼容。
片上Flash允许程序存储器在系统可编程,亦适于常规编程器。
在单芯片上,拥有灵巧的8位CPU和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。
AT89C51具有以下标准功能:
8k字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,
三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及
时钟电路。
另外,AT89S52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。
空
闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。
掉电保
护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断
或硬件复位为止。
8位微控制器8K字节在系统可编程。
AT89C51是一个低电压,高性能CMOS8位单片机,片内含8kbytes的可反复擦写的Flash只读程序存储器和256bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,功能强大的AT89C51单片机可为您提供许多较复杂系统控制应用场合。
AT89C51有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,AT89C52可以按照常规方法进行编程,也可以在线编程。
其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。
AT89C51有PDIP、PQFP/TQFP及PLCC等三种封装形式,以适应不同产品的需求。
芯片封装及管脚如图2.2
图2.2
AT89C51引脚功能说明:
VCC(40引脚):
电源正
VSS(20引脚):
接地
P0端口(P0.0~P0.7,39~32引脚):
P0口是一个漏极开路的8位双向I/O口。
作为输出端口,每个引脚能驱动8个TTL负载,对端口P0写入“1”时,可以作为高阻抗输入。
在访问外部程序和数据存储器时,P0口也可以提供低8位地址和8位数据的复用总线。
此时,P0口内部上拉电阻有效。
在FlashROM编程时,P0端口接收指令字节;而在校验程序时,则输出指令字节。
验证时,要求外接上拉电阻。
P1端口(P1.0~P1.7,1~8引脚):
P1口是一个带内部上拉电阻的8位双向I/O口。
P1的输出缓冲器可驱动(吸收或者输出电流方式)4个TTL输入。
对端口写入1时,通过内部的上拉电阻把端口拉到高电位,这是可用作输入口。
P1口作输入口使用时,因为有内部上拉电阻,那些被外部拉低的引脚会输出一个电流。
此外,P1.0和P1.1还可以作为定时器/计数器2的外部技术输入(P1.0/T2)和定时器/计数器2的触发输入(P1.1/T2EX)。
P2端口(P2.0~P2.7,21~28引脚):
P2口是一个带内部上拉电阻的8位双向I/O端口。
P2的输出缓冲器可以驱动(吸收或输出电流方式)4个TTL输入。
对端口写入1时,通过内部的上拉电阻把端口拉到高电平,这时可用作输入口。
P2作为输入口使用时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输出一个电流。
P3端口(P3.0~P3.7,10~17引脚):
P3是一个带内部上拉电阻的8位双向I/O端口。
P3的输出缓冲器可驱动(吸收或输出电流方式)4个TTL输入。
对端口写入1时,通过内部的上拉电阻把端口拉到高电位,这时可用作输入口。
P3做输入口使用时,因为有内部的上拉电阻,那些被外部信号拉低的引脚会输入一个电流。
在对FlashROM编程和程序校验时,P1接收低8位地址。
2.3.2L298芯片介绍
L298驱动芯片是SGS公司的产品,内部包含4通道逻辑驱动电路。
是一种二相和四相电机的专用驱动器,即内包含二个H桥的高压大电六双全桥式驱动器,接收标准TTL逻辑电平信号,可驱动46V、2A以下的电机。
实物图如图2.3所示。
图2.4管脚图
图2.3实物图
L298有两路电源分别为逻辑电源6V和动力电源12V,ENA、ENB直接接入5V电源使电机进入使能状态,IN1和IN2用来控制电路的逻辑功能状态。
由于使用的电机是线圈式,在从运行状态突然转到停止状态和从顺时状态突然转换到逆时针状态时会形成很大的方向电流,在电路中加入二极管就是在产生方向电流的时候进行泄流,保护芯片的安全。
L298的逻辑功能状态见表2.1。
表2.1
表1.1
2.3.3DS18B20单线数字温度传感器简介
DS18820单线数字温度传感器是Dallas半导体公司开发的世界上第一片支
持“一线总线”接口的温度传感器。
它具有3引脚TO-92小体积封装形式。
温度测量范围为一55`C—+125'C;
工作电压支持3V↔5.5V的电压范围,既可在远端引入,也可采用寄生电源方式产生;
可编程为9位—12位A/D转换精度,测温分辨率可达0.06250C;
被测温度用符号扩展的16位数字量方式串行输出;
DS18B20还支持“一线总线”接口,多个DS18B20可以并联到3根或2根线上,CPU只需一根端口线就能与诸多DS18B20通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路;
DS18820内部结构主要由4部分组成:
64位ROM;温度传感器、非挥发的温度报警触发器TH和TL,配置寄存器;其管脚排列如图2.5所示,DQ为数字信号端,GND为电源地,VDD为电源输入端口。
图2.5
DS18B20直接将测量温度值转化为数字量提交给单片机,工作时必须严格遵守单总线器件的工作时序。
2.3.4液晶1602显示模块的特性
字符型液晶模块1602是一种用5×7点阵图形来显示字符的液晶显示器,根据显示的容量可以分为1行16个字、2行16个字、2行20个字等等,常用2行16个字的1602液晶模块。
1602采用标准的16脚接口,其中:
第1脚:
VSS为地电源;
第2脚:
VDD接5V正电源;
第3脚:
V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。
第4脚:
RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
第5脚:
RW为读写信号线,高电平时进行读操作,低电平时进行写操作。
当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据。
第6脚:
E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。
第7~14脚:
D0~D7为8位双向数据线。
第15~16脚:
空脚。
1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,字符有:
阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到“A”。
它的读写操作、屏幕和光标的操作都是通过指令编程来实现的。
(说明:
1为高电平、0为低电平)。
液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。
要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符,如表2.2。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
00
01
02
03
04
05
06
07
08
09
0A
0B
0C
0D
0E
0F
第一行
40
41
42
43
44
45
46
47
48
49
4A
4B
4C
4D
4E
4F
第二行
表2.2
3.总体硬件设计
3.1温度传感器及显示模块设计
本模块以DS18B20作为温度传感器,STC89C51作为处理器,配以温度显示作为温度控制输出单元。
整个系统力求结构简单,功能完善。
电路图如图3.1所示,图中相同标识代表电气连接。
DS18B20进行现场温度测量,将测量数据送入STC89C51的P3.3口,经过单片机处理后显示温度值,并与设定温度值的上下限值比较,若高于设定上限值或低于设定下限值则控制电机转速进行调整。
图3.1温度传感器模块
3.2单片机最小系统设计
单片机最小系统如图3.2所示
图3.2
3.3电机调速模块设计
3.3.1电机调速模块设计
根据图3.3所示连接好电路图,A/B接入单片机上通过程序来控制L298输出来控制直流电机的转动。
PWM1赋值为1时,使能直流电机转动。
图3.3
3.3.2PWM调速原理
我们采用的是PWM来实现直流电动机的调速,优点:
控制原理简单,输出波动小,线性好,对邻近电路干扰小。
缺点是:
功率低,散热问题严重。
PWM调速原理:
输出电压
UO=(ton/T)·U式(3.1)
ton+toff=T式(3.2)
式2.1中ton/T=D称为占空比。
占空比D表示了在一个周期T里开关管导通的时间与周期的比值。
D的变化范围为0<=D<=1。
当电源电压U不变的情况下,输出电压的平均值U取决与占空比D的大小,改变D值也就改变了输出电压的平均值,从而达到控制电动机转速的目的,即实现PWM调速。
3.4键盘模块设计
3.4.1键盘方式选择
常用的键识别方法有:
行扫描法、线翻转法和利用8279键盘接口的中断法。
在本系统中,完全可以不使用中断法完成键盘接口,这是由系统的特殊性决定的。
首先,对于本系统而言,要实现便携式的设计,硬件电路使用的器件越少越好。
其次,被测信号由外中断引脚输入,未占用单片机4个并行I/O口中的任何一个,系统有足够的资源利用自身I/O口完成接口。
3.4.2实现方案
本单片机系统使用简单的键盘和液晶显示器件来完成输入/输出操作的人机界面。
键盘输入信息的主要过程是:
·CPU判断是否有健按下。
·确定按下的是哪一个健。
·把此键代表的信息翻译成计算机所能识别的代码,如ASCII或其他特征码。
键盘上有很多键,每一个键对应一个键码,以便根据键码转到相应的键处理子程序,进一步实现数据输入和命令处理的功能。
键盘识别的流程如图3.4所示。
图3.4
3.4.3键盘模块
键盘模块接口电路如图3.5所示
图3.5
4软件设计
4.1程序流程图
4.1.1主程序流程图
主程序流程图如图4.1所示
图4.1
4.1.2定时器0中断流程图
定时器0中断流程图如图4.2所示
图4.2
4.1.3定时器1中断流程图
定时器1中断流程图如图4.3所示
图4.3
4.2程序清单
4.2.1主程序
主程序为一个.c文件,使用#include语句把所有.h子程序包含进来,主函数为一个循环语句一直在调用子程序、按键扫描。
程序如下:
#include
#include"LCD1602.H"
#include"ds18b20.H"
#include"keyq.H"
#include"time.H"
#include"time00.H"
//*********主函数*****************
voidmain(void)
{time0();
LCD_init();
while
(1)
{
display();
scan();
}
}
所有.h子程序包见附录A
总结
通过此次单片机课程设计,我把学过的单片机理论用到设计当中去,让学过的知识更加牢固,更学会了学单片机语言的用武之地。
首先,通过这次应用系统设计,在很大程度上提高了自己的思考能力和灵活应用单片机的专业知识的能力;其次,也增强了我们团结合作的精神;最后,通过此次实训,我们搜集各种资料也了解到了当今社会中单片机应用的广泛性,着也激励我们要好好重视这门学科。
我们组编写的系统主要是根据目前节智能化电风扇技术的发展趋势和国内实际的应用特点和要求,采用了自动化的结构形式,实现对电风扇转速的自动控制。
系统以单片机AT89C51为核心部件,单片机系统完成对环境温度信号的采集、处理、显示等功能;用Protues软件进行访真测试,利用MCS51汇编语言编制,最终程序运行适应性强,成本低廉,操作简单,实现对最式适温度的实时监控。
在当今提倡人性化设计和健康产品的环境下本系统具有非常好的市场前景。
致谢
在这次实训中,能够设计成功离不开老师的精心辅导以及老师对我们教学上的严谨,在设计的研究其及整理期,老师给了我很大的支持和鼓励,每当遇到问题是陈老师都能一一耐心解答,才使得设计顺利完成。
在此向陈老师表示真诚感谢和崇高的敬意。
同时,我们组的亢欢同学花了很多时间研究程序设计,设计的顺利完成离不开我们小组成员的共同努力,在此谨向大家致以衷心的感谢。
参考文献
[1]张鑫.单片机原理及应用.电子工业出版社
[1]明德刚.DS18B20在单片机温控系统中的应用.贵州大学学报,2006,2
[2]黄朝民,肖明清,吴志强.单片机原理与应用.现代电子技术,2006,12
[3]刘进山.基于MCS-51电风扇智能调速器的设计.电子质量,2004,10
附录
1数字温度传感器模块程序设计
主要程序如下(以下程序为一个ds18b20.h的程序包):
/***********ds18b20子程序*************************/
#ifndef__ds18b20_H__
#define__ds18b20_H__
//sbitDQ=P2^3;//定义通信端口
sbitDQ=P3^3;
voiddelay(unsignedinti)
{
while(i--);
}
/*初始化函数*/
Init_DS18B20(void)
{
unsignedcharx=0;
DQ=1;//DQ复位
delay(4);//稍做延时
DQ=0;//单片机将DQ拉低
delay(80);//精确延时大于480us
DQ=1;//拉高总线
delay(20);
x=DQ;//稍做延时后如果x=0则初始化成功x=1则初始化失败
delay(20);
}
/*读一个字节*/
RChar(void)
{
unsignedchari=0;
unsignedchardat=0;
for(i=8;i>0;i--)
{
DQ=0;//给脉冲信号
dat>>=1;
DQ=1;//给脉冲信号
if(DQ)
dat|=0x80;
delay(10);
}
return(dat);
}
/*写一个字节*/
WChar(unsignedchardat)
{
unsignedchari=0;
for(i=8;i>0;i--)
{
DQ=0;
DQ=dat&0x01;
delay(10);
DQ=1;
dat>>=1;
}
}
/*读取温度*/
ReadTemp(void)
{
unsignedchara=0;
unsignedcharb=0;
unsignedintt=0;
Init_DS18B20();
WChar(0xCC);//跳过读序号列号的操作
WChar(0x44);//启动温度转换
delay(100);
Init_DS18B20();
WChar(0xCC);//跳过读序号列号的操作
WChar(0xBE);//(读取温度寄存器)前两个就是温度
a=RChar();//低八位
b=RChar();//高八位
t=(b*256+a)*25;//传感器返回值除16得实际温度值
//为了得到2位小数位,先乘100,再除16(先乘以25再除以4)
return(t>>2);
}
#endif
2液晶显示模块程序设计
程序如下(以下程序为一个LCD1602.h的程序包):
#ifndef___H__
#define__LCD1602_H__
#defineLCD_DBP0
sbitLCD_RS=P2^0;//命令数据端口
sbitLCD_RW=P2^1;//读写控制端口
sbitLCD_E=P2^2;//使能端口
/******定义函数****************/
voidLCD_init(void);//初始化函数
voidLCD_write_command(unsignedcharcommand);//写指令函数ao
voidLCD_write_data(unsignedchardat);//写数据函数
voidLCD_disp_char(unsignedcharx,unsignedchary,unsignedchardat);//在某个屏幕位置上显示一个字符,X(0-16),y(1-2)
voiddelay_n40us(unsignedintn);//延时函数
/*******初始化函数***************/
voidLCD_init(void)
{LCD_write_command(0x01);//清除屏幕显示
delay_n40us(100);//实践证明,我的LCD1602上,用for循环100次就能可靠完成清屏指令。
LCD_write_command(0x38);//设置8位格式,2行,5x7
LCD_write_command(0x0c);//整体显示,关光标,不闪烁
LCD_write_command(0x06);//设定输入方式,增量不移位
}
//********写指令函数************
voidLCD_write_command(unsignedchardat)
{
L
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 温度 控制 智能 电风扇