• 方案介紹
    • 一、前言
    • 二、系統(tǒng)設(shè)計
    • 三、硬件設(shè)計
    • 四、軟件設(shè)計
  • 附件下載
  • 相關(guān)推薦
申請入駐 產(chǎn)業(yè)圖譜

基于STM32設(shè)計的避障尋跡小車

02/12 09:27
1978
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點資訊討論

更多詳細資料請聯(lián)系.docx

共1個文件

一、前言

1.1 項目背景

根據(jù)美國玩具協(xié)會在一項研究中,過去幾年全球玩具銷售增長與GDP的世界平均水平大致相同。但全球玩具市場的內(nèi)部結(jié)構(gòu)已經(jīng)占據(jù)了巨大的位置變化:傳統(tǒng)玩具的市場份額正在下降,高科技電子玩具正在蓬勃發(fā)展。全球玩具市場的高科技電子游戲2010年的年銷售額增長了67%,但傳統(tǒng)玩具的年銷售額僅增長了1%。

2001年,十大最受歡迎的圣誕玩具之一有電子玩具。智能系統(tǒng)之前在很多領(lǐng)域,如智能工程、IT、集成引擎及行業(yè)整合正在討論,就必須變得更聰明??梢妭鹘y(tǒng)的控制概念不能滿足用戶的需求,并與這些傳統(tǒng)的控制相關(guān)的智能控制提高了一般的優(yōu)勢和較好滿足人的需求。人工智能計算機的不斷發(fā)展,智能控制領(lǐng)域取得了很大的創(chuàng)新。因此,找到并使用遠程控制和智能技術(shù)非常重要。而且市場價值超群。

智能汽車是一種識別的多功能智能設(shè)備決策的自主水平的機械設(shè)計,信息技術(shù)和人工智能領(lǐng)域的主動管理的環(huán)境中。它可分為三個部分:一個驅(qū)動部件,所述檢測傳感器和所述控制器的一部分。分別在物流運輸方面發(fā)揮軍事,安全檢查和破壞程度進行評估的應(yīng)用的作用。

image-20230208170226707

image-20230208170247444

1.2 小車的現(xiàn)狀

【1】國內(nèi):在上世紀80年代末,中國開始研究智能車,幾十年的研究后,取得了一些階段性成果。7B.8智能車輛系統(tǒng)。該系統(tǒng)是由南京理工大學(xué)、北京理工大學(xué)、浙江大學(xué)、國防科技大學(xué)、清華大學(xué)等多所院校聯(lián)合硏制,屬于軍用室外智能車輛,于1995年底通過驗收。

【2】國外:智能車輛的研發(fā)在國外的很多機構(gòu)都得到了很大的創(chuàng)新,尤其是在科學(xué)和工業(yè)設(shè)計等領(lǐng)域,獲得了更進一步的擴展,研發(fā)技術(shù)已經(jīng)達到了很高的水平,其中具有代表性的智能車輛包括:

美國卡內(nèi)基梅隆大學(xué)機器人研究所研制的Navlab系列智能車輛系統(tǒng), 該系統(tǒng)的車體采用 Pontiac運動跑車,其傳感器系統(tǒng)包括視覺、差分GPS系統(tǒng)。

德國 Vamos—P智能車輛系統(tǒng)該傳感器系統(tǒng)包括兩個有源雙筒望遠鏡系統(tǒng)配置PZSA相機4種顏色,三個線性加速度計和角慣性傳感器改變狀態(tài)轉(zhuǎn)速計和發(fā)動機的測量裝置。驅(qū)動方向包括發(fā)動機轉(zhuǎn)矩,液壓制動器和電子節(jié)氣門。

二、系統(tǒng)設(shè)計

2.1 主控系統(tǒng)設(shè)計

根據(jù)設(shè)計要求,控制器主要用在控制電機,并通過有關(guān)的傳感器處理通道的軌道信息,將處理信號傳送給控制器,然后通過控制器可以進行相應(yīng)的處理,以此用來實現(xiàn)電機的前進和后退,確保在實驗范圍內(nèi)能夠進行躲避障礙和尋找痕跡還有加速減速等等動作。

