毕业设计论文基于单片机的智能电风扇控制系统.doc

上传人:sccc 文档编号:4872260 上传时间:2023-05-20 格式:DOC 页数:28 大小:802.02KB
返回 下载 相关 举报
毕业设计论文基于单片机的智能电风扇控制系统.doc_第1页
第1页 / 共28页
毕业设计论文基于单片机的智能电风扇控制系统.doc_第2页
第2页 / 共28页
毕业设计论文基于单片机的智能电风扇控制系统.doc_第3页
第3页 / 共28页
毕业设计论文基于单片机的智能电风扇控制系统.doc_第4页
第4页 / 共28页
毕业设计论文基于单片机的智能电风扇控制系统.doc_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《毕业设计论文基于单片机的智能电风扇控制系统.doc》由会员分享,可在线阅读,更多相关《毕业设计论文基于单片机的智能电风扇控制系统.doc(28页珍藏版)》请在三一办公上搜索。

1、第1节 引 言21.1 智能电风扇控制系统概述 21.2 本设计任务和主要内容 2第2节 方案论证 42.1 温度传感器的选用42.2 控制核心的选择4 2.3 显示电路的选择 5第3节 系统主要硬件电路设计 63.1 数字温度传感器模块设计63.2 电机调速与控制模块设计63.3 电机调速模块设计93.4 温度显示与控制模块设计123.5 键盘模块设计14第4节 程序设计与仿真 164.1 数字温度传感器模块程序设计164.2 显示模块程序流程194.3 电机调速与万年历程序流程234.4 按键总控制流程264.5 主程序38第5节 成品调试 38 5.1 静态测试385.2 联机调试38结

2、 束 语 39参考文献 41基于单片机的智能电风扇控制系统第1节 引 言 电风扇曾一度被认为是空调产品冲击下的淘汰品,其实并非如此,市场人士称,家用电风扇并没有随着空调的普及而淡出市场,近两年反而出现了市场销售复苏的态势。其主要原因:一是风扇和空调的降温效果不同空调有强大的制冷功能,可以快速有效地降低环境温度,但电风扇的风更温和,更加适合老人儿童和体质较弱的人使用;二是电风扇有价格优势,价格低廉而且相对省电,安装和使用都非常简单。尽管电风扇有其市场优势,但传统电风扇还是有许多地方应当进行改良的,最突出的缺点是它不能根据温度的变化适时调节风力大小,对于夜间温差大的地区,人们在夏夜使用电风扇时可能

3、遇到这样的问题:当凌晨降温的时候电风扇依然在工作,可是人们因为熟睡而无法察觉,既浪费电资源又容易引起感冒,传统的机械定时器虽然能够控制电风扇在工作一定后关闭,但定时范围有限,且无法对温度变化灵活处理。鉴于以上方面的考虑,我们需要设计一种智能电风扇控制系统来解决这些问题。1.1 智能电风扇控制系统概述 传统电风扇是220V交流电供电,电机转速分为几个档位,通过人为调整电机转速达到改变风力大小的目的,亦即,每次风力改变,必然有人参与操作,这样势必带来诸多不便。本设计中的智能电风扇控制系统,是指将电风扇的电机转速作为被控制量,由单片机分析采集到的数字温度信号,再通过可控硅对风扇电机进行调速。从而达到

4、无须人为控制便可自动调整风力大小的效果。1.2 设计任务和主要内容本设计以STC89C51单片机为核心,通过温度传感器对环境温度进行数据采集,从而建立一个控制系统,使电风扇随温度的变化而自动变换档位,实现“温度高,风力大,温度低,风力弱”的性能。另外,通过键盘控制面板,用户可以在一定范围内设置电风扇的最低工作温度,当温度低于所设置温度时,电风扇将自动关闭,当高于此温度时电风扇又将重新启动。本设计主要内容如下: 风速设为从高到低5个档位,可由用户通过键盘手动设定。 当温度每降低2则电风扇风速自动下降一个档位。 当温度每升高2则电风扇风速自动上升一个档位。 用户可设定电风扇最低工作温度,当低于该温

5、度时,电风扇自动停转。第二节 方案论证 本系统实现风扇的温度控制,需要有较高的温度变化分辨率和稳定可靠的换档停机控制部件。2.1 温度传感器的选用 温度传感器可由以下几种方案可供选择: 方案一:选用热敏电阻作为感测温度的核心元件,通过运算放大器放大山于温度变化引起热敏电阻电阻的变化、进而导至的输出电压变化的微弱电压变化信号,再用AD转换芯片ADC0809将模拟信号转化为数字信号输入单片机处理。 方案二:采用热电偶作为感测温度的核心元件,配合桥式电路,运算放大电路和AD转换电路,将温度变化信号送入单片机处理。 方案三:采用数字式集成温度传感器 DS18B20作为感测温度的核心元件,直接输出数字温

