基于51单片机的智能温控电扇设计

更新时间:2024-05-02 14:29:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

毕业论文(设计)

题 目 基于51单片机的智能温控电扇设计

学生姓名

学 号 院 系 专 业

指导教师

年 月 日

目 录

1

1 引言 ........................................................... 1 2 方案设计 ....................................................... 2 2.1 系统整体设计 ................................................ 2 2.2 方案论证 .................................................... 2 2.2.1 温度传感器的选择 ....................................... 2 2.2.2 红外探测的选择 ......................................... 3 2.2.3 控制核心的选择 ......................................... 3 2.2.4 显示器件的选择 ......................................... 3 2.2.5 调速方式的选择 ......................................... 4 2.2.6 驱动方式选择 ........................................... 4 3 硬件设计 ....................................................... 4 3.1系统各器件简介 .............................................. 5 3.1.1 单线程数字温度传感器DS18B20 ........................... 5 3.1.2 AT89S51单片机简介 ..................................... 5 3.1.3 桥式驱动电路L298N简介 ................................. 6 3.1.4 LCD1602简介 ........................................... 7 3.1.5对射式光电开关简介 ..................................... 7 3.2 各部分电路设计 .............................................. 8 3.2.1 开关复位与晶振电路 ..................................... 8 3.2.2 独立控制键盘电路 ....................................... 8 3.2.3 LCD显示电路 ........................................... 9 3.2.4 红外探测电路 ........................................... 9

2

3.2.5 温度采集电路 .......................................... 10 3.2.6 风扇驱动电路 .......................................... 10 4 软件设计 ...................................................... 11 4.1 主程序流程图 ............................................... 11 4.2 液晶显示子程序 ............................................. 13 4.3 DS18B20温度传感器子程序 ................................... 14 4.3.1 温度读取程序 .......................................... 14 4.3.2 温度处理程序 .......................................... 17 4.4 键盘扫描子程序 ............................................. 18 4.5 温度比较处理子程序 ......................................... 19 4.6 电机控制程序(包含红外探测) ............................... 21 4.7 软件设计中的问题与分析 ..................................... 23 4.7.1 LCD显示程序的问题 .................................... 23 4.7.2 DS18B20的显示程序问题 ................................ 23 5 硬件调试 ...................................................... 23 5.1 按键电路的调试 ............................................. 24 5.2 温度传感器电路的调试 ....................................... 24 5.3 电机电路的调试 ............................................. 24 5.4 红外感应电路的调试 ......................................... 24 5.5 硬件调试遇到的问题 ......................................... 24 6 结论 .......................................................... 24 参考文献: ...................................................... 26

3

4

基于51单片机的智能温控电扇设计

摘要:风扇是人们日常生活中必不可缺的工具,尤其是在夏天,作为一种使用频率很高的电器,备受人们喜爱。本文将以AT89S51为主控芯片,辅以DS18B20温度传感器,结合红外探测装置,来实现一种智能温控电扇的设计。此风扇通过液晶显示器来显示温度和风速,配备2个温度设定按键,由DS18B20读取外界温度,红外探头探测是否有人,通过设定的温度配合程序来调节风速,最后通过L298N来驱动电机。经过调试,风扇可以按照温度智能变速,无人自动关闭,实现了智能温控的目标。

关键词:DS18B20;AT89S51;红外探头;液晶显示器1602;L298N

1 引言

电扇是人们日常生活中常用的降温工具,从开始的吊扇到现在的USB风扇,无处不见电扇的踪迹。虽然如今空调已经走进千家万户,但是电扇的低位还是无可取代,作为一种节能环保,并且廉价简单的降温工具,电扇还在很多人家发挥着自己独特的作用。顺应时代潮流,各种多功能的风扇逐渐在取代传统风扇。单片机作为一种智能化程度高,控制精度高,操作简单,廉价易得,抗干扰能力强等特点,越来越多的应用于智能化产品之中。

市场上智能风扇产品相继问世,制作方法也多种多样,功能也逐渐完善,普遍都具有了手动变速和定时关闭等功能,相对而言,具备人性化,智能化的风扇还是很少,使用也并不广泛,而且在电子工艺高度发展的今天,智能化的步伐也越来越快,尤其是中国这个高速发展的国家,电扇的智能化也该向前迈进一个步伐。在中国市场上风扇还是有一定的市场份额的,几乎每个家庭都有风扇,具备价格便宜,摆放轻便,体积灵巧等特点,使得风扇在中小城市以及乡村将来一段时间内仍然会占有市场的大部分份额,为提高风扇的市场竞争力,使之在技术含量上有所提高,满足智能化的要求,智能风扇很具竞争力。大学四年即将结束,为了检验自己的学习情况,我决定使用之前所学习到的硬件只是结合相关的软件基础来制作一个基于单片机的智能温控风扇。

