智能温控风扇的设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

综合实验报告
实验题目:智能温控风扇
学生班级: 电子14-2
学生姓名:
学生学号: 38
指导教师:
实验时间: 2016-9-15
智能温控风扇的设计
摘要
基于检测技术和单片机控制技术,设计了一种智能温控调速风扇。

阐述了智能温控调速风扇的工作原理、硬件设计、软件实现的过程。

系统原理简单,工作稳定,成本低,具有一定的节能效果。

通过单片机的控制我们实现了电风扇的主要功能:当按下开关键时,系统初始化默认的设定温度为25度,如果外界温度高于设定温度电风扇进行运转,如果外界温度高于低于设定温度则风页不转动,同时显示外界的温度。

可以设置所需的温度,并同时显示所设定的温度,同时按加减键退出设定功能。

电风扇的自动控制,让电风扇这一家用电器变的更智能化。

克服了普通电风扇无法根据外界温度自动调节转速困难。

智能电风扇的设计具有重要的现实意义。

关键词AT89C52/温度传感器/直流电机/模拟风扇
1.1 引言
生活中,我们经常会使用一些与温度有关的设备。

比如,现在虽然不少城市家庭用上了空调,但在占中国大部分人口的农村地区依旧使用电风扇作为降温防暑设备,春夏(夏秋)交替时节,白天温度依旧很高,电风扇应高转速、大风量,使人感到清凉;到了晚上,气温降低,当人入睡后,应该逐步减小转速,以免使人感冒。

虽然电风扇都有调节不同档位的功能,但必须要人手动换档,睡着了就无能为力了,而普遍采用的定时器关闭的做法,一方面是定时时间长短有限制,一般是一两个小时;另一方面可能在一两个小时后气温依旧没有降低很多,而风扇就关闭了,使人在睡梦中热醒而不得不起床重新打开风扇,增加定时器时间,非常麻烦,不能两全其美。

为解决上述问题,我们设计了这套温控自动风扇系统。

本系统采用高精度集成温度传感器,用单片机控制,能显示实时温度,并根据使用者设定的温度自动在相应温度时作出小风、大风、停机动作,精确度高,动作准确。

2 整体方案的设计思路
2.1 系统整体设计
本设计的整体思路是:利用温度传感器DS18B20检测环境温度并直接输出数字温度信号给单片机AT89C52进行处理,在LED数码管上显示当前环境温度值以及预设温度值。

其中预设温度值只能为整数形式,检测到的当前环境温度可精确到小数点后一位。

同时采用PWM脉宽调制方式来改变直流风扇电机的转速。

并通过两个按键改变预设温度值,一个提高预设温度,另一个降低预设温度值。

系统结构框图:如图2-1所示。

2.2 方案论证
本设计要实现风扇直流电机的温度控制,使风扇电机能根据环境温度的变化自动启停及改变转速,需要比较高的温度变化分辨率以及稳定可靠的换挡停机控制部件。

3 主要原件的介绍
系统主要器件包括DS18B20温度传感器、AT89C52单片机、四位LED共阴数码管、风扇步进电机。

辅助元件包括电阻、电容、晶振、电源、按键、开关等。

3.1 温度传感器
3.1.1 温度传感器的种类和选择
目前市场上常用的温度传感器有pt100,温敏电阻,DS18B20等等。

本次设计我们采用DS18B20,DS18B20是DALLAS公司生产的一线式数字温度传感器
它具有以下特点:
(1)独立的单线接口,只需一个接口引脚即可通信;
(2)多点能力使分布使分布式温度检测应用得以简化;
(3)不需外部元件;
(4)可用数据线供电,不需要备用电源;
(5)测量范围从-55摄氏度到+125摄氏度,增值量为0.5摄氏度;
(6)以9位数字值方式读出温度;
(7)在1秒(典型值)内把温度变为数字;
(8)用户可定义的,非易失行的温度警告设置;
(9)告警收索命令识别和寻址温度在编订的极限范围之外的器件;
(10)应用范围包括恒温控制,工业系统,消费类产品,温度计和各种热敏系统。

