天天看點

智能小車52單片機c語言,基于STC89C52單片機的智能循迹小車設計

摘要:智能循迹小車是一種在控制系統的作用下,可以準确沿既定路線自動行駛的系統。本設計中,采用STC89C52單片機為主要制晶片,結合直流電機、傳感器、電源電路及其他外圍電路,設計實作了小車沿黑色軌迹行走的智能循迹小車,其中小車循迹功能由紅外式光電傳感器完成,小車的驅動功能由L293D驅動電路完成。

關鍵詞:智能循迹小車;直流電機;紅外光電傳感器

中圖分類号:TP18文獻辨別碼:A 文章編号:1009-3044(2011)31-00000-00

随着計算機和資訊技術的飛速發展,智能技術的開發受到越來越廣泛的重視,其開發速度也在快速增加。由于智能化的程度越來越高,使得其應用範圍也在不斷的擴充。與此同時,機器人技術的發展勢頭迅猛,其應用領域衆多,智能循迹小車就是機器人技術與智能控制技術相結合的一個應用典範。通俗來講,智能循迹小車就是智能機器人的另一種形式,它用輪子代替了機器人的雙腿,因而在機械設計和電路方面都要比智能機器人簡單,另外,其控制系統和智能機器人相比也較為簡單,可是其對行車速度和行駛方向的配合則要求較嚴格,它首先通過傳感器擷取目标道路資訊,然後結合智能車目前的行駛狀态智能地做出決策,對其行駛方向與行車速度進行調整,進而達到準确快速跟蹤道路的目的。本文介紹了一種基于STC89C52單片機為控制核心的智能循迹小車的設計,該智能小車能自動沿黑色固定軌迹運作。

1 智能循迹小車總體硬體結構設計及工作原理簡介

1.1 智能循迹小車總體硬體結構設計

本設計中,智能循迹小車是由主要制子產品、循迹子產品、電機驅動子產品、電源子產品和其他外圍電路組成,其總體硬體結構框圖如圖1所示。

圖1 智能循迹小車總體硬體結構圖

在本設計中,是以STC89C52為主要子產品,采用子產品化設計的方法,以紅外光電傳感器作為循迹子產品,并采用L293D晶片控制輸出直接驅動直流電機作為電機驅動子產品。電源子產品用4節1.5V的電池供電,經L7805穩壓子產品後,輸出電壓穩定在+5V,進而向各個子產品供電。

1.2 智能小車工作原理簡介

本設計中,循迹指的是小車在白色地闆上沿着2cm寬的黑線行走。紅外傳感器的發射管發出紅外線,由接收管接收。同時,接收的實體量被轉化成電信号,經過信号放大電路處理,由單片機的P0,P1,P2口輸入,經過處理後,信号由P20,P21,P22,P23,P24,P25口輸出給電機驅動電路的L293D晶片,進而達到驅動小車行走和循迹的目的。循迹時,由于紅外線在白色地闆和黑線上的反射系數不同,是以可以根據三極管接收紅外線的強弱來決定小車的走向。本設計采用三對紅外傳感器,采用“一字型”[1]分布。中間傳感器接收不到反射回來的紅外線,而左右兩個傳感器能接收到反射回來的紅外線,則小車直線前進;當左邊和中間(或隻有左邊)的傳感器接收不到反射回來的紅外線,隻有右邊傳感器能接收到時,說明小車向右偏離黑色軌道,則小車向左轉動;同理,當中間和右邊(或隻有右邊)的傳感器接收不到反射回來的紅外線,隻有左邊傳感器能接收到時,說明小車向左偏離黑色軌道,則小車向右轉動,進而實作自動循迹。本設計中紅外傳感器離地面垂直距離為8cm,能在沒有強烈日光幹擾或在有日光燈的房間裡,完全能滿足探測要求,具有很好的可靠性與抗幹擾能力[2,3]。

2 智能循迹小車所用晶片器件簡介

上文已經介紹,本設計一共分為主要制子產品、循迹子產品、電機驅動子產品和電源子產品等子產品。下面對主要子產品的工作原理作簡單說明。

2.1 主要子產品STC89C52簡介

該子產品是整個設計的大腦。傳感器的輸出端SEN1,SEN2,SEN3将信号通過P1.0,P1.1,P1.2口輸入單片機,經過處理後,由P20, P21,P22, P23,P24,P25口輸出給L293D的EN1, EN2, IN1, IN2, IN3, IN4引腳,進而完成對小車的控制。該子產品的主要由STC89C52單片機及其外圍電路組成,如圖2所示。

