畢業(yè)設計--智能機器小車-紅外遙控、自動尋跡_第1頁
已閱讀1頁,還剩33頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  分類號 編號 0380202013029 </p><p>  本科畢業(yè)論文(設計)</p><p><b>  摘 要</b></p><p>  當代,智能機器小車視作為未來機器人的雛形,是一個科研的熱點,具有很高的研究

2、價值。而目前,智能機器的發(fā)展已經遍及機械、電子、冶金、交通、宇航、國防等領域。近年來,機器人的智能水平在不斷的提高,并且迅速地在改變著人們的生活方式。人們在不斷探討、改造、認識自然的過程中,制造能夠替代人勞動的機器一直是人類的夢想,也就是所謂的智能化。</p><p>  本次課題設計的智能機器車以STC公司的90C516AD單片機為主要控制核心,通過遙控智能機器車使其具有前進、后退、停止的功能,通過紅外尋跡使其

3、能夠自動根據一定軌跡行進。同時,配合其他項目的紅外避障與超聲測距系統(tǒng),實現(xiàn)該智能機器車的自動避障與檢測距離功能。</p><p>  智能機器車主要由單片機控制模塊、無線遙控模塊、紅外尋跡模塊、紅外避障模塊、超聲測距模塊電機驅動模塊,液晶顯示模塊組成。通過單獨對各個模塊的安裝、調試,保證各個子模塊的正常工作,得到正確的信號輸出。然后把各個模塊組合起來,對90C516AD單片機寫入程序,將各模塊整合成一個完整的系統(tǒng)

4、,完成本次課題設計。</p><p>  關鍵詞: 智能化;控制;自動尋跡;紅外遙控;</p><p><b>  ABSTRACT</b></p><p>  Contemporary, intelligent machine car as the future robot prototype, is a research hot spot,

5、 has the very high research value. And at present, the intelligent machines has already developed in machinery, electronics, metallurgy, transportation, aerospace, defense and other fields. In recent years, the robot'

6、;s intelligence level continues to increase, and quickly changing people's way of life. People constantly explore, in the process of transformation, the nature, make machine can replace the hu</p><p>  T

7、his topic design of intelligent machine car is on STC company of 90 MCU as main control core, through the remote control car intelligent machines make it has the function of forward, backward, stop automatically by infra

8、red tracing according to a certain path. At the same time, cooperate with other projects infrared obstacle avoidance and the ultrasonic ranging system, the realization of the intelligent machine car automatic obstacle av

9、oidance and detection distance function.</p><p>  The intelligent car is made up of MCU module, wireless remote control module, Infrared tracing module, the infrared obstacle avoidance module, ultrasonic dis

10、tance measuring module, motor drive module and liquid crystal display module. First, we should install and test every module. And, we should make sure have a good function and can send out a right order. Second, we shoul

11、d combine every module and write a program to our car. So, we will have an integral system to complete task.</p><p>  Keyword: intelligentize; regulate; tracking; infrared remote

12、0;control ;intelligent car</p><p><b>  目錄</b></p><p><b>  1 引言1</b></p><p>  1.1 智能小車的意義和作用1</p><p>  1.2 智能小車的現(xiàn)狀1</p><p

13、>  1.3 小車智能化的實現(xiàn)方法1</p><p><b>  2 總體設計2</b></p><p>  2.1 總方案概述2</p><p>  2.2 各模塊分析總結2</p><p>  2.2.1 主控模塊方案分析、比較與選擇2</p><p>  2.2.2 尋跡模

14、塊方案分析、比較與選擇3</p><p>  2.2.3遙控模塊方案分析、比較與選擇3</p><p>  2.3 總體設計框圖方案4</p><p><b>  3 硬件設計5</b></p><p>  3.1 單片機控制模塊5</p><p>  3.1.1 晶振電路6&l

15、t;/p><p>  3.1.2 復位電路6</p><p>  3.1.3 串口接口電路7</p><p>  3.2 紅外無線遙控模塊7</p><p>  3.2.1 紅外遙控的工作原理8</p><p>  3.2.2 TC9012遙控發(fā)射器8</p><p>  3.2.3

16、LT0038遙控接收電路9</p><p>  3.3 紅外尋跡模塊10</p><p>  3.3.1 模塊系統(tǒng)分析10</p><p>  3.3 電機控制模塊12</p><p>  3.3.1 驅動芯片L293D的硬件結構12</p><p>  3.3.2 驅動芯片L293D的編程邏輯12<

17、;/p><p>  3.4 液晶顯示模塊13</p><p>  3.4.1 液晶顯示器的硬件結構13</p><p>  3.4.2 液晶顯示器時序控制14</p><p><b>  4 軟件設計15</b></p><p>  4.1 主程序編程思路框圖15</p>&

18、lt;p>  4.2 各模塊程序編程思路框圖16</p><p>  4.2.1 紅外遙控模塊接受中斷程序編程思路框圖16</p><p>  4.2.2尋跡模塊編程思路框圖16</p><p>  4.2.3電機模塊編程思路框圖17</p><p>  4.3各模塊源程序17</p><p>  4.

19、3.1 紅外遙控源程序17</p><p>  4.3.2 自動尋跡模塊源程序18</p><p>  4.3.3 電機模塊源程序19</p><p>  4.3.4 液晶模塊源程序19</p><p>  5 制作與調試24</p><p>  5.1 使用的儀器儀表和軟件24</p>&l

