




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
..本科畢業設計〔論文本科畢業設計〔論文基于單片機的智能小車控制專業:測控技術與儀器姓名:咸蛋小超人20XX6月..基于單片機的智能小車控制摘要:智能化作為現代電子產品的新趨勢,是今后的電子產業的發展方向。智能化設計的電子產品可以按照預先設定的模式在一個環境里自動運作,不需要人為的管理,可應用于科學勘探、環境監測、智能家居等方面。基于單片機的智能小車控制就是其中的一個體現。本設計實現了一種基于51單片機的自動避障智能模型車系統,通過紅外傳感器采集路況信息,通過對檢測信息的分析,自動控制轉向電機轉向,改變行駛路徑,繞過障礙物,從而實現車穩定避障。本課題設計的智能小車,具有自動避障功能,超聲波測距報警,無線電遙控等功能。關鍵詞:智能車;51單片機;避障;紅外線SmartcarbasedonSCMcontrolAbstract:Asanewtrendofmodernelectronicproducts,intelligentisthedevelopmentaldirectionofelectronicindustryafterthen.Electronicproducts,whichareintelligentlydesigned,canautomaticallyoperatefollowingthemodethatispre-set.Withoutthemanagementofhumanbeings,itcanbeusedforscientificexploring,environmentalmonitoring,intelligenthomefurnishing,etc.Oneoftheembodimentsistheintelligentcontrolcarwhichisbasedonsinglechipmicrocomputer.Inthedesign,anintelligentmodelcarsystembasedonMCU51hasbeenrealized.Itcancollecttrafficinformationwithinfraredsensors.Meanwhile,bytheanalysisofinformationexamined,itcantransferfromautomaticcontroltomotorsteeringinordertochangetherouteanddodgetheobstaclessothatthesteadyavoidanceofthebarriercancometrue.Inthispaper,acarwiththeabilityofintelligentjudgmenthasbeendesignedandmade.Itfunctionsasthedevicewhichcandodgeobstaclesautomatically,alarmwithultrasonicdistanceexamination,andremotecontrolbyradio.Keywords:SmartCart;Single-chip51;ObstacleAvoidance;InfraredTOC\o"1-3"\u目錄TOC\o"1-3"\u序言3第1章總體設計方案41.1課題任務分析41.2方案論證41.2.1小車遙控部分51.2.2小車驅動部分6第2章系統硬件構成72.1系統設計原理72.2主要元器件簡介72.2.1STC89C52RC簡介72.2.2NRF24L01無線收發芯片簡介82.2.3L298N芯片直流電機驅動模塊92.2.4紅外避障模塊92.2.5HC-SR04超聲波測距模塊112.2.6蜂鳴器驅動電路132.2.7液晶顯示電路132.2.8遙控部分獨立按鍵電路14第3章軟件的設計與說明153.1軟件設計153.2軟件的說明163.2.1遙控部分主程序流程163.2.224L01子程序流程圖173.2.3小車部分主程序流程圖18第4章調試與總結204.1硬件部分204.1.1硬件的焊接20..4.1.224L01無線電模塊204.1.3外接電源模塊204.2軟件部分214.2.1超聲波模塊214.3小車聯調214.4調試的總結23參考文獻24致謝26附錄27附件1L298N電機驅動模塊27附件2小車側視圖28附件3小車俯視圖29附件4小車的遙控部分30附件5小車最終硬件圖31附件6程序清單321.遙控部分程序322.小車部分程序41附件7元器件清單50附件8英文資料及中文翻譯51..序言隨著我國科學技術的進步,智能化和自動化技術越來越普及,各種高科技也廣泛應用于智能小車和機器人玩具制造領域,使智能機器人越來越多樣化。智能小車是一個多種高新技術的集成體,它融合了機械、電子、傳感器、計算機硬件、軟件、人工智能等許多學科的知識,涉及到當今許多前沿領域的技術[1]。而智能電動車正是智能機器人的一種,具有不可估量的實際意義。智能車輛是一個運用計算機、傳感、信息、通信、導航、人工智能及自動控制等技術來實現環境感知、規劃決策和自動行駛為一體的高新技術綜合體。它在軍事、民用和科學研究等方面已獲得了應用,對解決道路交通安全提供了一種新的途徑。隨著汽車工業的迅速發展,關于汽車的研究也就越來越受人關注。全國電子大賽和省內電子大賽幾乎每次都有智能小車這方面的題目,全國各高校也都很重視該題目的研究,許多國家已經把電子設計比賽作為創新教育的戰略性手段。電子設計涉及到多個學科,機械電子、傳感器技術、自動控制技術、人工智能控制、計算機與通信技術等等,是眾多領域的高科技[2]。電子設計技術,它是一個國家高科技實例的一個重要標準,可見其研究意義很大。第1章總體設計方案1.1課題任務分析當前的電動小汽車基本上采取的是基于純硬件電路的一種開環控制方法,或者是直線行使,或者是在遙控下作出前進、后退、轉彎、停車等基本功能。但是這不能滿足某些特殊場合下的要求。基于此,本文設計了智能小車控制系統。智能小車是一個運用傳感器、單片機、信號處理、電機驅動及自動控制等技術來實現環境感和自動行駛為一體的高新技術綜合體,它在軍事、民用和科學研究等方面已獲得了應用。通過各種選題之后,我們發現制作智能小車非常有意思,它喚起我們對玩具的革新思想,智能小車制作的興趣。自己遇到過的汽車的功能是怎樣的,想通過自己的手創作出屬于自己的智能汽車。也夾雜一種童年時對玩具智能化的假想。所以我選定制作單片機智能小車。通過這次設計,掌握51單片機的原理,了解簡單傳感器組成原理,初步掌握傳感器的調整及測試方法,提高動手能力和排除故障的能力。同時通過本課題設計與裝配、調試,提高自己的動手能力,鞏固已學的理論知識,建立單片機理論和實踐的結合,了解傳感器各單元電路之間的關系及相互影響,從而能正確設計、計算定時計數的各個單元電路。初步掌握傳感器的調整及測試方法。提高動手能力和排除故障的能力。本設計采用直流減速電機,電機專用驅動芯片L298N進行電機驅動控制,主控芯片為STC89C52,測距部分采用超聲波模塊,控制器采用24L01無線電通信模塊,自動避障部分采用紅外收發模塊。 本次設計雖然只是一個演示模型,但是具有充分的科學性和實用性。首先我們根據交通路面的復雜情況,按照適當的比例制作出一個路況模型,包括彎道、直道以及路面上設置的障礙物等。在彎、直道上,小車沿著預定軌道自由行使,當小車遇到障礙物時,脈沖調制的紅外線傳感器將檢測到的信號發送給單片機,單片機根據程序發出相應的控制信號控制小車自動避開障礙物。由無線模塊控制小車進行倒車、前進、左轉、右轉等動作。1.2方案論證1.2.1小車遙控部分方案一:小車的無線通信模塊采用紅外遙控,紅外收發遙控是目前大部份遙控小車采用的遙控手段,紅外遙控具有代碼簡單,操作性強的特點。如圖1-1為紅外遙控模塊實物圖。圖1-1紅外遙控模塊實物圖方案二:小車的通信模塊采用無線電NRF24L01模塊,NRF24L01是一款工作在2.4~2.5GHz,世界通用ISM頻段的單片無線收發器芯片。無線收發器包括:頻率發生器、增強型SchockburstTM模式控制器、功率放大器、晶體振蕩器、調制器、解調器。輸出功率、頻道選擇和協議的設置可以通過SPI接口進行設置。如1-2為NRF24L01無線模塊實物圖。圖1-2NRF24L01無線模塊實物圖方案論證:方案一中的紅外遙控模塊的信號傳送距離有限,并且發送和接收的紅外信號容易受到干擾。NRF20L01發射頻率高,所受到的干擾影響較小,無線通信的距離比紅外的要長許多。小車的遙控是小車的最主要的部分之一,所以選擇NRF24L01無線通信模塊,故選擇方案一。1.2.2小車驅動部分方案一:小車的電機驅動部分采用自己搭建的9012三極管電路來實行小車的驅動,9012三極管電路具有電路簡單,操作方便的等特點。方案二:小車的電機驅動部分采用L298N芯片直流電機驅動模塊,該模塊具有較大的驅動帶載能力,驅動部分端子供電范圍Vs:+5V~+35V,并且另外自帶了5V、3V的輸出端口。方案論證:本設計為4輪驅動的小車,對于小車驅動部分要求能夠有較大的帯載能力,并且在小車的實際設計過程中,需要不同的輸出電壓來提供給小車的各個模塊。因此綜上所述采用方案二,小車的電機驅動部分使用L298N芯片直流電機驅動模塊。第2章系統硬件構成2.1系統設計原理本設計主要分為兩部分:遙控部分和小車部分。遙控部分主要由電源電路,單片機最小系統,無線電模塊組成,遙控部分的系統框圖如圖2-1所示。圖2-1遙控系統框圖小車部分由電源電路,單片機最小系統,顯示電路,無線電木塊,報警電路,超聲波電路等電路模塊組成,小車部分的系統框圖如圖2-2所示。圖2-2小車的系統框圖2.2主要元器件簡介2.2.1STC89C52RC簡介常用的單片機有很多種:Intel8051系列、Motorola和M68HC系列、Atmel的AT89系列、XX華邦<Winbond>W78系列、荷蘭PiliPs的PCF80C51系列、MicrochiP公司系列4位單片機、XX義隆的EM-78系列等[1]。本次設計最終選用了STC89C52單片機。本系統采用最常用的STC89C52單片機,它是一種帶4K字節閃爍可編程可擦除只讀存儲器〔FPEROM—FalshProgrammableandErasableReadOnlyMemory的低電壓,高性能CMOS8位微處理器。該器件采用ATMEL高密度非易失存儲器制造技術制造,與工業標準的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲器組合在單個芯片中,ATMEL的STC89C52是一種高效微控制器。STC89C52單片機為很多嵌入式系統提供了一種靈活性高且價廉的方案。[6]引腳排列如圖2-3所示。圖2-3STC89系列引腳排列2.2.2NRF24L01無線收發芯片簡介NRF24L01是一款工作在2.4-2.5GHz,世界通用ISM頻段的單片無線收發器芯片。無線收發器包括:頻率發生器、增強型SchockburstTM模式控制器、功率放大器、晶體振蕩器、調制器、解調器。輸出功率、頻道選擇和協議的設置可通過SPI接口進行設置。極低的電流消耗:當工作在發射模式下發射功率為-6dBm時電流消耗為9mA,接收模式時為12.3mA。掉電模式和待機模式下電流消耗更低。NRF24L01引腳排列如圖2-4所示。圖2-4NRF24L01引腳排列2.2.3L298N芯片直流電機驅動模塊該模塊由L298N作為雙H橋直流電機驅動芯片,驅動部分端子供電范圍Vs:+5V~+35V。如果在模塊上取電壓供電,則模塊供電范圍為Vs:+7V~+35V。模塊的驅動不封峰值電流Io為2A。其他相關參數見表2-1。模塊的實物圖見附錄附件1〔注:紅色線框部分為電源接口。表2-1L298N芯片直流電機驅動模塊產品參數邏輯部分端子供電范圍Vss+5V~+7V〔可板內取電+5V邏輯部分工作電流范圍0~36mA控制信號輸入電壓范圍低電平:-0.3V≤Vin≤1.5V高電平:2.3V≤Vin≤Vss使能信號輸入電壓范圍低電平:-0.3≤Vin≤1.5V<控制信號無效>高電平:2.3V≤Vin≤Vss<控制信號有效>最大功耗20W〔溫度T=75℃時存儲溫度-25℃~+130℃驅動板尺寸82mm*57mm*33mm<帶固定銅柱,散熱片高度>驅動板重量60g其他擴展控制方向指示燈、邏輯部分板內取電接口2.2.4紅外避障模塊紅外避障的原理:用紅外線傳感器進行避障。紅外線發射頭與接收頭于一體的檢測開關,其工作原理是根據發射頭發出的光束,被物體反射,接收頭據此做出判斷是否有障礙物。當有光線反射回來時,輸出低電平。當沒有光線反射回來時,輸出高電平。單片機根據接收頭電平的高低做出相應控制,避免小車碰到障礙物。由于接收管輸出TTL電平,有利于單片機對信號的處理。紅外接收二極管又叫紅外光電二極管,也可稱紅外光敏二極管。它廣泛用于各種家用電器的遙控接收器中,如音響、彩色電視機、空調器、VCD視盤機、DVD視盤機以及錄像機等。紅外接收二極管能很好地接收紅外發光二極管發射的波長為94Onm的紅外光信號,而對于其他波長的光線則不能接收。因而保證了接收的準確性和靈敏度。小車采用紅外線傳感器進行避障的電路原理圖如下圖2-5所示,實物圖如圖2-6所示。紅外模塊的功能指標如表2-2所示。表2-2紅外模塊的功能指標使用芯片NE555工作電壓3.3V-5V輸出模式數字信號測量距離1CM-200CM探測距離是否可以調節是檢測信號探測到障礙物為高電平,無障礙物或超出探測范圍輸出低電平LED紅色為Power指示燈,綠色為Status指示燈圖2-5紅外線傳感器進行避障的電路原理圖圖2-6紅外線傳感器進行避障的實物圖2.2.5HC-SR04超聲波測距模塊HC-SR04超聲波測距模塊可提供2cm-400cm的非接觸式距離感測功能,測距精度可達高到3mm;模塊包括超聲波發射器、接收器與控制電路。基本工作原理:<1>采用IO口TRIG觸發測距,給至少10us的高電平信號;<2>模塊自動發送8個40khz的方波,自動檢測是否有信號返回;<3>有信號返回,通過IO口ECHO輸出一個高電平,高電平持續的時間就是超聲波從發射到返回的時間。測試距離=<高電平時間*聲速<340M/S>>/2。HC-SR04超聲波測距模塊的時序圖如圖2-7所示。圖2-7超聲波模塊時序圖以上時序圖表明你只需要提供一個10uS以上脈沖觸發信號,該模塊內部將發出8個40kHz周期電平并檢測回波。一旦檢測到有回波信號則輸出回響信號。回響信號的脈沖寬度與所測的距離成正比。由此通過發射信號到收到的回響信號時間間隔可以計算得到距離。公式:uS/58=厘米或者uS/148=英寸;或是:距離=高電平時間*聲速〔340M/S/2;建議測量周期為60ms以上,以防止發射信號對回響信號的影響。HC-SR04超聲波測距模塊的電路圖如圖2-8所示,實物圖如圖2-9所示。圖2-8超聲波模塊的電路圖圖2-9超聲波模塊實物圖2.2.6蜂鳴器驅動電路蜂鳴器是一種一體化結構的電子訊響器,采用直流電壓供電,廣泛應用于計算機、打印機、復印機、報警器、電子玩具、汽車電子設備、電話機、定時器等電子產品中作發聲器件。蜂鳴器主要分為壓電式蜂鳴器和電磁式蜂鳴器兩種類型。蜂鳴器在電路中用字母"H"或"HA"〔舊標準用"FM"、"LB"、"JD"等表示。由于自激蜂鳴器是直流電壓驅動的,不需要利用交流信號進行驅動,只需對驅動口輸出驅動電平并通過三極管放大驅動電流就能使蜂鳴器發出聲音<其驅動電路如圖2-10所示>,利用定時器來做定時,通過定時翻轉電平產生符合蜂鳴器要求的頻率的波形,這個波形就可以用來驅動蜂鳴器了。圖2-10蜂鳴器驅動電路2.2.7液晶顯示電路該設計的顯示部分采用LCD1602來顯示超聲波測距模塊測得的距離。對于現實電路我們可以采用數碼管,也可以采用液晶顯示。液晶顯示相對于數碼管顯示電路更簡潔,顯示更明了,故我們采用液晶顯示電路。液晶又分字符型和點陣型,我們使用的液晶是字符型液晶。LCD1602自帶字符庫,不需要查找代碼,英文字符可直接使用。液晶電路使用時,如果發現液晶不亮可以調節連接液晶的電位器,調節液晶的亮度。液晶顯示電路如圖2-11所示。圖2-11液晶顯示電路2.2.8遙控部分獨立按鍵電路遙控部分的獨立按鍵與單片機的接口設置為P2.0、P2.1、P2.2、P2.3、P2.4,分別控制小車的前進、后退、左轉彎、右轉彎、以及功能切換。獨立按鍵采用低電平觸發,即當按下按鍵時給單片機一個低電平信號,單片機隨后做出相應的處理,當按鍵松開時,單片機接收到一個高電平信號,單片機隨后繼續做出相應處理。遙控部分的獨立按鍵電路如圖2-12所示。圖2-12遙控部分獨立按鍵電路第3章軟件的設計與說明3.1軟件設計系統功能的實現依賴于軟、硬件的協同工作。主控芯片為STC89C52RC單片機。單片機控制軟件實現遙控和小車的各項功能。程序編譯采用KeiluVision4編程軟件,KeiluVision4程序編譯界面如圖3-1所示。程序部分采用目前單片機最通用的C語言進行編程。程序的燒錄軟件采用STC_ISP_V479軟件燒寫編譯好的HEX文件,STC_ISP_V479軟件程序燒寫界面如圖3-2所示。圖3-1KeiluVision4編程軟件界面圖3-2STC_ISP_V479軟件程序燒寫界面3.2軟件的說明3.2.1遙控部分主程序流程遙控部分主程序流程圖如圖3-3所示。程序從主函數開始執行,24L01無線模塊初始化,同時在主函數中定義單片機口對應的按鍵按下時所發出的函數值。接下來判斷是否有按鍵按下,如果有按鍵按下,則發送相應的按鍵對應的函數值,接著判斷是否又有按鍵按下。如果未發現按鍵按下則在主函數中循環判斷是否有按鍵按下。圖3-3遙控主程序流程圖3.2.224L01子程序流程圖24L01子程序流程圖如圖3-4所示,本模塊子程序采用收發一體的驅動程序,即使該模塊既可以在需要時發送信號,又可以在需要時接收信號。24L01子程序模塊先初始化,初始化的同時在設置的寫入reg函數中寫入本地地址,寫入接收端地址,并且設置頻道0自動ACK應答允許。設置24L01的允許接收地址只有頻道0,并且是信道工作在2.4GHz,以及設置數據長度為32字節,發射速率為1MHz。圖3-424L01子程序流程圖3.2.3小車部分主程序流程圖小車部分主程序流程圖如圖3-5所示。程序從主函數開始執行,24L01無線模塊初始化,液晶顯示模塊初始化,24L01無線電模塊初始化,超聲波模塊初始化。各個模塊初始化完畢后,單片機判斷是否接受到了信號,如果接收到信號,則判斷相應的按鍵值,如果沒有接收到按鍵值則返回繼續判斷是否接受到信號。接收到信號后,小車開始執行鍵值對應的相應的命令。而超聲波測距,并在液晶上顯示相應距離,危險距離報警都是貫穿在整個while〔1的語句中的。圖3-5小車部分主程序流程圖調試與總結基于單片機的智能小車控制有許多的模塊,在做整體設計之前首先是對每個模塊的調試。只有在確保每個模塊都正常的情況下才能進行總體的設計和總體的調試。每個模塊都需要軟硬件的調試才能確保模塊的正常。4.1硬件部分4.1.1硬件的焊接單片機的電路系統相對于簡單一些,對于焊接只要多練習就不會出現問題,但是,單片機的電路系統中只要出于一處的錯誤,則會對檢測造成很大的不便,而且電路的交叉線較多,對于各種鋒利的引腳都要注意處理,否則會刺破帶有包皮的導線,則會對電路造成短路現象。在本次單片機的設計調試中遇到了很多的問題。回想這些問題只要認真多思考都是可以避免的,主要問題在于單片機上的測試用燈不亮,原因出于焊接時間過長導致電路板上的金屬片脫落,造成斷路。解決方案:重新引線使電路重新導通。4.1.224L01無線電模塊24L01模塊是直接購買的模塊,在調試的時候按照商家提供的時序圖,編寫程序后卻一直無法通信,既不接受信號也不發送信號。首先排除了程序上的錯誤,然后對硬件各部分電壓進行測量并無發現異常,最后詳細的閱讀了說明書,發現24L01是3.3V~3.6V電壓供電,而自己設計的電源部分缺少了去耦電容導致了硬件的無法正常工作。解決方案:在3.3V電源處并入1個104瓷片電容,1個100uF電解電容,減少電源的波動對模塊帶來的影響。4.1.3外接電源模塊在剛剛接觸小車的時候,本設計的小車應為是4輪驅動的,所以比一般的小車更加吃電流,剛剛開始使用的普通的電池僅僅調試幾次就沒電了,而使用的兩節3.7V的充電電池串聯效果也不盡理想,該小車使用的減速電機對電流的要求非常大,故購買了SONY的電腦適配器,該適配器可以提供19.5V的輸出電壓,以及高達4.5A的直流電流。所以設計了采用7805,與7809并聯的方式作為SONY適配器下級穩壓輸出,成為了小車的外部供電電源。由于小車的電流需求非常大,小車在該電源的供電下只能維持10s的行駛時間。在接下來的檢查中發現,由于夏天天氣熱,7809散熱比較慢,而單個7809的最高輸出電流在1.5A。7809由于溫度過高進入了掉電保護模式。解決方案:在7809旁邊并入一個7809,相當于加大了7809的輸出電流。在此同時,在7809的片子上加上散熱片,使7809及時散熱。該方案的實施使得小車的續航能力大大提高。4.2軟件部分4.2.1超聲波模塊超聲波模塊是直接購買的模塊,在調試的時候按照商家提供的時序圖,編寫程序。但是編寫后超聲波測量時值測量一次,不能一直保持測量狀態。經檢查后發現,電路焊接正常,接口正常,所以排除了硬件問題的可能性。在接下來程序的檢查中發現了超聲波中count<>計算函數放在了while<1>函數外面。解決方案:超聲波中count<>計算函數放在while<1>函數的循環內,并且根據時序圖加上1ms的延時。該方案的實施,使得小車能夠一直保持測距的狀態,并且在LCM1602上一直持續顯示正確的數值。4.3小車聯調小車的聯調是一個非常復雜的過程,在此過程中,不僅僅是對平時的專業知識的考驗,更是對自己的耐心的考驗。小車聯調的時候遇到了很多問題:在無線電模塊調試的時候,小車執行的動作與發射的信號的所需要執行的動作不一致,要求小車往左的時候小車并沒有往左轉彎,要求小車前進的時候小車也并沒有前進。解決方案:對小車的控制電機轉動的IO口進行逐一排查,找出問題為小車的IO口與程序定義的有所不同。重新再程序中定義IO口后,小車就能按照無線信號發射的要求做出相應的動作。當無線電模塊發射了相應的信號后,小車執行的動作正確,但是有時候并沒有執行相應的動作,如同"聾啞"一般不接收信號。當按鍵多次按下后,小車才執行相應的動作。解決方案:小車的"聾啞"并不是真正的"聾啞",無線電模塊在發射信號的時候并不是每次都能發射出去,發射出去的信號小車的接收部分的無線模塊不一定能夠接收。而且,按鍵的抖動也會對無線的發射信號產生影響。故在程序中有按鍵按下時,發射5次信號信號,提高無線模塊的信號發射次數,并且在按鍵程序中加入10ms的去抖程序。實施該方案后小車對信號的接受靈敏度大幅度提高,能夠準確快速的做出相應的信號所要求的動作。4.4調試的總結通過這次設計,掌握51單片機的原理,了解簡單傳感器組成原理,初步掌握傳感器的調整及測試方法,提高動手能力和排除故障的能力。同時通過本課題設計與裝配、調試,提高自己的動手能力,鞏固已學的理論知識,建立單片機理論和實踐的結合,了解傳感器各單元電路之間的關系及相互影響,從而能正確設計、計算定時計數的各個單元電路。初步掌握傳感器的調整及測試方法。提高動手能力和排除故障的能力。調試期間要多向同學老師請教,有問題就該虛心請教。經過多次的反復測試與分析,可以對電路的原理及功能更加熟悉,同時提高了設計能力與對電路的分析能力,同時在軟件的編程方面得到更高的提高,對編程能力得到加強,同時對所學的知識得到很大的提高與鞏固。參考文獻[1]徐國華.移動機器人的發展現狀及其趨勢[J].機器人技術與應用,2001,<03>:1102-1103,1150.[2]彭宏業,段哲民編著.小型舞蹈機器人的驅動系統設計[J].國外電子元器件.2005,<04>:56-65.[3]陳南主編.定位控制器的設計與實現[J].XX科技大學學報.2003.[4]譚浩強.C語言程序設計[M].北京:清華大學出版社,1998.[5]蘇衛東,任思聰等.溫控箱數學模型的建立及其自適應PID控制[J].中國慣性技術學報,1995年,<3>:4.[6]萬福君.MCS-51單片機原理、系統設計與應用[M].北京:清華大學出版社,2008.[7]彭宏業,段哲民編著.小型舞蹈機器人的驅動系統設計[J].國外電子元器件.2005,<4>.[8]劉甘娜等編著.IBM-PC微機原理及接口技術[J].XX:XX電子科技大學出版社,1998.[9]孫廣清.便攜式溫度傳感標定裝置[D].西北工業大學碩士學位論文,2007.[10]鮑麗星,陳曉爭.一種高精度信號源的設計[J].XX航空航天大學,2008,16<4>:588-590.[11]黨宏社.智能車輛系統發展及其關鍵技術概述[J].公路交通科技,2002.<4>[12]林敏.簡易數字化語音存儲與回放系統[J].儀表技術,2008,28〔9:13-18.[13]余祖俊.微機監測與控制應用系統設計,北方交通大學出版社,2001.12[14]溫志明.運動控制系統分析與應用[J],國防工業出版社,2008.2[15]WANGSHX,WUGN,JIANGW,etal.Theprincipleandilluminationappliesoflightemittingdiode[J].LightandLighting,2006,14〔5:21-23.[16]I.MFilanvsky,H.Baltes.CMOSSchmitTriggerDesign[J].IEEETransactiomsonCircuitsandSystem-FundamentalTheoryandApplications.1994,41<1>:46-49.致謝在作品完成之際,我們要特別感謝XXX老師的熱情關懷和悉心指導。在我們作品制作的過程中,老師們給了我們很多耐心的指導和啟發,不僅讓我學到了專業知識,還讓我學到了很多做人的道理。特別是他們廣博的學識、深厚的學術素養、嚴謹的治學精神和一絲不茍的工作作風使我們終生受益,在此表示真誠地感謝。在作品的制作過程中,也得到了許多同學的寶貴建議,在此一并致以誠摯的謝意。感謝所有關心、支持、幫助過我們的朋友。最后,向在百忙中抽出時間對本文進行評審并提出寶貴意見的各位領導老師表示衷心地感謝!由于自身水平有限,設計中一定存在很多不足之處,敬請各位老師批評指正。附錄附件1L298N電機驅動模塊
附件2小車側視圖
附件3小車俯視圖附件4小車的遙控部分附件5小車最終硬件圖附件6程序清單1.遙控部分程序#include<reg52.h>#include<intrins.h>typedefunsignedcharuchar;typedefunsignedcharuint;//****************************************NRF24L01端口定義***************************************sbit MISO =P1^0;sbit MOSI =P1^1;sbit SCK =P1^2;sbit CE =P1^3;sbit CSN =P1^4;sbit IRQ =P1^5;//************************************按鍵***************************************************sbit KEY1=P2^0;sbit KEY2=P2^1;sbit KEY3=P2^2;sbit KEY4=P2^3;sbit KEY5=P2^4;//*********************************************NRF24L01*************************************#defineTX_ADR_WIDTH5 //5uintsTXaddresswidth#defineRX_ADR_WIDTH5 //5uintsRXaddresswidth#defineTX_PLOAD_WIDTH20 //20uintsTXpayload#defineRX_PLOAD_WIDTH20 //20uintsTXpayloaduintconstTX_ADDRESS[TX_ADR_WIDTH]={0x34,0x43,0x10,0x10,0x01}; //本地地址uintconstRX_ADDRESS[RX_ADR_WIDTH]={0x34,0x43,0x10,0x10,0x01}; //接收地址ucharTxBuf[20]; ////***************************************NRF24L01寄存器指令*******************************************************#defineREAD_REG0x00 //讀寄存器指令#defineWRITE_REG0x20 //寫寄存器指令#defineRD_RX_PLOAD0x61 //讀取接收數據指令#defineWR_TX_PLOAD0xA0 //寫待發數據指令#defineFLUSH_TX0xE1 //沖洗發送FIFO指令#defineFLUSH_RX0xE2 //沖洗接收FIFO指令#defineREUSE_TX_PL0xE3 //定義重復裝載數據指令#defineNOP0xFF //保留//*************************************SPI<nRF24L01>寄存器地址****************************************************#defineCONFIG0x00//配置收發狀態,CRC校驗模式以及收發狀態響應方式#defineEN_AA0x01//自動應答功能設置#defineEN_RXADDR0x02//可用信道設置#defineSETUP_AW0x03//收發地址寬度設置#defineSETUP_RETR0x04//自動重發功能設置#defineRF_CH0x05//工作頻率設置#defineRF_SETUP0x06//發射速率、功耗功能設置#defineSTATUS0x07//狀態寄存器#defineOBSERVE_TX0x08//發送監測功能#defineCD0x09//地址檢測#defineRX_ADDR_P00x0A//頻道0接收數據地址#defineRX_ADDR_P10x0B//頻道1接收數據地址#defineRX_ADDR_P20x0C//頻道2接收數據地址#defineRX_ADDR_P30x0D//頻道3接收數據地址#defineRX_ADDR_P40x0E//頻道4接收數據地址#defineRX_ADDR_P50x0F//頻道5接收數據地址#defineTX_ADDR0x10//發送地址寄存器#defineRX_PW_P00x11//接收頻道0接收數據長度#defineRX_PW_P10x12//接收頻道0接收數據長度#defineRX_PW_P20x13//接收頻道0接收數據長度#defineRX_PW_P30x14//接收頻道0接收數據長度#defineRX_PW_P40x15//接收頻道0接收數據長度#defineRX_PW_P50x16//接收頻道0接收數據長度#defineFIFO_STATUS0x17//FIFO棧入棧出狀態寄存器設置//**************************************************************************************voidDelay<unsignedints>;voidinerDelay_us<unsignedcharn>;voidinit_NRF24L01<void>;uintSPI_RW<uintuchar>;ucharSPI_Read<ucharreg>;voidSetRX_Mode<void>;uintSPI_RW_Reg<ucharreg,ucharvalue>;uintSPI_Read_Buf<ucharreg,uchar*pBuf,ucharuchars>;uintSPI_Write_Buf<ucharreg,uchar*pBuf,ucharuchars>;unsignedcharnRF24L01_RxPacket<unsignedchar*rx_buf>;voidnRF24L01_TxPacket<unsignedchar*tx_buf>;//*****************************************長延時*****************************************voidDelay<unsignedints>{ unsignedinti; for<i=0;i<s;i++>; for<i=0;i<s;i++>;}//******************************************************************************************uint bdatasta;//狀態標志sbit RX_DR =sta^6;sbit TX_DS =sta^5;sbit MAX_RT =sta^4;/******************************************************************************************/*延時函數/******************************************************************************************/voidinerDelay_us<unsignedcharn>{ for<;n>0;n--> _nop_<>;}//****************************************************************************************/*NRF24L01初始化//***************************************************************************************/voidinit_NRF24L01<void>{inerDelay_us<100>; CE=0;//chipenable CSN=1;//Spidisable SCK=0;//Spiclocklineinithigh SPI_Write_Buf<WRITE_REG+TX_ADDR,TX_ADDRESS,TX_ADR_WIDTH>;//寫本地地址 SPI_Write_Buf<WRITE_REG+RX_ADDR_P0,RX_ADDRESS,RX_ADR_WIDTH>;//寫接收端地址 SPI_RW_Reg<WRITE_REG+EN_AA,0x01>;//頻道0自動 ACK應答允許 SPI_RW_Reg<WRITE_REG+EN_RXADDR,0x01>;//允許接收地址只有頻道0,如果需要多頻道可以參考Page21 SPI_RW_Reg<WRITE_REG+RF_CH,0>;//設置信道工作為2.4GHZ,收發必須一致 SPI_RW_Reg<WRITE_REG+RX_PW_P0,RX_PLOAD_WIDTH>;//設置接收數據長度,本次設置為32字節 SPI_RW_Reg<WRITE_REG+RF_SETUP,0x07>; //設置發射速率為1MHZ,發射功率為最大值0dB}/****************************************************************************************************/*函數:uintSPI_RW<uintuchar>/*功能:NRF24L01的SPI寫時序/****************************************************************************************************/uintSPI_RW<uintuchar>{ uintbit_ctr; for<bit_ctr=0;bit_ctr<8;bit_ctr++>//output8-bit { MOSI=<uchar&0x80>;//output'uchar',MSBtoMOSI uchar=<uchar<<1>;//shiftnextbitintoMSB.. SCK=1;//SetSCKhigh.. uchar|=MISO; //capturecurrentMISObit SCK=0; //..thensetSCKlowagain }return<uchar>; //returnreaduchar}/****************************************************************************************************/*函數:ucharSPI_Read<ucharreg>/*功能:NRF24L01的SPI時序/****************************************************************************************************/ucharSPI_Read<ucharreg>{ ucharreg_val; CSN=0;//CSNlow,initializeSPIcommunication... SPI_RW<reg>;//Selectregistertoreadfrom.. reg_val=SPI_RW<0>;//..thenreadregistervalue CSN=1;//CSNhigh,terminateSPIcommunication return<reg_val>;//returnregistervalue}/****************************************************************************************************//*功能:NRF24L01讀寫寄存器函數/****************************************************************************************************/uintSPI_RW_Reg<ucharreg,ucharvalue>{ uintstatus; CSN=0;//CSNlow,initSPItransaction status=SPI_RW<reg>;//selectregister SPI_RW<value>;//..andwritevaluetoit.. CSN=1;//CSNhighagain return<status>;//returnnRF24L01statusuchar}/****************************************************************************************************//*函數:uintSPI_Read_Buf<ucharreg,uchar*pBuf,ucharuchars>/*功能:用于讀數據,reg:為寄存器地址,pBuf:為待讀出數據地址,uchars:讀出數據的個數/****************************************************************************************************/uintSPI_Read_Buf<ucharreg,uchar*pBuf,ucharuchars>{ uintstatus,uchar_ctr; CSN=0; //SetCSNlow,initSPItranaction status=SPI_RW<reg>; //Selectregistertowritetoandreadstatusuchar for<uchar_ctr=0;uchar_ctr<uchars;uchar_ctr++> pBuf[uchar_ctr]=SPI_RW<0>;// CSN=1; return<status>;//returnnRF24L01statusuchar}/*********************************************************************************************************/*函數:uintSPI_Write_Buf<ucharreg,uchar*pBuf,ucharuchars>/*功能:用于寫數據:為寄存器地址,pBuf:為待寫入數據地址,uchars:寫入數據的個數/*********************************************************************************************************/uintSPI_Write_Buf<ucharreg,uchar*pBuf,ucharuchars>{ uintstatus,uchar_ctr; CSN=0;//SPI使能 status=SPI_RW<reg>; for<uchar_ctr=0;uchar_ctr<uchars;uchar_ctr++>// SPI_RW<*pBuf++>; CSN=1;//關閉SPI return<status>;//}/****************************************************************************************************//*函數:voidSetRX_Mode<void>/*功能:數據接收配置/****************************************************************************************************/voidSetRX_Mode<void>{ CE=0; SPI_RW_Reg<WRITE_REG+CONFIG,0x0f>; //IRQ收發完成中斷響應,16位CRC ,主接收 CE=1; inerDelay_us<130>;}/******************************************************************************************************//*函數:unsignedcharnRF24L01_RxPacket<unsignedchar*rx_buf>/*功能:數據讀取后放如rx_buf接收緩沖區中/******************************************************************************************************/unsignedcharnRF24L01_RxPacket<unsignedchar*rx_buf>{unsignedcharrevale=0; sta=SPI_Read<STATUS>; //讀取狀態寄存其來判斷數據接收狀況 if<RX_DR> //判斷是否接收到數據 { CE=0; //SPI使能 SPI_Read_Buf<RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH>;//readreceivepayloadfromRX_FIFObuffer revale=1; //讀取數據完成標志 } SPI_RW_Reg<WRITE_REG+STATUS,sta>;//接收到數據后RX_DR,TX_DS,MAX_PT都置高為1,通過寫1來清楚中斷標志 returnrevale;}/***********************************************************************************************************/*函數:voidnRF24L01_TxPacket<unsignedchar*tx_buf>/*功能:發送tx_buf中數據/**********************************************************************************************************/voidnRF24L01_TxPacket<unsignedchar*tx_buf>{ CE=0; //StandByI模式 SPI_Write_Buf<WRITE_REG+RX_ADDR_P0,TX_ADDRESS,TX_ADR_WIDTH>;//裝載接收端地址 SPI_Write_Buf<WR_TX_PLOAD,tx_buf,TX_PLOAD_WIDTH>; //裝載數據 SPI_RW_Reg<WRITE_REG+CONFIG,0x0e>; //IRQ收發完成中斷響應,16位CRC,主發送 SPI_RW_Reg<WRITE_REG+STATUS,0X7E>; CE=1; //置高CE,激發數據發送 inerDelay_us<10>;}//************************************主函數************************************************************voidmain<void>{ ucharbizhangflag=0;init_NRF24L01<>; while<1> { if<KEY1==0> { Delay<5>; if<KEY1==0> { TxBuf[1]=0x99; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; while<KEY1==0>; Delay<5>; //發送釋放按鍵 TxBuf[1]=0x00; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; } } if<KEY2==0> { Delay<5>; if<KEY2==0> { TxBuf[1]=0x66; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; while<KEY2==0>; Delay<5>; //發送釋放按鍵 TxBuf[1]=0x00; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; } } if<KEY3==0> { Delay<5>; if<KEY3==0> { TxBuf[1]=0x69; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; while<KEY3==0>; Delay<5>; //發送釋放按鍵 TxBuf[1]=0x00; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; } } if<KEY4==0> { Delay<5>; if<KEY4==0> { TxBuf[1]=0x96; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; while<KEY4==0>; Delay<5>; //發送釋放按鍵 TxBuf[1]=0x00; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; } } if<KEY5==0> { Delay<5>; if<KEY5==0> { if<bizhangflag==0> { bizhangflag=1; TxBuf[1]=0xAA; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; while<KEY5==0>; } else { bizhangflag=0; TxBuf[1]=0x55; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; nRF24L01_TxPacket<TxBuf>; Delay<10>; while<KEY5==0>; } } }2.小車部分程序#include<reg52.h>#include<intrins.h>#include"1602.h"#include"delay.h"typedefunsignedcharuchar;typedefunsignedcharuint;//****************************************NRF24L01端口定義***************************************sbit MISO =P0^0;sbit MOSI =P0^1;sbit SCK =P0^2;sbit CE =P0^3;sbit CSN =P0^4;sbit IRQ =P0^5;#defineKeyPort1P0#defineDataPortP3//定義按鍵端口sbitRightSenser=P2^3; sbitLeftSenser=P2^2;sbitTX=P2^1;sbitRX=P2^0;//*********************************************NRF24L01*************************************#defineTX_ADR_WIDTH5 //5uintsTXaddresswidth#defineRX_ADR_WIDTH5 //5uintsRXaddresswidth#defineTX_PLOAD_WIDTH20 //20uintsTXpayload#defineRX_PLOAD_WIDTH20 //20uintsTXpayloaduintconstTX_ADDRESS[TX_ADR_WIDTH]={0x34,0x43,0x10,0x10,0x01}; //本地地址uintconstRX_ADDRESS[RX_ADR_WIDTH]={0x34,0x43,0x10,0x10,0x01}; //接收地址//***************************************NRF24L01寄存器指令*******************************************************#defineREAD_REG0x00 //讀寄存器指令#defineWRITE_REG0x20 //寫寄存器指令#defineRD_RX_PLOAD0x61 //讀取接收數據指令#defineWR_TX_PLOAD0xA0 //寫待發數據指令#defineFLUSH_TX0xE1 //沖洗發送FIFO指令#defineFLUSH_RX0xE2 //沖洗接收FIFO指令#defineREUSE_TX_PL0xE3 //定義重復裝載數據指令#defineNOP0xFF //保留//*************************************SPI<nRF24L01>寄存器地址****************************************************#defineCONFIG0x00//配置收發狀態,CRC校驗模式以及收發狀態響應方式#defineEN_AA0x01//自動應答功能設置#defineEN_RXADDR0x02//可用信道設置#defineSETUP_AW0x03//收發地址寬度設置#defineSETUP_RETR0x04//自動重發功能設置#defineRF_CH0x05//工作頻率設置#defineRF_SETUP0x06//發射速率、功耗功能設置#defineSTATUS0x07//狀態寄存器#defineOBSERVE_TX0x08//發送監測功能#defineCD0x09//地址檢測#defineRX_ADDR_P00x0A//頻道0接收數據地址#defineRX_ADDR_P10x0B//頻道1接收數據地址#defineRX_ADDR_P20x0C//頻道2接收數據地址#defineRX_ADDR_P3
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 重癥醫學科護理質量管理
- 膽汁淤積性黃疸的臨床護理
- 大班幼兒報警安全教育教案
- 生產運營管理:產品與服務設計
- 小兒結節性脂膜炎的臨床護理
- 爆炸的急救護理
- 護理安全用藥指導
- 秋冬季常見傳染病預防幼兒園
- 小兒尼曼-皮克病的臨床護理
- 新生兒待產護理
- 2.1 充分發揮市場在資源配置中的決定性作用 課件-高中政治統編版必修二經濟與社會
- 2024年河南鄭州航空港投資集團招聘真題
- 2024年寶應縣公安局招聘警務輔助人員真題
- 2025至2030中國數據標注行業創新現狀及投融資風險研究報告
- 中汽研X華為 2024年自動駕駛安全模型研究-2025-04-自動駕駛
- 社會規則核心是分配:-上層按權分配-中層按資分配-下層按勞分配
- 2024-2025學年高中生物每日一題光合作用與細胞呼吸過程綜合含解析新人教版必修1
- 清真培訓考試題及答案
- 2025年北京市西城區高三一模物理試卷(含答案)
- 2025-2030全球及中國COB發光二極管行業市場現狀供需分析及市場深度研究發展前景及規劃可行性分析研究報告
- 群眾文化知識試題及答案
評論
0/150
提交評論