智能小車設計畢業(yè)設計_第1頁
已閱讀1頁,還剩42頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、<p>  畢 業(yè) 設 計(論 文)</p><p>  題 目: 智能小車設計 </p><p>  院 系: 電子與信息工程學院 </p><p>  專 業(yè): </p><p>

2、  班 級: </p><p>  學生姓名: </p><p>  導師姓名: 職稱: </p><p>  起止時間: 2011年4月18日至2011年6月 5日&

3、lt;/p><p>  畢業(yè)設計(論文)任務書</p><p><b>  任務與要求</b></p><p>  畢 業(yè) 設 計 (論文) 工 作 計 劃 </p><p>  畢業(yè)設計(論文)開題報告</p><p>

4、;  學院 專業(yè) 2007 級 0702 班</p><p>  課題名稱: 智能小車設計 </p><p>  學生姓名: 學號: </p><p>  指導教師: </p><p>  報告日期: 2010

5、年10月28日 </p><p><b>  說明:</b></p><p>  本報告必須由承擔畢業(yè)論文(設計)課題任務的學生在畢業(yè)論文(設計) 正式開始的第1周周五之前獨立撰寫完成,并交指導教師審閱。</p><p>  畢業(yè)設計 (論文)成績評定表</p><p><b>  目錄</b

6、></p><p><b>  1引言1</b></p><p><b>  2需求分析2</b></p><p>  2.1項目來源及背景2</p><p>  2.2項目目標2</p><p>  2.3應用環(huán)境2</p><

7、p>  2.3.1系統(tǒng)硬件環(huán)境2</p><p>  2.3.2系統(tǒng)軟件環(huán)境6</p><p>  2.4功能規(guī)格7</p><p><b>  3系統(tǒng)設計8</b></p><p>  3.1系統(tǒng)總體設計8</p><p>  3.1.1總體設計8</p>

8、;<p>  3.1.2系統(tǒng)的功能模塊8</p><p>  3.1.3小車系統(tǒng)結構圖9</p><p>  3.2詳細設計10</p><p>  3.2.1詳細設計的任務10</p><p>  3.2.2具體設計10</p><p>  3.2.3總體設計流程圖13</

9、p><p><b>  4系統(tǒng)實現(xiàn)14</b></p><p>  4.1核心部分實現(xiàn)方法14</p><p>  4.1.1紅外蔽障模塊14</p><p>  4.1.25V4相步進電機的驅(qū)動模塊[5]14</p><p>  4.1.3速度控制模塊14</p>

10、<p>  4.2部分模塊實現(xiàn)結果14</p><p>  4.2.1紅外避障模塊的實現(xiàn)14</p><p>  4.2.2電機驅(qū)動模塊的實現(xiàn)14</p><p>  4.2.3蜂鳴器模塊的實現(xiàn)14</p><p>  4.2.4加減車速控制模塊15</p><p>  4.2.5車速顯

11、示模塊15</p><p>  5小車系統(tǒng)測試16</p><p><b>  6結束語17</b></p><p><b>  致 謝18</b></p><p><b>  參考文獻19</b></p><p>  7

12、附件1:系統(tǒng)實現(xiàn)20</p><p>  7.1核心部分實現(xiàn)方法20</p><p>  7.1.1紅外蔽障模塊20</p><p>  7.1.25V4相步進電機的驅(qū)動模塊[5]23</p><p>  7.1.3速度控制模塊26</p><p><b>  摘要</b><

13、;/p><p>  智能小車屬機器人的一種,它可按照預先設定的模式在一個環(huán)境里自主運行,不需要人為管理,多應用于學術應用、科學探測、救災搶險等用途。人們通過編譯環(huán)境編程實現(xiàn)行進、繞障、停止、檢測數(shù)據(jù)的存儲、顯示等功能,無需人工干預。智能小車設計具有實際意義,與實際相結合,現(xiàn)實意義很強。</p><p>  本系統(tǒng)以Easyarm1138為核心的控制電路,采用模塊化的設計方案,運用光電發(fā)射接收器

14、、步進電機、傳感模塊、車輪模塊、車速控制模塊、速度顯示模塊等組成不同的模塊,實現(xiàn)小車在行駛中測試、躲避障礙物、自我調(diào)整方向、蜂鳴提醒、加減行駛速度、顯示當前速度等問題。并將測量數(shù)據(jù)傳送至Arm板進行處理,然后由Arm板根據(jù)所檢測的各種數(shù)據(jù)實現(xiàn)對電動小車的智能控制。這種方案能使得智能小車滿足控制靈活、可靠,精度高,可滿足系統(tǒng)的各項要求。</p><p>  【關鍵詞】Easyarm1138、步進電機、光電傳感器、驅(qū)

15、動模塊、蜂鳴模塊、車速控制模塊、顯示模塊、躲避障礙物</p><p><b>  Abstract</b></p><p>  The intelligent mobile car is a kind of the robot .It can work by itself as the way designed before without management by

16、 our human beings ,therefore ,it is usually used on the fields of academic ,scientific exploration ,relief rescue and so on .The marching ,avoiding obstacles ,stopping , monitoring data ,display become true by the progra

17、mming. The intelligent mobile car is realistic and associated with actual. This system is used by Easyarm1138 as the core control circuit, and the way of desig</p><p>  【Key words】Easyarm1138, Stepping motor

18、, Photoelectric launch receiver, Driver module, Buzz remind,Speed display module, Speed control module, Evades obstacles</p><p><b>  引言</b></p><p>  智能小車可集環(huán)境感知、動態(tài)決策、行為控制等多種功能于一體。隨著傳感

