课程设计.docx
《课程设计.docx》由会员分享,可在线阅读,更多相关《课程设计.docx(14页珍藏版)》请在冰点文库上搜索。
![课程设计.docx](https://file1.bingdoc.com/fileroot1/2023-6/22/47efd9fa-dba6-4630-9155-932aa78d35a6/47efd9fa-dba6-4630-9155-932aa78d35a61.gif)
课程设计
课程设计实验报告
课题:
智能温控风扇
系别:
电子信息工程
班级:
14电信2班
姓名:
沐浴阳光
学号:
0114
2016年7月7日
一、课题背景
生活中,我们经常会使用一些与温度有关的设备。
比如,现在虽然不少城市家庭用上了空调,但在占中国大部分人口的农村地区依旧使用电风扇作为降温防暑设备,春夏(夏秋)交替时节,白天温度依旧很高,电风扇应高转速、大风量,使人感到清凉;到了晚上,气温降低,当人入睡后,应该逐步减小转速,以免使人感冒。
虽然电风扇都有调节不同档位的功能,但必须要人手动换档,睡着了就无能为力了,而普遍采用的定时器关闭的做法,一方面是定时时间长短有限制,一般是一两个小时;另一方面可能在一两个小时后气温依旧没有降低很多,而风扇就关闭了,使人在睡梦中热醒而不得不起床重新打开风扇,增加定时器时间,非常麻烦,而且可能多次定时后最后一次定时时间太长,在温度降低以后风扇依旧继续吹风,使人感冒;第三方面是只有简单的到了定时时间就关闭风扇电源的单一功能,不能满足气温变化对风扇风速大小的不同要求。
又比如在较大功率的电子产品散热方面,现在绝大多数都采用了风冷系统,利用风扇引起空气流动,带走热量,使电子产品不至于发热烧坏。
要使电子产品保持较低的温度,必须用大功率、高转速、大风量的风扇,而风扇的噪音与其功率成正比。
如果要低噪音,则要减小风扇转速,又会引起电子设备温度上升,不能两全其美。
为解决上述问题,我们设计了这套温控自动风扇系统。
本系统采用高精度集成温度传感器,用单片机控制,能显示实时温度,并根据使用者设定的温度自动在相应温度时作出小风、大风、停机动作,精确度高,动作准确
二、课题内容
本系统就是充分利用了8051芯片的I/O引脚。
系统以采用MCS-51系列单片机89c51为中心器件来设计简易温控风扇系统,实现了能根据设置的上下限温度,来启动风扇的工作与停止,低于设置的下限温度,风扇不工作,在上限与下限之间风扇以50%的转速工作,温度高于上限,风扇全速工作。
三、实施方案:
(1)设计电路布局图
(2)准备好所需的材料
(3)按照电路图焊接好元件
(4)编写单片机程序
(5)对系统进行调试
四、电路布局图
4-1电路原理图
五、所需要的电子元器件
1)7*9万用板
2)风扇
3)STC89C51单片机
4)74hc573
5)40脚IC座
6)20脚IC座
7)0.56四位一体共阴数码管
8)10k电阻*3
9)1k电阻*2
10)103排阻
11)DS18B20
12)10uf电容
13)12M晶振
14)30pf瓷片电容*2
15)8550三极管
16)8050三极管
17)3p排针
18)按键*3
19)DC电源接口
20)自锁开关
21)导线若干
22)焊锡若干
23)电源线或电池盒+DC电源插头
六、按照电路图焊接好元件
6-1实物图正面
6-2实物图反面
七、单片机源程序
#include
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitdj=P1^0;//电机控制端接口
sbitDQ=P1^6;//温度传感器接口
//////////按键接口//////////
sbitkey1=P3^5;//设置温度
sbitkey2=P3^6;//温度加
sbitkey3=P3^7;//温度减
//////////
sbitw1=P2^4;
sbitw2=P2^5;
sbitw3=P2^6;
sbitw4=P2^7;
/////共阴数码管段选//////////////////////////////////////////////
uchartable[22]=
{0x3F,0x06,0x5B,0x4F,0x66,
0x6D,0x7D,0x07,0x7F,0x6F,
0x77,0x7C,0x39,0x5E,0x79,0x71,
0x40,0x38,0x76,0x00,0xff,0x37};//'-',L,H,灭,全亮,n16-21
uintwen_du;
uchargao,di;//pwm
uintshang,xia;//对比温度暂存变量
uchardang;//档位显示
ucharflag;
uchard1,d2,d3;//显示数据暂存变量
voiddelay(uintms)
{
ucharx;
for(ms;ms>0;ms--)
for(x=10;x>0;x--);
}
/***********ds18b20延迟子函数(晶振12MHz)*******/
voiddelay_18B20(uinti)
{
while(i--);
}
/**********ds18b20初始化函数**********************/
voidInit_DS18B20()
{
ucharx=0;
DQ=1;//DQ复位
delay_18B20(8);//稍做延时
DQ=0;//单片机将DQ拉低
delay_18B20(80);//精确延时大于480us
delay_18B20(14);
x=DQ;//稍做延时后如果x=0则初始化成功x=1则初始化失败
delay_18B20(20);
}
/***********ds18b20读一个字节**************/
ucharReadOneChar()
{
uchari=0;
uchardat=0;
for(i=8;i>0;i--)
{
DQ=0;//给脉冲信号
dat>>=1;
DQ=1;//给脉冲信号
if(DQ)
delay_18B20(4);
}
return(dat);
}
/*************ds18b20写一个字节****************/
voidWriteOneChar(uchardat)
{
uchari=0;
for(i=8;i>0;i--)
{
DQ=0;
DQ=dat&0x01;
delay_18B20(5);
DQ=1;
dat>>=1;
}
}
/**************读取ds18b20当前温度************/
voidReadTemperature()
{
uchara=0;
ucharb=0;
Init_DS18B20();
WriteOneChar(0xCC);//跳过读序号列号的操作
WriteOneChar(0x44);//启动温度转换
delay_18B20(100);//thismessageisweryimportant
Init_DS18B20();
WriteOneChar(0xCC);//跳过读序号列号的操作
WriteOneChar(0xBE);//读取温度寄存器等(共可读9个寄存器)前两个就是温度
delay_18B20(100);
a=ReadOneChar();//读取温度值低位
b=ReadOneChar();//读取温度值高位
wen_du=((b*256+a)>>4);//当前采集温度值除16得实际温度值
}
voiddisplay()//显示温度
{
w1=0;P0=table[d1];delay(10);//第1位
P0=0x00;w1=1;delay
(1);
w2=0;P0=table[16];delay(10);//第2位
P0=0x00;w2=1;delay
(1);
w3=0;P0=table[d2];delay(10);//第3位
P0=0x00;w3=1;delay
(1);
w4=0;P0=table[d3];delay(10);//第4位
P0=0x00;w4=1;delay
(1);
}
voidzi_keyscan()//自动模式按键扫描函数
{
if(key1==0)
{
delay(10);
if(key1==0)flag=1;
while(key1==0);//松手检测
}
while(flag==1)
{
d1=18;d2=shang/10;d3=shang%10;
display();
if(key1==0)
{
delay(10);
if(key1==0)flag=2;
while(key1==0);//松手检测
}
if(key2==0)
{
if(key2==0)
{
shang+=5;
if(shang>=100)shang=100;
}while(key2==0);//松手检测
}
if(key3==0)
{
delay(10);
if(key3==0)
{
if(shang<=10)shang=10;
}while(key3==0);//松手检测
}
}
while(flag==2)
{
d1=17;d2=xia/10;d3=xia%10;
display();
if(key1==0)
{
delay(10);
if(key1==0)flag=0;
while(key1==0);//松手检测
}
if(key2==0)
{
delay(10);
if(key2==0)
{
if(xia>=95)xia=95;
}while(key2==0);//松手检测
}
if(key3==0)
{
delay(10);
if(key3==0)
{
xia-=1;
if(xia<=0)xia=0;
}while(key3==0);//松手检测
}
}
}
voidzi_dong()//自动温控模式
{
uchari;
d1=dang;d2=wen_du/10;d3=wen_du%10;
zi_keyscan();//按键扫描函数
display();
if(wen_duif((wen_du>=xia)&&(wen_du<=shang))//1挡
{
dang=1;
for(i=0;i<5;i++){dj=0;display();zi_keyscan();}
for(i=0;i<5;i++){dj=1;display();zi_keyscan();}
}
if(wen_du>shang){dj=1;dang=2;}//高温全速
}
voidmain()
{
ucharj;
dj=0;
shang=30;
for(j=0;j<80;j++)
ReadTemperature();
while
(1)
{
ReadTemperature();
for(j=0;j<100;j++)zi_dong();//自动温控模式
}
}
八、系统调试
8.1.1按键显示部分的调试
起初根据设计编写的系统程序:
程序的键盘接口采用P3口,数码管显示采用P0口控制LED的断码,P2口控制LED的位码,从而实现键盘功能及数码管的显示。
经过编译没有出错,但在仿真调试时,数码管显示的只是乱码,没有正确的显示温度,按键功能也不灵,当按下键时,显示会变化很多次。
经过查找分析,发现键盘扫描程序没有没有按键消抖部分,按键在按下与松手时,都会有一定程度的抖动,从而可能使单片机做出错误的判断,导致按键条件预设温度时失灵,甚至根本不能正常工作。
因此必须在按键扫描程序中加入消抖部分,即在按键按下与松手时加入延时判断,以检测键盘是否真的按下或已完全松手。
数码管不能正确的显示,主要是因为所以数码管的段码都由P0口传送,而数码管显示又采用了动态扫描的方式,但在程序中却没有设置显示段码的暂存器,导致当P0口传送段码时发生混乱,不能正确识别段码。
应在系统中加入锁存器,或是在程序中设定存储段码的空间。
在键盘加入了消抖程序,数码管显示程序中加入了段码的存储空间后,数码管能够正常的显示,按键也能够工作,达到了较好的效果。
8.1.2传感器DS18B20温度采集部分调试
由于数字式集成温度传感器DS18B20的高度集成化,为软件的设计和调试带来了极大的简便,小体积、低功耗、高精度为控制电机的精度和稳定提供了可能。
软件设计采用P1.6口为数字温度输入口,但是需要对输入的数字信号进行处理后才能显示,从而多了温度转换程序。
通过软件设计,实现了对环境温度的连续检测,由于硬件LED个数的限制,只显示了预设温度的整数部分。
在温度转换程序中,为了能够正确的检测并显示温度的小数位,程序中把检测的温度与10相乘后,再按一个三位的整数来处理。
如把24.5变为245来处理,这样为程序的编写带来了方便。
系统调试中为验证DS18B20是否能在系统板上工作,将手心靠拢或者捏住芯片,即可发现LED显示的前两位温度也迅速升高,验证了DS18B20能在系统板上工作。
由于DS18B20为3个引脚,因此在调试过程中因注意其各个引脚的对应位置,以免将其接反而是芯片不能工作甚至烧毁芯片。
8.1.3风扇调速电路部分调试
在本设计中,采用了三极管驱动直流电机,软件设置了P1.0口输出不同的PWM波形,通过三极管的放大作用驱动直流电机转动,通过软件中程序设定,根据不同温度输出不同的PWM波,从而得到不同的占空比控制风扇直流电机。
程序实现了P1.0口的PWM波形输出,当外界温度低于设置温度时,电机不转动或自动停止转动;当外界温度高于设置温度时,电机的转速升高或是自动开始转动。
在本系统中风扇电机的转速可实现两级调速。
通过温度传感器检测的温度与系统预设温度值的比较,实现转速变换。
九、系统功能分析
系统总体上由四部分来组成,既按键电路、数码管驱动显示电路、温度检测电路、风扇驱动电路。
首先考滤的是温度检测电路,该部分是整个系统的首要部分,首先要检测到环境温度,才能用单片机来判断温度的高低,然后通过单片机控制直流风扇电机的转速;其次是电机驱动电路,该部分需要使用外围电路将单片机输出的PWM信号转化为平均电压输出,根据不同的PWM波形得到不同的平均电压,从而控制电机的转速,电路的设计中采用了两个三极管组成复合管驱动,实现较好的控制效果;再次是数码管的动态显示电路,该部分的功能实现对环境温度和档位的显示,其中DS18B20采集环境温度,按键实现不同设置温度的调整,实现了对环境温度和档位的及时连续显示
结 论
本次设计的系统以单片机为控制核心,以温度传感器DS18B20检测环境温度,实现了根据环境温度变化调节不同的风扇电机转速,LED数码管能连续稳定的显示环境温度和档位,并能通过三个独立按键调节不同的设置温度,从而改变环境温度与设置温度的差值,进而改变电机转速。
实现了基于单片机的温控风扇的设计。
本系统设计可推广到各种电动机的控制系统中,实现电动机的转速调节。
在生产生活中,本系统可用于简单的日常风扇的智能控制,为生活带来便利;在工业生产中,可以改变不同的输入信号,实现对不同信号输入控制电机的转速,进而实现生产自动化,如在电力系统中可以根据不同的负荷达到不同的电压信号,再由电压信号调节不同的发电机转速,进而调节发电量,实现电力系统的自动化调节。
综上所述,该系统的设计和研究在社会生产和生活中具有重要地位