20、t;p>  5.2 軟件的調試24</p><p>  5.3 各模塊的調試24</p><p>  5.3.1 自動尋跡模塊調試24</p><p>  5.3.3 紅外遙控模塊的調試24</p><p>  5.4 聯(lián)合調試25</p><p>  6 結論與展望26</p><

21、;p><b>  致 謝27</b></p><p><b>  參考文獻28 </b></p><p><b>  1 引言</b></p><p>  1.1 智能小車的意義和作用</p><p>  自第一臺工業(yè)機器人誕生以來,機器人的發(fā)展已經遍及機械、電子、

22、冶金、交通、宇航、國防等領域。而近年來機器人的智能水平在不斷的提高,并且迅速地在改變著人們的生活方式。人們在不斷探討、改造、認識自然的過程中,制造能夠替代人勞動的機器一直是人類的夢想,也就是所謂的智能化。</p><p>  而智能化,在計算機控制領域中,簡單的可以解釋為:人為預置已經設計好的程序,通過機器人對外部世界信息的收集和處理,計算機按程序運行做出相應的動作,從而使機器人能對外部世界做出有效的反應。在這個

23、過程中,無需人為的操作,機器人便能實現(xiàn)自動化的運行。</p><p>  1.2 智能小車的現(xiàn)狀</p><p>  現(xiàn)有的智能小車發(fā)展得很快,從機械到只能,從智能玩具到其它各行業(yè),都有較好的實質成果。其基本功能均可實現(xiàn)尋跡、避障、檢測貼片、尋光入庫、避崖等基本功能,這幾節(jié)的電子設計大賽智能小車又在向聲控系統(tǒng)發(fā)展。而目前比較出名的飛思卡爾智能小車更是走在前列。</p><

24、;p>  1.3 小車智能化的實現(xiàn)方法</p><p>  智能化并不是一件簡單的事情,需要很多器件、模塊共同運作,通過各種傳感器,動力傳送,控制中心相互協(xié)同。</p><p>  就傳感器而言,目前隨著科學技術的發(fā)展,由于檢測的原理、形式多樣,機器人的感覺傳感器種類越來越多。其中,在這么多種傳感器中,紅外傳感器在智能控制中一直很重要,也經常被會使用到。對于與其他傳感器,尤其是昂貴的

25、器件,如CCD傳感器而言,它是一種既廉價又簡單的傳感器,在較長的控制距離里,能使很多復雜的動作更加簡潔化。在應用中,它通常作為自動行走和駕駛的重要部件。</p><p>  無線遙控、自動尋跡模塊是這次實現(xiàn)小車智能化的重點,主要是基于紅外控制原理基礎上開發(fā)的應用系統(tǒng),智能化使得小車實現(xiàn)遠程無線控制轉動方向、移動,自動識別路線,判斷并自動選擇正確的行進路線。</p><p>  集大量綜合性

26、模塊于一體,該智能小車可以作為機器人的典型代表。它可以分為三大組成部分:傳感器檢測部分、執(zhí)行部分、CPU。利用多種傳感器器件模塊,除了可以實現(xiàn)無線控制、自動尋跡兩個功能,還可以擴展自動避障、超聲測距,溫度檢測等。由于本次功能實現(xiàn)難度不大,需要的精度不高,所以本次小車的傳感器主要采用的正是上述提到的紅外傳感器,而其智能小車的執(zhí)行部分,則是由直流減速電機來充當?shù)?,主要控制小車的行進方向和速度。CPU使用STC90C516AD單片機,配合軟件

27、編程實現(xiàn)。</p><p><b>  2 總體設計</b></p><p><b>  2.1 總方案概述</b></p><p>  本次的課題,主要是以智能機器小車硬件為載體,通過工程討論分配,以實現(xiàn)其載體上的各種模塊的功能為手段,最終結合,能夠在小車達到以下功能:無線遙控功能、自動避障功能、自動尋跡功能,超聲測距。

28、</p><p>  在小車開發(fā)電機驅動系統(tǒng)的過程中,為了避免開發(fā)兩電機同步轉速的繁瑣算法,此次設計作品以高電壓,高電流,四通道驅動集成的芯片L293D來同時驅動兩直流減速電機。</p><p>  而位于機器車前端左右的兩只紅外發(fā)射管和中端的一只紅外接收模塊則構成紅外傳感避障系統(tǒng),主要用于檢測前方的障礙物。當紅外光線當遇到淺色物體時,光線被反射,當遇到深色物體時,光線被吸收,通過紅外接收

29、產生的電信號,單片機進行判斷、控制電機,實現(xiàn)轉向。</p><p>  同時,小車底座前段的5個光敏傳感器對于光線異常敏感,根據光線的強弱使得自身內部電阻變化而產生不同的信號,探測地面的情況,則可以實現(xiàn)自動尋跡功能。具體原理是利用光色吸收及反射:通過前段發(fā)光二極管發(fā)射光線,當遇到淺色地面時,光線被反射回,當遇到深色地面,光線被吸收。</p><p>  另外,在實現(xiàn)超聲測距功能的過程中,使