19、技術、計算機技術、人工智能及其它學科的迅速發(fā)展,機器人小車逐漸具有智能其必須具有感知作業(yè)環(huán)境、任務規(guī)劃以及決策的能力。從系統(tǒng)硬件方面講,機器人小車必須具有復雜的傳感器,功能強大的計算機以及精確的驅(qū)動系統(tǒng)。單片機作為控制系統(tǒng)的微處理器,早已經(jīng)無法滿足系統(tǒng)的需求,ARM微處理器資源豐富,在數(shù)據(jù)處理和代碼存儲等方面具有良好的通用性。ARM是32位微處理器,集成了16位的Thumb指令集, ARM可以代替16位的處理器如51系單片機,同時具有3

20、2位處理器的速度。ARM的嵌入式系統(tǒng)性能優(yōu)良、移植性好,已廣泛應用于各個行業(yè),因此將ARM微處理器應用于機器人小車是一種較優(yōu)的選擇。[1]</p><p>  本系統(tǒng)以Easyarm1138為核心的控制電路,采用模塊化的設計方案,運用光電發(fā)射接收器、步進電機、傳感模塊、車輪模塊、蜂鳴模塊、速度控制模塊、速度顯示模塊等組成不同的模塊,實現(xiàn)小車在行駛中測試、躲避障礙物、自我調(diào)整方向、蜂鳴提醒、加減行駛速度、顯示當前行

21、駛速度等問題。根據(jù)題目的要求,確定如下方案:在Easyarm1138上,加裝光電、紅外線傳感器、七段數(shù)碼管,利用蜂鳴器,實現(xiàn)對電動車的速度、運行狀況的實時測量及監(jiān)控,并將測量數(shù)據(jù)傳送至ARM進行處理,然后由ARM根據(jù)所檢測的各種數(shù)據(jù)實現(xiàn)對電動車的智能控制。這種方案能實現(xiàn)對電動車的運動狀態(tài)進行實時控制,控制靈活、可靠,精度高,可滿足對系統(tǒng)的各項要求。</p><p><b>  需求分析</b>

22、;</p><p><b>  項目來源及背景</b></p><p>  隨著社會發(fā)展及人類的公共交通需求,以及人工智能化水平的日益提升,汽車工業(yè)也前所未有的迅速發(fā)展,關于汽車方面的研究也就越來越受人關注。全國電子競賽、省內(nèi)電子競賽以及全國各高校每年舉辦競賽也都有智能小車這方面的題目,由此可知,各方各面都很重視該題目的研究,可見其研究意義之大。此次設計也是順應社會發(fā)

23、展的大潮以及人們的需求而產(chǎn)生的,此次設計的智能電動小車能夠?qū)崿F(xiàn)在行駛中自動探測、躲避障礙物、自我車身調(diào)整、蜂鳴提醒、加減運行速度、顯示行駛速度等具體功能。</p><p><b>  項目目標</b></p><p>  本項目設定的目標如下:</p><p>  小車系統(tǒng)應具有良好的運行效率,具有較高的前行、左右轉向、遇到障礙物的反應、蜂鳴警

24、示及躲避的響應速度;</p><p>  小車系統(tǒng)應具有良好的可擴展性,可以為日后升級系統(tǒng)提供方便;</p><p>  小車系統(tǒng)應具有良好的靈活性,使行駛速度、自身調(diào)整角度都可以靈活改變;</p><p>  小車系統(tǒng)提供良好的測試模式,使設計人員可以調(diào)整觀察行駛速度、方便的操作、調(diào)整小車運行模式;</p><p>  在做這個項目的過程中

25、不斷的積累自己的技術水平,力求做出實用靈活的智能小車。</p><p><b>  應用環(huán)境</b></p><p><b>  系統(tǒng)硬件環(huán)境</b></p><p>  Easyarm1138</p><p>  內(nèi)核:32位ARM Cortex-M3(ARM v7M架構);</p>

26、<p>  運行頻率:50MHz</p><p>  時鐘周期:快速可嵌套中斷,6~12個時鐘周期;外設資源:7組GPIO</p><p>  內(nèi)置:看門狗定時器(WatchDog Timer) 、USB接口的下載仿真器外圍電路設計:5只LED指示燈、3只KEY、1只交流蜂鳴器、兩排插針引出全部GPIO資源,以及ADC0~ADC7、5V、3.3V、GND等;</p&g

27、t;<p>  Easyarm1138各部位電路圖如下:</p><p>  圖2-1 Easyarm1138的MCU電路圖</p><p>  JTAG是由幾家主要的電子制造商發(fā)起制訂的PCB 和IC 測試標準。其原理圖如下:</p><p>  圖2-2 JTAG電路圖</p><p>  USB是一個外部總線標準,用于規(guī)范

28、電腦與外部設備的連接和通訊。是應用在PC領域的接口技術。USB接口支持設備的即插即用和熱插拔功能。其原理圖如下:</p><p>  圖2-3 USB/PWR電路圖</p><p>  LED是一種能夠?qū)㈦娔苻D化為可見光的固態(tài)的半導體器件,它可以直接把電轉化為光。其原理圖如下:</p><p>  圖2-4 LED電路圖</p><p>  

29、步進電機28BYJ-48-5V</p><p><b>  額定電壓:5VDC</b></p><p>  相   數(shù):4相8拍</p><p>  步距角:5.625°/64</p><p><b>  減速比:1/64</b></p><

30、;p>  步進角度:5.625 x 1/64</p><p>  牽入轉矩:>34.3mN.m(120Hz)</p><p>  自定位轉矩:>34.3mN.m</p><p><b>  直徑:28mm</b></p><p>  重     量: 3

31、2g</p><p>  步進電機28BYJ-48-5V工作原理圖如下:</p><p>  圖2-5 步進電機28BYJ-48-5V工作原理圖</p><p>  該步進電機為四相步進電機,采用單極性直流電源供電。只要對步進電機的各相繞組按合適的時序通電,就能使步進電機步進轉動。步進電機28BYJ-48-5V電路圖如下:</p><p> 