供應(yīng)鏈管理為核心的系統(tǒng),在汽車的道路的控制,以達到他們的目標。 我們的系統(tǒng)進行完整的分析,關(guān)鍵要實現(xiàn)自動車輛控制,但此刻,微控制器已經(jīng)顯示出它的優(yōu)勢是簡單,方便,快捷。

STM32具有低功耗,高時鐘速度和短中斷延遲的特點。 CORTEX-M3是一款32位ARM7系列處理器,包括處理器內(nèi)核,內(nèi)存單元,總線接口和跟蹤調(diào)試單元。本設(shè)計中使用的STM32 F103ZET6微控制器直接用于最小的開發(fā)板,便于學(xué)習(xí)和使用。STM32F103功能及特點。

功能包含內(nèi)核(ARM 32位的Cortex?-M3 CPU)、儲存器、時鐘、復(fù)位和電源管理、 低功耗、 2個12位模數(shù)轉(zhuǎn)換器, 1μs轉(zhuǎn)換時間(多達16個輸入通道)、 DMA、多達80個快速I/O端口、 調(diào)試模式、多達7個定時器、多達9個通信接口、CRC計算單元, 96位的芯片唯一代碼。

特點是集成了強大的硬件系統(tǒng),使其在工作中消耗更少的電力。它是一個16/32位混合編碼指令,可以與拇指指令兼容。NVIC是CORTEX-M3的緊密耦合部分,可配置240個中斷并分為256個優(yōu)先級,CORTEX-M3還使用尾鏈技術(shù),使得背對背中斷響應(yīng)僅6個時鐘周期,因此中斷響應(yīng)更迅速。

MPU是處理器中的存儲模塊,通過定義和檢查存儲區(qū)域的屬性來實現(xiàn)存儲功能。調(diào)試訪問接口可以用作串口或串行JTAG調(diào)試端口。串口調(diào)試端口只能通過時鐘和數(shù)據(jù)兩個引腳進行調(diào)試,以保證低成本。

STM32處理器分為標準化、增強型和最新產(chǎn)品。STM32 F101為標準型,頻率為36兆赫 ;STM32 F103是增強型,頻率為72兆赫,STM32 F105和STM32 F107是最新的系列產(chǎn)品,增加了USB和以太網(wǎng)接口。

依據(jù)如上的分析,選擇P89C51 RAM單片機為這個設(shè)計的主要控制裝備,使用STM32芯片作為設(shè)計的開發(fā)芯片。由于其存儲性能強,功耗小,能滿足復(fù)雜編程功能的要求,且成本較低,對于這種設(shè)計來說是綽綽有余。

2.2 電機驅(qū)動模塊

2.2.1 供電方式

方案一:采用單電源同時提供單片機和直流電機。該方案的優(yōu)點是減小了機身的重量,操作簡單。這會讓單片機的波動變得很大,影響到單片機的性能,穩(wěn)定性變得不高。

方案二:采用雙電源供電,通過兩個外界移動電源進行供電,該方案的優(yōu)點是減小了波動,穩(wěn)定性更好,可以更好地操作汽車。

方案三:多電池串聯(lián)供電。由于單片機的工作電壓在5V左右,直流電壓也小,可以通過電池供電,使電池串聯(lián)連接,保證了系統(tǒng)的正常運行。

綜合考慮,使用第二方案。

2.2.2 驅(qū)動電機方式

功率晶體管用作功率放大器輸出信號以驅(qū)動DC電動機。 線性控制電路的結(jié)構(gòu)比較簡單,原理簡單,加速度強。 方案H橋達林頓配置。 達林頓微處理器控制,可調(diào)孔隙率操作狀態(tài)切換時,電機速度的更精確的控制。

從電路的管道飽和效率關(guān)模式是非常高的。H型橋式電路確保了速度和方向的簡單控制。電子管的開關(guān)速度非??欤€(wěn)定性很強。它是一種廣泛應(yīng)用的PWM調(diào)速技術(shù)。現(xiàn)在市場上有很多芯片。我選擇了L298N。該實施例具有優(yōu)異的特性的頭速度,平滑控制,一個寬的速度范圍,大的過載可承受頻繁的沖擊載荷也可以實現(xiàn)無級地頻繁很快開始,制動和扭轉(zhuǎn)等。 因此,我們決定使用的功率晶體管作為發(fā)動機功率放大器DC的輸出控制。