30、用的是HY-SRF05</p><p>  而遙控系統(tǒng)由紅外發(fā)射遙控鍵盤和紅外集成接收芯片LT0038這兩部分組成。顯示系統(tǒng)由最常見的1602液晶模塊構建。</p><p>  最后由控制單元單片機90C516AD處理數(shù)據后通過匯編程序有序合理的將各模塊信號整合在一起并完成相應動作,實現(xiàn)了智能控制。</p><p>  2.2 各模塊分析總結</p>

31、<p>  由于本次設計涉及的模塊比較多,且在項目模塊劃分中,我主要負責的是無線遙控及自動尋跡功能,因此在本次模塊方案的分析選擇上,僅對于上述兩個功能涉及的模塊進行詳細分析,結合課題設計的實際情況,選擇適合于本次課題設計的相應模塊元件,進而得出設計總方案。</p><p>  2.2.1 主控模塊方案分析、比較與選擇</p><p>  方案一:采用分立式的小單元數(shù)字控制電路組合

32、,對傳感器收集的信號進行分流分析與處理。以外界信號(對自動尋跡電路、自動避障電路、遙控電路、超聲測距收集的)作為數(shù)字電路的輸入,由小單元數(shù)字電路組合作為控制單元,控制智能機器車的動作。</p><p>  方案二:采用STC 90C516AD作為單片機主控模塊。利用編程,能任意用各種占空比脈沖作為時序,進行傳感器信號的采集,如:可進行在自動尋跡電路上光敏傳感器對路況進行連續(xù)的探測,在自動避障電路和遙控電路上紅外集

33、成探頭對紅外線信息的檢測,在超聲測距模塊對超聲反射距離的信息采集。</p><p>  通過比較以上兩種方案,決定采用方案二作為主控模塊方案。</p><p>  2.2.2 尋跡模塊方案分析、比較與選擇</p><p>  方案一:采用紅外發(fā)射管和接收管作為尋跡傳感器。紅外發(fā)射管發(fā)射紅外線,當紅外線遇到淺色物體時被反射,紅外接收管進行接收,經芯片處理后輸出低電平

34、;當紅外線遇到深色物體時大部分的光線被吸收,接收管接收不了反射的信號,芯片因而輸出高電平。但紅外線信號沒有經過編碼,僅由高低電平決定,極易受到外界光線的影響,使信號的發(fā)射與接收出現(xiàn)不同程度的失真,造成信號被誤判。</p><p>  方案二:采用光敏傳感器組成尋跡電路的形式。光敏傳感器由五個相應的光敏電阻和發(fā)光二極管組成,能夠探測地面情況,通過發(fā)光二極管發(fā)射光線,當遇到淺色地面,光線被反射,當遇到深色地面,光線被

35、吸收。在智能小車尋跡的過程中,采用的是黑色膠帶,當遇到黑帶時,光線被吸收,可以檢測到輸入電平為高電平,當遇到非黑帶時,光線被反射,輸入電平為低電平,再通過單片機采用查詢方式,程序控制機器車的輪子來實現(xiàn)轉向,達到尋跡的功能。</p><p>  通過比較以上兩種方案,決定采用方案二作為自動尋跡模塊方案。</p><p>  2.2.3遙控模塊方案分析、比較與選擇</p><

36、;p>  方案一:紅外遙控系統(tǒng),由發(fā)射和接收兩大部分組成,應用編碼/解碼專用集成電路芯片來進行控制操作,發(fā)射部分包括LED紅外發(fā)送器、編碼調制、鍵盤矩陣部件;接收部分包括光、電轉換放大器、解調、解碼電路等,而且使用的時候必須將遙控器前的紅外發(fā)射孔對準接收管。</p><p>  方案二:超聲波遙控是利用超聲波來傳送指令的遙控,可以應用于需要遙控、遙測的場合。</p><p>  綜合

37、比較方案一與方案二的設計,決定采用方案一作為遙控模塊方案。</p><p>  2.3 總體設計框圖方案</p><p>  本次課題設計的系統(tǒng)控制核心為90C516AD單片機,通過單片機的端口脈沖時序控制,使得自動尋跡、自動避障、無線遙控和超聲測距的傳感器對外部環(huán)境的探測得到信息,經芯片處理后以高低電平的形式送到51單片機各個端口進行處理,最后單片機把處理結果送給兩個電機及液晶顯示屏,

38、控制智能機器車的運行,相應模式顯示。達到目標,實現(xiàn)上述的4種功能。如下圖1。</p><p><b>  圖1 總體設計框圖</b></p><p>  注:已劃線模塊為本人本次所負責的智能機器小車項目設計</p><p><b>  3 硬件設計</b></p><p>  本次課題由本人負責的

39、系統(tǒng)硬件模塊主要由五部分組成,分別是單片機控制模塊、自動尋跡模塊、紅外無線遙控模塊、液晶顯示模塊和電機控制模塊。以下對每個模塊作較為詳細的說明。</p><p>  3.1 單片機控制模塊</p><p>  采用STC公司生產的90C516AD單片機作為核心控制處理器,而整個單片機控制系統(tǒng)主要由最小單片機系統(tǒng)以及外圍信號端口I/O口組成,其中最小系統(tǒng)除單片機外,還包括接地電源,CPU時