32、 圖2-6 步進電機28BYJ-48-5V電路圖</p><p><b>  紅外避障驅(qū)動</b></p><p>  有障礙:OUT輸出持續(xù)(斷點)低電平</p><p>  無障礙:OUT輸出持續(xù)高電平</p><p>  工作電壓:3.8v-5v</p><p>  最大工作電流(5V時):

33、14mA</p><p>  三條線:VCC、GND、OUT</p><p>  精密可調(diào)電位器:根據(jù)使用環(huán)境調(diào)節(jié)</p><p>  可調(diào)電位器調(diào)節(jié)范圍:5cm-100cm</p><p>  反射距離:跟具體的反射目標來決定,可根據(jù)情況調(diào)節(jié)</p><p>  紅色的LED:探測到障礙時發(fā)光 </p>

34、<p><b>  數(shù)碼管顯示</b></p><p><b>  共陰極數(shù)碼管:</b></p><p>  圖2-7 數(shù)碼管原理圖</p><p><b>  小車輪子</b></p><p><b>  輪寬:26.6mm</b><

35、/p><p>  軸外徑:13.8mm</p><p>  軸孔寬:3.66mm</p><p><b>  軸孔長:5.3mm</b></p><p>  皮胎內(nèi)徑:51.8mm</p><p><b>  皮胎外徑:66mm</b></p><p>&

36、lt;b>  系統(tǒng)軟件環(huán)境</b></p><p>  本系統(tǒng)的軟件環(huán)境如下:</p><p>  操作系統(tǒng):Windows2000或以上版本</p><p>  開發(fā)工具包:Stellaris外設驅(qū)動庫</p><p>  集成開發(fā)工具:IAR Embedded Workbench</p><p>

37、<b>  功能規(guī)格</b></p><p>  系統(tǒng)采用C語言、IAR Embedded Workbench軟件及Stellaris外設驅(qū)動庫進行小車的程序書寫,采用Protell99SE進行紅外避障以及步進電機驅(qū)動的硬件模塊設計。[2]</p><p><b>  系統(tǒng)設計</b></p><p><b> 

38、 系統(tǒng)總體設計</b></p><p><b>  總體設計</b></p><p> ?。?) 根據(jù)需求分析生成的文檔,對項目進行總體設計,使用模塊流程圖,組成模塊元素清單,對系統(tǒng)進行設計與分析提供詳細的指導。</p><p>  (2)設計模塊結構,將按功能需求劃分為最小單元的功能模塊。確定各模塊間的關系,將其連接起來進行整體分

39、析。</p><p><b>  系統(tǒng)的功能模塊</b></p><p><b>  紅外避障功能模塊</b></p><p>  此子系統(tǒng)主要功能模塊有:收發(fā)信號模塊、預調(diào)電位器、LED顯示模塊。</p><p>  收發(fā)信號模塊的功能:由發(fā)射器發(fā)射信號,若前方有障礙,則接收器能夠接收到信號,最終

40、將信號輸送至Easyarm1138;反之,若前方無障礙,則接收器不能接收到信號,因此仍保持小車前一秒的運行狀態(tài)。</p><p>  預調(diào)電位器的功能:可調(diào)紅外感應距離,使小車在復雜多變的地形環(huán)境中可以靈活多變的進行應用。</p><p>  LED顯示模塊的功能:有障礙時輸出低電平,無障礙時輸出持續(xù)高電平。其顯示作用在于提醒用戶哪一端檢測到了障礙物。</p><p&g

41、t;  步進電機驅(qū)動功能模塊</p><p>  此子系統(tǒng)主要功能模塊有:ULN2003AN、LED顯示模塊</p><p>  ULN2003AN模塊的功能:交替為四相八拍步進電機提供4個交替的高低電平,通過對四相交替的輸入高電平,使得電機開始轉動。</p><p>  LED顯示模塊的功能:高電平時其點亮,表明其對應的四相的工作正常。</p>&l

42、t;p><b>  蜂鳴功能模塊</b></p><p>  此子系統(tǒng)主要功能模塊有:蜂鳴工作模塊</p><p>  蜂鳴工作模塊的功能:遇到障礙物時報警。為以示區(qū)別,左側紅外檢測到障礙時發(fā)出低沉的聲音,右側紅外檢測到障礙物時發(fā)出尖銳的聲音。</p><p><b>  加減速功能模塊</b></p>

43、<p>  此子系統(tǒng)主要功能模塊有:KEY1鍵、KEY2鍵</p><p>  KEY1鍵的功能:加速,提高速度檔位。</p><p>  KEY2鍵的功能:減速,降低速度檔位。</p><p><b>  速度顯示模塊</b></p><p>  此子系統(tǒng)主要功能模塊有:七段數(shù)碼管</p>&

44、lt;p>  七段數(shù)碼管的功能:根據(jù)KEY1鍵及KEY2鍵的速度調(diào)整情況,實時的顯示當前小車行駛的速度的檔位情況。</p><p><b>  小車系統(tǒng)結構圖</b></p><p>  小車系統(tǒng)結構總設計圖:</p><p>  圖3-1 小車結構圖</p><p><b>  詳細設計</b&g

45、t;</p><p><b>  詳細設計的任務</b></p><p>  根據(jù)總體設計生成的小車系統(tǒng)結構圖,確定具體地實現(xiàn)智能小車其各種功能的具體方法,既在行駛中自動探測、躲避障礙物、自我車身調(diào)整、蜂鳴提醒、加減運行速度、顯示行駛速度為目標加以確定核心代碼的實現(xiàn)方案。詳細設計之后應該得出模塊需求的精確描述,進行需求模塊的流程圖繪制,使得在設計時思路更加清晰,使代碼