img

圖2.1.1 H橋式電路

img

圖2.2.2 L298N

2.2.3 電機驅(qū)動選擇

方案一:DC電機的使用具有硬件電路設(shè)計簡單的優(yōu)點。當(dāng)使用額定的直流電壓時,速度變化不大,調(diào)速性能很好,性價比很高。對于小車,它可以很好地控制。

方案二:步進電機,步進電機可實現(xiàn)精確的轉(zhuǎn)角輸出,只要應(yīng)用合適的脈沖序列,電機就可以按照人們預(yù)定的速度或方向連續(xù)旋轉(zhuǎn),控制速度很慢,但軟件程序的編程是一個比直流電機更復(fù)雜。

所以我選擇方案一,好控制且性價比高。

2.3 循跡模塊

方案一:這個模塊使用了兩個紅外對管(如圖2.3),分別放在小車車前左右兩邊,由光電開關(guān)的檢測情況可知,來控制小車的行駛和轉(zhuǎn)向,通過測試表明,只要合理的安排兩個光電開關(guān)的位置,就可以達到循跡的功能。

方案二:使用三對紅外管,其中的兩個紅對外管可以檢測到黑線。 在黑線軌道之后,汽車將立即調(diào)整到中心燈開關(guān)的方向,再次檢測黑線,即返回軌道。那么它就會再次沿著黑線行駛。但是,現(xiàn)場的觀察表明,小車在尋機的過程中會左右搖擺,雖然可以正確的尋跡,但是成本和穩(wěn)定性都無法和第二方案相比較。

通過比較,我選取第二種方案來實現(xiàn)循跡

img

圖2.3 紅外對管

2.4 避障模塊

2.4.1 紅外線避障

方案一:在小車的中央使用紅外線管。安裝容易,可以檢測障礙物的存在,但很難確定汽車是否會在水平方向上與障礙物碰撞,不容易使汽車做出準確的轉(zhuǎn)向反應(yīng)。最終沒有采納這個方案。

方案二:車輛的前部的兩側(cè)布置了兩個紅外線管,平行于機器方向。 它可以精確地確定車輛和障礙,和及時響應(yīng)的相對距離和方向。缺點是對硬件要求較高,且成本比較大。

方案三:在小車的右側(cè)使用紅外線管。通過對該方案的測試,可以避免障礙物,充分利用資源而不浪費。但是在右側(cè)會有部分死角,不利于小車完美避障。最終沒有采納這個方案。

方案四:把一個包括有舵機的紅外線管裝置在小車的頭部。借助旋轉(zhuǎn)的功能可以全方位的了解四周的情況并及時作出反應(yīng),缺點就是我們需要安裝舵機,并編寫多個程序使它運行,這就加大了工作負擔(dān)。并且需要制作不宜過重的舵機,還要是其旋轉(zhuǎn)角度為最佳,工作過程過于麻煩,故未選擇該方案。

所以采用第二種。

2.4.2 超聲波避障

方案一:串聯(lián)電阻轉(zhuǎn)速控制系統(tǒng)。

方案二:靜態(tài)可控整流器。V-M系統(tǒng)簡稱。

方案三:脈寬調(diào)制系統(tǒng)。

旋轉(zhuǎn)式交流轉(zhuǎn)換系統(tǒng)由交流發(fā)電機驅(qū)動,交流發(fā)電機改變直流電動機,并由需要速度控制的直流電動機發(fā)電機供電。發(fā)電機的輸出電壓可以通過調(diào)整發(fā)電機勵磁電流和通過調(diào)節(jié)電機的速度被改變。

如果激勵變化的側(cè)電流 輸出電壓的極性是從電機的極性不同。因此,G-M系的可逆操作可以是相對簡單的。 該系統(tǒng)需要一個可變旋轉(zhuǎn)速度旋轉(zhuǎn)單元,其包括具有相同容量的電動機速度控制的至少兩個旋轉(zhuǎn)機械。它還需要一個激勵發(fā)生器。但他的裝備很笨重。成本高,效率低,維護不實用。而且由于技術(shù)落后,因此不需要擱置。

