焦作师范高等专科学校
毕 业 论 文
智能风扇的设计
系 (部): 理工学院 专 业: 应用电子技术 班 级: 1301 班 学 号: 1212121212121 学生姓名: 王行宽 指导教师: 安洋 职 称:
2016年5月
智能风扇的设计
摘 要
本设计为一种温控风扇系统,以80C52单片机作为智能电风扇控制系统的测量和控制核心。具有灵敏的温度感测和显示功能,系统AT89C5 单片机作为控制平台对风扇转速进行控制。可由用户设置高、低温度值,测得温度值在高低温度之间时打开风扇弱风档,当温度升高超过所设定的温度时自动切换到大风档,当温度小于所设定的温度时自动关闭风扇,控制状态随外界温度而定。所设高低温值保存在温度传感器DS18B20内部E2ROM中,利用PWM脉宽调制技术控制电机的转速,用DS18B20温度传感器来完成温度的采集,用液晶12864LCD显示来室温及风扇的的挡。通过数字温度传感器对外界环境温度进行数据采集,从而建立一个控制系统,使电风扇随温度的变化而自动调节档位,实现“温度高、风力大、温度低、风力弱”的性能本设计。
智能风扇的设计 ......................................................................... 1 一 系统方案论证与选择 ........................................................... 3
1. 核心控制模块的选择 ......................................................................................... 3 2 温度传感器的选用 .............................................................................................. 3 3 控制核心的选择 .................................................................................................. 4 4 显示电路 .............................................................................................................. 4 5 调速方式 .............................................................................................................. 4 6 控制执行部件 ...................................................................................................... 5
二 系统理论分析与计算 ......................................................... 5
1.系统的总体设计 ................................................................................................. 5 2.单元模块的设计及实现 ..................................................................................... 5 2.1 单片机模块 ..................................................................................................... 6 22 DS18B20模块 ................................................................................................ 6 2.3 LCD12864液晶显示模块 ............................................................................ 6 2.4 电机驱动模块 ............................................................................................... 7 2.5 电源模块 ......................................................................................................... 7 2.6 USB电路图 .................................................................................................. 8 2.7 智能风扇原理图 ......................................................................................... 8 3 各模块的实物图 .................................................................................................. 9 3.1 电机驱动模块 ............................................................................................... 9 3.2 DS18B20 ..................................................................................................... 9 3.3
LCD2864 ..................................................................................................... 9
3.4 单片机 ........................................................................................................... 10 3.5 直流电机 ....................................................................................................... 10 4. 资料说明 ........................................................................................................... 11 4.1 单片机的选择由于较熟悉52单片机,所以选择现用的单片机。 ........ 11 4.2 DS18B20资料说明 ..................................................................................... 11 4.3 LCD12864资料说明 .................................................................................. 14
1
4.5 电机驱动模块资料说明 ............................................................................. 16 4.6 外部供电电压范围资料说明 ..................................................................... 17
三 总体方案及主程序 .............................................................. 18
1 总体方案 ............................................................................................................ 18 2 源程序 ................................................................................................................ 18
四 实验结果 ............................................................................ 24 五 心得体会 ............................................................................ 25
2
一 系统方案论证与选择 1. 核心控制模块的选择
本系统实现风扇的温度控制,需要有较高的温度变化分辨率和稳定可靠的换档停机控制部件。
2 温度传感器的选用
温度传感器可由以下几种方案可供选择:
方案一:选用热敏电阻作为感测温度的核心元件,通过运算放大器放大由于温度变化引起热敏电阻电阻的变化、进而导至的输出电压变化的微弱电压变化信号,再用AD转换芯片ADC0809将模拟信号转化为数字信号输入单片机处理。
方案二:采用热电偶作为感测温度的核心元件,配合桥式电路,运算放大电路和AD转换电路,将温度变化信号送入单片机处理。
方案三:采用数字式集成温度传感器DS18B20作为感测温度的核心元件,直接输出数字温度信号供单片机处理。
对于方案一,采用热敏电阻有价格便宜、元件易购的优点,但热敏电阻对温度的细微变化不敏感,在信号采集、放大、转换过程中还会产生失真和误差,并且由于热敏电阻的R-T关系的非线性,其本身电阻对温度的变化存在较大误差,虽然可以通过一定电路予以纠正,但不仅将使电路复杂稳定性降低,而且在人体所处温度环境温度变化中难以检测到小的温度变化。故该方案不适合本系统。
对于方案二,采用热电偶和桥式测量电路相对于热敏电阻其对温度的敏感性和器件的非线性误差都有较大提高,其测温范围也非常宽,从-50摄氏度到1600摄氏度均可测量。但是依然存在电路复杂,对温度敏感性达不到本系统要求的标准,故不采用该方案。
对于方案三,由于数
字式集成温度传感器DS18B20的高度集成化,大大降低了外接放大转换等电路的误差因素,温度误差很小,并且由于其感测温度的原理与上述两种方案的原理有着本质的不同,使得其温度分辨力极高。温度值在器件内部转换成数字量直接输出,简化了系统程序设计,又由于该传感器采用先进的单总线技术(1-WRIE),与单片机的接口变的非常简洁,抗干扰能力强。关于DS18B20的详细参数参看下面“硬件设计”中的器件介绍。
3
3 控制核心的选择
方案一:采用电压比较电路作为控制部件。温度传感器采用热敏电阻或热电偶等,温度信号转为电信号并放大,由集成运放组成的比较电路判决控制风扇转速,当高于或低于某值时将风扇切换到相应档位。
方案二:采用单片机作为控制核心。以软件编程的方法进行温度判断,并在端口输出控制信号。
对于方案一,采用电压比较电路具有电路简单、易于实现,以及无需编写软件程序的特点,但控制方式过于单一,不能自由设置上下限动作温度,无法满足不同用户以及不同环境下的多种动作温度要求,故不在本系统中采用。
对于方案二,以单片机作为控制器,通过编写程序不但能将传感器感测到的温度通过显示电路显示出来,而且用户能通过键盘接口,自由设置上下限动作温度值,满足全方位的需求。并且通过程序判断温度具有极高的精准度,能精确把握环境温度的微小变化。故本系统采用方案二。
4 显示电路
方案一:采用八共阴数码管显示温度,动态扫描显示方式。 方案二:采用液晶显示屏LCD显示温度
对于方案一,该方案成本低廉,显示温度明确醒目,在夜间也能看见,功耗极低,显示驱动程序的编写也相对简单,这种显示方式得到广泛应用。不足的地方是扫描显示方式是使五个LED逐个点亮,因此会有闪烁,但是人眼的视觉暂留时间为20MS,当数码管扫描周期小于这个时间时人眼将感觉不到闪烁,因此可以通过增大扫描频率来消除闪烁感。
对于方案二,液晶体显示屏具有显示字符优美,不但能显示数字还能显示字符甚至图形的优点,这是LED数码管无法比拟的。用因为液晶的显示美观大方,给人以视觉美。所以选择此方案,用12864led来显示室内温度和挡位。
5 调速方式
方案一:采用变压器调节方式,运用电磁感应原理将220V电压通过线圈降压到不同的电压,控制风扇电机接到不同电压值的线圈上可控制电机的转速,从而控制风扇风力大小。
4
方案二:采用电机驱动模块来调速。对于方案一,由于采用变压器改变电压调节,有风速级别限制,不能适应人性化要求。且在变压过程中会有损耗发热,效率不高,发热有不安全因素。对于方案二,以L985电机驱动模块,之前没用过,所以可以学习新知识。操作方便简单。所以选择方案二。
6 控制执行部件
方案一:采用数模转换芯片AD0832控制,由单片机根据当前温度值送出相应数字量到AD0832,由AD0832产生模拟信号控制晶闸管的导通角,从而配合无级调速电路实现温控时的自动无级风力调节。
方案二:ds18b20为数字式的,所以可直接将数据通过程序转换在液晶上可直接显示当前室温。
对于方案一,该方案能够实现在风扇处于温控状态时也能无级调速,但是D/A转换芯片价格较高,与其温控状态下无级调速功能相比性价比不高。对于方案二,省去了其他芯片的控制可以使程序简单化。所以选择方案二。
二 系统理论分析与计算
1.系统的总体设计
本设计以STC89C52单片机为核心部件结合ds18b20温度传感器、LCD显示、直流电机驱动模块驱动风扇转及显示等部分组成。系统框图如图所示:
2.单元模块的设计及实现
温度传感器DS18B1.系统单片机AT89S52 12864液晶显示 电机驱动模块 被控对象(风扇) 外部电源+5V
5
2.1 单片机模块
22 DS18B20模块
2.3 LCD12864液晶显示模块
6
2.4 电机驱动模块
2.5 电源模块
7
2.6 USB电路图
2.7 智能风扇原理图
8
3 各模块的实物图
3.1 电机驱动模块
3.2 DS18B20
3.3 LCD2864
9
3.4 单片机
3.5 直流电机
10
4. 资料说明
4.1 单片机的选择 由于较熟悉52单片机,所以选择现用的单片机。 4.2 DS18B20资料说明
11
12
13
4.3 LCD12864资料说明
(1)模块引脚说明 128X64 引脚说明 引脚号 引脚名称 方向 功能说明 1 VSS - 模块的电源地 2 VDD - 模块的电源正端 3 V0 - LCD驱动电压输入端 4 RS(CS) H/L 并行的指令/数据选择信号;串行的片选信号 5 R/W(SID) H/L 并行的读写选择信号;串行的数据口 6 E(CLK) H/L 并行的使能信号;串行的同步时钟 7 DB0 H/L 数据0 8 DB1 H/L 数据1 9 DB2 H/L 数据2 10 DB3 H/L 数据3 11 DB4 H/L 数据4 12 DB5 H/L 数据5 13 DB6 H/L 数据6 14 DB7 H/L 数据7 15 PSB H/L 并/串行接口选择:H-并行;L-串行 16 NC 空脚 17 /RET H/L 复位 低电平有效 18 NC 空脚 19 LED_A - 背光源正极(LED+5V) 20 LED_K - 背光源负极(LED-OV) 逻辑工作电压(VDD):4.5~5.5V 电源地(GND):0V
工作温度(Ta):0~60℃(常温) / -20~75℃(宽温) (2)接口时序
模块有并行和串行两种连接方法(时序如下): 8位并行连接时序图 MPU写资料到模块
14
MPU从模块读出资料
2、串行连接时序图
15
4.5 电机驱动模块资料说明
主要采用L298N,通过单片机的I/O输入改变芯片控制端的电平,即可以对电机进行正反转,停止的操作,输入引脚与输出引脚的逻辑关系图为
16
统原理图如下:
产品参数:
1.驱动芯片:L298N双H桥直流电机驱动芯片
2.驱动部分端子供电范围Vs:+5V~+35V ; 如需要板内取电,则供电范围Vs:+7V~+35V
3.驱动部分峰值电流Io:2A
4.逻辑部分端子供电范围Vss:+5V~+7V(可板内取电+5V) 5.逻辑部分工作电流范围:0~36mA 6.控制信号输入电压范围: 低电平:-0.3V≤Vin≤1.5V 高电平:2.3V≤Vin≤Vss 7.使能信号输入电压范围:
低电平:-0.3≤Vin≤1.5V(控制信号无效) 高电平:2.3V≤Vin≤Vss(控制信号有效) 8.最大功耗:20W(温度T=75℃时) 9.存储温度:-25℃~+130℃
10.驱动板尺寸:55mm*49mm*33mm(带固定铜柱和散热片高度) 11.驱动板重量:33g
12.其他扩展:控制方向指示灯、逻辑部分板内取电接口。 使用说明:
步进电机的驱动: 板上的ENA与ENB为高电平时有效,这里的电平指的是TTL电平。ENA为A1和A2的使能端,ENB为B1和IB2的使能端。BJ接步进电机公共端。
步进电机控制逻辑如下所示,其中A、B、C、D为步进电机的四个线圈,为1表示有电流通过,为0表示没有电流流过。线圈连线图如下图所示(以四相步进电机为例)。
直流电机的驱动:
4.6 外部供电电压范围资料说明
由于个芯片的耐压范围限制,本实验参考电压为5v,电流不得超过2A.
17
三 总体方案及主程序 1 总体方案
做此项目用到的只是有LCD12864,DS18B20温度传感器。电机驱动模块等。实现的结果是让风扇随着温度的变化显示不同的档位。所以在设计思路是先实现温度的变化在液晶上显示,然后由温度在一定的范围设置一个转速,又因为转速是由PWM来控制的,所以用PWM的占空比的大小来设定转速,本语句的实现使用case语句,为方便显示我们用num来表示了在一定温度范围内执行case里的哪一个num,同时又让num充当的档位。所以在一定的范围内,在液晶上又显示了档位,至于显示只要会使用LCD12864,和DS18B20温度传感器都不是问题。
下图为温度范围 档位及占空比之间的关系 挡位大小 温度范围 占空比 0 1 2 3 4 [ >340 ] [ 330 340 ] [ 320 330 ] [ 310 320 ] [ <310 ] 10/12 8/12 6/12 4/12 0/12 2 源程序
//并行连接,PSB引脚接电源正 #include sbit rs=P3^5; //数据\\指令 选择 sbit rw=P3^6; //读\\写 选择 sbit e=P3^4; //读\\写使能; sbit ds=P2^2; //18B20脚; sbit psb=P3^7; sbit in1=P1^6; sbit in2=P1^7; 18 sbit en=P2^5; sbit dula=P2^6; sbit wela=P2^7; //uint wendu1=270; //uint wendu2=290; //uint wendu3=310; //uint wendu4=330; uint temp,num,show; float ftemp; uint a,b,c,d; uchar gao=10,di=2; uchar code hang1[]= {\"当前温度:\uchar code table[]=\"0123456789.c\"; uchar code hang2[]= {\"当前档位:\uchar code table1[]=\"0123\"; void writecom(uchar com); void writedat(uchar dat); void initinal(void); void delay(uint k) //把你的延时函数改为以毫秒计时的一个延时函数,但是一个“非标准的”毫秒 { int i,j; for(i=k;i>0;i--) //i=xms即延时约xms毫秒 for(j=110;j>0;j--); } void dsreset() // ds18b20初始化函数 { uint i; ds=0; //拉低总线开始复位 i=103; while(i>0)i--; ds=1; //释放总线 i=4; while(i>0)i--; // 省去了等待芯片返回应答的过程 ; } bit readbit(void) //ds18b20读取一个二进制位,参照时序图 { uint i; bit dat; ds=0;i++; ds=1;i++;i++; dat=ds; i=8;while(i>0)i--; return(dat); 19 } uchar tempread(void) //ds18b20读取一个字节的数据 { uchar i,j,dat; dat=0; for(i=0;i<8;i++) { j=readbit(); dat=(j<<7)|(dat>>1); } return(dat); } void tempwrite(uchar dat) //ds18b20写入字节数据 { uint i;uchar j; bit testb; for(j=1;j<=8;j++) { testb=dat&0x01; dat=dat>>1; if(testb==1) // 写1 { ds=0; // 拉低总线以开始一个写时序 i++;i++; ds=1; // 释放总线 i=8;while(i>0)i--; } else // 写0 { ds=0; i=8;while(i>0)i--; ds=1; i++;i++; } } } //12MHZ晶振 延时50微秒; void delay50us(uint t) { uchar j; for(;t>0;t--) for(j=19;j>0;j--); } //12864写命令 void writecom(uchar com) 20 { rw=0; rs=0; delay50us(2); P0=com; e=1; delay50us(5); e=0; delay50us(5); } //12864写数据 void writedat(uchar dat) { rw=0; rs=1; delay50us(1); P0=dat; e=1; delay50us(10); e=0; delay50us(10); } //12864初始化 void initinal(void) { delay50us(2); writecom(0x30); delay50us(4); writecom(0x30); delay50us(4); writecom(0x0f); delay50us(4); writecom(0x01); delay50us(240); writecom(0x06); delay50us(10); } void tempchang(void) // { dsreset(); delay(1); tempwrite(0xcc); // tempwrite(0x44); // } 21 uint gettemp() // { uchar a,b; dsreset(); delay(1); tempwrite(0xcc); tempwrite(0xbe); a=tempread(); b=tempread(); temp=b; temp<<=8; temp=temp|a; ftemp=temp*0.0625; temp=ftemp*10+0.5; ftemp=ftemp+0.05; return temp; } void dangwei() { gettemp(); if(temp>330) num=0; else if((temp>320)&&(temp<=330)) num=1; else if((temp>270)&&(temp<=320)) num=2; else if((temp>25)&&(temp<=27)) num=3; else in1=0; } void su_du_zhuan_huan() //根据速度标志进行数据处理; { switch(num) { case 0: num=0; gao=10; di=2; break; case 1: num=1; gao=8; di=4; break; case 2: num=2; gao=6; di=6; break; case 3: num=3; gao=4; 22 } void qudong() //控制电机程序; di=8; break; case 4: num=3; gao=0; di=12; break; } { uchar i; if(di!=0) { for(i=0;i dula=0; wela=0; in1=1; in2=0; psb=1; initinal(); dsreset(); delay50us(1); while(1) { uchar i; uint a,b,c,d; tempchang(); en=0; //实现PWM信号低电平输出 ; //利用显示函数起延时作用,这样也不影响数; //实现PWM信号高电平输出; // 选择显示模式为并行通信模式 ; //初始化液晶,清屏DDRAM; 23 dangwei(); su_du_zhuan_huan(); qudong(); a=gettemp(); b=a/100; c=a%100/10; d=a%100%10; writecom(0x80); for(i=0;i<10;i++) { writedat(hang1[i]); delay50us(1); } writecom(0x88); for(i=0;i<10;i++) { writedat(hang2[i]); delay50us(1); } writecom(0x85); writedat(table[b]); delay50us(1); writedat(table[c]); delay50us(1); writedat(table[10]); delay50us(1); writedat(table[d]); delay50us(1); writedat(table[11]); delay50us(4); writecom(0x8d); writedat(table[num]); delay50us(1); } } 四 实验结果 风扇随着温度的变换而有不同的挡速。 24 五 心得体会 回顾起此次单片机课程设计,我们感慨颇多,从选题到定稿,从理论到实践,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正提高自己的 实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说不懂一些元器件的使用方法,对红外发射与接收的不熟悉……虽然遇到的困难很多,但经过我们组员之间的默契配合与合作最终都被一一解决,课程设计最终顺利完成了,从中我们也学到了合作的重要性。通过这次课程设计可谓从中受益匪浅,不知不觉地使我们的实践能力提高,还有平时的粗心,本来写好的稿子却被粗心酿成了苦果,所有的东西全都没了,打字速度及对world的熟练使用,对知识的综合应用,人与人之间的配合及明确的分工,对知识的整合能力,对编程的熟练程度及遇到问题的心态,在紧张的氛围下有一颗淡定的心态是何等的重要,要相信自己的队友,遇到不会的问题要在一起讨论,或者向单片机高手请教,时间紧急我问要提高学习的效率。加油!只要无畏的坚持看准目标走好脚下的路一定会有一个质的飞跃。 六. 参考资料 郭天祥《51单片机C语言教程》 Protel Dxp 12864芯片资料 DS18B20芯片资料 25 因篇幅问题不能全部显示,请点此查看更多更全内容