风扇调速系统说明.docx
《风扇调速系统说明.docx》由会员分享,可在线阅读,更多相关《风扇调速系统说明.docx(12页珍藏版)》请在冰豆网上搜索。
风扇调速系统说明
智能风扇调速系统
总体设计框图
系统电路设计总体设计方框图所示,控制器采用单片机AT89S52,温度传感器采用DS18B20,用2位LED数码管以串口传送数据实现温度显示。
总体设计方框图
主控制器
单片机AT89S52具有低电压供电和体积小等特点,四个端就能满足电路系统的设计需要,很适合便携手持式产品的设计使用系统可用二节电池供电。
状态显示
显示风扇调速系统处于的工作状态,状态有三种分别是低速状态、中速状态和高速状态,此系统以发光二极管指示作演示。
LED显示
本系统共使用的三个共阳极七段数码管分别显示,当前的温度和设定定时的倒计时时间。
温度以标准摄氏度为单位。
时间以分钟为单位。
数码管采用单片机P0口并行数据输出,P2口数据扫描控制显示,三极管8550做数码管的驱动。
键盘控制
有一组键盘控制倒计时温度的设定加与减。
另一组控制系统处于的三种状态,分别对应的是低速状态、中速状态和高速状态,此系统以发光二极管指示作演示。
还有一个开关按键是控制系统是处于自动状态和手动状态的开关。
温度传感器
DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,与传统的热敏电阻等测温元件相比,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现9~12位的数字值读数方式。
DS18B20的性能特点如下:
●独特的单线接口仅需要一个端口引脚进行通信;
●多个DS18B20可以并联在惟一的三线上,实现多点组网功能;
●无须外部器件;
●可通过数据线供电,电压范围为3.0~5.5V;
●零待机功耗;
●温度以9或12位数字;
●用户可定义报警设置;
●报警搜索命令识别并标志超过程序限定温度(温度报警条件)的器件;
●负电压特性,电源极性接反时,温度计不会因发热而烧毁,但不能正常工作;
系统复位
系统单片机采用的是上电复位,当复位键按下时,系统会变为,开始的初始状态。
时钟振荡
系统单片机使用的是外部时钟振荡,振荡频率为标准的11.0592MHZ。
主要参数
序号
参数
数值
备注
1
电源电压
220V
交流
2
工作电压
4V~6V
直流
3
功率
<8W
4
设定值
0~9分钟
5
低速
30度~32度
6
中速
32度~34度
7
高速
34度以上
8
误差范围
精度误差小于0.5℃
主要元器件
序号
名称
作用
个数
1
AT89S52单片机
运算处理
1
2
DS1802传感器
温度测量
1
3
数码管LG5011BSR
温度显示
4
4
蜂鸣器
温度报警
1
5
变压器
变压
1
6
整流桥
交流变直流
1
7
三端稳压器7805
稳定电压值
1
8
AT24C02
掉电存储器
元件清单
元件名称
单位(只)
型号
参数
备注
温度传感器
1
DS18B20
-55~100度5V
单片机
1
AT89S52
变压器
1
220V变9V
9V/8W
整流桥
1
1安
C1,C2
2
30P
C3,C6
2
22UF/25V
C4
1
220UF/25V
C5
1
2.2UF/25
R1~R6
7
100欧姆
1/8W
R7~R9
3
510欧姆
1/8W
R10
1
10K
1/8W
R11~R15
5
4.7K
1/8W
R16~R21
6
510欧姆
1/8W
D1
1
发光二极管
发红
电源指示
D2~D6
5
发光二极管
发红
按下指示
D7
1
发光二极管
白发白
低速指示
D8
1
发光二极管
白发蓝
中速指示
D9
1
发光二极管
白发红
高速指示
稳压管
1
LM7805
Y1
1
晶震
11.0592HZ
S1~S6
6
按键
S1-1
1
开关
Q1~Q3
4
8550
NPN
U10~U12
3
LG5011BSR
7段数码管
电路板
2块
电源线
1条
风扇调速系统使用说明书
1.接通交流220伏电源,电源指示灯亮。
2.按下启动电源开关,系统开始运行。
3.当手动/自动按键弹起时,为手动状态,温度显示为当前温度,时间显示为零,加,减键不起作用。
4.分别按下,低速至高速按键,相应的指示灯亮。
5.当手动/自动按键按下时,为自动状态,温度显示为当前温度,时间显示为零,加,减键起作用。
每次加1或减1。
系统处于倒计时状态。
6.分别按下,低速至高速按键,相应的指示灯亮。
7.当系统处于自动状态时,如果温度大于30度,低速灯自动点亮。
如果温度大于32度,中速灯自动点亮。
如果温度大于34度,高速灯自动点亮。
风扇调速最终程序
#include
codeunsignedcharseg7code[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,
0x82,0xf8,0x80,0x90,0x40};//显示段码
sbitTMDAT=P3^1;//DS18B20的数据输入/输出脚DQ,根据情况设定
sbitP2_7=P2^7;
sbitP2_6=P2^6;
sbitP2_5=P2^5;
sbitjia=P2^4;
sbitjian=P2^3;
sbitdi=P2^2;
sbitzh=P2^1;
sbitga=P2^0;
unsignedintz=0;
sbitq=P1^7;
unsignedintsdata;//测量到的温度的整数部分
//unsignedcharxiaoshu1;//小数第一位
//unsignedcharxiaoshu2;//小数第二位
//unsignedcharxiaoshu;//两位小数
bitfg=1;//温度正负标志
//////////*显示延时程序*///////////////
voidDelay(unsignedinttc)
{while(tc!
=0)
{unsignedinti;
for(i=0;i<80;i++);
tc--;}
}
////////////延时部分///////////////
voidyanshi(unsignedintcount)
{
unsignedchari;
while(count--)
{for(i=0;i<115;i++);}
}
/////////////发送复位///////////////
voidfashong(void)
{
unsignedchari;
TMDAT=0;for(i=0;i<103;i++);
TMDAT=1;for(i=0;i<4;i++);
}
bittmrbit(void)//读一位//
{
unsignedinti;
bitdat;
TMDAT=0;
i++;
TMDAT=1;
i++;i++;//微量延时//
dat=TMDAT;
for(i=0;i<8;i++);
return(dat);
}
unsignedchartmrbyte(void)//读一个字节
{
unsignedchari,j,dat;
dat=0;
for(i=1;i<=8;i++)
{j=tmrbit();dat=(j<<7)|(dat>>1);}
return(dat);
}
voidtmwbyte(unsignedchardat)//写一个字节
{
unsignedcharj,i;
bittestb;
for(j=1;j<=8;j++)
{testb=dat&0x01;
dat=dat>>1;
if(testb)
{TMDAT=0;//写0
i++;i++;
TMDAT=1;
for(i=0;i<8;i++);}
else
{TMDAT=0;//写0
for(i=0;i<8;i++);
TMDAT=1;
i++;i++;}
}
}
voidtmstart(void)//发送ds1820开始转换
{
fashong();//复位
yanshi
(1);//延时
tmwbyte(0xcc);//跳过序列号命令
tmwbyte(0x44);//发转换命令44H,
}
voidtmrtemp(void)//读取温度
{
unsignedchara,b;
fashong();//复位
yanshi
(1);//延时
tmwbyte(0xcc);//跳过序列号命令
tmwbyte(0xbe);//发送读取命令
a=tmrbyte();//读取低位温度
b=tmrbyte();//读取高位温度
if(b>0x7f)//最高位为1时温度是负
{a=~a;b=~b+1;//补码转换,取反加一
fg=0;//读取温度为负时fg=0
}
sdata=a/16+b*16;//整数部分
//xiaoshu1=(a&0x0f)*10/16;//小数第一位
//xiaoshu2=(a&0x0f)*100/16%10;//小数
//xiaoshu=xiaoshu1*10+xiaoshu2;//小数
}
voidDS18B20PRO(void)
{
tmstart();
//yanshi(5);//如果是不断地读取的话可以不延
tmrtemp();//读取温度,执行完毕温度将存于
}
voidLed()
{
if(fg==1)//温度为正时显示的数据
{
P2_7=0;
P0=seg7code[sdata/10];//输出十位
Delay(8);P2=P2|0xf0;
P2_6=0;
P0=seg7code[sdata%10]|0x80;//输出个位
Delay(8);P2=P2|0xf0;
P2_5=0;
P0=seg7code[z%10]|0x80;//输出延时位
Delay(4);P2=P2|0xf0;
if(sdata>30)
{P1=0xfe;}
if(sdata>32)
{P1=0xfd;}
if(sdata>34)
{P1=0xfb;}
}
}
voidbuzidong()
{
voidDS18B20PRO();
voidLed();
DS18B20PRO();
Led();
if(di==0)
{Delay(200);P1=0xfe;}
if(zh==0)
{Delay(200);P1=0xfd;}
if(ga==0)
{Delay(200);P1=0xfb;}
}
voidzidong()
{
while(z--)
{
voidDS18B20PRO();
voidLed();
unsignedchari,k;
//for(y=30;y>0;y--)
for(i=12;i>0;i--)
//for(j=80;j>0;j--)
for(k=248;k>0;k--)
{
if(jia==0)
{Delay(200);z++;}
if(jian==0)
{Delay(200);z--;}
DS18B20PRO();
Led();
if(di==0)
{Delay(200);P1=0xfe;}
if(zh==0)
{Delay(200);P1=0xfd;}
if(ga==0)
{Delay(200);P1=0xfb;}
/*
if((di==0)||(sdata>30))
{Delay(200);P1=0xfe;}
if((zh==0)||(sdata>32))
{Delay(200);P1=0xfd;}
if((ga==0)||(sdata>34))
{Delay(200);P1=0xfb;}
*/
};
}
}
voidmain()
{
fg=1;
while
(1)
{
//if(jia==0)
//{Delay(200);z++;}
//if(jian==0)
//{Delay(200);z--;}
//zidong();
buzidong();
if(q==0)
{z++;zidong();P1=0xff;}
}
}