40、序控制電路(一般由12M晶振和兩個30p電容組成),復位電路。通過以上三部分電路,單片機才能夠正常工作。</p><p>  STC90C516AD是一種低功耗、高性能COMS 8位微控制器,具有8K在系統(tǒng)可編程Flash存儲器。使用宏晶公司高密度非易失性存儲器技術制造,與工業(yè)80C51產品指令和引腳完全兼容。片上Flash允許程序存儲器在系統(tǒng)可編程,亦適于常規(guī)編程器。在單芯片上,擁有靈巧的8位CPU和在系統(tǒng)可編

41、程Flash,使得STC90C516AD能夠為眾多嵌入式控制應用系統(tǒng)提供高靈活、高效的解決方案。利用STC90C516AD的I/O端口對傳感器信號進行實時判斷監(jiān)控來控制直流電機做出相應的反應。圖2是STC90C516AD單片機的原理圖。</p><p>  圖2 STC90C516AD最小單片機原理圖</p><p>  3.1.1 晶振電路</p><p>  S

42、TC90C516AD單片機內部有一個用于構成振蕩器的反相放大器,而XTAL1和XTAL2分別是放大器的輸入和輸出端。通過外接晶振以及電容C1和C2構成并聯(lián)諧振回路,接在放大器的反饋回路中,構成自激振蕩器??僧a生充當時鐘的信號。</p><p>  注:如果選擇從外部時鐘源驅動器件,XTAL2可以不接,只需要從XTAL1接入,下圖圖3和圖4可看到單片機和其他器件分別是如何結合,構成內部振蕩器和外部振蕩器的。<

43、/p><p>  圖3 內部振蕩電路連接圖 圖4 外部振蕩電路連接圖</p><p>  3.1.2 復位電路</p><p>  復位電路的基本功能是:當一旦給系統(tǒng)上電,提供復位信號。初始化給單片機參數(shù)。</p><p>  通常復位電路有上電自動復位和按鈕復位兩種方式。所謂上電復位,是指計算機加電瞬間,要在RST

44、引腳出現(xiàn)大于10MS的正脈沖,自動使單片機進入復位狀態(tài)。而按鈕復位是指用戶按下“復位”按鈕后,才使單片機進入復位狀態(tài)。</p><p>  如圖5,上電時,通過電阻R37提供高電平給RESET端,此時為上電復位,同時給電容E1充電。按鈕復位時,按下按鈕S3,電容E1放電,給RESET提供高電平,此為按鈕復位。圖5是復位電路的原理圖。</p><p>  圖5 復位電路的原理圖</p&

45、gt;<p>  (注:為可靠起見,在上電后,直至系統(tǒng)電源穩(wěn)定,撤銷復位信號時,電源需穩(wěn)定后還要經過一定的延時才撤銷復位信號,以防電源開關或電源插頭分合過程中引起的抖動而影響復位。其中單片機復位電路參數(shù)的選定須在振蕩穩(wěn)定后保證復位高電平持續(xù)時間大于2個機器周期。這一步驟完全可通過器件搭建完成。)</p><p>  3.1.3 串口接口電路</p><p>  給單片機上電,

46、將RST置高電平,然后向單片機串行端口發(fā)送編程命令:</p><p>  被燒寫的單片機必須已經接上電源、晶振,可以正常運作,即具備了最小系統(tǒng)的單片機。</p><p>  單片機及其外部接口電路如圖6所示。</p><p><b>  圖6 串口接口電路</b></p><p>  3.2 紅外無線遙控模塊</

47、p><p>  紅外無線遙控模塊主要是通過對單片機控制時序脈沖,完成調制及解調里那個過程,利用紅外遙控發(fā)射、紅外遙控接收兩部分控制器的相互配合,實現(xiàn)對智能機器車的無線遙控功能,從而控制小車的停啟、進退、轉向等動作。</p><p>  3.2.1 紅外遙控的工作原理</p><p>  通用紅外遙控系統(tǒng)由發(fā)射和接收兩各部分組成,此次課題設計應用的是編碼、解碼專用集成電路

48、芯片來進行控制操作。發(fā)射部分的構成包括鍵盤矩陣、編碼調制、LED紅外發(fā)送器;接收部分包括光電轉換放大器、解調、解碼電路等主要的部分。整個紅外遙控原理的系統(tǒng)框圖如圖7所示。</p><p>  圖7 紅外遙控原理系統(tǒng)框圖</p><p>  3.2.2 TC9012遙控發(fā)射器</p><p>  遙控發(fā)射器專用芯片根據編碼格式的不同,大致可以分成兩類,分別是脈沖寬度

49、調制和脈沖相位調制,其中由于脈沖寬度調制解碼相對比較容易,其集成度較高,價格便宜,使得脈沖寬度調制的運用較脈沖相位調制來得廣泛。</p><p>  而本次課題采用的紅外遙控發(fā)射器是TC9012。 TC9012是一塊用于東芝系列紅外遙控系統(tǒng)中的專用發(fā)射集成電路,采用COMS工藝制造。它可外接32按鍵,提供8種用戶編碼,另外還具有3種雙重按鍵功能。其結構框圖、管腳圖、管腳圖說明分別如圖8、圖9、圖10所示。<

50、/p><p>  圖8 TC9012結構框圖</p><p>  圖9 TC9012管腳圖</p><p>  圖10 TC9012管腳說明</p><p>  3.2.3 LT0038遙控接收電路</p><p>  LT0038是用于紅外遙控接收的小型一體化接收設備,集成紅外線的接收、放大、調解功能,不需要任何外接元件