圖2 STC89C52單片機個引腳圖

本設計中,STC89C52晶片的40引腳VCC接+5V電源,20引腳GND接地。18引腳XTAL1和19引腳XTAL2接在頻率為11.0592MHZ的晶振上,并接了20PF的電容。9引腳RST外接複位電路,為單片機提供上電複位。作為P3口的第二功能,10引腳P3.0和11引腳P3.1被作為單片機的通信端,即串行輸入口和串行輸出口,用以完成程式下載下傳所需。1引腳P1.0,2引腳P1.1,3引腳P1.2分别和三對紅外傳感器的輸出端SEN1,SEN2,SEN3相連,以完成電信号的輸入。21引腳P2.0,22引腳P2.1,23引腳P2.2,24引腳P2.3,25引腳P2.4,26引腳P2.5分别和L293D晶片的EN1,EN2,IN1,IN2,IN3,IN4引腳相連,以完成将經過單片機處理過的信号輸入給電機驅動電路。

2.2 TCRT5000紅外光電傳感器子產品簡介

本設計中,采用三對TCRT5000型号的紅外光電傳感器。這三對傳感器呈均勻“一字型”分布。這種方法檢測連貫簡單,程式控制算法簡單,使小車控制穩定。但是這種均勻一字型分布不利于對彎道信号采集的準确性。圖3為其中一對傳感器及其外圍電路的原理圖。

圖3TCRT5000傳感器電路圖

TCRT5000型紅外光電傳感器由一個高發射功率的紅外光電二極管和一個接收紅外線的高度靈敏的光電三極管(NPN型)組成。其中滑動變阻器R3是一個藍白電位器,通過調整R3的阻值進而達到調整光敏三極管對反射光的靈敏度。

紅外發射二極管不斷的發射出紅外線。當反射回來的紅外線強度足夠大時,光敏三極管飽和,則該子產品輸出為高電平;當反射回來的紅外線強度不夠大或者沒有反射回來紅外線時,光敏三極管一直處于關斷狀态,則該子產品的輸出為低電平。光敏三極管除了具有将光信号轉換成電信号的功能外,還具有對電信号放大的功能。

2.3 電信号放大子產品簡介

傳感器所産生的電信号較為微弱,不能作為單片機的輸入,是以要接一個放大電路進行處理。本子產品采用SN74HC04N晶片及其外圍電路用作放大電路。

SN74HC04N晶片的引腳圖如圖4所示。

圖4 SN74HC04N引腳圖

首先,SN74HC04N晶片内部有六組相同的反相器。是以,當三組紅外傳感器産生的電信号傳給SN74HC04N後,會變成與其相反的電平。本設計中,引腳1, 3, 5為紅外傳感器輸入SN74HC04N晶片的接口,引腳2, 4, 6為經SN74HC04N處理後的輸出口,對應圖2中SEN1,SEN2,SEN3這三個接口。另外,74HC04N内部有6個施密特觸發器電路。施密特觸發器的重要特點是能夠把緩慢變化的輸入信号整形成邊沿陡峭的矩形脈沖。同時,施密特觸發器還可以利用其回差電壓來提高電路的抗幹擾能力。

2.4 電機驅動子產品簡介

圖5電機驅動子產品圖

本子產品選用L293D晶片進行控制。該晶片驅動方式比較簡單,直接驅動兩個直流電機。控制每一路電機,都有三個信号,分别為EN1,IN1,IN2和EN2,IN3, IN4。這六個引腳分别同STC89C52單片機的P2.0~P2.5口相連。這裡晶片的工作電壓為+5V。本設計中,采用兩個輸出控制一個電機的方式。即OUT1和OUT2控制電機1,OUT3和OUT4控制電機2。上圖中的D1~D8為箝位二極管。電機在停止的瞬間會産生一個逆向的電流,切割磁場後會産生一個逆向的電動勢。設定這些箝位二極管,就是為了防止逆電動勢燒壞晶片,進而它們起到保護作用。

3 智能循迹小車的軟體設計

單片機完成對智能小車的自動控制功能,主要是執行相應軟體來實作。本設計中,利用結構化設計方法,采用C語言實作相應功能軟體。下面對程式中的主要幾個功能子產品進行說明。

