《電子設(shè)計競賽往返變速小車實驗報告.docx》由會員分享,可在線閱讀,更多相關(guān)《電子設(shè)計競賽往返變速小車實驗報告.docx(14頁珍藏版)》請在裝配圖網(wǎng)上搜索。
重慶郵電大學(xué)電子設(shè)計競賽培訓(xùn)
智能小車設(shè)計報告
作者:
徐國英(2013211997)
曾 鵬(2013212009)
生物信息學(xué)院
日期 2015年4月5日
一方案論證與選擇
1 總體框圖
選定自動往返小車的題目后,我們決定購買一臺符合尺寸要求的玩具遙控小車,通過去掉其遙控部分,并直接利用上面的直流電機的方法實現(xiàn)要求。
根據(jù)設(shè)計任務(wù)要求,經(jīng)過論證選擇,最終確定的系統(tǒng)設(shè)計框圖如下:
外部傳感器模塊
STC89C51單片機
電機驅(qū)動模塊
電源模塊
系統(tǒng)分為單片機控制模塊、外部傳感器模塊、電機驅(qū)動模塊、電源模塊、顯示模塊。
2 各模塊方案選擇
2.1控制模塊
控制模塊負責(zé)接收傳感器的信息,并處理接收到的信息。由于我們才接觸到電子設(shè)計,所以選擇了相對容易學(xué)會并且普遍應(yīng)用的單片機作為主控制器。在考慮到本系統(tǒng)無需復(fù)雜的邏輯功能,我們選擇了**單片機。
2.2電源模塊
采用電池作為電源直接輸入直流后,用多個穩(wěn)壓器穩(wěn)壓得到理想的不同幅值直流電源。這種方法獲取電源方便,且電源輸出電流能力大。
2.3外部傳感器模塊
方案1:
該方案用光敏電阻組成光敏探測器檢測黑線,用霍耳傳感器進行測速。首先,光敏電阻的阻值可以跟隨周圍環(huán)境光線的變化而變化。當(dāng)光線照射到白線上面時,光線發(fā)射強烈,光線照射到黑線上面時,光線發(fā)射較弱。因此光敏電阻在白線和黑線上方時,阻值會發(fā)生明顯的變化,只要將阻值的變化值經(jīng)過比較器就可以輸出高低電平。其次,使用利用霍耳效應(yīng)的傳感器。當(dāng)載流導(dǎo)體或半導(dǎo)體出于與電流相垂直的磁場中時,在其兩端將產(chǎn)生電位差的這一現(xiàn)象稱為霍爾效應(yīng)。如果在車輪的內(nèi)側(cè)裝上一條細磁鐵,把霍耳傳感器同樣裝在車輪的內(nèi)側(cè),測量霍爾傳感器的輸出就可以知道車輪轉(zhuǎn)過的圈數(shù)。
方案2
使用光電對管進行檢測黑線和測速,這是一種一體化反射型光電探測器,其發(fā)射器是一個砷化鎵紅外發(fā)光二極管,而接收器是一個高靈敏度,硅平面光電三極管。該當(dāng)經(jīng)過黑線時接收器輸出高電平。測速時,在車輪的內(nèi)側(cè)貼上一個光電碼盤,用光電對管對碼盤進行檢測。光電對管照射到黑色和白色的邊界時輸出信號會有跳變,將跳變的輸出信號送給單片機進行檢測就可以得到輪子的轉(zhuǎn)速。
經(jīng)過論證比較,由于光電對管內(nèi)置可見光過濾器能減小離散光的影響,同時光電對管調(diào)理電路簡單,工作性能穩(wěn)定。因此,外部傳感器模塊選用方案二
2.4電機驅(qū)動模塊
二系統(tǒng)硬件設(shè)計與實現(xiàn)
1各模塊硬件設(shè)計
黑線檢測,最小系統(tǒng)
電機驅(qū)動
1.1程序
#include
sbit sign = P0^0;
sbit result = P0^1;
sbit base1 = P3^0;
sbit base2 = P3^1;
bit Index = 0;
unsigned char T0RH = 0;
unsigned char T0RL = 0;
unsigned char RxdByte = 0;
unsigned char RxdBuff = 0;
unsigned char tmr = 0;
signed char BlackLine = 0; //初始的時候黑線會自動加1歸零
signed char Line;
unsigned char timer1 = 0;
unsigned char flag = 0;
void Configms(unsigned char ms);
void Time1Config();
void delay10ms(unsigned int c);
void seekline();
void main()
{
EA = 1;
result = 1;
RxdByte = 0x00;
sign = 0;
base1 = base2 = 1;
Configms(1);
Time1Config();
while(1)
{
while(1)
{
if(BlackLine <= 5)
{
while(1)
{
if(timer1 <= 90)
{
base1 = 1;
base2 = 0;
}
else
{
base1 = 1;
base2 = 1;
}
if(Index)
{Index = 0;
break;}
}
break;
}
else if(BlackLine >= 6)
{
while(1)
{
if(timer1 <= 90)
{
base1 = 0;
base2 = 1;
}
else
{
base1 = 1;
base2 = 1;
}
if(Index)
{Index = 0;
break;}
}
break;
}
}
if(BlackLine % 3 ==0)
{
switch(BlackLine)
{
case 3: while(1)
{
if(timer1 <= 70)
{
base1 = 1;
base2 = 0;
}
else
{
base1 = 1;
base2 = 1;
}
if(Index)
{Index = 0;
break;}
}
break;
case 6: EA = 0;
base1 = base2 = 1;
delay10ms(1100);
EA = 1;
while(1)
{
if(timer1 <= 90)
{
base1 = 0;
base2 = 1;
}
else
{
base1 = 1;
base2 = 1;
}
if(Index)
{Index = 0;
break;}
}
break;
case 9: while(1)
{
if(timer1 <= 70)
{
base1 = 0;
base2 = 1;
}
else
{
base1 = 1;
base2 = 1;
}
if(Index)
{Index = 0;
break;}
}
break;
case 12:base1 = base2 = 1;
while(1);
break;
default: break;
}
}
}
}
void seekline()
{
RxdBuff = RxdByte;
RxdByte <<= 1;
RxdByte |= result;
if (RxdByte != RxdBuff)
{
if(RxdByte == 0xFF)
{
flag = 1;
}
else if(RxdByte == 0x00)
{
flag += 1;
};
if(flag == 2)
{
BlackLine ++;
Index = 1;
flag = 0;
}
}
}
void Configms(unsigned char ms)
{
unsigned long tmp;
tmp = 11059200 / 12;
tmp = (tmp * ms) /1000;
tmp = 65536 - tmp;
tmp = tmp + 18;
T0RH = (unsigned char)(tmp>>8);
T0RL = (unsigned char)tmp;
TMOD &= 0xF0;
TMOD |= 0x01;
TH0 = T0RH;
TL0 = T0RL;
ET0 = 1;
TR0 = 1;
}
void Time1Config()
{
TMOD &= 0x0F;
TMOD |= 0x10;
TH1 = 0xFE;
TL1 = 0x0C;
ET1 = 1;
TR1 = 1;
}
void delay10ms(unsigned int c) //10ms延時器
{
unsigned char a, b;
for (; c>0; c--)
{
for (b=38; b>0; b--)
{
for (a=130; a>0; a--);
}
}
}
void InterruptTimer0() interrupt 1
{
TH0 = T0RH;
TL0 = T0RL;
seekline();
}
void Time1(void) interrupt 3
{ TH1 = 0xFE;
TL1 = 0x0C;
timer1++;
if(timer1 > 100)
timer1 = 0;
}
三:心得體會
很開心
鏈接地址:http://m.appdesigncorp.com/p-8977772.html