智能小车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)
總結
以上是生活随笔為你收集整理的智能小车52单片机c语言,基于STC89C52单片机的智能循迹小车设计的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: PS去除图片和PDF中的水印
- 下一篇: 电影数据集TMDB数据分析练习