3.1 主程式函數

void main(void)

{

delay(10);

while(1)

{

switch( sensor_inp() )

{

case 0x02:forward(); break;

case 0x04: turn_left(); break;

case 0x01: turn_right(); break;

default:

break;

}

}

}

程式開始,進入主函數。調用延遲函數delay(),用以使系統達到穩定狀态。在KEIL軟體下進行斷點運作,測得這裡的delay(10)在11.0592MHz的晶振下可以延遲100ms。之後進入while循環,條件始終為真,表示小車将一直運作while函數中的語句,直至外界迫使小車停下。在switch分支語句中,case 0x02将使程式跳轉至forward();,其中0x02即為二進制的00000010,這表示三個傳感器中,隻有中間的傳感器輸出的是高電平,左右兩個傳感器都輸出低電平,故小車沿直線行走。case 0x04将使程式跳轉至turn_left();,其中0x04即為二進制的00000100,這表示三個傳感器中,隻有左邊的傳感器輸出的是高電平,中間和右邊的傳感器輸出的均為低電平,故小車左拐。case 0x01将使程式跳轉至turn_right();,其中0x01即為二進制的00000001,這表示三個傳感器中,隻有右邊的傳感器輸出的是高電平,左邊和中間的傳感器均輸出低電平,故小車右拐。

3.2 小車前進子程式子產品

void forward()

{

IN1=1;

IN2=0;

IN3=1;

IN4=0;

EN1=1;

EN2=1;

}

該程式中,L293D晶片的兩個使能端EN1和EN2一直保持高電平。IN1=1,IN2=0說明右邊電機向前轉動;IN3=1,IN4=0說明左邊電機也向前轉動。故兩個電機同時向前轉動,進而驅動小車向前行進。

3.3 小車左轉子程式子產品

void turn_right()

{

IN1=1;

IN2=0;

IN3=0;

IN4=0;

EN1=1;

EN2=1;

}

該程式中,使能端EN1和EN2仍然保持高電平。IN1=0,IN2=0,表明右邊電機向前轉動;而IN3=0,IN4=0,說明左邊電機不動。左輪不轉右輪轉,這樣就實作了小車向左轉

3.4 小車右轉子程式子產品

void turn_left()

{

IN1=0;

IN2=0;

IN3=1;

IN4=0;

EN1=1;

EN2=1;

}

該程式中,使能端EN1和EN2仍然保持高電平。IN1=0,IN2=0表明右邊電機停止不轉動;IN3=1,IN4=0說明左邊電機向前轉動。右輪不轉左輪轉,這樣就實作了小車右轉。

3.5 延時子程式子產品

void delay(int n)

{

unsigned char i,j,k;

for(i=n;i>0;i--)

for(j=50;j>0;j--)

for(k=100;k>0;k--);

}

該延時子程式主要是讓系統初始化到最佳狀态。經由KEIL軟體的斷點測試,在晶振頻率為11.0592MHz時,當n = 10時,可延時100ms。

4 總結

本文提出了一種基于STC89C52單片機為控制核心的智能循迹小車的設計方案,該方案以紅外傳感器作為路徑資訊采集手段,以L293D晶片來控制并驅動電機運作,最終實作了小車在固定軌迹上自動循迹運作。該方案總體來說,比較簡單,成本低且易于實作,但也存在缺陷,如傳感器的“一字型”均勻布局使得小車在彎道行駛時可能會出現誤差,另外,小車循迹過程中會出現“蛇形擺動”問題,這些問題都還有待于改進。

參考文獻:

[1] 周斌,李立國.智能車光電傳感器布局對路徑識别的影響研究[J].産品世界,2006(9):139-140.

[2] 吳建平,殷戰國.紅外反射式傳感器在自主導航小車中的應用[J].中國測試技術,2004(6):21-23.

[3] 楊永輝.智能小車的多傳感器資料融合[J].現代電子技術,2005(6):3-6.

[4] 高月華.基于紅外光電傳感器的智能車自動循迹系統的設計[J].光電技術應用,2009(2):1-5.

[5] 何立民.基于HCS12的小車智能控制系統設計[J].單片機與嵌入式系統應用,2007(3):51-53,57.

收稿日期:2011-08-17

基金項目:陝西理工學院教學改革項目(XJG1135)