V-M系統(tǒng)是直流調(diào)速系統(tǒng)的主要形式。 有許多類型,例如:單相,三相或更多,相位,半波,交替,半控制,總控制等,它們可以實現(xiàn)平穩(wěn)的速度控制。 V-M系統(tǒng)的缺點是晶閘管的單向?qū)щ娦?。它不允許反向電流引起系統(tǒng)的可逆操作。另一個缺點是高操作和維護條件。最后,如果系統(tǒng)以低速運行,其功率將非常低,此時產(chǎn)生的高諧波電流將損壞附近的電氣設(shè)備。

晶閘管與相位無關(guān)。當(dāng)晶閘管跳閘時,電源電壓會施加到電機上。當(dāng)晶閘管斷開時,直流電源與電動機斷開。電動機繼續(xù)在二極管中流動,并且通過它的電壓接近零。脈沖寬度調(diào)制(PWM)。脈沖具有恒定的周期,并且僅改變?yōu)榫чl管指定的時間,即通過改變脈沖的寬度來調(diào)節(jié)連續(xù)速度。

與V-M系統(tǒng)相比,PWM調(diào)速系統(tǒng)具有以下優(yōu)點:

(1)由于PWM速度控制系統(tǒng)的高頻開關(guān),只能通過發(fā)動機電感濾波器獲得小的DC紋波電流。由于上述現(xiàn)有的信號系統(tǒng),V-M的系統(tǒng),具有相同的平均電流相對小的熱機。

(2)由于開關(guān)頻率高,如果快速響應(yīng)匹配到發(fā)動機,該系統(tǒng)能夠是寬帶,響應(yīng)速度快,因此,良好的性能,動感較強的抗干擾能力。

根據(jù)上述的綜合比較,和發(fā)動機控制能力,并在這種設(shè)計中的DC馬達的速度調(diào)節(jié)的發(fā)展方向,該設(shè)計依賴于調(diào)節(jié)PWM輸出的速度,以一個小的計算機芯片的單MEGA16,從而可以實現(xiàn)更好的控制EF。FECT與LM29芯片相結(jié)合。在避開障礙物的過程中,電機也可以通過直接控制LM29 8芯片來控制。操作方便,易于翻轉(zhuǎn)和倒退功能。

所以我選擇了方案三。

2.5 遙控變速系統(tǒng)

本課題要求智能小車可以遙控可變速,所以加上遙控系統(tǒng)。

在本課題中利用按鍵和LCD1602結(jié)合進而改變小車的速度問題。這樣可以減輕負擔(dān)且更加直接的改變小車的速度。

2.6 LCD1602液晶顯示模塊

在日常生活中,我們對液晶顯示器并不陌生。我使用的液晶的顯示部,許多電子產(chǎn)品,如計算器,萬用表,數(shù)字時鐘,和許多消費電子產(chǎn)品,數(shù)碼屏幕基材以及特殊字符和圖形的通道。 人與機器在單芯片微型計算機之間的通信接口, 一般輸出模式如下:管發(fā)光管,LED數(shù)字顯示,屏幕流體。

液晶顯示器的好處如下:顯示質(zhì)量高,由于每個點都保持液晶彩色LCD,在接收到信號亮度后,產(chǎn)生耐用性,不像陰極射線管供電(CRT),需要不斷更新新的亮點。因此,液晶顯示器畫質(zhì)高且不會閃爍。而且其數(shù)字式接口體積小、重量輕功耗低 。

另一方面,LCD的功耗主要在其內(nèi)部電極驅(qū)動器的IC器件上消耗,因此比其他監(jiān)視器消耗更少的能量。

2.6.1 液晶顯示簡介

  1. 液晶顯示原理

液晶顯示器的原理依賴于液晶的物理特性。通過控制其顯示區(qū)域中的電壓,存在電子顯示器,即可以顯示圖像。其中,適用于LSI直接控制且易于操作的低厚度液晶顯示器廣泛用于移動通信設(shè)備的許多領(lǐng)域,例如筆記本電腦,數(shù)碼相機和個人數(shù)字助理。

  1. 液晶顯示器的分類

