《電子設計報告-智能風扇控制系統(tǒng).docx》由會員分享,可在線閱讀,更多相關《電子設計報告-智能風扇控制系統(tǒng).docx(11頁珍藏版)》請在裝配圖網上搜索。
智能風扇控制系統(tǒng)
設計報告
(電子大賽選拔賽)
小組成員:沈君豪/130144323 13電子中美
呂智超/130154338 13電子中美
黃寒雪/130154359 13電子中美
設計時間:2015.2—2015.3
一. 前期準備:
經過我們小組三人的討論,最終我們決定采用8051作為整個系統(tǒng)的控制部分,運用8051系列單片機以及C51編程實現(xiàn)解決方案。故我們事先進行了分工,并進入了準備階段。
二. 總體設計:
作為控制部分,我們決定使用8051單片機;電源部分我們采用了micro usb 母座進行供電,工作時可以插入手機充電器(micro usb公頭)進行供電;風扇使用直流電機代替;直流電機驅動部分則使用L298N芯片。
1.首先是按鍵部分,3個按鍵(分別表示風速、類型、停止)的狀態(tài)以啟動電扇或設置相應的工作狀態(tài)。這樣就需要3個按鍵,要通過一個按鍵來控制2個以上的狀態(tài),可以通過按鍵的次數(shù)來控制第幾種狀態(tài),比如風速有三種狀態(tài)(弱、中、強),可以用按鍵1次控制弱,按鍵2次控制中,按鍵3次控制強,這樣就可以實現(xiàn)一鍵控制多鐘狀態(tài)了。其中停止按鍵與P3.2(外部中斷0)相接,按下時即可停止所有行為。
2.控制器的指示燈,我們想使用六個LED燈進行顯示,分別顯示不同風速、類型等6個指示信號。
3. 用直流電機作為電風扇,其轉速和停止可通過改變L298N其使能輸入的頻率來改變電機的速度。利用L298N的2,3引腳來驅動直流電機。
4.風速和風種的實現(xiàn),采用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;
}
//主函數(shù)
void main()
{
//端口配置
P0=0xff;
P1=0x00;
P2=0xff;
P3=0xff;
InitTimer0();
EX0=1; //外部中斷0開
IT0=1; //邊沿觸發(fā)
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 <= pwm_duty)
ENA = 1;
else
ENA = 0;
if(count >= 100)
count = 0;
led4 = 0;
led5 = 1;
led6 = 1;
}
else if(wind_mode == 1)//自然
{
time++;
if(time <= 4000)//4s
{
if(count <= pwm_duty)
ENA = 1;
else
ENA = 0;
if(count >= 100)
count = 0;
}
else
{
ENA = 0;
}
if(time >= 8000) time = 0;
led4 = 1;
led5 = 0;
led6 = 1;
}
else //睡眠
{
time++;
if(time <= 8000)//8s
{
if(count <= pwm_duty)
ENA = 1;
else
ENA = 0;
if(count >= 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;
}
四. 實物焊接圖
五.元件清單:
STC89C51 1個
L298N 1個
按鍵 4個
12M晶振 1個
22Pf電容 2個
10Uf電解電容 1個
直流電機 1個
330Ω電阻 6個
10kΩ電阻 6個
LED 6個
六.參考用書:
1.《工程電路分析》(美)WilliamH.Hayt(威廉H.海特) 著
電子工業(yè)出版社 出版時間 2012-9-1
2.《C Primer Plus》(美)Stephen Prata 著
人民郵電出版社 出版時間2005-2-1
3.《時間觸發(fā)嵌入式系統(tǒng)設計模式》(英)Michael J.Pont 著
中國電力出版社 出版時間 2004-7-1
鏈接地址:http://www.820124.com/p-9031589.html