51、,就能完成從紅外線接收到輸出與TTL電平信號兼容的所有工作,且其體積和普通的三極管大小差不多,適合于各種紅外遙控和紅外數(shù)據傳輸,中心頻率為38.0KHz。接收器對外只有3個引腳,分別為OUT、GND、VCC,與單片機接口非常方便。LT0038的示意圖如圖3-10所示。</p><p>  圖11 LT0038示意圖</p><p>  在紅外接收模塊電路中,OUT接單片機的P3.3接口,作

52、為紅外接收模塊的輸出,由單片機做出判斷,從而控制電機的停止或轉向。此模塊實物圖及原理圖如圖11和圖12所示。</p><p>  圖11 紅外遙控接收模塊實物圖</p><p>  圖12 紅外遙控接收模塊原理圖</p><p>  3.3 紅外尋跡模塊</p><p>  尋跡是指小車在白色地板上循黑線行走,本系統(tǒng)采取的方法是紅外探測法,即

53、利用紅外線在不同顏色的物體表面具有不同的反射性質的特點,在小車行駛過程中不斷地向地面發(fā)射紅外光,當紅外光遇到白色紙質地板時發(fā)生漫反射,反射光被裝在小車上的接收管接收;如果遇到黑線則紅外光被吸收,小車上的接收管接收不到紅外光。由此過程來改變接收管的輸出電壓,單片機以電壓的變化為依據來執(zhí)行小車電機確定行走路線。</p><p>  3.3.1 模塊系統(tǒng)分析</p><p>  圖3-8為紅外線

54、尋跡安裝圖,圖12為尋跡模塊實現(xiàn)原理圖,分析如下:</p><p>  圖12 紅外線尋跡安裝圖</p><p>  圖13 尋跡模塊原理圖</p><p>  如圖13是整個紅外線尋跡過程實現(xiàn)的原理圖。</p><p>  而本模塊采用的光敏傳感器由五個光敏電阻和發(fā)光二極管組成,它能夠探測地面情況,發(fā)光二極管發(fā)射光線,遇到淺色地面光線被反射

55、,遇到深色地面光線被吸收。當智能機器車的遇到黑帶時,光線被吸收,可以檢測到輸入電平為高電平,當遇到非黑帶時,光線被反射,輸入電平為低電平。圖14為光敏電阻的實物圖。</p><p><b>  圖14 光敏電阻</b></p><p>  當尋跡模塊獲得CON5端口的五個信號后,經74HC245鎖存輸入到單片機中,再通過單片機采用查詢方式,程序控制機器車的輪子來實現(xiàn)轉

56、向,達到尋跡的功能。</p><p>  其中,74HC245中進行是帶有使能功能的八位雙向總線驅動器,這種八位總線收發(fā)器是為數(shù)據總線間時行異步兩路通信而設計的。圖2中DB0-DB7接74HC573鎖存器(圖15)和單片機P0.0-P0.7口。</p><p>  圖15 74HC245原理圖</p><p>  3.3 電機控制模塊</p><

57、;p>  電機控制方式根據驅動方式的不一樣,大致可以分為兩種,分別是通過單片機直接控制和通過電機驅動芯片控制。由于本次課題需要同時控制兩部直流減速電機,為了保證其速度的一致性,本次課題采用的第二種電機控制方式,其電機驅動芯片型號為L293D。 </p><p>  3.3.1 驅動芯片L293D的硬件結構</p><p>  L293D采用的是16引腳DIP封裝,其內部集成了雙極型H

58、-橋電路,所有的開量都做成n型。下圖圖16是該芯片引腳原理圖。</p><p>  圖16 L293D驅動引腳原理圖</p><p>  電機驅動一般采用H橋式驅動電路,L293N內部集成了H橋式驅動電路,從而可以采用L293N電路來驅動電機。通過單片機給予L293N電路PWM信號來控制小車的速度,起停。驅動原理圖如圖17所示。</p><p>  圖17 L293

59、D驅動原理圖</p><p>  3.3.2 驅動芯片L293D的編程邏輯</p><p>  L293D通過內部邏輯生成使能信號。H-橋電路的輸入量可以用來設置馬達轉動方向,使能信號可以用于脈寬調整(PWM)。另外,L293D將2個H-橋電路集成到1片芯片上,這就意味著用1片芯片可以同時控制2個電機。每1個電機需要3個控制信號EN12、IN1、IN2,其中EN12是使能信號,IN1、IN

60、2為電機轉動方向控制信號,IN1、IN2分別為1,0時,電機正轉,反之,電機反轉。選用一路PWM連接EN12引腳,通過調整PWM的占空比可以調整電機的轉速。選擇一路I/O口,經反向器74HC14分別接IN1和IN2引腳,控制電機的正反轉。下表表1為L293D驅動器管腳賦值表.</p><p>  表1 L293D驅動器電機管腳圖賦值表</p><p>  3.4 液晶顯示模塊</p

61、><p>  3.4.1 液晶顯示器的硬件結構</p><p>  液晶顯示的原理是利用液晶的物理特性,通過電壓對其顯示區(qū)域進行控制,有電就有顯示,一般液晶顯示器分類通常可按顯示方式分為段式、字符式、點陣式等。本次課題使用的液晶顯示模塊是屬于字符型液晶顯示的SMC1602A。</p><p>  1602B 可以顯示 2 行 16 個字符,有 8 位數(shù)據總線D0-D7,