基于对人性化与智能化相结合的考虑,同时基于对价格的考虑,本设计决定制作一个基于51单片机的智能温控风扇,该风扇具有随温度自动调节风速的功能,并且在无人时可以自动关闭,而且可以根据每个人的不同情况来设定基准温度,从而实现了人性化与智能化的双重目标。

1

3.1.4 LCD1602简介

字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,目前常用16*1,16*2,20*2和40*2行等的模块。一般1602字符型液晶显示器实物如图:

图5 LCD1602

LCD1602主要技术参数:

显示容量:16×2个字符 芯片工作电压:4.5—5.5V 工作电流:2.0mA(5.0V) 模块最佳工作电压:5.0V 字符尺寸:2.95×4.35(W×H)mm 第1脚:VSS为地电源。 第2脚:VDD接5V正电源。

第3脚:VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。

第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。

第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。

第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。 第7~14脚:D0~D7为8位双向数据线。 第15脚:背光源正极。 第16脚:背光源负极。 3.1.5对射式光电开关简介

图6 对射式光电开关

光电开关E18的技术参数:

7

1、输出电流 DC/SCR/继电器 Control output:100mA/5V供电 2、消耗电流DC<25mA 3、响应时间 <2ms

4、指向角:≤15°,有效距离3-50CM可调 5、检测物体:透明或不透明体 6、工作环境温度:-25℃~+55℃

7、标准检测物体:太阳光10000LX以下 白炽灯3000LX以下 8、外壳材料:塑料 电气特性: U:5VDC I:100mA Sn:3-50CM

3.2 各部分电路设计

3.2.1 开关复位与晶振电路

单片机系统中,有两个非常重要的电路,一个是开关复位电路,用来对单片机本身和其外部扩展I/O接口电路进行复位,还有一个是晶振电路,用于产生谐振,使单片机得以工作。电路图如图7所示:

图7 晶振电路与复位电路

单片机的XTAL1和XTAL2用来外界石英晶体和微调电容,连接单片机内OSC的定时反馈电路。如图所示,当按下按键开关是,系统复位一次。其中电容C1、C2为20pF,C3为10uF,电阻R1为10k,晶振为12MHz。

3.2.2 独立控制键盘电路

本设计还有两个独立按键,分别连接单片机的P3.2口和P3.3口,如图8所示:

8

图8 按键电路

独立按键S1和S2一端与单片机相连,另一端接地,当按下时,P3口读取低电平有效。系统上电进入工作后,扫描按键子程序,此时可以设定温度。其中S1为加按键,S2为减按键,每按下一次后,都会使对应的预设值加一或者减一。 3.2.3 LCD显示电路

本设计采用的是LCD1602A作为显示模块,它与单片机的连接如图9所示。其中第一行显示温度与红外探测结果,温度显示到小数点后2位。第二行显示设定温度与风扇的风力等级。

图9 LCD连接电路

3.2.4 红外探测电路

红外光电开关一共有三个接口,一个接+5V,一个接地,还有一端与单片机相连,输出高电平或者低电平信号,在电路中直接用按键开关代替了,就是按键电路中的开关S3。

9

3.2.5 温度采集电路

DS18B20数字温度传感器通过其内部计数时钟周期来的作用,实现了特有的温度测量功能。低温系数振荡器输出的时钟信号通过由高温度系数振荡器产生的门周期而被计数,计数器预先置有与-55℃相对应的一个基权值。如果计数器计数到0时,高温度系数振荡周期还未结束,则表示测量的温度值高于-55℃,被预置在-55℃的温度寄存器中的值就增加1℃,然后这个过程不断重复,直到高温度系数振荡周期结束为止。此时温度寄存器中的值即为被测温度值,这个值以16位二进制形式存放在存储器中,通过主机发送存储器读命令可读出此温度值,读取时低位在前,高位在后,依次进行。由于温度振荡器的抛物线特性的影响,其内用斜率累加器进行补偿。DS18B20由于直接可以输出数字信号,所以可以直接输出给单片机,但是需要在输出口上接一个上拉电阻来确保工作,连接图如图10所示:

图10 DS18B20连接电路

3.2.6 风扇驱动电路

本设计采用单片机模拟PWM波的方式通过I/O口输出TTL信号,再通过一个电机驱动模块L298N来驱动12V直流无刷电机工作,从而实现电扇转速的调节。

红外探测控制电机开关,键盘改变设置的温度,然后和预设的温度进行比较,通过软件判断后由单片机的P3.4口输出脉冲信号,经由L298N驱动风扇直流电机电路,实现电机的启动和转速的改变。当环境温度改变时,电机的转速会按照设定的程序相对进行改变,温度升高转速变快,温度降低,转速变慢,温度过低时自动停止,无人状态下也会自动停止。当有人出现后,并且温度高于预设温度,电机重新开始工作。如图12所示:

图11 L298N驱动电路

10

图12 直流电机连接电路

4 软件设计

软件编写有C语言和汇编语言两种,这两种语言我都有所了解,两种语言各有特点。

