电子设计报告___智能风扇控制系统 本文关键词:控制系统,风扇,电子设计,智能,报告
电子设计报告___智能风扇控制系统 本文简介:智能风扇控制系统设计报告(电子大赛选拔赛)小组成员:沈君豪/13014432313电子中美吕智超/13015433813电子中美黄寒雪/13015435913电子中美设计时间:2015.2—2015.3一.前期准备:经过我们小组三人的讨论,最终我们决定采用8051作为整个系统的控制部分,运用8051
电子设计报告___智能风扇控制系统 本文内容:
智能风扇控制系统
设计报告
(电子大赛选拔赛)
小组成员:沈君豪/13014432313电子中美
吕智超/13015433813电子中美
黄寒雪/13015435913电子中美
设计时间:2015.2—2015.3
一.
前期准备:
经过我们小组三人的讨论,最终我们决定采用8051作为整个系统的控制部分,运用8051系列单片机以及C51编程实现解决方案。故我们事先进行了分工,并进入了准备阶段。
二.
总体设计:
作为控制部分,我们决定使用8051单片机;电源部分我们采用了micro
usb
母座进行供电,工作时可以插入手机充电器(micro
usb公头)进行供电;风扇使用直流电机代替;直流电机驱动部分则使用L298N芯片。
1.首先是按键部分,3个按键(分别表示风速、类型、停止)的状态以启动电扇或设置相应的工作状态。这样就需要3个按键,要通过一个按键来控制2个以上的状态,可以通过按键的次数来控制第几种状态,比如风速有三种状态(弱、中、强),可以用按键1次控制弱,按键2次控制中,按键3次控制强,这样就可以实现一键控制多钟状态了。其中停止按键与P3.2(外部中断0)相接,按下时即可停止所有行为。
2.控制器的指示灯,我们想使用六个LED灯进行显示,分别显示不同风速、类型等6个指示信号。
3.
用直流电机作为电风扇,其转速和停止可通过改变L298N其使能输入的频率来改变电机的速度。利用L298N的2,3引脚来驱动直流电机。
4.风速和风种的实现,采用8051的定时器中断,每隔一定的时间停止L298N的使能输入,使电机停止,改变不同的定时时间,来获得电机的不同转速与风种。
三.
原理图:
四.程序设计(C51)
#include
#include
#include
#define
uchar
unsigned
char
#define
uint
unsigned
int
sbit
A1=P1^0;//电机控制端口
sbit
B1=P1^1;
sbit
ENA=P1^2;
sbit
key1=P3^0;
//风速设置按键
sbit
key2=P3^1;
//风种设置按键
sbit
key3=P3^2;
//停止设置按键
sbit
led1=P0^0;//强风指示灯
sbit
led2=P0^1;//中风指示灯
sbit
led3=P0^2;//慢风指示灯
sbit
led4=P0^3;//正常指示灯
sbit
led5=P0^4;//自然指示灯
sbit
led6=P0^5;//睡眠指示灯
bit
Stop_Flag
=
0;
uint
count
=
0;
uchar
pwm_duty
=
0;//最大为100
uchar
wind_speed
=
0;//分为三级
0高
1中
2慢
uchar
wind_mode
=
0;
//分为三类
0正常
1自然
2睡眠
uint
time
=
0;
//计时变量
void
delay1ms(void)
{
unsigned
char
a,b,c;
for(c=1;c>0;c--)
for(b=142;b>0;b--)
for(a=2;a>0;a--);
}
void
Motor_Forward()//电机正转
{
A1=1;
B1=0;
ENA=1;
}
void
Motor_Reversal()//电机反转
{
A1=0;
B1=1;
ENA=1;
}
void
Motor_Stop()//电机急停
{
A1=1;
B1=1;
ENA=0;
}
void
InitTimer0(void)//T0初始化为1ms定时器
{
TMOD
=
0x01;
TH0
=
0x0FC;
TL0
=
0x18;
EA
=
1;
ET0
=
1;
//TR0
=
1;
}
//主函数
void
main()
{
//端口配置
P0=0xff;
P1=0x00;
P2=0xff;
P3=0xff;
InitTimer0();
EX0=1;
//外部中断0开
IT0=1;
//边沿触发
TR0
=
1;
while(1)
{
if(!key1)
//设置风速
{
delay1ms();
if(!key1)
{
wind_speed++;
if(wind_speed
>=
3)
wind_speed
=
0;
TR0
=
1;
//开启定时器
Stop_Flag
=
0;
//标志位清零
}
while(!key1);
//等待按键释放
}
if(!key2)
//设置风种
{
delay1ms();
if(!key2)
{
wind_mode++;
if(wind_mode
>=
3)
wind_mode
=
0;
time
=
0;
}
while(!key2);
//等待按键释放
}
if(!Stop_Flag)
{
switch(wind_speed)
{
case
0:
pwm_duty
=
100;//100%转速
A1=1;
B1=0;
led1
=
0;
led2
=
1;
led3
=
1;
break;
case
1:
pwm_duty
=
70;
//70%转速
A1=1;
B1=0;
led1
=
1;
led2
=
0;
led3
=
1;
break;
case
2:
pwm_duty
=
40;
//40%转速
A1=1;
B1=0;
led1
=
1;
led2
=
1;
led3
=
0;
break;
default:
A1=1;
B1=1;
break;
}
}
else
{
P0
=
0xff;//LED全灭
}
}
}
void
Timer0Interrupt(void)
interrupt
1
//定时器中断T0
{
TH0
=
0x0FC;
TL0
=
0x18;
count++;
if(wind_mode
==
0)
//正常
{
if(count
=
100)
count
=
0;
led4
=
0;
led5
=
1;
led6
=
1;
}
else
if(wind_mode
==
1)//自然
{
time++;
if(time
=
100)
count
=
0;
}
else
{
ENA
=
0;
}
if(time
>=
8000)
time
=
0;
led4
=
1;
led5
=
0;
led6
=
1;
}
else
//睡眠
{
time++;
if(time
=
100)
count
=
0;
}
else
{
ENA
=
0;
}
if(time
>=
16000)
time
=
0;
led4
=
1;
led5
=
1;
led6
=
0;
}
}
void
ISR_Key(void)
interrupt
0
using
1
//外部中断0
{
Motor_Stop();
//关闭马达
P0
=
0xff;//关闭所有LED
TR0
=
0;
Stop_Flag
=
1;
}
四.
实物焊接图
五.元件清单:
STC89C511个
L298N1个
按键4个
12M晶振1个
22Pf电容2个
10Uf电解电容1个
直流电机1个
330Ω电阻6个
10kΩ电阻6个
LED6个
六.参考用书:
1.《工程电路分析》(美)WilliamH.Hayt(威廉H.海特)
著
电子工业出版社
出版时间
2012-9-1
2.《C
Primer
Plus》
(美)Stephen
Prata
著
人民邮电出版社
出版时间
2005-2-1
3.《时间触发嵌入式系统设计模式》(英)
Michael
J.Pont
著
中国电力出版社
出版时间
2004-7-1