46、編寫階段根據(jù)以上述描述編寫具體代碼。</p><p><b>  具體設計</b></p><p>  紅外避障流程圖[4]</p><p>  圖3-2 紅外避障流程圖</p><p>  圖解:當小車向前行進時,左右兩個紅外避障檢測儀實時監(jiān)測左右兩方是否遇到障礙物。</p><p> ?、佼?/p>

47、檢測儀檢測到有障礙物時,開始判斷障礙物的位置,是在左、右、還是正前方,然后將信息輸入Easyarm1138進行后續(xù)步進電機行動處理。</p><p> ?、诋敊z測儀沒有檢測到障礙物時,開始判斷此時是否有按鍵中斷,即此時是否需要進行小車行進速度的調(diào)整。</p><p><b>  步進電機驅(qū)動流程圖</b></p><p>  圖3-3 步進電

48、機驅(qū)動流程圖</p><p>  圖解:當紅外監(jiān)測完畢后,小車按照監(jiān)測結果選擇行進方式。</p><p>  ①當左側紅外檢測到障礙物時,左輪不動,右輪超前前進10°,若右側紅外沒有探測到障礙物,則左輪順時針、右輪逆時針旋轉20°,進行二次調(diào)整,躲避障礙物之后向前行進。</p><p> ?、诋斪髠燃t外檢測到障礙物時,左輪不動,右輪超前前進10&

49、#176;,若右側紅外探測到障礙物,則左輪順時針、右輪逆時針旋轉90°,躲避障礙物之后向前行進。</p><p> ?、郛斢覀燃t外檢測到障礙物時,右輪不動,左輪超前前進10°,若左側紅外沒有探測到障礙物,則右輪順時針、左輪逆時針旋轉20°,進行二次調(diào)整,躲避障礙物之后向前行進。</p><p> ?、墚斢覀燃t外檢測到障礙物時,右輪不動,左輪超前前進10

50、6;,若左側紅外探測到障礙物,則右輪順時針、左輪逆時針旋轉90°,進行二次調(diào)整,躲避障礙物之后向前行進。</p><p> ?、莓斪笥壹t外均沒有探測到障礙物時,小車向前行進。</p><p>  加減行駛速度模塊流程圖</p><p>  圖3-4 加減行駛速度流程圖</p><p>  圖解:由中斷后的按鍵選擇進行行駛速度的調(diào)整

51、。</p><p> ?、侔聪翶EY1鍵,進行加速運動,即減小電機延遲。</p><p>  ②按下KEY2鍵,進行減速運動,即增加電機延時。</p><p><b>  速度顯示模塊流程圖</b></p><p>  圖3-5 速度顯示流程圖</p><p>  圖解:由中斷后的按鍵選擇進行當

52、前速度檔位的顯示。</p><p> ?、倜堪聪翶EY1鍵一次,七段數(shù)碼管所顯示的數(shù)字逐個加1,每按下KEY2鍵一次,反之,七段數(shù)碼管所顯示的數(shù)字逐個減1。</p><p> ?、诖舜卧O計,為凸顯行駛速度的突變,共設1-4的4個檔位,因此檔位最小為1,最大為4。但程序中已寫好可調(diào)整至9個檔位的程序,使得此項功能靈活多變。</p><p><b>  總體設

53、計流程圖</b></p><p><b>  系統(tǒng)實現(xiàn)</b></p><p><b>  核心部分實現(xiàn)方法</b></p><p><b>  紅外蔽障模塊</b></p><p>  紅外蔽障模塊包括,初始化紅外蔽障函數(shù)和紅外蔽障模塊中斷服務子程序。這是小車在行

54、進過程中遇到障礙及時調(diào)整的核心內(nèi)容。此外紅外蔽障模塊還有配合顯示的LED子模塊和配合發(fā)音的蜂鳴器子模塊。它們都是為方便我們判斷小車當前行為狀態(tài)的子模塊。其部分代碼及代碼分析見附件1。</p><p>  5V4相步進電機的驅(qū)動模塊[5]</p><p>  5V4相步進電機的驅(qū)動是驅(qū)動程序中最大的一塊,也是整個小車最主要的代碼之一。電機的驅(qū)動部分包括六個函數(shù)。部分函數(shù)代碼及詳解見附件1。&

55、lt;/p><p><b>  速度控制模塊</b></p><p>  為了提高智能小車的復雜性,使小車更加強大,速度控制則必不可少。速度控制模塊包括速度按鍵控制子模塊和七段數(shù)碼管速度顯示子模塊。其中速度按鍵控制子模塊是該模塊的核心,它包括初始化按鍵函數(shù)和兩個終端服務子程序。七段數(shù)碼管速度顯示子模塊起輔助作用主要用于顯示當前的檔位信息。速度控制模塊部分代碼及說明見附件1

56、。</p><p><b>  部分模塊實現(xiàn)結果</b></p><p><b>  紅外避障模塊的實現(xiàn)</b></p><p>  當一側紅外探測器探測到障礙物時,小車進行自身調(diào)整看另外一側是否也探測到了障礙物,若另一側也探測到了,則進行左/右的90°旋轉,若另一側沒有探測到,則小車進行左/右的20°

57、的修正,繼續(xù)前行;當兩側紅外都沒有探測到障礙物時,小車持續(xù)前行。</p><p><b>  電機驅(qū)動模塊的實現(xiàn)</b></p><p>  小車根據(jù)紅外探測傳輸?shù)絘rm板的結果,再結合對電機四相交替的供給正電的情況,實時的來執(zhí)行向前、向左90°、向右90°、左探測10°、右探測10°、左調(diào)整20°、右調(diào)整20