6、度信号供单片机处理 对于方案一,采用热敏电阻有价格便宜、元件易购的优点,但热敏电阻对温度的细微变化不敏感,在信号采集、放大、转换过程中还会产生失真和误差,并且由于热敏电阻的R-T关系的非线性,其本身电阻对温度的变化存在较大误差,虽然可以通过一定电路予以纠正,但不仅将使电路复杂稳定性降低,而且在人体所处温度环境温度变化中难以检测到小的温度变化。故该方案不适合本系统。 对于方案二,采用热电偶和桥式测量电路相对于热敏电阻其对温度的敏感性和器件的非线性误差都有较大提高,其测温范围也非常宽,从一50摄氏度到1600摄氏度均可测量。但是依然存在电路复杂,对温度敏感性达不到本系统要求的标准,故不采用该方案。

7、 对于方案三,山于数字式集成温度传感器DS18B20的高度集成化,大大降低了外接放大转换等电路的误差因素,温度误差很小,并且由于其感测温度的原理与上述两种方案的原理有着本质的不同,使得其温度分辨力极高。温度值在器刊内部转换成数字量直接输出,简化了系统程序设计,又由于该传感器采用先进的单总线技术(1-WR工E),与单片机的接口变的非常简洁,抗干扰能力强。关于DS18B20的详细参数参看下面“硬件设计”中的器件介绍.2.2 控制核心的选择 方案一:采用电压比较电路作为控制部件。温度传感器采用热敏电阻或热电偶等,温度信号转为电信号并放大,山集成运放组成的比较电路判决控制风扇转速,当高于或低于某值时将

8、风扇切换到相应档位。 方案二:采用单片机作为控制核心。以软件编程的方法进行温度判断,并在端口输出控制信号。 对于方案一,采用电压比较电路具有电路简单、易于实现,以及无需编写软件程序的特点,但控制方式过于单一,不能自由设置上下限动作温度,无法满足不同用户以及不同环境下的多种动作温度要求,故不在本系统中采用。 对于方案二,以单片机作为控制器,通过编写程序不但能将传感器感测到的温度通过显示电路显示出来,而且用户能通过键盘接口,自由设置上下限动作温度值,满足全方位的需求.并且通过程序判断温度具有极高的精准度,能精确把握环境In度的微小变化。故本系统采用方案二2.3 显示电路 方案一:采用五位共阳数码管

9、显示温度,动态扫描显示方式. 方案二:采用液晶显示屏LCD显示温度 对于方案一,该方案成本低廉,显示温度明确醒目,在夜间也能看见,功耗极低,显示驱动程序的编写也相对简单,这种显示方式得到广泛应用。不足的地方是扫描显示方式是使五个LED逐个点亮,因此会有闪烁,但是人眼的视觉暂留时间为20M8,当数码管扫描周期小于这个时间时人眼将感觉不到闪烁,因此可以通过增大扫描频率来消除闪烁感。 对于方案二,液晶体显示屏具有显示字符优美,不但能显示数字还能显示字符甚至图形的优点,这是LED数码管无法比拟的。但是液晶显示模块价格昂贵,驱动程序复杂,从硬件电路复杂性原则考虑,本系统采用方案二。第三节 系统主要硬件电

10、路设计 3.1 总体硬件设计系统总体设计框图如图3-1所示键盘输入温度显示单片机系统电机控制模块数字温度传感模块图3-1 系统原理框图 对于单片机中央处理系统的方案设计,根据要求,我们可以选用STC89C51单片机作为中央处理器。作为整个控制系统的核心,STC89C51内部已包含了定时器、程序存储器、数据存储器等硬件,其硬件能符合整个控制系统的要求,不需要外接其他存储器芯片和定时器件,方便地构成一个最小系统。整个系统结构紧凑,抗干扰能力强,性价比高。是比较合适的方案3.2 数字温度传感器模块设计3.2.1 DS18B20单线数字温度传感器简介 DS18820单线数字温度传感器是Dallas半导

11、体公司开发的世界上第一片支持“一线总线”接口的温度传感器。它具有3引脚TO-92小体积封装形式。温度测量范围为一55C+125C,可编程为9位12位A/D转换精度,测温分辨率可达0. 06250C.被测温度用符号扩展的16位数字量方式串行输出.工作电压支持3V-一一5. 5V的电压范围,既可在远端引入,也可采用寄生电源方式产生。DS18B20还支持“一线总线”接口,多个DS18B20可以并联到3根或2根线上,CPU只需一根端口线就能与诸多DS18B20通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路.DS18820内部结构主要由4部分组成:64位ROM,温度传感器、非挥发的温度报警触发