3.1 DS18B20的工作原理及其单片机的接口电路
DS18B20 内部结构如图3-1所示,主要由4 部分组成:64 位ROM、温度传感器、非挥发的温度报警触发器TH 和TL、配置寄存器。

其管脚排列如图3-2所示,DQ 为数字信号端,GND 为电源地,VDD 为电源输入端。

图3-1 DS18B20内部结构图
图3-2 DS18B20外形及管脚
由于DS18B20只有一根数据线。

因此它和主机(单片机)通信是需要串行通信,而AT89S51有两个串行端口,所以可以不用软件来模拟实现。

经过单线接口访问DS18B20必须遵循如下协议:初始化、ROM操作命令、存储器操作命令和控制操作。

要使传感器工作,一切处理均从序列开始。

主机发送(Tx)--复位脉冲(最短为480μs的低电平信号)。

接着主机便释放此线并进入接收方式(Rx)。

总线经过4.7K的上拉电阻被拉至高电平状态。

在检测到I/O引脚上的上升沿之后,DS18B20等待15-60μs,并且接着发送脉冲(60-240μs的低电平信号)。

然后以存在复位脉冲表示DS18B20已经准备好发送或接收,然后给出正确的ROM命令和存储操作命令的数据。

DS18B20通过使用时间片来读出和写入数据,时间片用于处理数据位和进行何种指定操作的命令。

它有写时间片和读时间片两种。

写时间片:当主机把数据线从逻辑高电平拉至逻辑低电平时,产生写时间片。

有两种类型的写时间片:写1时间片和写0时间片。

所有时间片必须有60微秒的持续期,在各写周期之间必须有最短为1微秒的恢复时间。

读时间片:从DS18B20读数据时,使用读时间片。

当主机把数据线从逻辑高电平拉至逻辑低电平时产生读时间片。

数据线在逻辑低电平必须保持至少1微秒;来自DS18B20的输出数据在时间下降沿之后的15微秒内有效。

为了读出从读时间片开始算起15微秒的状态,主机必须停止把引脚驱动拉至低电平。

在时间片结束时,I/O引脚经过外部的上拉电阻拉回高电平,所有读时间片的最短持续期为60微秒,包括两个读周期间至少1μs的恢复时间。

一旦主机检测到DS18B20的存在,它便可以发送一个器件ROM操作命令。

所有ROM操作命令
均为8位长。

图3-3 DS18B20与单片机接口电路
4.1开关复位电路
在单片机应用系统中,除单片机本身需要复位以外,外部扩展I/O接口电路也需要复位,因此需要一个包括上电和按钮复位在内的系统同步复位电路。

单片机上的XTAL1和XTAL2用来外接石英晶体和微调电容,即用来连接单片机片内OSC的定时反馈回路。

本设计中开关复位与晶振电路如图4-1所示,当按下按键开关S1时,系统复位一次。

其中电容C1、C2为20pF,C3为10uF,电阻R2、R3为10k。

图4-1 系统复位电路
4.2 数码管显示电路
本设计制作中选用4位共阴极数码管作为显示模块,它和单片机硬件的接口如图4-2所示。

其中前2位数码管DS1、DS2用于显示温度传感器实时检测采集到的温度,可精确到0.1摄氏度,显示范围为0~99.9摄氏度;后2位数码管DS3、DS4用于显示系统设置的初值温度,只能显示整数的温度值,显示范围为0~99摄氏度。

4位数码管的段选a、b、c、d、e、f、g、dp线分别与单片机的P0.0~P0.7口连接,其中P0口需接一10K的上拉电阻,以使单片机的P0口能够输出高低电平。

5位数码管的位选W1~W5分别与单片机的P2.0~P2.4口相连接,只要P2.0~P2.4中任一位中输出低电平,则选中与该位相连的数码管。

图4-2 数码管显示电路
4.3 温度采集电路
DS18B20数字温度传感器通过其内部计数时钟周期来的作用,实现了特有的温度
测量功能。

低温系数振荡器输出的时钟信号通过由高温度系数振荡器产生的门周期而被计数,计数器预先置有与-55℃相对应的一个基权值。

如果计数器计数到0时,高温度系数振荡周期还未结束,则表示测量的温度值高于-55℃,被预置在-55℃的温度寄存器中的值就增加1℃,然后这个过程不断重复,直到高温度系数振荡周期结束为止。