58、6;這7條指令。</p><p><b>  蜂鳴器模塊的實現(xiàn)</b></p><p>  根據(jù)紅外探測傳輸?shù)絘rm板的結果,在arm板內(nèi)進行判斷,若左側紅外先檢測到障礙物,則發(fā)出低沉的蜂鳴聲;若右側紅外先檢測到障礙物,則發(fā)出尖銳的蜂鳴聲。[6]</p><p><b>  加減車速控制模塊</b></p>

59、<p>  通過中斷的KEY1鍵、KEY2鍵進行小車行駛速度的加、減控制,使得小車可以依照人們的意愿進行速度的調(diào)整,使得其更加具有靈活性。</p><p><b>  車速顯示模塊</b></p><p>  依照加減車速控制模塊中KEY1鍵、KEY2鍵的按下及抬起狀況,顯示當前小車行駛的速度,使得整個小車的情況為人們所了解,便于掌控。</p>

60、<p><b>  小車系統(tǒng)測試</b></p><p>  測試的目的是為了發(fā)現(xiàn)盡可能多的缺陷,設計完善的系統(tǒng)不應該害怕挑剔的用戶進行測試。因此,為了提高系統(tǒng)的執(zhí)行效率我對項目進行了測試。 </p><p>  小車系統(tǒng)測試的規(guī)范是:</p><p> ?。?)及時發(fā)現(xiàn)問題,及時修改,每完成一個模塊的設計就對其進行測試;<

61、/p><p> ?。?)設計合適的測試;</p><p> ?。?)根據(jù)測試結果生成測試報告。</p><p>  小車系統(tǒng)測試的結果:</p><p>  測試正常的模塊:紅外避障模塊、步進電機驅(qū)動模塊、蜂鳴器模塊、加減車速模塊、車速顯示模塊</p><p>  測試出現(xiàn)異常的模塊以及出現(xiàn)的問題:</p>

62、<p>  步進電機紅外避障后的自我調(diào)整模塊出現(xiàn)過問題。由于最初設計的調(diào)整模塊為不夠完善,在此舉例表述:最初設計的當左側紅外先檢測出障礙物時,左輪不動,右輪向前調(diào)整10°若右側紅外沒能檢測到障礙物,則右輪不動,左輪向前行駛20°進行向右自我調(diào)整,以防止左輪撞到左墻。但在此設計中不妥的是當向右自我調(diào)整時,若右輪不動,左輪向前行駛20°雖為向右自我調(diào)整設計,但仍十分容易撞到左墻,為防止此類情況發(fā)生,最

63、終,我將程序設計為在向右自我調(diào)整時左輪向前、右輪向后同時旋轉20°,這樣可以避免撞墻的尷尬事件發(fā)生。</p><p>  該問題十分需要解決,因為智能小車設計本身就需要及時躲避障礙物,并且在復雜的地形環(huán)境下應該靈活應對各種情況。</p><p><b>  結束語</b></p><p>  通過這次畢業(yè)設計,我更加熟悉了C語言的邏輯

64、設計、硬件之間的緊密聯(lián)系、以及Easyarm1138等方面的技術應用,對這些技術的了解從以前的略知一二,到現(xiàn)在的逐步掌握。并將其充分應用到了項目中,使項目的專業(yè)化水平及自身學習能力都有大幅度的提升,同時也為日后的就業(yè)奠定了良好的基礎。</p><p>  在項目中我利用Easyarm1138的使用工程模板構建了寫入arm板的語言框架、老師所講內(nèi)容、以及光盤中所帶的各種資料,著重學習了Easyarm1138的程序書

65、寫邏輯設計及方式,通過請教老師、查閱大量相關書籍,最終編寫完成了智能小車的程序,將其與硬件設備相結合,實現(xiàn)了可靈活躲避障礙物的智能小車的設計。</p><p>  在程序編寫的過程中也遇到了許多問題,其中最大的問題就是對寫入arm中的語言結構沒有具體的概念,這也是我們花費力氣最大的地方,為此查閱了很多書籍。尤其是arm板程序開發(fā)方面的,它直接關系到項目整體布局、實現(xiàn)等問題。此外,對Easyarm1138開發(fā)板的不

66、熟悉也嚴重影響了項目的進度,因此,也花費了大量的時間瀏覽網(wǎng)站,從而寫出通用又滿足功能的智能小車代碼。</p><p>  當項目逐個模塊完成之后,自己有種說不出的高興,在這幾個月的項目開發(fā)中我獲得的不僅是項目實訓,更重要的是提升了自我學習的能力,這種經(jīng)驗將使我終身受益。</p><p><b>  致 謝</b></p><p>  經(jīng)過將

67、近2個月的努力最終完成了智能小車的多項功能的設計,并且讓設計的智能小車看起來比較靈活使用。在這里起關鍵作用的正是我的指導老師王載陽老師,他不僅每周都認真細心的為我們答疑解惑,還在我最沒有概念的時候為我耐心的畫圖指導。他用他的豐富的實踐經(jīng)驗帶領我們走向了成功。</p><p>  所以衷心的感謝王載陽老師對我的幫助,同時也感謝一切幫助過我的人,謝謝你們。</p><p><b> 

68、 參考文獻</b></p><p>  [1] 杜春雷主編. ARM體系結構與編程[M].北京:清華大學出版社. 2003[2] 范書瑞. ARM處理器與C語言開發(fā)應用[M].北京: 北京航空航天大學出版社. 2008</p><p>  [3] 劉嵐,尹勇,李京蔚. 基于ARM的嵌入式系統(tǒng)開發(fā)[M].北京: 電子工業(yè)出版社.2008</p><p>