12、器TH和TL,配置寄存器。其管脚排列如图2所示,DQ为数字信号端,cnIl为电源地,VDD为电源输入端口。 图3.1 DS18B20内部结构 图3.2 DS18B20外形与管脚温度传感器也可以选用LM324A的运算放大器,将其设计成比例控制调节器,输出电压与热敏电阻的阻值成正比,但这种方案需要多次检测后方可使采样精确,过于烦琐。所以我采用更为优秀的DS18B20数字温度传感器,它可以直接将模拟温度信号转化为数字信号,降低了电路的复杂程度,提高了电路的运行质量。3.2.2 温度传感器模块组成本模块以DS18B20作为温度传感器,STC89C51作为处理器,配以温度显示作为温度控制输出单元。整个系

13、统力求结构简单,功能完善。电路图如图3.3所示。 图3.3 温度传感器模块DS18B20进行现场温度测量,将测量数据送入STC89C51的P3.3口,经过单片机处理后显示温度值,并与设定温度值的上下限值比较,若高于设定上限值或低于设定下限值则控制电机转速进行调整。3.2.3 DS18B20的温度处理方法DS18B20直接将测量温度值转化为数字量提交给单片机,工作时必须严格遵守单总线器件的工作时序。温度值/ 数字输出(二进制) 数字输出(十六进制) +85 0000 0101 0101 0000 0550H +25.625 0000 0001 1001 0001 0191H +10.125 00

14、00 0000 1010 0010 00A2H+0.5 0000 0000 0000 1000 0008H 0 0000 0000 0000 0000 0000H-0.5 1111 1111 1111 1000 FFF8H -10.125 1111 1111 0110 1110 FF5EH -25.625 1111 1111 0110 1111 FF6FH -55 1111 1100 1001 0000 FC90H表2-1 部分温度值与DS18B20输出的数字量对照表 3.3 电机调速与控制模块设计电机调速是整个控制系统中的一个重要的方面。通过控制L298来调节PWM输出,使输出端电压发生改变

15、,从而使施加在电风扇的输入电压发生改变,以调节风扇的转速,实现各档位风速的调速。3.3.1 L298芯片介绍L298驱动芯片是SGS公司的产品,内部包含4通道逻辑驱动电路。是一种二相和四相电机的专用驱动器,即内包含二个H桥的高压大电六双全桥式驱动器,接收标准TTL逻辑电平信号,可驱动46V、2A以下的电机。实物图如图3.1所示。图3.1 实物图图3.2 管脚图L298有两路电源分别为逻辑电源6V和动力电源12V,ENA、ENB直接接入5V电源使电机进入使能状态,IN1和IN2用来控制电路的逻辑功能状态。由于使用的电机是线圈式,在从运行状态突然转到停止状态和从顺时状态突然转换到逆时针状态时会形成

16、很大的方向电流,在电路中加入二极管就是在产生方向电流的时候进行泄流,保护芯片的安全。下图为L298的逻辑功能状态。3.3.2 电机调速原理我们采用的是PWM来实现直流电动机的调速,优点:控制原理简单,输出波动小,线性好,对邻近电路干扰小。缺点是:功率低,散热问题严重。电动机的电驱绕组两端的电压平均值U为:U=(t1*U)/(t1+t2)=(t1*U)/T=D*U式中D为占空比,D=t/T。占空比D表示了在一个周期T里开关管导通的时间与周期的比值。D的变化范围为0=D0;i-)DQ = 0; / 给脉冲信号dat=1;DQ = 1; / 给脉冲信号if(DQ)dat|=0x80;delay(10

17、);return(dat);/*写一个字节 */WChar(unsigned char dat)unsigned char i=0;for (i=8; i0; i-) DQ = 0; DQ = dat&0x01; delay(10); DQ = 1; dat=1;/*读取温度*/ReadTemp(void)unsigned char a=0;unsigned char b=0;unsigned int t=0;Init_DS18B20();WChar(0xCC); / 跳过读序号列号的操作WChar(0x44); / 启动温度转换delay(100);Init_DS18B20();WChar(

18、0xCC); /跳过读序号列号的操作WChar(0xBE); /(读取温度寄存器) 前两个就是温度a=RChar(); /低八位b=RChar(); /高八位t = (b*256+a)*25; /传感器返回值除16得实际温度值/为了得到2位小数位,先乘100,再除1 6 (先乘以25再除以4)return( t 2 );#endif4.2 显示模块程序流程4.2.4 程序如下(以下程序为一个LCD1602.h的程序包):#ifndef _ _H_#define _LCD1602_H_ #define LCD_DB P0sbit LCD_RS=P20;/命令数据端口sbit LCD_RW=P21