此时温度寄存器中的值即为被测温度值,这个值以16位二进制形式存放在存储器中,通过主机发送存储器读命令可读出此温度值,读取时低位在前,高位在后,依次进行。

由于温度振荡器的抛物线特性的影响,其内用斜率累加器进行补偿与单片机1位I/O线相连,且单片机的1位I/O线可挂接多个DS18B20,就可实现单点或多点温度检测在本设计中将DS18B20接在P1.7口实现温度的采集。

其与单片机的连接如图4-3所示。

图4-3温度采集电路
4.4 风扇电机驱动与调速电路
本设计中由单片机的I/O口输出PWM脉冲,通过一个达林顿反向驱动器ULN2803驱动12V直流无刷风扇电机以及实现风扇电机速度的调节。

键盘控制设置温度,通过软件向单片机输入相应控制指令,由单片机通过P1.7口输出与转速相应的PWM脉冲,经过ULN2803驱动风扇直流电机控制电路,实现电机转速与启停的自动控制。

当环境温度升高时,直流电机的转速会相应按照设定的等级有所提高;当环境温度下降时,电机的转速会相应的下降;当环境温度低于设置温度时,电机停止转动,而环境温度又高于预设温度时,电机重新启动。

电路如图4-4所示,风扇电机的一端接12V电源,另一端接ULN2803的OUT7引脚,ULN2803的IN7引脚与单片机的P3.1引脚相连,通过控制单片机的P3.1引脚输出PWM信号,由此控制风扇直流电机的速度与启停。

图4-4 风扇电机驱动与调速电路
系统选用的风扇电机为12V直流无刷电机,单达林顿反向驱动器ULN2803输入TTL信号为5V或CMOS信号为6~15V时,输出的最大电压为50V,最大电流为500mA,工作温度范围为0~70℃。

本系统中单片机I/O口输出的TTL信号为5V,因此此风扇电机可以用ULN2803来驱动。

5 软件设计
主程序流程图如5-1所示:
图5-1 主程序流程图
通过单片机模块检测温度采集模块采集到的温度并作出相应处理,当温度高于25℃时,风扇电路导通,风扇转动并随温度改变转速。

当温度低于25℃时,风扇电路不通电,风扇不转。

实现风扇自动停止并随温度变化自动调速,同时显示当前温度。

程序实现的功能是上电复位时检测温度传感器DS18B20是否存在或它工作是否正常,当不存在或工作不正常时从蜂鸣器发出报警声,提示用户检查DS18B20,安装或者更换。

这部分功能由
DS18B20复位与检测子程序RESET完成。

当检测到传感器工作正常后,发出温度转换命令及读取温度值命令,将从DS18B20读取的二进制温度值转换为七段码在LED上显示出来。

显示功能由温度显示子程序DISP1子程序实现。

功能介绍:单片机复位后,进行初始化工作,然后进入按键功能模块,最后完成工作。

初始化中,将DS18B20,内部RAM,包括按键,默认为控制状态,温度设定为25℃。

加减按键同时按下进入温度设定状态,然后按加或减按键进行温度设定,然后再次同时按加减键退出。

结束语
经过这次设计,我觉得自己学到了不少东西。

归纳起来,主要有以下几点:
(1)大学期间主要是学习基础理论知识,并未真正地去应用和实践。

但是经过这次毕业设计,我接触到了更多平时没有接触到的仪器设备、元器件以及相关的使用调试经验,发现了自己很多不足之处。

我还体会到了所学理论知识的重要性:知识掌握得越多,设计得就更全面、更顺利、更好。

(2)能够从理论设计和工程实践相结合、巩固基础知识与培养创新意识相结合、个人作用和集体协作相结合等方面全面的培养学生的综合素质。

这些对我在将来的工作和学习当中都会有很大的帮助。

(3)学会了怎样查阅资料和利用工具书。

一个人不可能什么都学过,什么都懂,因此,当在设计过程中需要用一些不曾学过的东西时,就要去有针对性地查找资料,然后加以吸收利用,以提高自己的应用能力,而且还能增长自己见识,补充最新的专业知识。