69、  [4] 周立功.ARM嵌入式系統(tǒng)基礎教程(第二版)[M]. 北京: 北京航空航天大學出版社.2006</p><p>  [5] 侯冬晴. ARM技術原理與應用[M]. 北京: 北京交通大學出版社.2009</p><p>  [6] 吳明輝. 基于ARM的嵌入式系統(tǒng)開發(fā)與應用[M].北京: 人民郵電出版社.2004</p><p>  [7] 趙星寒,劉濤.

70、從51到ARM—32位嵌入式系統(tǒng)入門[M]. 北京: 北京航空航天大學出版社.2005</p><p><b>  附件1:系統(tǒng)實現(xiàn)</b></p><p><b>  核心部分實現(xiàn)方法</b></p><p><b>  紅外蔽障模塊</b></p><p>  紅外蔽障模塊

71、包括,初始化紅外蔽障函數(shù)和紅外蔽障模塊中斷服務子程序。這是小車在行進過程中遇到障礙及時調(diào)整的核心內(nèi)容。此外紅外蔽障模塊還有配合顯示的LED子模塊和配合發(fā)音的蜂鳴器子模塊。它們都是為方便我們判斷小車當前行為狀態(tài)的子模塊。其部分代碼及代碼分析如下:</p><p>  紅外避障模塊宏定義部分[3]</p><p>  #define IS_PERIPH SYSCTL_PE

72、RIPH_GPIOB // 定義紅外蔽障所在的GPIO模塊</p><p>  #define IS_PORT GPIO_PORTB_BASE // 定義紅外蔽障的端口基地址</p><p>  #define IS_PIN_LEFT GPIO_PIN_0 // 定義紅外蔽障的左傳感器的針腳</p>

73、<p>  #define IS_PIN_RIGHT GPIO_PIN_1 // 定義紅外蔽障的右傳感器的針腳</p><p>  定義配合紅外避障模塊起輔助顯示作用的LED信息</p><p>  #define LED_PERIPH SYSCTL_PERIPH_GPIOG</p><p>  #d

74、efine LED_PORT GPIO_PORTG_BASE</p><p>  #define LED_PIN_LEFT GPIO_PIN_2</p><p>  #define LED_PIN_RIGHT GPIO_PIN_3</p><p>  定義配合紅外避障模塊起輔助發(fā)音作用的蜂鳴器信

75、息,即音調(diào)</p><p>  #define LOW_DEGREE 185 //低音</p><p>  #define HIGH_DEGREE 4000 //高音</p><p>  #define First 10 //定義發(fā)現(xiàn)障礙調(diào)整的第一修正值</p><p>  #define Secend 20 //定義發(fā)現(xiàn)障礙調(diào)整

76、的第二修正值</p><p>  紅外避障的函數(shù)聲明部分</p><p>  void InitIS(void); //初始化紅外蔽障模塊的函數(shù)聲明</p><p>  void GPIO_Port_B_ISR(void); //紅外蔽障模塊終端服務子程序的函數(shù)聲明</p><p>  void InitBuzzer(voi

77、d); //初始化蜂鳴器</p><p>  void BuzzerSound(unsigned short usFreq); //是蜂鳴器發(fā)音</p><p>  void BuzzerQuiet(void); //中斷蜂鳴器的發(fā)音</p><p>  初始化紅外避障模塊函數(shù)</p><p&

78、gt;  void InitIS(void)</p><p><b>  {</b></p><p>  SysCtlPeriEnable(LED_PERIPH); // 使能LED所在的GPIO端口</p><p>  GPIOPinTypeOut(LED_PORT, LED_PIN_LEFT); // 設置左

79、LED所在管腳為輸出</p><p>  GPIOPinTypeOut(LED_PORT, LED_PIN_RIGHT); // 設置右LED所在管腳為輸出</p><p>  SysCtlPeriEnable(IS_PERIPH); // 使能紅外避障傳感器所在的GPIO端口</p><p>  GPIOPinTypeIn(IS_PORT, IS_P

80、IN_LEFT); // 設置左紅外避障傳感器所在管腳為輸入</p><p>  GPIOPinTypeIn(IS_PORT, IS_PIN_RIGHT); // 設置紅外避障傳感器所在管腳為輸入 </p><p>  GPIOIntTypeSet(IS_PORT, IS_PIN_LEFT, GPIO_LOW_LEVEL); // 設置右紅外避障傳感器管腳的

81、中斷類型</p><p>  GPIOIntTypeSet(IS_PORT, IS_PIN_RIGHT, GPIO_LOW_LEVEL); // 設置右紅外避障傳感器管腳的中斷類型</p><p>  GPIOPinIntEnable(IS_PORT, IS_PIN_LEFT); // 使能左紅外避障傳感器所在管腳的中斷</p><p>

82、;  GPIOPinIntEnable(IS_PORT, IS_PIN_RIGHT); // 使能右紅外避障傳感器所在管腳的中斷</p><p>  IntEnable(INT_GPIOB); // 使能GPIOB端口中斷</p><p>  IntMasterEnable(); //

83、 使能處理器中斷</p><p>  GPIOPinWrite(LED_PORT, LED_PIN_LEFT, 0xFF);</p><p>  GPIOPinWrite(LED_PORT, LED_PIN_RIGHT, 0xFF);</p><p><b>  }</b></p><p>  紅外避障模塊的中斷服務子程

84、序</p><p>  void GPIO_Port_B_ISR(void)</p><p><b>  {</b></p><p>  unsigned long ulStatus; //記錄GPIOB模塊的中斷狀態(tài)</p><p>  ulStatus = GPIOPinIntStatus(IS_PO

85、RT, true); // 讀取中斷狀態(tài)</p><p>  GPIOPinIntClear(IS_PORT, ulStatus); // 清除中斷狀態(tài)</p><p>  if (ulStatus & IS_PIN_LEFT) // 如果左紅外傳感器的中斷狀態(tài)有效</p><p>&

