智能电风扇的设计.docx

上传人:b****6 文档编号:7579995 上传时间:2023-01-25 格式:DOCX 页数:18 大小:282.16KB
下载 相关 举报
智能电风扇的设计.docx_第1页
第1页 / 共18页
智能电风扇的设计.docx_第2页
第2页 / 共18页
智能电风扇的设计.docx_第3页
第3页 / 共18页
智能电风扇的设计.docx_第4页
第4页 / 共18页
智能电风扇的设计.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

智能电风扇的设计.docx

《智能电风扇的设计.docx》由会员分享,可在线阅读,更多相关《智能电风扇的设计.docx(18页珍藏版)》请在冰豆网上搜索。

智能电风扇的设计.docx

智能电风扇的设计

节能自控电风扇设计报告

班别:

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;}//30

elseif(temp>0x20&&temp<=0x22)

{PWM_ON=4;}//32

elseif(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从解决智能电风扇温度控制入手,讨论了温度传感器在本设计的作用与地位。

在本课题的研究中,我们对单片机和传感器有了一定的了解。

对智能电风扇有一个总体的设计思路,其中还有一些芯片没有学到,通过大量的学习,我们对那些芯片的功能以及作用都基本的掌握。

但是在很多方面都需要进一步的改善,在以后的学习生活中要不断的学习理论知识,还要提高动手的能力,才能对我们专业的知识作进一步的学习和研究。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 其它模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1