19、;/读写控制端口sbit LCD_E=P22;/使能端口/*定义函数*/void LCD_init(void);/初始化函数void LCD_write_command(unsigned char command);/写指令函数aovoid LCD_write_data(unsigned char dat);/写数据函数void LCD_disp_char(unsigned char x,unsigned char y,unsigned char dat);/在某个屏幕位置上显示一个字符,X(0-16),y(1-2)void delay_n40us(unsigned int n);/延时函数/

20、*初始化函数*/void LCD_init(void) LCD_write_command(0x01);/清除屏幕显示delay_n40us(100);/实践证明,我的LCD1602上,用for循环100次就能可靠完成清屏指令。LCD_write_command(0x38);/设置8位格式,2行,5x7LCD_write_command(0x0c);/整体显示,关光标,不闪烁LCD_write_command(0x06);/设定输入方式,增量不移位/*写指令函数*void LCD_write_command(unsigned char dat)LCD_DB=dat;LCD_RS=0;/指令LC

21、D_RW=0;/写入LCD_E=1;/允许LCD_E=0;delay_n40us(2);/实践证明,我的LCD1602上,用for循环2次就能完成普通写指令。/*写数据函数*void LCD_write_data(unsigned char dat)LCD_DB=dat;LCD_RS=1;/数据LCD_RW=0;/写入LCD_E=1;/允许LCD_E=0;delay_n40us(2);/*显示一个字符函数*void LCD_disp_char(unsigned char x,unsigned char y,unsigned char dat)unsigned char address;if(y

22、=1)address=0x80+x;elseaddress=0xc0+x;LCD_write_command(address);LCD_write_data(dat);/*延时函数*void delay_n40us(unsigned int n) unsigned int i; unsigned char j; for(i=n;i0;i-) for(j=0;j=80) m_second_1=0;second+;if(second=1) change=1;if(second=60)second=0;g_minute+;if(g_minute=10) s_minute+;g_minute=0; i

23、f(s_minute=6) g_hour+;s_minute=0;g_minute=0;if(g_hour=10) s_hour+;g_hour=0;if(s_hour=2)&(g_hour=4) g_day+;g_hour=0;s_hour=0;if(g_day=10) s_day+;g_day=0;if(s_day=3)&(g_day=1) g_mouth+;g_day=0;s_day=0;if(g_mouth=10) s_mouth+;g_mouth=0;if(s_mouth=1)&(g_mouth=3) g_year+;g_mouth=0;s_mouth=0;if(g_year=10)

24、 s_year+;g_year=0;if(s_year=2)&(g_year=0) s_year=0;g_year=0;#endif注:程序中还包含一个万年历程序。(2)、以下程序为time00.h的程序包#ifndef _time00_H_#define _time00_H_void t0() interrupt 3TR1=0;TH1 = (65535-1)/255;TL1 = (65535-1 )%255;TR1=1;if(temp0temp) fl=0;Vo1=0;pwm=0;else m_second+;if(m_second=Vo2) fl=1;Vo1=0; pwm=1; else

25、if(m_second=Vo3) fl=0;Vo1=0;m_second=0;pwm=1;#endif注:通过Vo2、Vo3的值来控制PWM输出。4.4 按键总控制流程以下程序为key.h的程序包#ifndef _key_H_#define _key_H_unsigned int tmp;unsigned char temp,temp0,s_tmp_s=1,g_tmp_s=8;sbit keyM_D=P27;sbit keyM_A=P26;sbit pwm= P12;sbit keya=P23;sbit f1= P10;sbit key_9=P25;sbit key_8=P24;unsigne

26、d char i=0;unsigned char wu=1,Vo2,Vo3;bit change;unsigned char g_hour=0,s_hour=1,g_minute=0,s_minute=3,second,g_day=0,s_day=2,s_mouth=0,g_mouth=6,g_year=1,s_year=1,Modle=0;/sbit Vo1=P11;unsigned char str_temp03=0,0,0;unsigned char str_temp5=0,0,0,0,0;unsigned char str_Modle2=0,0;unsigned char str_date9=0,0,/,0,0,/,0,0,0;unsigned char str_time9=0,0,:,0,0,:,0,0,0;/用于装载要在LCD上显示的时间的ASCALL码unsigned char code table = 0,0,1,2,3,4,5,6,7,8,9,0; void DelayXus(int x) unsigned char j; while (x

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

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号