86、lt;b>  { </b></p><p>  GPIOPinWrite(LED_PORT, LED_PIN_LEFT, 0x00); //使左LED亮</p><p>  BuzzerSound(LOW_DEGREE); //發(fā)低音</p><p>  SysCtlDelay(10 * (TheSysClock / 3000))

87、; // 延時約10ms,消除紅外傳感器的抖動</p><p>  GoLeft2(First); //向左調(diào)整First度</p><p>  if(GPIOPinRead(IS_PORT, IS_PIN_RIGHT) == 0x00) //若發(fā)現(xiàn)右紅外傳感器也檢測到障礙物</p><p><b>  {</b&

88、gt;</p><p>  GoRight(90+First); //則說明障礙物在正前方,所以向右轉90度,其中右轉First度是為了消除左調(diào)整帶來的旋轉誤差。</p><p><b>  }else</b></p><p><b>  {</b></p><p>  GoRight(Sece

89、nd); //若右紅外傳感器沒有發(fā)現(xiàn)障礙物,則說明障礙物只在左側,所以右轉Secend-First度,其中右轉First度是為了消除左調(diào)整帶來的旋轉誤差。</p><p><b>  }</b></p><p>  GPIOPinWrite(LED_PORT, LED_PIN_LEFT, 0xFF); //使左LED滅</p><p>

90、  BuzzerQuiet(); //停止發(fā)音</p><p>  }else if (ulStatus & IS_PIN_RIGHT) </p><p>  由于右紅外避障傳感器的中斷狀態(tài)與左紅外中斷傳感器的避障方法是鏡像的,因此就不在詳細說明了。</p><p>  5V4相步進電機

91、的驅(qū)動模塊[5]</p><p>  5V4相步進電機的驅(qū)動是驅(qū)動程序中最大的一塊,也是整個小車最主要的代碼之一。電機的驅(qū)動部分包括六個函數(shù)。部分函數(shù)代碼及詳解如下:</p><p><b>  宏定義段</b></p><p>  #define Motor_PERIPH SYSCTL_PERIPH_GPIOA //定義電機所在的GPIO

92、模塊</p><p>  #define Motor_GPIO GPIO_PORTA_BASE //電機所在GPIO模塊的基地址 </p><p>  #define Motor_Fixed 2.4 //電機轉動修正量</p><p>  #define MAX_SPEED_DEGREE 4 //定義電機的最高檔位</p><p

93、>  #define PER_SPEED_DEGREE 5 //定義電機每檔位延時遞減量</p><p><b>  全局變量</b></p><p>  int speed = 5; //全局變量,定義當前小車步進電機延時,單位0.5ms</p><p><b>  函數(shù)聲明段</b>&l

94、t;/p><p>  void InitMotor(void); //聲明初始化步進電機函數(shù)</p><p>  void MotorForward(void); //聲明步進電機前進函數(shù)</p><p>  void GoLeft(int angle); //聲明步進電機左轉函數(shù)</p><p>  void GoRight

95、(int angle); //聲明步進電機右轉函數(shù)</p><p>  void GoLeft2(int angle); //聲明步進電機左調(diào)整函數(shù)</p><p>  void GoRight2(int angle); //聲明步進電機右調(diào)整函數(shù)</p><p><b>  初始化電機函數(shù)</b></p><

96、;p>  void InitMotor(void)</p><p><b>  {</b></p><p>  SysCtlPeriEnable(Motor_PERIPH); //使能電機所在的GPIO模塊</p><p>  GPIOPinTypeOut(Motor_GPIO, GPIO_PIN_0); //設置右輪所在的

97、GPIO引腳為輸出引腳</p><p>  GPIOPinTypeOut(Motor_GPIO, GPIO_PIN_1); </p><p>  GPIOPinTypeOut(Motor_GPIO, GPIO_PIN_2); </p><p>  GPIOPinTypeOut(Motor_GPIO, GPIO_PIN_3); </p><p>

98、;  GPIOPinTypeOut(Motor_GPIO, GPIO_PIN_4); //設置左輪所在的GPIO引腳為輸出引腳</p><p>  GPIOPinTypeOut(Motor_GPIO, GPIO_PIN_5); </p><p>  GPIOPinTypeOut(Motor_GPIO, GPIO_PIN_6); </p><p>  GPIOPin

99、TypeOut(Motor_GPIO, GPIO_PIN_7); </p><p>  GPIOPinWrite(Motor_GPIO, GPIO_PIN_0, 0x00); //設置右輪的四個相都為低電平</p><p>  GPIOPinWrite(Motor_GPIO, GPIO_PIN_1, 0x00); </p><p>  GPIOPinWrite(M

100、otor_GPIO, GPIO_PIN_2, 0x00); </p><p>  GPIOPinWrite(Motor_GPIO, GPIO_PIN_3, 0x00);</p><p>  GPIOPinWrite(Motor_GPIO, GPIO_PIN_4, 0x00); //設置左輪的四個相都為低電平</p><p>  GPIOPinWrite(Moto

101、r_GPIO, GPIO_PIN_5, 0x00); </p><p>  GPIOPinWrite(Motor_GPIO, GPIO_PIN_6, 0x00); </p><p>  GPIOPinWrite(Motor_GPIO, GPIO_PIN_7, 0x00);</p><p><b>  }</b></p><p

102、><b>  控制電機前進函數(shù)</b></p><p>  void MotorForward(void)</p><p><b>  { </b></p><p>  //至左輪的D相與右輪的A相為高電平</p><p>  GPIOPinWrite(Motor_GPIO, GPIO_PIN

103、_0, 0xFF); </p><p>  GPIOPinWrite(Motor_GPIO, GPIO_PIN_7, 0xFF);</p><p>  SysCtlDelay(speed * (TheSysClock / 6000)); // 延時約speed*0.5ms</p><p>  GPIOPinWrite(Motor_GPIO, GPIO_PIN