LCD的分類方法有很多種,根據(jù)顯示的不同,可以分為段類型,字符類型,點陣類型等。除了黑白顯示外,LCD還具有多級彩色顯示屏。如果按行為方式劃分,則可分為靜態(tài)(靜態(tài)),簡單矩陣(簡單矩陣)和有源矩陣(有源矩陣)。

字符的顯示用LCD顯示一個字符時比較復(fù)雜,因為一個字符由6×8或8×8點陣組成,既要找到和顯示屏幕上某幾個位置對應(yīng)的顯示RAM區(qū)的8字節(jié),還要使每字節(jié)的不同位為“1”,其它的為“0”,為“1”的點亮,為“0”的不亮。這樣一來就組成某個字符。但由于內(nèi)帶字符發(fā)生器的控制器來說,顯示字符就比較簡單了,可以讓控制器工作在文本方式,根據(jù)在LCD上開始顯示的行列號及每行的列數(shù)找出顯示RAM對應(yīng)的地址,設(shè)立光標,在此送上該字符對應(yīng)的代碼即可。

1602字符型LCD簡介

液晶顯示單元是專門用于顯示字母,數(shù)字,符號等的點陣LCD顯示器。目前常用161,162,202和402行等的模塊。一般1602字符型液晶顯示器實物如圖2.6.1和2.6.2:

img

圖2.6.1

img

圖2.6.2 1602字符型液晶顯示器實物圖

2.6.2 1602LCD的基本參數(shù)及引腳功能

1602LCD主要技術(shù)參數(shù):

顯示容量:16×2個字符

芯片工作電壓:4.5—5.5V

工作電流:2.0mA(5.0V)

模塊最佳工作電壓:5.0V

字符尺寸:2.95×4.35(W×H)mm

引腳功能說明:

各引腳接口說明如表1所示:

編號 符號 引腳說明 編號 符號 引腳說明
1 VSS 電源地 9 D2 數(shù)據(jù)
2 VDD 電源正極 10 D3 數(shù)據(jù)
3 VL 液晶顯示偏壓 11 D4 數(shù)據(jù)
4 RS 數(shù)據(jù)/命令選擇 12 D5 數(shù)據(jù)
5 R/W 讀/寫選擇 13 D6 數(shù)據(jù)
6 E 使能信號 14 D7 數(shù)據(jù)
7 D0 數(shù)據(jù) 15 BLA 背光源正極
8 D1 數(shù)據(jù) 16 BLK 背光源負極

表2.6.1 引腳接口說明表

2.6.3 1602LCD的指令說明

1602液晶模塊內(nèi)部的控制器共有11條控制指令,如表2所示:

序號 指令 RS R/W D7 D6 D5 D4 D3 D2 D1 D0
1 清顯示 0 0 0 0 0 0 0 0 0 1
2 光標返回 0 0 0 0 0 0 0 0 1 *
3 置輸入模式 0 0 0 0 0 0 0 1 I/D S
4 顯示開/關(guān)控制 0 0 0 0 0 0 1 D C B
5 光標或字符移位 0 0 0 0 0 1 S/C R/L * *
6 置功能 0 0 0 0 1 DL N F * *
7 置字符發(fā)生存貯器地址 0 0 0 1 字符發(fā)生存貯器地址
8 置數(shù)據(jù)存貯器地址 0 0 1 顯示數(shù)據(jù)存貯器地址
9 讀忙標志或地址 0 1 BF 計數(shù)器地址
10 寫數(shù)到CGRAM或DDRAM) 1 0 要寫的數(shù)據(jù)內(nèi)容
11 從CGRAM或DDRAM讀數(shù) 1 1 讀出的數(shù)據(jù)內(nèi)容

表2.6.2 控制命令表

1602液晶模塊通過指令編程來實現(xiàn)讀寫操作、屏幕和光標的操作。(說明:1為高電平、0為低電平)

2.6.4 1602LCD的RAM地址映射及標準字庫表

LCD模塊運行緩慢,因此在執(zhí)行每條命令前檢查模塊的忙標志,將其設(shè)置為低電平表示它不忙,否則命令無效。要顯示其指示器模塊,字符顯示的第一個字符輸入字符顯示地址,圖2.6.3是1602的內(nèi)部顯示地址。