62、和 RS、R/W、EN三個控制端口,工作電壓為5V,并且?guī)в凶址麑Ρ榷日{節(jié)和背光。由于SMC1602A中內袋字符發(fā)生器,因此,只需要在提供該字符對應的代碼,通過查詢RAM地址,設定光標,即可獲得相應的字符。以下圖18、圖19是SMC1602B的實物圖及尺寸圖。</p><p>  圖18 SMC1602B的實物圖</p><p>  圖19 SMC1602B封裝尺寸圖</p>

63、<p>  3.4.2 液晶顯示器時序控制</p><p>  下圖圖20為SMC162液晶顯示器時序控制圖</p><p>  圖20 SMC1602B液晶顯示器的時序控制</p><p><b>  4 軟件設計</b></p><p>  在本次課題中,以單片機為控制的核心模塊,因此編程的設計即為本次課

64、題的重點之一,也是智能機器車能夠現(xiàn)實智能運作的核心所在。如何使本次的編程設計能夠把從光敏電阻傳感器、紅外接收器LT0038等各個傳感器模塊上收集到的信號數(shù)據輸入90C516AD單片機中進行處理,并產生相應的反應動作,控制電機的運作,從而實現(xiàn)智能機器車的智能化運作。以下將通過框圖和說明,從整個工程構建設計思路上進行描述。</p><p>  4.1 主程序編程思路框圖</p><p>  系

65、統(tǒng)啟動初始化后,小車能夠進行紅外遙控中,但同時掃描紅外發(fā)射器,當控制信號(避障信號、超聲測距信號、自動尋跡信號)被紅外接受器接受后,可以進入到相應的模塊。完成相應的動作。其主程序流程圖如21所示。該主程序應包括了遙控模塊、紅外避障模塊、和自動尋跡模塊、超聲測距等四大模塊的主要程序框圖。(重點:紅外遙控、自動尋跡)</p><p><b>  圖21 主程序框圖</b></p>

66、<p>  注:劃橫線部分為模塊接口,而灰色背景在此次工程中并非本人設計所負責。</p><p>  4.2 各模塊程序編程思路框圖</p><p>  4.2.1 紅外遙控模塊接受中斷程序編程思路框圖</p><p>  以下程序框圖可對比參照4.3.1中源程序。</p><p>  4.2.2尋跡模塊編程思路框圖</p&g

67、t;<p>  以下程序框圖可對比參照4.3.2中源程序。</p><p>  4.2.3電機模塊編程思路框圖</p><p>  以下程序框圖可對比參照4.3.3中源程序。</p><p>  各模塊源程序附上了自動尋跡模塊源程序、紅外避障模塊源程序和紅外遙控模塊源程序。這些程序與系統(tǒng)的硬件相配合,完整的構成了智能機器車的主體功能。</p>

68、;<p><b>  4.3各模塊源程序</b></p><p>  4.3.1 紅外遙控源程序</p><p>  /**************************************</p><p>  紅外遙控接收解碼中斷服務子程序,</p><p>  獲得的正確鍵值存在變量 yk_cod

69、e 中</p><p>  **************************************/</p><p>  void accept(void) interrupt 2 //using 3</p><p><b>  {</b></p><p>  uchar i=0;</p><

70、p>  uchar k=0;</p><p>  uchar data code_L=0;</p><p>  uchar data code_H=0;</p><p><b>  EX1=0;</b></p><p>  for(i=0;i<4;i++) //重復10次,目的是檢測在8820微秒內如果出現(xiàn)高

71、電平就退出解碼程序</p><p><b>  {</b></p><p>  DELAY_1(); //調用882微秒延時子程序</p><p>  if(input) //延時882微秒后判斷P3.2腳是否出現(xiàn)高電平如果有就退出解碼程序</p><p><b>  {</b></p&

72、gt;<p>  goto reti;</p><p><b>  }</b></p><p>  } //以上完成對遙控信號的9000微秒的初始低電平信號的識別。</p><p>  do{;}while(!input); //等待高電平避開9毫秒低電平引導脈沖</p><p&g

73、t;  DELAY_2(); //延時4.74毫秒避開4.5毫秒的結果碼</p><p>  for(i=0;i<16;i++) //忽略前16位系統(tǒng)識別碼</p><p><b>  {</b></p><p>  do{;}while(!input); //等待地址碼第一位的高電平信號</p>

74、<p>  DELAY_1(); // 高電平開始后用882微秒的時間尺去判斷信號此時的高低電平狀態(tài)</p><p><b>  if(input)</b></p><p>  { DELAY_3(); } //檢測到高電平1的話,延時1毫秒等待脈沖高電平結束</p><p><b>  }

75、</b></p><p>  for(k=0 ;k<8 ;k++) //接收一字節(jié)的原碼</p><p><b>  {</b></p><p>  do{;}while(!input); //等待地址碼第一位的高電平信號</p><p>  DELAY_1();</p><

76、;p><b>  if(input)</b></p><p><b>  {</b></p><p>  DELAY_3(); //為1延時</p><p>  code_L^=0x80;</p><p><b>  }</b></p><p&

77、gt;<b>  else</b></p><p>  { code_L&=0x7f; }</p><p><b>  if(k<7)</b></p><p>  code_L>>=1;</p><p><b>  }</b></p>&

