《基于51单片机的温控智能电风扇(共31页).doc》由会员分享,可在线阅读,更多相关《基于51单片机的温控智能电风扇(共31页).doc(31页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上浙江理工大学单片机系统设计及应用实验设计报告题 目: 基于51单片机的温控智能电风扇 专 业: 机械电子工程 班 级: 机电11(1)班 姓 名: 叶惠芳 学 号: 02 指导教师: 袁嫣红 机械与自动控制学院2014 年 7 月 3 日目录摘要电风扇与空调的降温效果不同,相较于空调的迅速降低环境温度不同,电风扇更加温和,适宜于体质较弱的老人与小孩。并且,电风扇价格实惠,使用简单。现在市面上的电风扇大多只能手动调速,还外加一个定时功能。对于温差较大的夜晚,若不能及时改变风速大小后停止,很容易感冒着凉。所以本课程设计以AT89C51为核心控制系统根据外界温度的变化对电风
2、扇进行转速控制,以实现自动换挡功能。除此之外,我们还设置了一个用户可以自己通过键盘设置最低温度的模块,一旦外界温度等于或是低于该设置温度,电机自动停止运行。关键词:单片机 温度传感器 驱动器 智能调速第一章 课程设计的目标及主要内容1.1课程设计的目标及意义夏天到了,空调是现代家庭中的主流降暑电器,但是对于老人与小孩,体质相对来说较弱,空调的使用易于受凉,所以家用电风扇,风速温和,既可以达到清凉的目的,又可防止空调带来的弊端。然而,现在市面上的家用电风扇大多只能手动调速再加一个定时器,功能单一。晚上后半夜与前半夜气温差比较大,若不能及时减小风速,很可能感冒。所以,我们在现有电风扇的功能至上增加
3、了温度控制模块,电风扇的电机转速可以根据外界温度的改变而改变。我们的主要实现的功能有以下几点:1. 用户可以手动设置温度下限,外界温度一旦与该设定温度相等或是小于该温度,电机自动停止转动。2. 当温度每降低2或是升高2,电机转速自动下降一个档位。1.2温控智能电风扇的主要内容和技术关键1.2.1课程设计的主要内容(1) 课程设计采用了AT89C51单片机作为主要处理芯片,DS18B20作为温度传感器感知和传递外界环境的变化,然后通过51单片机进行一系列处理然后对12V的直流电动机进行转速的控制。(2) 在直流电动机转速控制模块,采用了L298驱动器对电机进行驱动。在显示方面,用7SEG-MPX
4、6-CC-BLUE数码管来显示外界温度的变化以及人为设定的温度值。1.2.2技术关键(1) 温度传感器DS18B20的工作原理以及它内部对温度数据的处理方式,51单片机如何用程序将其输出数据读入,并进行处理。(2) L298驱动器的工作原理以及电机调速处理的实现方式程序的编写。(3) 数码管显示与按键模块直接的联系以及处理程序的编写。第二章 温控智能电风扇控制系统硬件设计2.1课程设计总体硬件设计系统总体设计硬件框图如图2.1所示图2.1系统方块图对于单片机中央处理系统的方案设计,根据要求,我们可以选用AT89C51单片机作为中央处理器。作为整个控制系统的核心,单片机内部已包含了定时器、程序存
5、储器。数据存储器等硬件,其硬件能符合整个控制系统的要求,不需要外接其他存储器和定时器件,方便的构成一个最小系统。整个系统结构紧凑,抗干扰能力强,性价比高,是比较合适的方案。本系统实现风扇的温度控制,需要有较高的温度变化分辨率和稳定可靠的换挡停机控制部件。2.2芯片及主要器件选择2.2.1控制核心的选择采用AT89C51单片机作为控制核心,以软件编程的方法进行温度判断,并在端口输出控制信号。以单片机作为控制器,通过编写程序不但能将传感器感测到的温度通过显示电路显示出来,而且用户能通过键盘接口,自由设置温度下限,满足用户需求,并且通过程序判断温度具有极高的精准度,能精确把握环境的微小变化。2.2.
6、2温度传感器的选用采用数字式集成温度传感器DS18B20作为感测温度的核心元件,直接输出数字温度信号共单片机处理。2.2.3显示电路采用7SEG-MPX6-CC-BLUE数码管显示温度。数码管显示温度清晰简单,价格优惠,驱动程序简单。2.3芯片及器件介绍2.3.1 AT89C51单片机AT89C51是美国ATMEL公司生产的低电压、高性能CMOS8位单片机,片内4bytes的可反复擦写的只读程序存储器(PEROM)和128 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置用8位中央处理器(CPU)和Flash存
7、储单元,功能强大。AT89C51单片机可灵活应用于各种控制领域。AT89C51单片机提供以下标准功能:4K字节Flash闪速存储器,128字节内部RAM,32个I/O口线,两个16位定时、计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。同时,AT89C51单片机可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU的工作,但允许RAM,定时、计数器,串行通行口及中断系统继续工作。掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。芯片封装及管脚如图2.2图2.2 AT89C51封装及管脚图2.3.2 L29
8、8芯片介绍L298驱动芯片是SGS公司的产品,内部包含4通道逻辑驱动电路。是一种二相和四相电机的专用驱动器,即内包含两个H桥的高压大电压六双全桥式驱动器,接收准TTL逻辑电平信号,可驱动46V、2A以下的电机。实物图如图2.3所示。 图2.3实物图 图2.4管脚图L298有两路电源分别为逻辑电源6V和动力电源12V,ENA、ENB直接接入5V电源使电机进入使能状态,IN1、IN2用来控制电路的逻辑功能状态。由于使用的电机是线圈式,在运行状态突然转到停止状态和从顺时状态突然转换到逆时针状态时会形成很大的方向电流,在电路中加入二极管就是在产生方向电流的时候进行泄流,保护芯片安全。L298的逻辑功能
9、状态见表2.1 。表2.1 L298逻辑功能状态图IN1IN2ENA电机状态XX0停止101顺时针011逆时针000停止110停止2.3.3 DS18B20温度传感器DS18B20是美国DALLAS半导体公司继DS1820之后最新推出的一种改进型智能温度传感器。与传统的热敏电阻相比,它能够直接读出被测温度并且可根据实际要求通过简单的编程实现912位的数字值读数方式。可以分别在93.75 ms和750 ms内完成9位和12位的数字量,并且从DS18B20读出的信息或写入DS18B20的信息仅需要一根口线(单线接口)读写,温度变换功率来源于数据总线,总线本身也可以向所挂接的DS18B20供电,而无
10、需额外电源,因而使用DS18B20可使系统结构更趋简单可靠性更高。他在测温精度、转换时间、传输距离、分辨率等方面较DS1820有了很大的改进,给用户带来了更方便的使用和更令人满意的效果。 DS18B20简介:(1) 独特的单线接口方式:DS18B20与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。(2) 在使用中不需要任何外围元件。(3) 可用数据线供电,电压范围:+3.0 +5.5 V。(4) 测温范围:-55 +125 。固有测温分辨率为0.5 。(5) 通过编程可实现912位的数字读数方式。(6) 用户可自设定非易失性的报警上下限值。(7) 支持多点组网功能,多
11、个DS18B20可以并联在惟一的三线上,实现多点测温。(8) 负压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作。DS18B20直接将测量温度值转化为数字量提交给单片机,工作时必须严格遵守单总线器件的工作时序。引脚排列如图2.5所示。 引脚说明:GND:接地DQ:数据I/OVDD:可选VDDNC:空脚 图2.5 引脚排列表2.2 部分温度值与DS18B20输出的数字量对照表温度值/ 数字输出(二进制) 数字输出(十六进制)+125 0000 0111 1101 0000 07D0H+85 0000 0101 0101 0000 0550H+25.625 0000 0001 100
12、1 0001 0191H+10.125 0000 0000 1010 0010 00A2H+0.5 0000 0000 0000 1000 0008H0 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 FC90H2.3.4LED数码管简介本系统选用五个LED数码管来进行温度显示。LED又称为数码管,它主要是由8段发光二极管组成的不同组合,其中 ag为数字和
13、字符显示段,dp为小数点的显示,通过ag这7个发光二极管点亮的不同组合,可以显示09和AF共16个数字和字母。LED数码管可以分为共阴极和共阳极两种结构,如下图3.1.3所示。共阴极结构把8个发光二极管阴极连在一起,共阳极结构把8个发光二极管阳极连在一起。通过单片机引脚输出高低电平,可使数码管显示相应的数字或字母,这种使数码管显示字形的数据称字形码,又称段选码。图2.6七段LED数码管一个共阴极数码管接至单片机的电路,要想显示数字“7”须a、b、c这3个显示段发光 (即这3个字段为高电平)只要在P0口输入(07H)即可。这里07H即为数字7的段选码。字形与段选码的关系见表2.2所示。表2.3
14、LED段选码表显示字符共阴极段码共阳极段码显示字符共阴极段码共阳极段码03fHC0H87fH80H106HF9H96fH90H25bHA4HA77H88H34fHB0HB7fH83H466H99HC39HC6H56dH92HD3fHA1H67dH82HE79H86H707HF8HF71H8EH2.4主要硬件电路总体硬件原理图见附录一。2.4.1温度检测电路设计本模块以DS18B20作为温度传感器,AT89C51作为处理器,配以温度显示作为温度控制输出单元。整个系统力求结构简单,功能完善。DS18B20进行现场温度测量,将测量数据送入AT89C51的P1.7口,经过单片机处理后显示温度值,并与设
15、定温度值的下限值比较,若高于或低于设定的下限值则控制电机转速进行调整。电路图如图2.6所示。图2.72.4.2 电机调速电路设计根据图2.7所示连接好电路图,A/B接入单片机上通过程序来控制L298输出来控制直流电机的转动。PWM1赋值为1时,使能直流电机转动。图2.8电机调速电路2.4.3 PWM调速原理我们采用的是PWM来实现直流电动机的调速,优点:控制原理简单,输出波动小,线性好,对邻近电路干扰小。缺点:功率低,散热问题严重。PWM调速原理:输出电压 (2-1) (2-2)式2-1中称为占空比。占空比D表示了在一个周期T里开关管导通的时间与周期的比值。D的变化范围为0=D=1。当电源电压
16、U不变的情况下,输出电压的平均值U取决于占空比D的大小,改变D值也就改变了输出电压的平均值,从而达到控制电动机转速的目的,即实现PWM调速。2.4.4 LED数码管显示电路及按键电路7SEG-MPX6-CC-BLUE 数码管与单片机输出端相连电路以及按键输入电路如图2.8所示。图2.9显示电路连接第三章 温控智能电风扇控制系统软件设计与实现本系统的运行程序采用C语言编写,采用模块化设计,整体程序由主程序和温测显示、键盘处理以及电机控制等子程序模块组成。3.1 主程序下图为主程序简易框图。图3.1 主程序简易框图3.2 数字温度传感器模块如图3.2所示,主机控制DS18B20数字温度传感器完成温
17、度转换工作必须经过三个步骤:初始化、ROM操作指令、存储器操作指令。单片机所用的系统频率为12MHz。根据DS18B20数字温度传感器进行初始化时序、读时序和写时序分别可编写3个子程序:初始化子程序、写子程序、读子程序。图3.2 数字温度传感器模块程序流程图DS18B20芯片功能命令表如下:命令 说明 协议READ ROM 读取激光ROM64位 33HMATCH ROM 匹配ROM 55H SKIP ROM 跳过ROM CCHSEARCH ROM 搜索ROM F0HALARM SEARCH 告警搜索 ECHWRITE SCRATCHPAD 把字节写入暂存器的地址2和3 4EHREAD SCRA
18、TCHPAD 读取暂存器和CRC字节 BEHCOPY SCRATCHPAD 把暂存器内容拷贝到非易失性存储器中 48HCONVERT T 开始温度转换 44HRECALL E2 把非易失性存储器中的值召回暂存器 B8HREAD POWER SUPPLY 读电源供电方式:0为寄生电源,1为外电源 B4H3.3电机调速与控制子模块本模块采用PWM来实现直流电动机的调速。控制流程如图3.3所示。图3.3电机控制流程图第四章 调试结果与总结4.1 调试结果课程设计仿真调试采用的是Protues仿真软件,按照原理图将各器件画在软件中。程序编写采用Keil软件,用C语言编写。这里我们设定温度为20为最低温
19、度进行仿真。0档:=27即温度每上升2,电机转速即上升一档。26时,仿真结果: 28时,仿真结果: 4.2 课程设计总结本系统以AT89C51单片机为核心,单片机主要完成对外界环境温度信号的采集、处理、显示等功能;用Protues软件绘制电路原理图及仿真测试和DXP软件绘制PCB电路印刷板图,利用MCS-51 C语言编制。运行程序该系统的主要特点是:(1) 适用性强,用户只需对界面参数进行设置并启动系统正常运行便可满足不同用户对最适合温度的要求,实现对最适温度的实时监控。(2) 随时可以根据软件编写新的功能加入产品。操作界面可扩展性强,只要稍加改变,即可增加其他按键的使用功能。本系统温度控制采
20、用DS18B20数字温度传感器作为感温元件。采用L298驱动器利用PWM占空比调速原理对电动机转速进行控制,以达到目标。基于AT89C51单片机所设计与研制的电风扇智能调速系统,造价低且具有稳定性高、性能优越、节约电能等优点,在夜间无需定时,同样能给人们带来更多的方便。本设计在软件仿真模拟检测中运行较好,但数码管显示部分有一点问题,在对温度设置时,数码管其他位数字会跟随跳变,但数值不变。功能上的缺憾是对于两个档之间的临界温度处理不好,并且档位太少,还有待改进。总的来说,本次课程设计学到了许多东西,对今后个人的发展有积极的作用。参考文献【1】 刘坤、郑锋、王巧芝等,51单片机典型应用开发范例大全
21、M,北京:中国铁道出版社,2011.10 【2】张俊谟,单片机中级教程原理与应用(2版)M,北京:北京航空航天大学出版社,2006.10【3】张玉杰,基于单片机的温度控制智能电风扇D,新疆工业高等专科学校【4】冯清秀、邓星钟等,机电传动控制M,武汉:华中科技大学出版社,2011.6附录一附录二PCB板附录三程序清单1.主程序 void main(void) uint ltemp; uchar g,d; /初始化温度 dianji=0; /初始化电机 read_temp(); /读取测温子程序,读取温度数值 delay(1000); /延时 while(1) int1=1; int2=0; di
22、anji=0; ltemp=read_temp(); /温度赋值 delay(2); d=read_ds18b20_date(); /温度的低位 g=read_ds18b20_date(); /温度的高位 ltemp=g; ltemp=8; ltemp=ltemp|d; t=ltemp*0.0625;ltemp=t*10; shi=ltemp/100; /温度十位 ge=(ltemp%100)/10; /温度个位 keyscan(); /读取键盘子程序 delay(2); deal(ltemp/10); /运行温度判断子程序,由温差设置占空比 dianjik(); /运行电机控制子程序 2.
23、温度显示子程序void ledshow(uchar a4,uchar a3,uchar a1,uchar a0) dispbuf0=a0; dispbuf1=a1; dispbuf3=a3; dispbuf4=a4; P2=0xff;/按键个位 P0=dispcodedispbuf0; P2=dispbitcode5; delayus(1); P2=0xff; /按键十位 P0=dispcodedispbuf1; P2=dispbitcode4; delayus(1); P2=0xff; /温度传感器个位 P0=dispcodedispbuf3; P2=dispbitcode1; delayu
24、s(1); P2=0xff;/第一位,传感器十位 P0=dispcodedispbuf4; P2=dispbitcode0; delayus(1);3. DS18B20子程序void clean_ds18b20() /初始化 dq=0; /再讲数据线从高拉低,要求保持480960usdelayus(90); /略微延时 以向ds发出一持续480960us的低电平复位脉冲 dq=1; /将数据线拉高delayus(3); /延时(释放总线后需等待1560us让ds输出存在脉冲) bit readbit() /读取一个位 uchar i; bit dat; dq=0; i+; dq=1; i+;
25、i+; dat=dq; delayus(8); return(dat); uchar read_ds18b20_date()/读取一个字节 uchar j,i,dat; /存储读取的一个字节数据 dat=0;for(i=1;i=8;i+) j=readbit(); dat=(j1); return(dat); void write_ds18b20_date(uchar dat) /写一个字节 uchar i;uchar j;bit testb;for(j=1;j1;if(testb) /写1dq=0; /拉低i+; /延时至少1us的恢复时间i+;dq=1;delayus(8); /延时保持至
26、少60us Else /写0dq=0; /拉低delayus(8); /延时保持至少60us dq=1;i+; /延时至少1us的恢复时间i+; uint read_temp() clean_ds18b20(); /初始化完成m=0;delay(1); /等待初始化完成write_ds18b20_date(0xcc); /跳过romwrite_ds18b20_date(0x44); /启动温度测量delayus(100);clean_ds18b20();delay(1); /等待转化完成write_ds18b20_date(0xcc); /跳过romwrite_ds18b20_date(0xb
27、e); /读数据命令4.键盘子程序void keyscan(void) if(key1=0) /判断key1是否按下 delay(10); /延时判断kay1是否按下 if(key1=0) set+; /设定温度加1 if(key1=45) set=18; while(!key1); else if(key2=0) /判断key2是否按下 delay(10); /延时判断key2是否按下 if(key2=0) set-; /设定温度减1 if(set=0) set=18; while(!key2);5.温度比较处理子程序 void deal(uint temp) /温度处理 if(tempset)&(temp(set+1)&(temp设定值+1,(set+5)&(temp(set+7) h=5; /5档 l=0; 6.电机控制子程序void dianjik() uchar q,i; for(q=0;q0;i-) ledshow(shi,ge,set/10,set%10); for(q=0;q0;i-) ledshow(shi,ge,set/10,set%10); 专心-专注-专业
限制150内