基于51单片机的温控智能电风扇讲解Word格式文档下载.docx
《基于51单片机的温控智能电风扇讲解Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《基于51单片机的温控智能电风扇讲解Word格式文档下载.docx(27页珍藏版)》请在冰豆网上搜索。
作为整个控制系统的核心,单片机内部已包含了定时器、程序存储器。
数据存储器等硬件,其硬件能符合整个控制系统的要求,不需要外接其他存储器和定时器件,方便的构成一个最小系统。
整个系统结构紧凑,抗干扰能力强,性价比高,是比较合适的方案。
本系统实现风扇的温度控制,需要有较高的温度变化分辨率和稳定可靠的换挡停机控制部件。
2.2芯片及主要器件选择
2.2.1控制核心的选择
采用AT89C51单片机作为控制核心,以软件编程的方法进行温度判断,并在端口输出控制信号。
以单片机作为控制器,通过编写程序不但能将传感器感测到的温度通过显示电路显示出来,而且用户能通过键盘接口,自由设置温度下限,满足用户需求,并且通过程序判断温度具有极高的精准度,能精确把握环境的微小变化。
2.2.2温度传感器的选用
采用数字式集成温度传感器DS18B20作为感测温度的核心元件,直接输出数字温度信号共单片机处理。
2.2.3显示电路
采用7SEG-MPX6-CC-BLUE数码管显示温度。
数码管显示温度清晰简单,价格优惠,驱动程序简单。
2.3芯片及器件介绍
2.3.1AT89C51单片机
AT89C51是美国ATMEL公司生产的低电压、高性能CMOS8位单片机,片内4bytes的可反复擦写的只读程序存储器(PEROM)和128bytes的随机存取数据存储器(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
图2.2AT89C51封装及管脚图
2.3.2L298芯片介绍
L298驱动芯片是SGS公司的产品,内部包含4通道逻辑驱动电路。
是一种二相和四相电机的专用驱动器,即内包含两个H桥的高压大电压六双全桥式驱动器,接收准TTL逻辑电平信号,可驱动46V、2A以下的电机。
实物图如图2.3所示。
图2.3实物图图2.4管脚图
L298有两路电源分别为逻辑电源6V和动力电源12V,ENA、ENB直接接入5V电源使电机进入使能状态,IN1、IN2用来控制电路的逻辑功能状态。
由于使用的电机是线圈式,在运行状态突然转到停止状态和从顺时状态突然转换到逆时针状态时会形成很大的方向电流,在电路中加入二极管就是在产生方向电流的时候进行泄流,保护芯片安全。
L298的逻辑功能状态见表2.1。
表2.1L298逻辑功能状态图
IN1
IN2
ENA
电机状态
X
停止
1
顺时针
逆时针
2.3.3DS18B20温度传感器
DS18B20是美国DALLAS半导体公司继DS1820之后最新推出的一种改进型智能温度传感器。
与传统的热敏电阻相比,它能够直接读出被测温度并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。
可以分别在93.75ms和750ms内完成9位和12位的数字量,并且从DS18B20读出的信息或写入DS18B20的信息仅需要一根口线(单线接口)读写,温度变换功率来源于数据总线,总线本身也可以向所挂接的DS18B20供电,而无需额外电源,因而使用DS18B20可使系统结构更趋简单可靠性更高。
他在测温精度、转换时间、传输距离、分辨率等方面较DS1820有了很大的改进,给用户带来了更方便的使用和更令人满意的效果。
DS18B20简介:
(1)独特的单线接口方式:
DS18B20与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。
(2)在使用中不需要任何外围元件。
(3)可用数据线供电,电压范围:
+3.0~+5.5V。
(4)测温范围:
-55~+125℃。
固有测温分辨率为0.5℃。
(5)通过编程可实现9~12位的数字读数方式。
(6)用户可自设定非易失性的报警上下限值。
(7)支持多点组网功能,多个DS18B20可以并联在惟一的三线上,实现多点测温。
(8)负压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作。
DS18B20直接将测量温度值转化为数字量提交给单片机,工作时必须严格遵守单总线器件的工作时序。
引脚排列如图2.5所示。
引脚说明:
GND:
接地
DQ:
数据I/O
VDD:
可选VDD
NC:
空脚
图2.5引脚排列
表2.2部分温度值与DS18B20输出的数字量对照表
温度值/℃数字输出(二进制)数字输出(十六进制)
+125000001111101000007D0H
+8500000101010100000550H
+25.62500000001100100010191H
+10.125000000001010001000A2H
+0.500000000000010000008H
000000000000000000000H
-0.51111111111111000FFF8H
-10.1251111111101101110FF5EH
-25.6251111111101101111FF6FH
-551111110010010000FC90H
2.3.4LED数码管简介
本系统选用五个LED数码管来进行温度显示。
LED又称为数码管,它主要是由8段发光二极管组成的不同组合,其中a~g为数字和字符显示段,dp为小数点的显示,通过a~g这7个发光二极管点亮的不同组合,可以显示0~9和A~F共16个数字和字母。
LED数码管可以分为共阴极和共阳极两种结构,如下图3.1.3所示。
共阴极结构把8个发光二极管阴极连在一起,共阳极结构把8个发光二极管阳极连在一起。
通过单片机引脚输出高低电平,可使数码管显示相应的数字或字母,这种使数码管显示字形的数据称字形码,又称段选码。
图2.6七段LED数码管
一个共阴极数码管接至单片机的电路,要想显示数字“7”须a、b、c这3个显示段发光(即这3个字段为高电平)只要在P0口输入00000111(07H)即可。
这里07H即为数字7的段选码。
字形与段选码的关系见表2.2所示。
表2.3LED段选码表
显示字符
共阴极段码
共阳极段码
3fH
C0H
8
7fH
80H
06H
F9H
9
6fH
90H
2
5bH
A4H
A
77H
88H
3
4fH
B0H
B
83H
4
66H
99H
C
39H
C6H
5
6dH
92H
D
A1H
6
7dH
82H
E
79H
86H
7
07H
F8H
F
71H
8EH
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电机调速电路
2.4.3PWM调速原理
我们采用的是PWM来实现直流电动机的调速,优点:
控制原理简单,输出波动小,线性好,对邻近电路干扰小。
缺点:
功率低,散热问题严重。
PWM调速原理:
输出电压
(2-1)
(2-2)
式2-1中
称为占空比。
占空比D表示了在一个周期T里开关管导通的时间与周期的比值。
D的变化范围为0<
=D<
=1。
当电源电压U不变的情况下,输出电压的平均值U取决于占空比D的大小,改变D值也就改变了输出电压的平均值,从而达到控制电动机转速的目的,即实现PWM调速。
2.4.4LED数码管显示电路及按键电路
7SEG-MPX6-CC-BLUE数码管与单片机输出端相连电路以及按键输入电路如图2.8所示。
图2.9显示电路连接
第三章温控智能电风扇控制系统软件设计与实现
本系统的运行程序采用C语言编写,采用模块化设计,整体程序由主程序和温测显示、键盘处理以及电机控制等子程序模块组成。
3.1主程序
下图为主程序简易框图。
图3.1主程序简易框图
3.2数字温度传感器模块
如图3.2所示,主机控制DS18B20数字温度传感器完成温度转换工作必须经过三个步骤:
初始化、ROM操作指令、存储器操作指令。
单片机所用的系统频率为12MHz。
根据DS18B20数字温度传感器进行初始化时序、读时序和写时序分别可编写3个子程序:
初始化子程序、写子程序、读子程序。
图3.2数字温度传感器模块程序流程图
DS18B20芯片功能命令表如下:
命令说明协议
READROM读取激光ROM64位33H
MATCHROM匹配ROM55H
SKIPROM跳过ROMCCH
SEARCHROM搜索ROMF0H
ALARMSEARCH告警搜索ECH
WRITESCRATCHPAD把字节写入暂存器的地址2和34EH
READSCRATCHPAD读取暂存器和CRC字节BEH
COPYSCRATCHPAD把暂存器内容拷贝到非易失性存储器中48H
CONVERTT开始温度转换44H
RECALLE2把非易失性存储器中的值召回暂存器B8H
READPOWERSUPPLY读电源供电方式:
0为寄生电源,1为外电源B4H
3.3电机调速与控制子模块
本模块采用PWM来实现直流电动机的调速。
控制流程如图3.3所示。
图3.3电机控制流程图
第四章调试结果与总结
4.1调试结果
课程设计仿真调试采用的是Protues仿真软件,按照原理图将各器件画在软件中。
程序编写采用Keil软件,用C语言编写。
这里我们设定温度为20℃为最低温度进行仿真。
0档:
<
=20℃
1档:
20℃~21℃
2档:
21℃~23℃
3档:
23℃~25℃
4档:
25℃~27℃
5档:
>
=27℃
即温度每上升2℃,电机转速即上升一档。
26℃时,仿真结果:
28℃时,仿真结果:
4.2课程设计总结
本系统以AT89C51单片机为核心,单片机主要完成对外界环境温度信号的采集、处理、显示等功能;
用Protues软件绘制电路原理图及仿真测试和DXP软件绘制PCB电路印刷板图,利用MCS-51C语言编制。
运行程序该系统的主要特点是:
(1)适用性强,用户只需对界面参数进行设置并启动系统正常运行便可满足不同用户对最适合温度的要求,实现对最适温度的实时监控。
(2)随时可以根据软件编写新的功能加入产品。
操作界面可扩展性强,只要稍加改变,即可增加其他按键的使用功能。
本系统温度控制采用DS18B20数字温度传感器作为感温元件。
采用L298驱动器利用PWM占空比调速原理对电动机转速进行控制,以达到目标。
基于AT89C51单片机所设计与研制的电风扇智能调速系统,造价低且具有稳定性高、性能优越、节约电能等优点,在夜间无需定时,同样能给人们带来更多的方便。
本设计在软件仿真模拟检测中运行较好,但数码管显示部分有一点问题,在对温度设置时,数码管其他位数字会跟随跳变,但数值不变。
功能上的缺憾是对于两个档之间的临界温度处理不好,并且档位太少,还有待改进。
总的来说,本次课程设计学到了许多东西,对今后个人的发展有积极的作用。
参考文献
【1】刘坤、郑锋、王巧芝等,51单片机典型应用开发范例大全[M],北京:
中国铁道出版社,2011.10
【2】张俊谟,单片机中级教程——原理与应用(2版)[M],北京:
北京航空航天大学出版社,2006.10
【3】张玉杰,基于单片机的温度控制智能电风扇[D],新疆工业高等专科学校
【4】冯清秀、邓星钟等,机电传动控制[M],武汉:
华中科技大学出版社,2011.6
附录一
附录二
PCB板
附录三
程序清单
1.主程序
voidmain(void)
{
uintltemp;
ucharg,d;
//初始化温度
dianji=0;
//初始化电机
read_temp();
//读取测温子程序,读取温度数值
delay(1000);
//延时
while
(1)
{
int1=1;
int2=0;
dianji=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.温度显示子程序
voidledshow(uchara4,uchara3,uchara1,uchara0)
dispbuf[0]=a0;
dispbuf[1]=a1;
dispbuf[3]=a3;
dispbuf[4]=a4;
P2=0xff;
//按键个位
P0=dispcode[dispbuf[0]];
P2=dispbitcode[5];
delayus
(1);
//按键十位
P0=dispcode[dispbuf[1]];
P2=dispbitcode[4];
//温度传感器个位
P0=dispcode[dispbuf[3]];
P2=dispbitcode[1];
//第一位,传感器十位
P0=dispcode[dispbuf[4]];
P2=dispbitcode[0];
3.DS18B20子程序
voidclean_ds18b20()//初始化
dq=0;
//再讲数据线从高拉低,要求保持480~960us
delayus(90);
//略微延时以向ds发出一持续480~960us的低电平复位脉冲
dq=1;
//将数据线拉高
delayus(3);
//延时(释放总线后需等待15~60us让ds输出存在脉冲)
bitreadbit()//读取一个位
uchari;
bitdat;
dq=0;
i++;
dq=1;
dat=dq;
delayus(8);
return(dat);
ucharread_ds18b20_date()//读取一个字节
{
ucharj,i,dat;
//存储读取的一个字节数据
dat=0;
for(i=1;
i<
i++)
j=readbit();
dat=(j<
7|dat>
1);
voidwrite_ds18b20_date(uchardat)//写一个字节
ucharj;
bittestb;
for(j=1;
j<
j++)
testb=dat&
0x01;
dat=dat>
1;
if(testb)//写1
{
dq=0;
//拉低
i++;
//延时至少1us的恢复时间
delayus(8);
//延时保持至少60us
}
Else//写0
uintread_temp()
clean_ds18b20();
//初始化完成m=0;
delay
(1);
//等待初始化完成
write_ds18b20_date(0xcc);
//跳过rom
write_ds18b20_date(0x44);
//启动温度测量
delayus(100);
clean_ds18b20();
//等待转化完成
write_ds18b20_date(0xbe);
//读数据命令
4.键盘子程序
voidkeyscan(void)
if(key1==0)//判断key1是否按下
delay(10);
//延时判断kay1是否按下
if(key1==0)
set++;
//设定温度加1
if(key1==45)
set=18;
while(!
key1);
elseif(key2==0)//判断key2是否按下
//延时判断key2是否按下
if(key2==0)
set--;
//设定温度减1
if(set==0)
key2);
5.温度比较处理子程序
voiddeal(uinttemp)//温度处理
if(temp<
=set)
{//温度低于设置值
h=0;
//0档
l=5;
elseif((temp>
set)&
&
(temp<
=(set+1)))//温度高于设定值+1
h=1;
//1档
l=4;
(set+1))&
=(set+3)))//温度>
设定值+1,<
设定值+3
h=2;
//2档
l=3;
(set+5))&
=(set+7)))
h=4;
//4档
l=1;
elseif(temp>
(set+7))
h=5;
//5档
l=0;
6.电机控制子程序
voiddianjik()
{
ucharq,i;
for(q=0;
q<
l;
q++)//输出设定的低电平次数
ledshow(shi,ge,set/10,set%10);
for(i=320;
i>
0;
i--)
ledshow(shi