C语言具有编写简单,容易上手的特点,而且看起来条理清晰,便于修改,能够快速准确的找到错误并进行改正。相对于汇编语言,作为一种低级的机器语言,读程序相对繁琐,但程序写好后意思明了,效率也要高于C语言编写的程序,具有很好的开发功能。

结合自身实际,我还是选择了C语言,容易上手,可以更好的调试与编译程序。

4.1 主程序流程图

主程序开始

与预设温度进行比调用电机控制函数 图13 主程序流程图

程序初始读取DS18B20温度读取预设温度无人 显示温度 调用键盘扫描函数 显示设定温度 判断是否有显示有人/无人 有人 显示风速等级 主程序如下:

11

_nop_(); //等待一个机器周期

dq=0;

//将数据线从高拉低时即启动写时序

//利用与运算取出要写的某位二进制数据,并将其送到数据

dq=date&0x01;

线上等待DS18B20采样

}

4.3.2 温度处理程序

温度处理程序将上一把操作中读取的温度值进行转换,将二进制数转化为十进制数,然后输出数字,直接交给显示程序显示。

其流程图16所示:

输出十进制整数 图16 温度处理子程序流程图

}

date>>=1; delayus(4); dq=1;

//4us //释放数据线

delayus(4); //稍作延时,给硬件一点反应时间

初始化 等待初始化完成 启动温度测量 等待转化完成 读取高八位和低八位 处理数据 其子程序如下:

//**************做好读温度的准备**************

uint read_temp() {

17

uint g,d,m; uint c; m=1;

m=clean_ds18b20(); //初始化完成m=0 while(m);

//等待初始化完成 write_ds18b20_date(0xcc); //跳过rom write_ds18b20_date(0x44);

//启动温度测量

delayus(100); m=clean_ds18b20(); while(m);

//等待转化完成 write_ds18b20_date(0xcc); //跳过rom write_ds18b20_date(0xbe); //读数据命令 d=read_ds18b20_date();

//读低8位数据

g=read_ds18b20_date();

//读高3位数据

g<<=4; g=g+(d>>4);

//整数部分

g=g*100;

d=(d&0x0f)*0.0625*100;

c=g+d; return c;

}

4.4 键盘扫描子程序

本设计配备两个输入按键,分别可以对设定温度进行加减,此子程序用来检测按键输入。流程图17所示: 扫描按键 判断是否按下 延时判断是否按下 设定温度加一(减一)

图17 键盘扫描流程图

18

子程序如下:

//****************键盘输入********************

void keyscan(void) { }

if(key1==0) { }

if(key2==0)

//延时判断key2是否按下

//判断key2是否按下

//延时判断key1是否按下

//判断key1是否按下

delay(10); if(key1==0) { }

set++;

//设定温度加1

if(key1==100) set=18;

while(!key1);

{ }

delay(10); if(key2==0) { }

set--; if(set==0) set=18;

//设定温度减1

while(!key2);

4.5 温度比较处理子程序

温控风扇设定5个档位,根据温度的变化来变化风扇的转速。输出的型式采用高地电平的交替变换,档位越高,输出高电平的次数越多,相应的输出低点平的次数变少,反之,档位越低,输出的高电平次数越少,相应的输出的高电平的次数变多。低于设定温度时,风扇不转,大于最大挡位时满负荷运转。

流程如图18所示:

19

读取温度 是 温度比较 低于设定温度 风扇不转 否 低于设定温度+1 是 设置为1档 否 低于设定温度+3 是 设置为2档 否 低于设定温度+5 是 设置为3档 否 低于设定温度+7 是设置为4档 否

高于设定温度+7 是 设置为5档 图18 温度比较处理流程图

子程序如下:

//*************温度处理函数****************

void deal(uint temp) //温度处理

{ if(temp<=set) { //温度低于设置值

h=0; l=5;

}

else if((temp>set)&&(temp<=(set+1))) //温度低于设定值+1

{ h=1; l=4;

}

else if((temp>(set+1))&&(temp<=(set+3)))

//温度高于设定值+1,小于设定值+3

20

}

{ }

else if((temp>(set+3))&&(temp<=(set+5))) { }

else if((temp>(set+5))&&(temp<=(set+7))) { }

else if(temp>(set+7)) { h=5; l=0; }

//温度高于设定值+7

h=4; l=1;

//温度值高于设定值+5,小于设定值+7

h=3; l=2;

//温度高于设定值+3,小于设定值+5

h=2; l=3;

4.6 电机控制程序(包含红外探测)

本设计最终驱动电机的子程序,包含了红外检测。首先进行红外检测判断,若没有人,电机不转,若有人,承接上函数设定的档位,模拟PWM波输出,一次输出5个电平,1档就输出一个高电平,四个低电平,2档输出两个高电平,三个低电平,依次类推。

流程图如图19所示:

电机输输出模拟PWM波 模拟PWM高低电平次数 红外探测是否有人 电机不转 开始 图19 红外探测电机输出流程图

21

本文来源:https://www.bwwdw.com/article/q11g.html

Top