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