78、lt;p>  for(i=0 ;i<8 ; i++) //接收一字節(jié)的反碼</p><p><b>  {</b></p><p>  do{;}while(!input); //等待地址碼第一位的高電平信號</p><p>  DELAY_1();</p><p><b>  if(in

79、put)</b></p><p>  { DELAY_3(); //為1延時</p><p>  code_H ^=0x80;} </p><p>  else{code_H &=0x7f; }</p><p>  if(i<7) code_H>>=1;</p><p>

80、;<b>  }</b></p><p>  if(code_H==(~code_L)) // 如果不等表示接收數(shù)據發(fā)生錯誤,放棄</p><p>  { yk_code=code_L;</p><p><b>  yk_ok=1; </b></p><p>  updata_flage=0

81、x01;</p><p><b>  }</b></p><p><b>  reti:</b></p><p><b>  EX1=1;</b></p><p><b>  }</b></p><p>  4.3.2 自動尋跡模塊

82、源程序</p><p>  /*********************************</p><p><b>  光敏電阻分布接口</b></p><p>  車身從左到右的應的IO為p03,p04,p05,p06,p07;</p><p>  ********************************

83、*/</p><p>  void scanf_obj(void) //尋跡和測障礙物程序</p><p><b>  {</b></p><p>  uchar temp=0,temp1=0,temp3=0;</p><p><b>  cs_245=0;</b></

84、p><p><b>  temp1=P2;</b></p><p><b>  temp=P0;</b></p><p><b>  cs_245=1;</b></p><p>  if((temp&0x70)!=0x70)</p><p><

85、b>  {</b></p><p>  if((temp&0x30)==0x30)</p><p>  { control(1,state3,left_light); } //左外邊檢測到黑線,左轉</p><p>  else if((temp&0x60)==0x60)</p><p>  { contro

86、l(1,state2,right_light);}//右外邊檢測到黑線,右轉</p><p>  else if((temp&0x08)==0x08) </p><p>  { control(2,state3,left_light); } //左內邊檢測到黑線,左轉</p><p>  else if((temp&0x80)==0x80)

87、</p><p>  { control(2,state2,right_light);} //右內邊檢測到黑線,右轉</p><p><b>  }</b></p><p>  P2=temp1 ;</p><p><b>  }</b></p><p>  4.3.3 電機

88、模塊源程序</p><p>  /*************************************</p><p><b>  小車運行控制子程序</b></p><p>  void control(uchar n,//運行時間:改變N值可以使當前運行狀態(tài)的時間</p><p>  uchar state,

89、//運行狀態(tài):STATE1-STAT5;請參見"main.h"文件</p><p>  uchar light //狀態(tài)指示燈:比如左轉向燈等等;請參見"main.h"文件</p><p><b>  )</b></p><p>  ************************************

90、**/</p><p>  void control(uchar n,uchar state,uchar light)</p><p><b>  {</b></p><p><b>  uchar i;</b></p><p>  light_control(light);//轉向指示燈&l

91、t;/p><p>  P2 =state; //行使方向改變</p><p>  for(i=n;i>0;i--)</p><p>  {delay(1000);}</p><p>  P2=state5;</p><p>  delay(1000);</p><p&

92、gt;  light_control(light_off);//關閉</p><p>  P2=state1;</p><p>  delay(1000);</p><p><b>  }</b></p><p>  4.3.4 液晶模塊源程序</p><p>  /**************

93、***************************</p><p>  程序名稱:lcd1602底層驅動子程序</p><p>  ******************************************/</p><p>  #include <REG52.h></p><p>  sbit LCM_RS

94、= P1^5; //定義引腳</p><p>  sbit LCM_RW = P1^6;</p><p>  sbit LCM_E = P1^7 ;</p><p>  #define LCM_Data P0</p><p>  #define Busy 0x80 //用于檢測LCM狀態(tài)字中的Busy標識</p&g

95、t;<p>  #define uchar unsigned char</p><p>  #define true 1 </p><p>  #define false 0</p><p>  void Delay5Ms(void);</p><p>  void Delay400Ms(void);</p>&

96、lt;p><b>  //讀狀態(tài)</b></p><p>  unsigned char ReadStatusLCM(void)</p><p><b>  {</b></p><p>  LCM_Data = 0xFF;</p><p>  LCM_RS = 0;</p>&l

97、t;p>  LCM_RW = 1;</p><p>  LCM_E = 0;</p><p>  LCM_E = 0;</p><p>  LCM_E = 1;</p><p>  while (LCM_Data & Busy); //檢測忙信號</p><p>  return(LCM_Data);&l

98、t;/p><p><b>  }</b></p><p><b>  //寫數(shù)據</b></p><p>  void WriteDataLCM(unsigned char WDLCM)</p><p><b>  {</b></p><p>  ReadS

99、tatusLCM(); //檢測忙</p><p>  LCM_Data = WDLCM;</p><p><b>  LCM_RS=1;</b></p><p>  LCM_RW = 0;</p><p>  LCM_E = 0; //若晶振速度太高可以在這后加小的延時</p><p>  LC

100、M_E = 0; //延時</p><p>  LCM_E = 0; //延時</p><p>  LCM_E = 1;</p><p><b>  }</b></p><p><b>  //寫指令</b></p><p>  void WriteCommandLCM(un