img

圖2.6.3 1602LCD內(nèi)部顯示地址

當(dāng)初始化設(shè)置在液晶模塊,其中所述第一顯示模式時,光標自動地移動到右側(cè),如果液晶顯示單元的符號,無需人工干預(yù)。 前每個命令輸入被定義為液晶模塊處于繁忙狀態(tài)。

1602 LCD模塊在字符生成存儲器(CGROM)中存儲了160個不同的點陣字符,如圖2.6.4所示。這些字符是:日語假名等,每一個字符具有固定的代碼,如英文大寫字母“代碼”是01000001b(41H)時,模塊顯示在41H的圖矩陣字符。我們就能看到字母“A”。

img

圖2.6.4 字符代碼與圖形對應(yīng)圖

2.6.5 1602LCD的一般復(fù)位過程

延時15mS

寫指令38H(不檢測忙信號)

延時5mS

寫指令38H(不檢測忙信號)

延時5mS

寫指令38H(不檢測忙信號)

以后每次寫指令、讀/寫數(shù)據(jù)操作均需要檢測忙信號

寫指令38H:顯示模式設(shè)置

寫指令08H:顯示關(guān)閉

寫指令01H:顯示清屏

寫指令06H:顯示光標移動設(shè)置

寫指令0CH:顯示開及光標設(shè)置

2.7 機械系統(tǒng)

本設(shè)計要求汽車的機械系統(tǒng)穩(wěn)定、靈活、簡單,三輪運動系統(tǒng)具有上述特點。

驅(qū)動部分:由于玩具車的直流電機功率小,車內(nèi)裝有電池、電機和電子設(shè)備,使電機負荷較重。為了使汽車平穩(wěn)地起動和平穩(wěn)地行駛,在直流電動機和輪軸之間安裝了三個減速齒輪。

電源部分:利用兩個外接電源

電機驅(qū)動部分主要由單芯片L29 8N和ATMEGA16芯片連接,ATMGA16芯片直接與驅(qū)動電路相連。M軸承電壓,7和805,電機電壓,選擇12V電源)電源電壓輸入端子。L29 8N可同時驅(qū)動兩臺電機,最大輸出電流為2A,以其性能和價格好,選用L29 8N作為電機驅(qū)動芯片,L29 8N芯片如圖2-3所示,為了達到控制停止電機的目的。ATMEGA16的兩個PB4和PB5端口直接連接到L29 8N的兩個啟用的ENA和ENB端子。L29 8N的四個輸出端子直接連接到兩個電機以驅(qū)動電機。

三、硬件設(shè)計

3.1 總體設(shè)計

智能車由后輪驅(qū)動,后輪由兩側(cè)的電機驅(qū)動。前兩個輪子的速度被制作和停止以控制轉(zhuǎn)向。前輪是萬象車輪,起支撐作用。跟蹤光電管分別安裝在車身的左右兩側(cè)。如果左傳感器從黑線,主命令中心接收信息左側(cè)晶圓控制輪上的電機停止工作,同時右側(cè)電機繼續(xù)運行這樣使小車左向左行使。當(dāng)右側(cè)右側(cè)的傳感器感受到黑線時,主控制芯片控制和左側(cè)相同原理,這使小車向右行駛就和向左相同。

避障原理與直線相同。小車按尋跡路線行走,3個超聲波傳感器檢測,檢測前方是否有障礙物,當(dāng)有障礙物,停止,沒有障礙物,前進;前方有障礙,左右兩邊檢測,哪邊檢測距離大,往那邊走,按鍵設(shè)置前方障礙的最小距離;在避障模式下,按鍵設(shè)置最小轉(zhuǎn)彎半徑,小于轉(zhuǎn)彎半徑視為不能轉(zhuǎn)彎,小車原地后退,然后停車由此來避免障礙物做到避障功能。

3.2 驅(qū)動電路

H橋發(fā)動機電路集成在L298上面 ,因此我們可以借助該集成電路來 驅(qū)使發(fā)動機,該發(fā)動機引擎通常使用H橋發(fā)動機電路,因此L298N能夠用于驅(qū)動發(fā)動機。

