智能电风扇的设计.docx
《智能电风扇的设计.docx》由会员分享,可在线阅读,更多相关《智能电风扇的设计.docx(18页珍藏版)》请在冰豆网上搜索。
智能电风扇的设计
节能自控电风扇设计报告
班别:
08电本3班
姓名:
韦青梅
学号:
200800604331
同组人姓名:
许乃善蓝梦莹
设计题目:
智能电风扇的设计
2011年5月7号
第一节引言
1.1智能电风扇控制系统概述
1.2本设计任务和主要内容
第二节系统电路主要硬件的设计
2.1总体硬件设计
2.2数字温度传感器模块设计
2.2.1温度传感器模块的组成
2.2.2DS18B20的温度处理方法
2.3电机调速与控制模块的设计
2.3.1电机调速原理
2.3.2电机控制模块与硬件设计
2.4液晶显示模块
第三节系统软件设计
第四节结束语
基于单片机的智能电风扇控制系统
第一节引言
电风扇曾一度被认为是空调产品冲击下的淘汰品,其实并非如此,市场人士称,
家用电风扇并没有随着空调的普及而淡出市场,近两年反而出现市场销售复苏的态势。
其主要原因:
一是风扇和空调的降温效果不同——空调有强大的制冷功能,可以快速有效的降低环境温度,但电风扇的风更温和,更加适合老人儿童和体制较弱的人使用;二是电风扇有价格的优势,价格低廉而且相对省电,安装和使用都非常简单。
尽管电风扇有其市场优势,但传统电风扇还是有许多地方应当改进,最突出的缺点是它不能根据温度的变化适时的调节风力的大小,对于温差大的地区,人们在夜间使用电风扇时可能遇到这样的问题:
当凌晨降温的时候电风扇依然工作,可是人们因为熟睡而无法察觉,即浪费电资源又容易感冒,传统的机械定时器虽然能够控制电风扇在一定吼关闭,但定时范围有限,且无法对温度变化灵活处理,鉴于以上方面的考虑,我们需要设计一种智能电风扇控制系统来解决这些问题。
1.1智能电风扇控制系统的概述
传统电风扇时220v交流电供电,电机转速分为几个档位,通过人为调整电机转速达到改变风力大小的目的,亦即,每次风力改变,必然有人参与操作,这样势必带来诸多不便。
本设计中的智能电风扇控制系统,是指将电风扇的电机转速作为被控制量,由单片机分析采集到的数字温度信号,再通过可控硅对电风扇电机进行调速。
从而达到无须人为控制便可自动调整风力的大小的效果。
1.2设计任务和主要内容
本设计以MCU51单片机为核心,通过温度传感器对环境温度进行数据采集,从而建立一个控制系统,使电风扇随温度的变化而自动变换档位,实现“温度高,风力大,温度低,风力弱”的性能。
另外,通过键盘控制面板,用户可以在一定范围内设置电风扇的最低工作温度,当温度低于多设置温度时,电风扇将自动关闭,当高于此温度时电风扇又将重新启动
本设计主要内容如下:
1.风速设为从高到底5个档位。
可由用户通过键盘手动设定。
2.当温度每降低2摄氏度则电风扇风速自动下降一个档位。
3.当温度每升高2摄氏度则电风扇自动上升一个档位。
4.用户可设定电风扇最低的工作温度,当低于该温度时,电风扇自动停转。
第二节系统主要硬件电路设计
2.1总体硬件设计
系统总体设计框图2-1如下图所示
对于单片机中央处理系统的方案设计,根据要求,我们可以选用具有4KB片内E2PROM的AT89C51单片机作为中央处理器。
作为整个控制系统的核心,AT89C51内部包含了定时器,程序存储器,数据存储器灯硬件,其硬件能符合整个控制系统的要求,不需要外接其他存储器芯片和定时器件,方便地构成一个最小系统,整个系统的结构紧凑。
抗干扰能力强,性价比高,是比较合适的方案。
2.2数字温度传感器模块设计
温度传感器选用DS18B20数字温度传感器,它可以直接将模拟温度信号转化为数字信号。
降低了电路的复杂程度,提高了电路的运行质量。
2.2.1温度传感器模块的组成
本模块以DS18B20作为温度传感器,AT89C51作为处理器,配以温度显示作为温度控制输出单元。
整个系统力求结构简单,功能完善。
电路图如2.2
2.2.2系统工作原理如下:
DS18B20进行现场温度测量,将测量数据送入AT89C51的P3.7口,经过单片机处理后显示温度值,并与设定温度值的上下限值比较,若高于设定上限值或低于设定的下限值则控制电机转速进行调整。
2.2.3DS18B20的温度处理方法
DS18B20直接将测量温度值转化为数字量提交给单片机,工作时必须严格遵守单总线器件的工作时序
2.3电机调速与控制模块的设计
电机调速是整个控制系统中的一个重要的方面,利用直流电机使输出端电压发生改变,从而使施加在电风扇的输入电压发生改变,以调节风扇的转速,实现各档位风速的无极调速。
直流电机的特点:
电机的电势波形较好,对电磁的干扰影响较小。
直流电机的调速范围广,调速特性平滑。
直流电机的过载能力比较强,启动和制动的转矩比较大。
易于控制,可靠性高。
电机模块如图:
2.4液晶显示模块的设计
用1602显示,P25、26、27使能端,P0为输入端口
主板电路图如下:
第三节系统软件的设计
3.1数字温度传感器程序设计
本系统用c程序设计,采用模块化设计,整体程序由主程序和子程序构成
如图3-1所示,主机控制DS18B20完成温度转换工作必须经过三个步骤:
初始化,ROM操作指令,存储器操作指令。
单片机所用的系统频率为12MHZ,根据DS18B20初始化时序,读时序和写时序。
其程序如下:
温度DS18B20程序模块如下:
/********************************************************************
*名称:
Reset()
*功能:
复位DS18B20
*输入:
无
*输出:
无
***********************************************************************/
ucharReset(void)
{
uchardeceive_ready;
DQ=0;
delay(29);
DQ=1;
delay(3);
deceive_ready=DQ;
delay(25);
return(deceive_ready);
}
/********************************************************************
*名称:
read_bit()
*功能:
从DS18B20读一个位值
*输入:
无
*输出:
从DS18B20读出的一个位值
***********************************************************************/
ucharread_bit(void)
{
uchari;
DQ=0;
DQ=1;
for(i=0;i<3;i++);
return(DQ);
}
/********************************************************************
*名称:
write_bit()
*功能:
向DS18B20写一位
*输入:
bitval(要对DS18B20写入的位值)
*输出:
无
***********************************************************************/
voidwrite_bit(ucharbitval)
{
DQ=0;if(bitval==1)
DQ=1;
delay(5);
DQ=1;
}
/********************************************************************
*名称:
read_byte()
*功能:
从DS18B20读一个字节
*输入:
无
*输出:
从DS18B20读到的值
***********************************************************************/
ucharread_byte(void)
{
uchari,m,receive_data;
m=1;
receive_data=0;
for(i=0;i<8;i++)
{
if(read_bit())
{
receive_data=receive_data+(m<
}
delay(6);
}
return(receive_data);
}
/********************************************************************
*名称:
write_byte()
*功能:
向DS18B20写一个字节
*输入:
val(要对DS18B20写入的命令值)
*输出:
无
***********************************************************************/
voidwrite_byte(ucharval)
{
uchari,temp;
for(i=0;i<8;i++)
{
temp=val>>i;
temp=temp&0x01;
write_bit(temp);
delay(5);
}
}
voidread_temp(void)
{
Reset();
write_byte(jump_ROM);
write_byte(start);
Reset();
write_byte(jump_ROM);
write_byte(read_EEROM);
TMPL=read_byte();
TMPH=read_byte();
}
液晶1602程序模块:
/********************************************************************
*名称:
Convert(ucharIn_Date)
*功能:
因为电路设计时,P0.0--P0.7接法刚好了资料中的相反,所以设计该函数。
*输入:
1602资料上的值
*输出:
送到1602的值
***********************************************************************/
ucharConvert(ucharIn_Date)
{
uchari,Out_Date=0,temp=0;
for(i=0;i<8;i++)
{
temp=(In_Date>>i)&0x01;
Out_Date|=(temp<<(7-i));
}
returnOut_Date;
}
/********************************************************************
*名称:
enable(uchardel)
*功能:
1602命令函数
*输入:
输入的命令值
*输出:
无
***********************************************************************/
voidenable(uchardel)
{
P0=Convert(del);
RS=0;
RW=0;
E=0;
delay_1();
E=1;
delay_1();
}
/********************************************************************
*名称:
write(uchardel)
*功能:
1602写数据函数
*输入:
需要写入1602的数据
*输出:
无
***********************************************************************/
voidwrite(uchardel)
{
P0=Convert(del);
RS=1;
RW=0;
E=0;
delay_1();
E=1;
delay_1();
}
/********************************************************************
*名称:
L1602_init()
*功能:
1602初始化,请参考1602的资料
*输入:
无
*输出:
无
***********************************************************************/
voidL1602_init(void)
{
enable(0x01);
enable(0x38);
enable(0x0c);
enable(0x06);
enable(0xd0);
}
/********************************************************************
*名称:
L1602_char(ucharhang,ucharlie,charsign)
*功能:
改变液晶中某位的值,如果要让第一行,第五个字符显示"b",调用该函数如下
L1602_char(1,5,'b')
*输入:
行,列,需要输入1602的数据
*输出:
无
***********************************************************************/
voidL1602_char(ucharhang,ucharlie,charsign)
{
uchara;
if(hang==1)a=0x80;
if(hang==2)a=0xc0;
a=a+lie-1;
enable(a);
write(sign);
}
/********************************************************************
*名称:
L1602_string(ucharhang,ucharlie,uchar*p)
*功能:
改变液晶中某位的值,如果要让第一行,第五个字符开始显示"abcdef",调用该函数如下
L1602_string(1,5,"abcdef;")
*输入:
行,列,需要输入1602的数据
*输出:
无
***********************************************************************/
voidL1602_string(ucharhang,ucharlie,uchar*p)
{
uchara;
if(hang==1)a=0x80;
if(hang==2)a=0xc0;
a=a+lie-1;
enable(a);
while
(1)
{
if(*p=='\0')break;
write(*p);
p++;
}
}
/********************************************************************
*名称:
delay()
*功能:
延时函数
*输入:
无
*输出:
无
***********************************************************************/
voiddelay(uintN)
{
inti;
for(i=0;i;
}
显示模块:
voiddespiay(void)
{
L1602_char(2,13,temp/10%10+48);
L1602_char(2,14,temp%10+48);
}
uchards18b20(void)
{
read_temp();
temp=TMPH;
temp<<=8;
temp=temp|TMPL;
tt=temp*0.0625;
temp=TMPL/16+TMPH*16;
returntemp;
端口和头文件模块:
#defineucharunsignedchar
#defineuintunsignedint
#definejump_ROM0xCC
#definestart0x44
#defineread_EEROM0xBE
#defineMAX27
sbitDQ=P2^3;//DS18B20数据口
sbitPWM=P1^0;
unsignedcharTMPH,TMPL;
uinttemp,tt;
unsignedcharCYCLE;//定义周期该数字X基准定时时间如果是10则周期是10x0.1ms
unsignedcharPWM_ON;//定义高电平时间
//这三个引脚参考资料
sbitE=P2^7;//1602使能引脚
sbitRW=P2^6;//1602读写引脚
sbitRS=P2^5;//1602数据/命令选择引脚
延迟模块/********************************************************************
*名称:
delay()
*功能:
延时,延时时间大概为140US。
*输入:
无
*输出:
无
***********************************************************************/
voiddelay_1()
{
inti,j;
for(i=0;i<=10;i++)
for(j=0;j<=2;j++)
;
}:
主程序如下:
#include
#include"duanko"
#include"yanchi"
#include"1602"
#include"18b20"
#include"xianshi"
/********************************************************************
*名称:
Main()
*功能:
主函数
*输入:
无
*输出:
无
***********************************************************************/
voidmain()
{
TMOD|=0x01;//定时器设置1msin12Mcrystal
TH0=(65536-3000)/256;
TL0=(65536-3000)%256;//定时1mS
IE=0x82;//打开中断
TR0=1;
CYCLE=10;//时间可以调整这个是10步调整周期10ms8位PWM就是256步
L1602_init();
L1602_string(1,1,"DS18B20TEST");
L1602_string(2,1,"Temperature:
00");
while
(1)
{
ds18b20();
despiay();
if(temp<=0x1F)
{PWM=0;}//t<30
elseif(temp>0x1F&&temp<=0x20)
{PWM_ON=6;}//30elseif(temp>0x20&&temp<=0x22)
{PWM_ON=4;}//32elseif(temp>0x22)
{PWM=1;}//t>34
}
}
/********************************/
/*定时中断*/
/********************************/
voidtim(void)interrupt1using1
{
staticunsignedcharcount;
TH0=(65536-3000)/256;
TL0=(65536-3000)%256;//定时1mS
if(count==PWM_ON)
{
PWM=1;//灯灭
}
count++;
if(count==CYCLE)
{
count=0;
if(PWM_ON!
=0)//如果左右时间是0保持原来状态
PWM=0;//灯亮
}
}
第四节结束语
本文主要完成以下工作:
1分析了电风扇在市场中所处的低位,以及我们所设计研究的智能电风扇的主要功能作用。
2从解决智能电风扇温度控制入手,讨论了温度传感器在本设计的作用与地位。
在本课题的研究中,我们对单片机和传感器有了一定的了解。
对智能电风扇有一个总体的设计思路,其中还有一些芯片没有学到,通过大量的学习,我们对那些芯片的功能以及作用都基本的掌握。
但是在很多方面都需要进一步的改善,在以后的学习生活中要不断的学习理论知识,还要提高动手的能力,才能对我们专业的知识作进一步的学习和研究。