(4)实践能力得到了进一步提高,在调试过程中积累了一些经验。

附录1:电路总图
附录3:源程序#include<reg52.h>
#define ui unsigned int
#define uc unsigned char
sbit DQ=P1^6;
sbit k=P1^0;
sbit led=P1^4;
uc code bmb[]={
0xc0,0xf9,0xa4,0xb0,0x99,
0x92,0x82,0xf8,0x80,0x90};
uc wd,fuhao,ds,a,b,g,b1,f,kg;
ui xshu;
void xy(ui z)
{
ui x;
for(x=z;x>0;x--);
}
void chu_shi()
{
DQ = 1;
xy(16);
DQ = 0;
xy(140);
DQ = 1;
xy(100);
}
void fa_song(uc f)
{
uc i;
for (i=8; i>0; i--)
{
DQ = 0;DQ = 0;DQ = 0;DQ = 0;DQ = 0;
DQ = 0;DQ = 0;DQ = 0;DQ = 0;DQ = 0;
xy(1);
DQ =f&0x01;
xy(8);
DQ = 1;
f=f>>1;
}
}
uc jie_shou()
{
uc i,b;
for (i=8;i>0;i--)
{
b=b>>1;
DQ = 0;
DQ = 1;
xy(1);
if(DQ==1)
{
b=b|0x80;
}
else {b=b|0x00;}
xy(8);
}
return b;
}
void xianshi()
{
b=wd/100;
a=wd%100/10;
g=wd%10;
f=xshu/1000;
if(fuhao==0)
{
if(b!=0)
{
P2=0x01;P0=bmb[b];xy(200);
P2=0x00;P0=0xff;xy(30);
P2=0x04;P0=bmb[a];xy(200);
P2=0x00;P0=0xff;xy(30);
}
else
{
if(a!=0)
{
P2=0x04;P0=bmb[a];xy(200);
P2=0x00;P0=0xff;xy(30);
}
}
P2=0x10;P0=bmb[g]&0x7f;xy(200);
P2=0x00;P0=0xff;xy(30);
P2=0x40;P0=bmb[f];xy(200);
P2=0x00;P0=0xff;xy(30);
}
if(fuhao==1)
{
P2=0x01;P0=0xbf;xy(200);
P2=0x00;P0=0xff;xy(30);
if(a!=0)
{
P2=0x04;P0=bmb[a];xy(200);
P2=0x00;P0=0xff;xy(30);
}
P2=0x10;P0=bmb[g]&0x7f;xy(200);
P2=0x00;P0=0xff;xy(30);
P2=0x40;P0=bmb[f];xy(200);
P2=0x00;P0=0xff;xy(30);
}
}
void wendu()
{
uc w1,w2;
chu_shi();
fa_song(0xcc);
fa_song(0x44);
for(b1=4;b1>0;b1--)xianshi();
chu_shi();
fa_song(0xcc);
fa_song(0xbe);
w1=jie_shou();
w2=jie_shou();
if((w2&0xf8)==0)
{
xshu=w1;fuhao=0;
wd=w2;wd=wd<<4;
wd=wd&0xf0;
w1=w1>>4;
w1=w1&0x0f;
wd=wd|w1;
xshu=xshu&0x0f;
xshu=xshu*625;
}
else
{
w1=~w1;w2=~w2;
xshu=w1;fuhao=1;
wd=w2;wd=wd<<4;
wd=wd&0xf0;
w1=w1>>4;
w1=w1&0x0f;
wd=wd|w1;
xshu=xshu&0x0f;
xshu=xshu*625;
}
for(b1=4;b1>0;b1--)xianshi();
}
void main()
{
kg=0;
while(1)
{
if(k==0)
{
xy(4000);
if(k==0)
{
while(!k);
kg++;
if(kg==2)kg=0;
}
}
if(kg==1)
{
led=0;
wendu();
if(fuhao==0)
{
if(wd>35)P3=0x0c;
if(wd>29&&wd<36)P3=0x24;
if(wd>24&&wd<30)P3=0x28;
if(wd<25)P3=0x2c;
}
else P3=0xff;
}
else
{
led=1;
P3=0xff;
P2=0xff;
P0=0xff;
}
}
}。

相关文档
最新文档