imgimg

圖3.2.1 L298N引腳圖

img

圖3.2.2原理圖

3.3 主控制電路

這個模塊主要針對采集到的信號進行了分析,并給出PWM波形來控制電機啟動、旋轉(zhuǎn)速度和停下。并重新檢測障礙物報警等功能。

img

圖3.5.1原理圖

四、軟件設(shè)計

4.1 電機驅(qū)動程序

#include "stm32f10x.h"
#include "SZ_STM32F103C8_LIB.h"
#include "LCD1602.h"
#include "sys.h"
#include "delay.h"
#include "adc.h"
#include "ultrasonic.h"
u16 count = 0; //定時器計數(shù)

u32 juli_up = 200; //最小距離
u16 juli_Q = 0;
u16 juli_Z = 0;
u16 juli_Y = 0;
u16 juli = 0; //距離設(shè)定
u32 temp;

u8 start = 0; //0手動 1自動

//停止
void stop()
{
	GPIO_SetBits(GPIOA,GPIO_Pin_4);	
	GPIO_SetBits(GPIOA,GPIO_Pin_5); 
	GPIO_SetBits(GPIOA,GPIO_Pin_6);
	GPIO_SetBits(GPIOA,GPIO_Pin_7);
}

//前進
void qianjin()
{
	GPIO_SetBits(GPIOA,GPIO_Pin_4);	
	GPIO_ResetBits(GPIOA,GPIO_Pin_5); 
	GPIO_SetBits(GPIOA,GPIO_Pin_6);
	GPIO_ResetBits(GPIOA,GPIO_Pin_7);
}

//后退
void houtui()
{
	GPIO_ResetBits(GPIOA,GPIO_Pin_4);	
	GPIO_SetBits(GPIOA,GPIO_Pin_5); 
	GPIO_ResetBits(GPIOA,GPIO_Pin_6);
	GPIO_SetBits(GPIOA,GPIO_Pin_7);
}

//左轉(zhuǎn)
void  zuozhuan()
{
	GPIO_ResetBits(GPIOA,GPIO_Pin_4);	
	GPIO_SetBits(GPIOA,GPIO_Pin_5); 
	GPIO_SetBits(GPIOA,GPIO_Pin_6);
	GPIO_ResetBits(GPIOA,GPIO_Pin_7);
}

//右轉(zhuǎn)
void youzhuan()
{
	GPIO_SetBits(GPIOA,GPIO_Pin_4);	
	GPIO_ResetBits(GPIOA,GPIO_Pin_5); 
	GPIO_ResetBits(GPIOA,GPIO_Pin_6);
	GPIO_SetBits(GPIOA,GPIO_Pin_7);
}

4.2 尋跡程序

void TIM3_IRQHandler(void)   //TIM3
{
	if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) 
	{
			TIM_ClearITPendingBit(TIM3, TIM_IT_Update);  
			if(start==1)
			{
				count++;
				//超聲波距離判斷 低于最小距離
				if(juli<juli_up)
				{
						stop(); //停止
				}
				else 
				{
						if((GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_15)==0)&&(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_9)==0))
						{
								if(count%2==0)
									qianjin();//前進
								else
									stop(); //停止
						}
						else if((GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_15)==1)&&(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_9)==0))
						{						
								if(count%2==0)
									zuozhuan();	//左轉(zhuǎn)
								else
									stop(); //停止
						}
						else if((GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_15)==0)&&(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_9)==1))
						{					
								if(count%2==0)
									youzhuan(); //右轉(zhuǎn)
								else
									stop(); //停止
						}
						else
						{
									stop(); //停止
						}
							
				}
			}
	}
}