101、signed char WCLCM,BuysC) //BuysC為0時忽略忙檢測</p><p><b>  {</b></p><p>  if (BuysC) ReadStatusLCM(); //根據需要檢測忙</p><p>  LCM_Data = WCLCM;</p><p>  LCM_RS = 0;<

102、;/p><p>  LCM_RW = 0;</p><p>  LCM_E = 0;</p><p>  LCM_E = 0;</p><p>  LCM_E = 0; //延時</p><p>  LCM_E = 1;</p><p><b>  }</b></p>

103、;<p><b>  //讀數(shù)據</b></p><p>  /*unsigned char ReadDataLCM(void)</p><p><b>  {</b></p><p>  LCM_RS = 1;</p><p>  LCM_RW = 1;</p><

104、;p>  LCM_E = 0;</p><p>  LCM_E = 0;</p><p>  LCM_E = 1;</p><p>  return(LCM_Data);</p><p><b>  } */</b></p><p>  void LCMInit(void) //LCM初

105、始化</p><p><b>  {</b></p><p>  Delay400Ms();</p><p>  LCM_Data = 0;</p><p>  WriteCommandLCM(0x38,0); //三次顯示模式設置,不檢測忙信號</p><p>  Delay5Ms();<

106、/p><p>  WriteCommandLCM(0x38,0);</p><p>  Delay5Ms();</p><p>  WriteCommandLCM(0x38,0);</p><p>  Delay5Ms();</p><p>  WriteCommandLCM(0x38,1); //顯示模式設置,開始要求每

107、次檢測忙信號</p><p>  WriteCommandLCM(0x08,1); //關閉顯示</p><p>  WriteCommandLCM(0x01,1); //顯示清屏</p><p>  WriteCommandLCM(0x06,1); // 顯示光標移動設置</p><p>  WriteCommandLCM(0x0C,1);

108、 // 顯示開及光標設置</p><p><b>  }</b></p><p>  //按指定位置顯示一個字符</p><p>  void DisplayOneChar(uchar X, uchar Y, uchar DData)</p><p><b>  {</b></p>&

109、lt;p><b>  Y &= 0x1;</b></p><p>  X &= 0xF; //限制X不能大于15,Y不能大于1</p><p><b>  if (Y) </b></p><p>  X |= 0x40; //當要顯示第二行時地址碼+0x40;</p><p>

110、  X |= 0x80; // 算出指令碼</p><p>  WriteCommandLCM(X, 0); //這里不檢測忙信號,發(fā)送地址碼</p><p>  WriteDataLCM(DData);</p><p><b>  }</b></p><p>  /***************************

111、**********************************</p><p>  void DisplayListChar(uchar X, 行地址</p><p>  uchar Y, 列地址</p><p>  uchar ListLength, 字符長度,必須要小于16</p><p>  uchar

112、 *DData, 顯示內容首地址</p><p>  uchar n n=ture, 顯示字符串延時,n=false,現(xiàn)實字符串不延時</p><p><b>  );</b></p><p>  *************************************************************/&l

113、t;/p><p>  //按指定位置顯示一串字符(只能寫一行);</p><p>  void DisplayListChar(uchar X, uchar Y,uchar ListLength, uchar *DData,uchar n)</p><p><b>  {</b></p><p><b>  uc

114、har i;</b></p><p><b>  Y &= 0x1;</b></p><p>  X &= 0xF; //限制X不能大于15,Y不能大于1</p><p>  for(i=0;i<ListLength;i++)</p><p><b>  {</b>

115、</p><p>  if (X <= 0xF) //X坐標應小于0xF</p><p><b>  {</b></p><p>  DisplayOneChar(X, Y, DData[i]); //顯示單個字符</p><p>  if(n==true)Delay400Ms();</p><

116、p><b>  X++;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  //5ms延時</b></p>

117、<p>  void Delay5Ms(void)</p><p><b>  {</b></p><p>  unsigned int TempCyc = 5552;</p><p>  while(TempCyc--);</p><p><b>  }</b></p>&

118、lt;p><b>  //400ms延時</b></p><p>  void Delay400Ms(void)</p><p><b>  {</b></p><p>  uchar TempCycA = 5;</p><p>  unsigned int TempCycB;</p&g

119、t;<p>  while(TempCycA--)</p><p><b>  {</b></p><p>  TempCycB=7269;</p><p>  while(TempCycB--);</p><p><b>  };</b></p><p>&l

120、t;b>  }</b></p><p>  4.3主程序源程序;</p><p>  void main()</p><p><b>  {</b></p><p>  uchar flage=0x00;</p><p>  led_off();</p><p

121、>  LCMInit();</p><p>  //display();</p><p><b>  Init_T();</b></p><p>  //my_state = MY_CSB;</p><p><b>  while(1)</b></p><p><

122、b>  { </b></p><p>  if((updata_flage==0x01)&&(flage==0x00)) //狀態(tài)的等待。</p><p><b>  { </b></p><p>  WriteCommandLCM(0x01,1); </p><p>  de

123、lay(100);</p><p>  DisplayListChar(0,0,12,talk3,false);</p><p>  flage=0x01;</p><p><b>  } </b></p><p><b>  if(yk_ok)</b></p><p>

溫馨提示

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

評論

0/150

提交評論