104、_0, 0x00);</p><p>  GPIOPinWrite(Motor_GPIO, GPIO_PIN_7, 0x00);</p><p>  //至左輪的C相與右輪的B相為高電平 </p><p>  GPIOPinWrite(Motor_GPIO, GPIO_PIN_1, 0xFF); </p><p>  GPIOPinWr

105、ite(Motor_GPIO, GPIO_PIN_6, 0xFF);</p><p>  SysCtlDelay(speed * (TheSysClock / 6000)); // 延時約speed*0.5ms</p><p>  GPIOPinWrite(Motor_GPIO, GPIO_PIN_1, 0x00);</p><p>  GPIOPinWri

106、te(Motor_GPIO, GPIO_PIN_6, 0x00);</p><p>  //至左輪的B相與右輪的C相為高電平 </p><p>  GPIOPinWrite(Motor_GPIO, GPIO_PIN_2, 0xFF);</p><p>  GPIOPinWrite(Motor_GPIO, GPIO_PIN_5, 0xFF);</p>

107、<p>  SysCtlDelay(speed * (TheSysClock / 6000)); // 延時約speed*0.5ms</p><p>  GPIOPinWrite(Motor_GPIO, GPIO_PIN_2, 0x00);</p><p>  GPIOPinWrite(Motor_GPIO, GPIO_PIN_5, 0x00);</p>

108、<p>  //至左輪的A相與右輪的D相為高電平 </p><p>  GPIOPinWrite(Motor_GPIO, GPIO_PIN_3, 0xFF);</p><p>  GPIOPinWrite(Motor_GPIO, GPIO_PIN_4, 0xFF);</p><p>  SysCtlDelay(speed * (TheSysC

109、lock / 6000)); // speed*0.5ms</p><p>  GPIOPinWrite(Motor_GPIO, GPIO_PIN_3, 0x00);</p><p>  GPIOPinWrite(Motor_GPIO, GPIO_PIN_4, 0x00);</p><p><b>  }</b></p&g

110、t;<p><b>  控制電機左轉的函數(shù)</b></p><p>  void GoLeft(int angle) //angle為形參,表示左轉的角度</p><p><b>  {</b></p><p>  int count = (int)angle*512/360*Motor_Fixed;

111、 //angle計算的公式,Motor_Fixed為角度的修正值</p><p>  int i; //記錄循環(huán)的次數(shù)的變量</p><p>  for(i=0;i<count;i++) //for循環(huán)內(nèi)的代碼與控制前進代碼中的內(nèi)容相似,不加以詳細說明,只是左輪的相序改為A->B->C->D,與右輪相同,這樣左輪向后轉,右輪向前轉,小車即可左轉。</p

112、><p><b>  {</b></p><p>  GPIOPinWrite(Motor_GPIO, GPIO_PIN_0, 0xFF); </p><p>  GPIOPinWrite(Motor_GPIO, GPIO_PIN_4, 0xFF);</p><p>  SysCtlDelay(speed * (TheSys

113、Clock / 6000)); // 延時約speed*0.5ms</p><p>  GPIOPinWrite(Motor_GPIO, GPIO_PIN_0, 0x00);</p><p>  GPIOPinWrite(Motor_GPIO, GPIO_PIN_4, 0x00);</p><p>  GPIOPinWrite(GPIO_PORTA_BASE,

114、GPIO_PIN_1, 0xFF); </p><p>  GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_5, 0xFF);</p><p>  SysCtlDelay(speed * (TheSysClock / 6000)); // 延時約speed*0.5ms</p><p>  GPIOPinWrite(GPIO_PORT

115、A_BASE, GPIO_PIN_1, 0x00);</p><p>  GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_5, 0x00);</p><p>  GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_2, 0xFF);</p><p>  GPIOPinWrite(GPIO_PORTA_BASE,

116、 GPIO_PIN_6, 0xFF);</p><p>  SysCtlDelay(speed * (TheSysClock / 6000)); // 延時約speed*0.5ms</p><p>  GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_2, 0x00);</p><p>  GPIOPinWrite(GPIO_PORT

117、A_BASE, GPIO_PIN_6, 0x00);</p><p>  GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_3, 0xFF);</p><p>  GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_7, 0xFF);</p><p>  SysCtlDelay(speed * (TheSysCl

118、ock / 6000)); // 延時約speed*0.5ms</p><p>  GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_3, 0x00);</p><p>  GPIOPinWrite(GPIO_PORTA_BASE, GPIO_PIN_7, 0x00);</p><p><b>  }</b>&l

119、t;/p><p><b>  }</b></p><p>  電機驅(qū)動的另外三個函數(shù)控制右轉,左調(diào)整和右調(diào)整。其大部分代碼與控制左轉函數(shù)相近,所以無需列出。只是左調(diào)整時左輪不動,右調(diào)整時右輪不動。這樣的好處是,在紅外模塊的一個傳感器發(fā)現(xiàn)障礙時,可以方便的判斷另一個傳感器與障礙的距離。</p><p><b>  速度控制模塊</b&

120、gt;</p><p>  為了提高智能小車的復雜性,使小車更加強大,速度控制則必不可少。速度控制模塊包括速度按鍵控制子模塊和七段數(shù)碼管速度顯示子模塊。其中速度按鍵控制子模塊是該模塊的核心,它包括初始化按鍵函數(shù)和兩個終端服務子程序。七段數(shù)碼管速度顯示子模塊起輔助作用主要用于顯示當前的檔位信息。速度控制模塊部分代碼及說明如下:</p><p>  速度控制模塊宏定義、按鍵宏定義部分</

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論