int main(void)
{
	  delay_init();	 //初始化定時器

	  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

    LCD_1602Init();  //初始化lcd1602 

	  GPIO_Configuration();  //GPIO初始化
	
	  Ultran_Init(); //超聲波初始化
		
		delay_ms(500);
	
		TIM3_Int_Init(20,35999); //10ms
	
		while (1)
		{	   
			 if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_3)==0)
			 {
			 	   while(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_3)==0);//等待按鍵抬起
					 set_juli(); //設(shè)置距離
			 }
			 if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_2)==0)
			 {
			 	   while(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_2)==0);//等待按鍵抬起
					 start = 1; //循跡模式
			 }			
			 if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1)==0)
			 {
			 	   while(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_1)==0);//等待按鍵抬起
					 start = 2; //行走
			 }						 
			 if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0)==0)
			 {
			 	   while(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0)==0);//等待按鍵抬起
					 start = 0; 
			 }	
			 
				Ultra_Ranging1(&temp); //獲取距離
				
				juli_Q = temp;
		
				if(start==2)
				{
						Ultra_Ranging2(&temp); //獲取距離
						
						juli_Z = temp;

						Ultra_Ranging3(&temp); //獲取距離
						
						juli_Y = temp;			 
				}
				
				display();	 //顯示界面

				delay_ms(100);
			
		}
}	

4.3 避障程序

void TIM3_IRQHandler(void)   //TIM3
{
	if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) 
	{
			TIM_ClearITPendingBit(TIM3, TIM_IT_Update);  
			if(start==1)
			{
				count++;
				//超聲波距離判斷 低于最小距離
				if(juli<juli_up)
				{
						stop(); //停止
				}
				else 
				{
						if((GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_15)==0)&&(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_9)==0))
						{
								if(count%2==0)
									qianjin();//前進
								else
									stop(); //停止
						}
						else if((GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_15)==1)&&(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_9)==0))
						{						
								if(count%2==0)
									zuozhuan();	//左轉(zhuǎn)
								else
									stop(); //停止
						}
						else if((GPIO_ReadInputDataBit(GPIOC, GPIO_Pin_15)==0)&&(GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_9)==1))
						{					
								if(count%2==0)
									youzhuan(); //右轉(zhuǎn)
								else
									stop(); //停止
						}
						else
						{
									stop(); //停止
						}
							
				}
			}
	}
}
  • 更多詳細資料請聯(lián)系.docx
    下載
意法半導(dǎo)體

意法半導(dǎo)體

意法半導(dǎo)體(ST)集團于1987年6月成立,是由意大利的SGS微電子公司和法國Thomson半導(dǎo)體公司合并而成。1998年5月,SGS-THOMSON Microelectronics將公司名稱改為意法半導(dǎo)體有限公司。意法半導(dǎo)體是世界最大的半導(dǎo)體公司之一,公司銷售收入在半導(dǎo)體工業(yè)五大高速增長市場之間分布均衡(五大市場占2007年銷售收入的百分比):通信(35%),消費(17%),計算機(16%),汽車(16%),工業(yè)(16%)。 據(jù)最新的工業(yè)統(tǒng)計數(shù)據(jù),意法半導(dǎo)體是全球第五大半導(dǎo)體廠商,在很多市場居世界領(lǐng)先水平。例如,意法半導(dǎo)體是世界第一大專用模擬芯片和電源轉(zhuǎn)換芯片制造商,世界第一大工業(yè)半導(dǎo)體和機頂盒芯片供應(yīng)商,而且在分立器件、手機相機模塊和車用集成電路領(lǐng)域居世界前列.

意法半導(dǎo)體(ST)集團于1987年6月成立,是由意大利的SGS微電子公司和法國Thomson半導(dǎo)體公司合并而成。1998年5月,SGS-THOMSON Microelectronics將公司名稱改為意法半導(dǎo)體有限公司。意法半導(dǎo)體是世界最大的半導(dǎo)體公司之一,公司銷售收入在半導(dǎo)體工業(yè)五大高速增長市場之間分布均衡(五大市場占2007年銷售收入的百分比):通信(35%),消費(17%),計算機(16%),汽車(16%),工業(yè)(16%)。 據(jù)最新的工業(yè)統(tǒng)計數(shù)據(jù),意法半導(dǎo)體是全球第五大半導(dǎo)體廠商,在很多市場居世界領(lǐng)先水平。例如,意法半導(dǎo)體是世界第一大專用模擬芯片和電源轉(zhuǎn)換芯片制造商,世界第一大工業(yè)半導(dǎo)體和機頂盒芯片供應(yīng)商,而且在分立器件、手機相機模塊和車用集成電路領(lǐng)域居世界前列.收起

查看更多

相關(guān)推薦