基于stm32的智能小車設計畢業(yè)設計論文_第1頁
基于stm32的智能小車設計畢業(yè)設計論文_第2頁
基于stm32的智能小車設計畢業(yè)設計論文_第3頁
基于stm32的智能小車設計畢業(yè)設計論文_第4頁
基于stm32的智能小車設計畢業(yè)設計論文_第5頁
已閱讀5頁,還剩77頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

姓名:指導教師:1—本次試驗主要分析了基于STM32F103微處理器的智能小車控制系統(tǒng)的系統(tǒng)設計過程。此智能系統(tǒng)的組成主要包括STM32F103控制器、電機驅(qū)動電路、紅外探測電路、超聲波避障電路。本次試驗采用STM32F103微處理器為核心芯片,利用PWM技術對速度以及舵機轉(zhuǎn)向進行控制,循跡模塊進行黑白檢測,避障模塊進行障礙物檢測并避障功能,其他外圍擴展電路實現(xiàn)系統(tǒng)整體功能。小車在運動時,避障程序優(yōu)先于循跡程序,用超聲波避障電路進行測距并避障,在超聲波模塊下我們使用舵機來控制超聲波的發(fā)射方向,用紅外探測電路實現(xiàn)小車循跡功能。在硬件設計的基礎上提出了實現(xiàn)電機控制功能、智能小車簡單循跡和避障功能的軟件設計方案,并在STM32集成開發(fā)環(huán)境Keil下編寫了相應的控制程序,并使用mcuisp軟件進行程序下載。microprocessorSTM32F103systemdesignprocess.Thecompositionofinfrareddetectioncircuit,circuitofultrasonicobstacleavoidance.Thisexperimentspeedandsteeringgearsteering,trackingmoduleisotherperipheralextendedcircuittorealizethewholesystemoving,obstacleavoidanceprogrampriortotracking,umoduletocontroltheemissiondirectionusedtoimplementthecartrackingfunction.proposedformotorcontrolfunction,simpleintelligeavoidancefunctionofsoftwaredesign,andintheSTM32environmentundertheKeil.WritetheKeywords:STM32;Infrared基于stm32的智能小車設計 4- 4- 4-2.軟硬件設計 2.1中央處理模塊 6- 7-2.1.3stm32軟件設計的基本思路 2.1.4stm32中斷介紹 2.1.5stm32定時/計數(shù)器介紹 2.1.6主程序設計流程圖 2.2.1驅(qū)動模塊結構及其原理 2.2.2驅(qū)動模塊電路設計 2.3避障模塊設計 2.4循跡模塊設計 2.4.1循跡模塊結構及其原理 2.4.2循跡模塊電路設計 2.4.3紅外循跡模塊程序設計 3.軟件調(diào)試 3.2程序下載 4.系統(tǒng)測試 5.總結 40-附錄 41-智能小車通過各種感應器獲得外部環(huán)境信息和內(nèi)部運動狀態(tài),實現(xiàn)在復雜環(huán)境背景下的自主運動,從而完成具有特定功能的機器人系統(tǒng)。而隨著智能化電器時代的到來,它們在為人們提供的舒適的生活環(huán)境的同時,也提高了制造智能化電器對于人才要求的門檻。智能小車是集成了多種高新技術,它不僅融合了電子、傳感器、計算機硬件、軟件等許多學科的知識,而且還涉及到當今許多前沿領域的技術,它是一個國家高科技技術水平的重要體現(xiàn)。通過建立起簡易智能小車的設計,引導學生從理論走向?qū)嵺`,培養(yǎng)同學們的動手能力,使同學們在了解智能化電器的工作原理的基礎上,還使同學們獲得完成整體項目的能力,并掌握了Stm32開發(fā)板的編程原理,為同學們進入ARM領域提供了基礎。另外,本次課程設計,使同學們了解自己的不足之處,從而使同學們有目標的提升自己的能力。1.1研究概況國外研究概況:上世紀50年代初,國外就有智能車輛的研究,從90年代開始,智能車輛的研究就進入了系統(tǒng)化、大規(guī)模的研究階段。尤其突出的是美國卡內(nèi)基一梅隴大學機器人研究所已經(jīng)完成了Navlab系列的自主車輛的研究,這一研究成果代表了國外智能車輛的主要研究方向。國內(nèi)研究概況:我國對于智能車輛的研究較晚,始于上世紀80年代,而且現(xiàn)在大部分還是使用入門級別的51單片機進行設計與研究的,為了彌補與國外研究的差距,開設了全國大學生電子設計競賽。1.2研究思路系統(tǒng)將采集的傳感器信號送入stm32微控制器中,stm32微控制器根據(jù)采集的信號做出不同的判斷,從而控制電機運動方向和運動速度。系統(tǒng)以stm32微控制器為核心,通過傳感器采集不同的信號做出判斷,繼而改變電機的運動方向和運動速度。實驗系統(tǒng)結構如圖1.1所示:2.軟硬件設計智能小車控制系統(tǒng)具備了障礙物檢測、自主避障、自主循跡等功能。相應的控制系統(tǒng)主要由以下四個模塊組成:避障模塊、循跡模塊、電機驅(qū)動模塊、中央處理模塊四個模塊組成,系統(tǒng)總體框架如圖2.1所示:機我們本節(jié)主要任務是了解各個模塊的功能,掌握各個模塊所使用的器件的使用方法,并能夠編寫相應的程序代碼。掌握各個模塊的功能。在人類身體結構中,大腦可以根據(jù)各個器官所傳輸?shù)男畔⒆龀鱿鄳男袨閯幼饔靡员WC人體所必須的生理原料,而stm32處理器之于智能小車就相當于大腦之于人類,它可以從各個模塊之間獲得數(shù)據(jù),并對所傳輸?shù)臄?shù)據(jù)進行實時處理,來驅(qū)使電機模塊做出相應的行為動作。由ARM公司設計的基于ARMv7架構的Cortex系列的標準體系結構在2006年推出,此結構是用來滿足日漸復雜的不同性能要求的軟件設計,根據(jù)所面向的領域,Cortex系列可以分為A、R、M三個分工明確的系列。Stm32處理器的出現(xiàn)為微控制系統(tǒng)、工業(yè)控制系統(tǒng)、汽車車身系統(tǒng)和無線網(wǎng)絡等對功耗和成本敏感的嵌入式應用領域?qū)崿F(xiàn)高系統(tǒng)性能系統(tǒng)提供了基礎,使編程的復雜性,集高性能、低功耗、低成本大大簡化,并使它們?nèi)跒橛谝惑w2。意法半導體ST公司作為一個半導體制造廠商,是ARM公司Cortex-M3內(nèi)核開發(fā)項目一個主要合作方。2007年6月11日由ST公司率先推出的基于Cortex-M3內(nèi)核的STM32系列微控處理器研發(fā)而出。此中,A系列是面向復雜的尖端應用程序,用于運行開放式的復雜操作系專門面向低成本的微控制領域開發(fā)研究。因此,Cortex-M3處理器是由ARM公司設計的首款基于ARMv7-M體系結構的32位標準處理器,它不僅具有低功耗、少系列是標準型系列,工作頻率設定在36MHZ;STM32F103系列是增強型系列,工作頻率設定在72MHZ,其帶有更多片內(nèi)RAM和更豐富的外設資源。這兩個系列的件的開發(fā)和升級更加方便。本次試驗,我們使用的是stm32f103處理器。STM32F103系列微處理器是首款基于ARMv7-M體系結構的32位標準RISC (精簡指令集)處理器,具有執(zhí)行代碼效率高,外設資源豐富等眾多優(yōu)點。該系列微處理器工作頻率設定在72MHz,高達128K字節(jié)的內(nèi)置Flash存儲器和20K字節(jié)的SRAM,方便程序編寫,而且具有豐富的通用I/0圖2.2所示:嵌套向量中斷控制器高速總線 閃存32KB-128KB橋橋2個看門狗RTC:實時時鐘POR:上電復位PVD:可編程電壓檢測器-40-+85℃或高達105℃工作Stm32處理器主系統(tǒng)主要由4個被動單元和4個驅(qū)動單元構成。4個驅(qū)動單元是:通用DMA1,通用DMA2,內(nèi)核DCode總線和系統(tǒng)總線。4個被動單元由片具有64KBSRAM、512KBFLASH、2個基本定時器,4個通用定時器,2個高2.1.2stm32最小系統(tǒng)電路設計Stm32的最小系統(tǒng)電路主要由系統(tǒng)時鐘電路、實時時鐘電路、JTAG調(diào)試接口電路,復位電路和啟動模式選擇電路組成。最小系統(tǒng)電路原理圖如圖2-1-3所示:PAO-WKUPUSART2CTSADC_DNOTM_CHI_PAIUSART2_RTSADC_INI/TPA2USART2_TXADC_iN2/TMPABUSARTI_CK/TIM_CHPA11USARTI_CTSCANRXUSBDM2)/TIMIPA12USARTIRTSCANXUSBDP(2)TM_2PB12/SPD_NSSDC2_5MBA1USART3_CK/TM_PB13/SPD_SCKUSART3_CTSTIMI_PB145PDMSOUSARTJ_RTSTD_NNRST|HBVSS_4疆T6c68B79pci二二圖2.3最小系統(tǒng)電路原理圖主要電路原理圖的設計及功能如下所示:1.系統(tǒng)時鐘電路系統(tǒng)時鐘電路主要作用是提供節(jié)拍,就相當于人類的心臟跳動,隨著心臟的跳動,血液就會到達全身部位,所以系統(tǒng)時鐘的重要性就不言而喻啦。系統(tǒng)時鐘的電路設計如圖2.4所示:VSSA05C_OUT333降M圖2.4系統(tǒng)時鐘電路圖在時鐘電路中,我們選用8M的晶振。2.復位電路3.JTAG電路KKKK9K824.啟動模式電路4K1n46啟動模式選擇引腳啟動模式說明X0主閃存存儲器被選為啟動區(qū)域01系統(tǒng)存儲器系統(tǒng)存儲器被選為啟動區(qū)域11內(nèi)置SRAM內(nèi)置SRAM被選為啟動區(qū)域2.1.3stm32軟件設計的基本思路在對其他模塊設計之前,我們必須了解stm32的編程規(guī)則。任何處理器,包括stm32處理器,想要處理器完成某項相應的動作,就必須對處理器的寄存器進行操作。比如,我們在單片機C51中,同樣,我們在stmM32的開發(fā)中過程中,我們同樣可以對寄存器直接操作:GPIOx->BRR=0x0011。(x可以是A,B,C,D,E…比如GPIOA就是端口A)但是,對于stm32這種級別的處理器,幾百個寄存器記起來談何容易。所以,ST(意法半導體)提出了固件庫的概念,利用固件庫進行編程。固件庫的本質(zhì)就是函數(shù)的集合,固件庫將那些寄存器的底層操作都封裝起來,提供一整套API供開發(fā)者使用。比如,上面通過控制BRR寄存器來控制電平的變化,官方庫封裝了一VoidGPIO_ResetBits(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin){GPIOx->BRR=GPIO_Pin;}(x通過使用GPIO_ResetBits()函數(shù)就可以直接對寄存器進行操作啦。2.1.4stm32中斷介紹本方案中,我們要使用stm32的中斷,在程序設計中,我們要開啟各個管道的中斷,打開各個中斷通道,配置中斷方式,我們先來講述下stm32單片機的中斷機制。結構圖如下所示:AMBAAMBAAPB總線中斷屏版海存器.邁通嘔②推起請求/事件⑥選擇選擇①幾EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Rising;設置為上升沿觸發(fā)中斷求機制,對于事件的中斷請求機制,我們在這里不做介紹。RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIO初始化I/0為輸入GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_GPIO_Init(GPIOE,&GPIO—11—EXTI_InitStructure.EXTI_Mode=EXTI_Mode_InteEXTI_InitStructure.EXTI_Trigger=EXTI_NVIC_InitStructure.NVIC_NVIC_InitStructure.NVIC_IRQChannelPrNVIC_InitStructure.NVIC_IRQChannelSubPriority=0x06;NVIC_InitStructure.NVICvoidEXTI1_IRQHandler(void){主要代碼詳見附錄2.的詳細內(nèi)容,我們不在這里一一介紹。然后我們介紹一下本實驗采用了那些定時器,以及這些定時器所要完成的功能有哪些。本實驗所采用的定時器以及功能如下表所示:表2-2定時器介紹表定時器名稱定時器配置模式主要功能定時器中斷模式聲波的掃描周期向的高電平持續(xù)時間t2.1.6主程序設計流程圖在本節(jié)實驗中,循跡模塊以及避障模塊都是采用中斷方式進行工作的,因此其主程序流程圖如下圖所示:系統(tǒng)初始化前進根據(jù)程序設計圖,主程序設計如下:{u8TIM5CH1_CAPTURE_STA=0;//輸入捕獲狀態(tài)u16TIM5CH1_CAPTURE_VAL;//輸入捕獲值delay_init();//延時函數(shù)初始化NVIC_Configuration();//設置NVIC中斷分組2:2位搶占優(yōu)先級,2位響應優(yōu)先級GPIO_Configuration();//端口初始化EXTIX_Init();//掃描軌跡TIM2_Int_Init(4999,7199);//控制超聲波掃描周期TIM3_PWM_Init(1999,719);//控制舵機方向TIM5_Cap_Init(OXFFFF,72-1);//以1Mhz的頻率計數(shù){farward_Low();delayStm32對小車的控制,就是對電機的控制,通過控制電機的轉(zhuǎn)向,小車的運動狀態(tài)就會發(fā)生改變。電機驅(qū)動模塊的主要器件為LM293N,我們下面就詳細講解下電機驅(qū)動模塊。電機驅(qū)動模塊的實物圖如圖2.8所示:圖2.8驅(qū)動電路實物圖電機驅(qū)動模塊的主要器件是芯片LM293D,內(nèi)部原理圖如圖2.9所示:全橋式驅(qū)動電路的4只開關管都工作在斬波狀態(tài),如圖1.2所示,K1、K2為一組,K3、K4為另一組,兩組的狀態(tài)互補,一組導通則另一組必定關斷。當K1、K2導通時,K3、K4關斷,電機兩端加正向電壓,電機實現(xiàn)正轉(zhuǎn)或反轉(zhuǎn)制動;當K3、K4導通時,K1、K2關斷,電機兩端為反向電壓,電機實現(xiàn)反轉(zhuǎn)或正轉(zhuǎn)制2.2.2驅(qū)動模塊電路設計電機驅(qū)動模塊的電路原理如圖2.10所示:表2-2是各個端口狀態(tài)與運動方向的關系,其關系如下表所示:表2-2端口與運動方向關系表電機M1電機M2停止00停止00正轉(zhuǎn)10正轉(zhuǎn)100101一11一112.2.3驅(qū)動軟件程序設計車輪電機的動作由GPIO口的輸出實現(xiàn),本節(jié)主要配置運動方向和運動速度,對于運動速度的控制,我們必須使用PWM,通過改變PWM的占空比來調(diào)節(jié)速度的大小,其主要代碼設計如下所示:voidTIM3_PWM_Init(u16arr,u16psc){….}要想使stm32的通用定時器TIMx產(chǎn)生PWM輸出,需要用到的寄存器有:預分頻寄存器(TIMx_PSC)、自動重裝載寄存器(TIMx_ARR)、捕獲/比較模式寄存器 (TIMx_CCMR1/2)、捕獲/比較使能寄存器(TIMx_CCER)、捕獲/比較寄存器 (TIMx_CCR1~4)。我們先介紹這幾個寄存器,然后介紹如何使用庫函數(shù)產(chǎn)生PWM輸出。下面我們就簡單介紹下這些寄存器:首先是預分頻寄存器(TIMx_PSC),該寄存器可以用設置對時鐘進行分頻,然后在提供給計數(shù)器作為計數(shù)器的時鐘。該寄存器的各位功能如圖所示:PSC[15:0]:預分頻器的值(Prescalervalue)計數(shù)器的時鐘頻率(CK_CNT)等于fcxpso/(PSC[15:0]+1).TIM_EGR的UG位清'0或被工作在復位模式的從控制器清'0.ARR[15:0]:自動重裝載的值(Prescalervalue)ARR包含了將要裝載入實際的自動重裝載寄存器的詳細參考13.3.1節(jié):有關ARR的更新和動作,通過設置這兩個寄存器,我們就可以算出PWM的輸出周期,計算公式為:TIMx_CCMR2,TIMx_CCMR1控制通道CH1和CH2,TIMx_CCMR這里我們只介紹該寄存器的OCxM位,我們就以TIMx_CCMR1中的OC1M(控制通道CH1)為例,該位功能如下圖所示:OC1M[2:0]:輸出比較1模式(OutputCompare該3位定義了輸出參考信號OC1REF的動作,而OC1REF決定了OC1、OC是高電平有效,而OC1、OC1N的有效電平取決于CC1P、CC1NP位。000:凍結。輸出比較寄存器TIMx_CCR1與計數(shù)器TIMX_CNT間的比較對OC1REF不起作用;001:匹配時設置通道1為有效電平。當計數(shù)器TIMx_CNT的值與捕獲/比較寄存器1(TIMx_CCR1)相同時,強制OC1REF為高。010:匹配時設置通道1為無效電平.當計數(shù)器TIMx_CNT的值與捕獲/比較寄存器1(TIMx_CCR1)相同時,強制OC1REF為低。011:翻轉(zhuǎn)。當TIMx_CCR1=TIMx_CNT時,翻轉(zhuǎn)OC1REF的電平。100:強制為無效電平。強制OC1REF為低.101:強制為有效電平。強制OC1REF為高。110:PWM模式1-在向上計數(shù)時,一旦TIMx_CNT<TIMx_CCR1時通道1為有效電平,否則為無效電平;在向下計數(shù)時,一旦TIMx_CNT>TIMx_CCR1時通道1為無效電平(OC1REF=0),否則為有效電平(OC1REF=1).111:PWM模式2一在向上計數(shù)時,一旦TIMx_CNT<TIMx_CCR1時通道1為無效電平,否則為有效電平:在向下計數(shù)時,一旦TIMx_CNT>TIMx_CCR1時通道1為有效平。注1:一旦LOCK級別設為3(TIMx_BDTR寄存器中的LOCK位)并且CC1S=00出)則該位不能被修改。注2:在PWM模式1或PWM模式2中,只有當比較結果改變了或在輸出比較切換到PWM模式時,OC1REF電平才改變.圖2.14OC1M功能描述保留該寄存器比較簡單,因為我們只介紹通道1,所以我們只講CC1E位。如果我們想使能輸入/捕獲1,我們只需使用CC1E位。要想使PWM從I/O口輸出,此位必須設置為1。最后介紹捕獲/比較寄存器(TIMx_CCR1~4),總共有4個,分別對應CH1~4,因為這4個寄存器相似,我們僅以TIMx_CCR1為例,該寄存器的給位介紹如下圖所示:1498763210rwCCR1[15:0]捕獲/比較通道1的值(Capture/Compare1value)若CC1通道配置為輸出:CCR1包含了裝入當前捎獲/比較1寄存器的值(預裝載值).如果在TIMx_CCMR1寄存器(OC1PE位)中未選擇預裝載功能,寫入存器中。否則只有當更新事件發(fā)生時,此預裝載值才傳輸至當前捕獲/比較1寄存器中。當前捕獲/比較寄存器參與同計數(shù)器TIMx_CNT的比較,并在OC1端口上產(chǎn)生輸出信號.若CC1通道配置為輸入:—17—在輸出模式下,該寄存器的值與CNT中的值進行比較,根據(jù)結果,實現(xiàn)電平的翻轉(zhuǎn)。至此,我們把用到的幾個寄存器都介紹完畢,下面我們就介紹如何通過庫函數(shù)來配置實現(xiàn)PWM三路輸出。開啟TIM3時鐘以及復用功能輸出。使能GPIO和端口復用功能時鐘。庫函數(shù)使能TIM3、GPIO以及復用功能時鐘的方法是:TIM_TimeBaseStructure.TIM_CounterMode=TIM_CountTIM_TimeBaselnit(TIM3,&TIM_TimeBaseS輸出。在庫函數(shù)中PWM通道設置是通過TIM_OC1Init~TIM_OC4Init來設置的,這里我們需要3路PWM輸出,所以我們需要使用函數(shù)TIM_OC1Init、TIM_OC2Init、TIM_OC3Init。庫函數(shù)的調(diào)用格式如下:TIM_OClnitStructure.TIM_OCMode=TIM_OTIM_OCInitStructure.TIM_OutputState=TIM_OutputSTIM_OClnitStructure.TIM_OCPolarity=TIM_OCPolTIM_OC2Init(TIM3,&TIM_OCInitSTIM_OC1Init(TIM3,&TIM_OClnitSTIM_OC3Init(TIM3,&TIM_OCInitS使能TIM3。完成以上配置后,我們要使能定時器TIM3。庫函數(shù)調(diào)用格式VoidTIM_SetComparex(TIM3,uint16_tCompa我們可以知道,通過定時器3控制PWM波的占空比,從而實現(xiàn)速度方面的控使能I/O口時鐘,調(diào)用格式如下所示:初始化I/O參數(shù),調(diào)用格式如下所示:GPIO_InitStructure.GPIO_PGPIO_InitStructure.GPIO_Mode=GPIO_InitStructure.GPIO_Speed=GPIO_Init(GPIOD,&GPI操作I/0口我們知道了如何對端口進行操作之后就可以隨意的控制小車的運動啦,運動方向的程序設計,其基本函數(shù)單元如下所示:voidLeft_Low(void);..我們調(diào)用這些函數(shù),就可以實現(xiàn)不同運動方向的控制。主要代碼詳見附錄3.在人類身體構造系統(tǒng)中,眼睛可以使我們非常方便的采集到外界環(huán)境的信息,測,超聲波檢測等。本次試驗我們使用的是HC-SR04超聲波檢測,超聲波由于具有檢測能力強,傳播路徑寬,因此我們決定使用HC-SRO4器件。在使用HC-SR04模塊進行超聲波測距的同時,我們可以使用舵機進行輔助。舵機的主要作用是改變HC-SRO4模塊的照射方向,從而控制超聲波的發(fā)射方向。在程序編寫過程中,如果小車前方遇見障礙時,我們可以直接控制舵機的轉(zhuǎn)向,而小車的車身可以保持不變,在測量結束后,小車再做相應的動作。2.3.1避障模塊器件結構及其原理HC-SRO4超聲波測距模塊測量范圍在2cm-400cm之間,可以實現(xiàn)無接觸式測距功能。HC-SR04超聲波測距模塊由一個超聲波發(fā)射器、一個超聲波接收器和控制電路組成,避障模塊的實物結構圖如圖2.17所示:觸發(fā)信號輸入一如結構圖所示VCC提供5v電源,GND為接地線,TRIG為觸發(fā)信號線,ECHO為回向信號輸出線。基本原理如下:采用I0口TRIG觸發(fā)測距,給至少10us的高電平信號,在TRIG觸發(fā)沿到來后,超聲波發(fā)射器會自動發(fā)出8個40KHz的方波,并且檢測是否有信號返回,當超聲波接收器接收到超聲波時,表明有信號返回,通過10口ECHO輸出一高電平,高電平持續(xù)的時間就是超聲波從發(fā)射到返回的時間。因此測量距離=(高電平持續(xù)時間*340m/s)/2。測量時序圖如圖2.18循環(huán)發(fā)出8個40KHtz脈沖回響電平輸出所以測距時,為了防止發(fā)射信號丟失,我們要求被測物體的面積不應小于0.5平方米,否則可能導致測量結果不準確。機的實物圖如圖2.19所示:圖2.19舵機實物圖電路,它會產(chǎn)生周期為20ms,寬度為1.5ms的基準信號,它將微處理器傳輸?shù)耐瑫r由位置檢測器送回反饋信號。舵機的轉(zhuǎn)動角度與stm32所提供的PWM信號相關。標準信號PWM周期為20ms,理論上來講脈寬為1~2ms,實際我們的脈寬為0.5~2.5ms,脈寬與所轉(zhuǎn)的角度一一對應。角度與脈寬的對應圖如圖2.20所圖2.20舵機角度與脈寬對應圖2.3.2HC-SR04模塊硬件電路設計超聲波模塊硬件原理圖如下圖所示:圖2.21超聲波硬件原理圖HC-SR04模塊主要由發(fā)射器、接收器和部分電路組成。在此試驗中,我們只需簡單了解電路的設計,對于其基本原理可以不用過多涉獵,我們只需明白它們的工作原理,并且能夠簡單運用即可。2.3.3HC-SR04模塊程序設計根據(jù)硬件電路的設計,我們對避障子程序進行設計,程序流程圖如圖2.22所示:系統(tǒng)初始化小車左轉(zhuǎn)前方是否有障礙舵機左轉(zhuǎn)小車左方是否有隙礙是舵機右轉(zhuǎn)小車右方是否有障礙小車后轉(zhuǎn)避障子程序結束小車右轉(zhuǎn)避障模塊在程序設計中,我們的工作主要是:1、控制超聲波的掃描周期2、采集超聲波發(fā)射到接受的高電平持續(xù)時間t3、對采集的高電平持續(xù)時間t進行處理,判斷前方是否有障礙下面我們就詳細介紹我們是怎么通過軟件設計來完成這幾個步驟的:1、控制超聲波的掃描周期根據(jù)表2-2,我們采用的是TIM2來控制超聲波的掃描周期。首先我們把TIM2設置為定時器中斷模式,代碼格式為voidTIM2_Int_Init(u16arr,u16psc);由于配置定時器中斷模式十分簡單,我們就不在詳細介紹,其詳細代碼見附錄4.定時器TIM2的中斷周期計算公式為T=((arr+1)*(psc+1))/Tclk。Tclk為系統(tǒng)周期,一般為72Mhz.我們在中斷服務程序中控制超聲波的發(fā)射,我們采用PC7作為觸發(fā)信號,根據(jù)超聲波時序圖,我們需要在中斷程序中給PC7一個持續(xù)10ms的高電平,中斷服務程序如下:{{}2、采集超聲波發(fā)射到接受的持續(xù)時間t在本節(jié)試驗中,我們使用了通用定時器TIM5的輸入捕獲功能,輸入捕獲模式具有測量頻率或者測量脈沖的寬度的功能。我們開啟TIM5通道CH1(定時器5)的輸入捕獲模式,采集ECHO端口的高電平持續(xù)時間。配置定時器5代碼格式為:voidTIM5_Cap_Init(u16arr,u16下面我們就詳細講解一下,如何開啟并使用通用定時器的輸入捕獲功能。輸入捕獲的原理,簡單的講就是通過檢測TIM5(定時器)通道CH1的邊沿信號,當邊沿信號發(fā)生變化時,當前寄存器的值TIM1_CNT存放到通道的捕獲/比較寄存器(TIM5_CCR1)里面。我們的實驗就是采集捕獲/比較寄存器(TIM5_CCR1)中的值并進行處理,完成相應的動作。為了使TIM5通道CH1具有捕獲功能,我存器(TIM5_DIER)、控制寄存器(TIM5_CR1)。我們下面就簡單介紹下下這幾個寄存器。在贅述,而在本實驗中,捕獲/比較寄存器TIM5_CCMR1非常重要,該寄存器的各位描述如下圖所示:IC1F[3:0]:翰入攤獲1濾波器(Inputcapture1fiter)錄到N個事件后會產(chǎn)生一個翰出的跳變:0000:無濾波器,以fors采樣1000:采樣頻率fsAPLNG=fors/8,N=60001:采樣頻率1sARno=1exr,N=21001:采樣頻率fsuPLNa=fors/8,N=80010:采樣頻率1sAIPLn=texnr,N=41010:采樣頒率fsuPLNa=fors/16,N=50011:采樣票率'sMPLmo=lexnr,N=81011:采樣頻率IsAuPLNo=fors/16,N=60100:采樣頒率(sMI=fors/2,N=61100:采樣頻率IsuPLmo=fors/16,N=80101:采樣績率'sAIPLmG=1org/2,N=81101:采樣頻率fsPLmo=fors/32,N=50110:采樣想率IsMPLNo=1ors/4,N=61110:采樣頒率fsPLno=fors/32,N=60111:采樣頻率fsMPUNG=1ors/4,N=81111:采樣頻率fsAMPLNo=fors/32,N=8IC1PSC[1:0]:輸入捕獲1預分額器(nputcapture1pr這2位定義了CC1輸入(IC1)的預分頻系數(shù)。一旦CC1E=0(TIMx_CCER寄存器中),則預分頻器復位。00:無預分頒器,捕獲輸入口上檢測到的每一個邊沿都觸發(fā)一次捕獲:01:每2個事件觸發(fā)一次攤獲:10:每4個事件觸發(fā)一次捕獲:11:每8個事件觸發(fā)一次捕獲。CC1S[1:0]:捕獲/比較1選擇(Capture/Compare1Selection)這2位定義通道的方向(輸入輸出),及輸入腳的選擇:01:CC1通道被配置為輸入,IC1映射在T11上;注:CC1S僅在通道關閉時(TIM_CCER粵存器的CC1E=0)才是可寫的。我們使用的是TIM5捕獲/比較通道CH1,所以圖中只介紹[7:0]位。本次試驗我們設置CC1S[1:0]=01,IC1PSC[1:0]=00,IC1F[3:0]=0000。接著我們再來看看捕獲/比較使能寄存器TIMx_CCER,本節(jié)用到了CC1E和CC1P兩位,描述如下圖所示:CC1P:輸入捕獲1翰出極性(Capture/Compare1outputpolarity)CC1通道配置為輸出:0:OC1高電平有效;1:OC1低電平有效.CC1通道配置為輸入:該位選擇是IC1還是IC1的反相信號作為觸發(fā)或捕獲信號。注:一旦LOCK級別(TIMx_BDTR寄存器中的LOCK位)設為3或2,則該位不能被修改.CC1E:翰入捕獲1輸出使能(Capture/Compare1outputenable)CC1通道配置為輸出:0:關閉一OC1禁止輸出,因此OC1的輸出電平依賴于MOE.OSSI、OSSR.O和CC1NE位的值。1:開啟-OC1信號輸出到對應的輸出引腳,其翰出電平依賴于MOE、OSSI、OSSR.OIS1.OIS1N和CC1NE位的值。CC1通道配置為輸入:該位決定了計數(shù)器的值是否能捕獲入TIMx_CCR1寄存器。0:捕獲禁止:0:捕獲使能。所以要使能通道CH1輸入捕獲,CC1E必須設置為1,而CC1P則可以根據(jù)實際情況設置。道CH1,所以我們僅介紹控制通道CH1的位,如下圖所示:保留?rrrrYrTrrrTrWrTrWrWrTr?位1CC1IE:允許捕獲/比較1中斷(Capture/Compare1interuptenable0:禁止捕獲/比較1中斷:1:允許捕獲/比較1中斷.通過此圖我們知道,我們需要設置CC1IE為1即可。然后,我們再看看控制寄存器TIMx_CR1,我們只用到了最低位,所以我們僅介紹位0的功能,TIMx_CR1寄存器各位描述及位0功能描述如下如所示:保留←rTrTTTrTrrWrwrTrTrT←CEN:使能計數(shù)器(Counterenable)0:禁止計數(shù)器:1:使能計數(shù)器。地通過硬件設置CEN位。圖2.26TIMx_CR1寄存器各位描述及位0功能描述我們要使能計數(shù)器,所以位0設置為1。至此,我們所使用的寄存器一一介紹完畢,下面介紹怎么配置輸入/捕獲步驟:開啟TIM5時鐘以及GPIOA時鐘。初始化TIM5,設置TIM5的psc和arr?!?6—TIM_TimeBaseStructure.TIM_CounterMode=TTIM_TimeBaselnit(TIM5,&TIM_TimeBaseSt設置TIM5的輸入比較參數(shù),開啟捕獲模式。TIM5_ICInitStructure.TIM_Channel=TIM_Channel_TIM5_ICInitStructure.TIM_ICPolarity=TIM_ICPolariTIM5_ICInitStructure.TIM_ICSelection=TIM_ICSelection_TIM5_IClnitStructure.TIM_ICPrescaler=TIM_ITIM5_ICInitStructure.TIM_ICFilter=0x00;/TIM_IClnit(TIM5,&TIM5_IClnitSt設置TIM5的DIER寄存器,使能捕獲和更新中斷功能。設置中斷分組并編寫中斷服務函數(shù)NVIC_InitStructure.NVIC_IRQChannelPNVIC_InitStructure.NVIC_IRQC使能定時器TIM5CH1_CAPTURE_VAL為輸入捕獲值,中斷服務函數(shù)如下所示:if(TIM5CH1_CAPTURE_STA&OX80)==0)//還未成功捕獲{if(TIM_GetITStatus(TIM{if(TIM5CH1_CAPTURE_STA&0X40)//已經(jīng)捕獲到高電平了{if((TIM5CH1_CAPTURE_STA&OX3F)==0X3F)//高電平太長了{TIM5CH1_CAPTURE_STA|=0X80;//標記成功捕獲了一次if(TIM_GetITStatus(TIM5,TIM_IT_CC1)!=RESET)//捕獲1發(fā)生捕獲事件—27—TIM_OC1PolarityConfig(TIM5,TIM_ICPolarity_Rising);//CC1P=0設置為上升沿捕獲{//CC1P=1設置為下降沿捕獲}}}3、對采集的時間t進行處理,判斷前方是否有障礙測量距離=(高電平持續(xù)時間t*340m/s)/2,得出只要高電平持續(xù)時間{temp=TIM5CH1_CAPTURE_Stemp+=TIM5CH1_CAPTURE_VAL;//得到總的高電平時間TIM_SetCompare2(TIM3,150);t=TIM5CH1_CAPTURE_STA=0;//開啟下一次捕獲}}這節(jié)要完成的任務是使小車沿著黑帶運動。要想使小車沿著黑帶運動,必須使小車感應到黑跡在什么地方,然后讓小車的中央處理單元驅(qū)動硬件電路完成相應的行為動作。循跡模塊的設計就是使小車能準確的識別黑帶的軌跡。小車的中央處理模塊從循跡模塊獲得數(shù)據(jù),然后中央處理模塊根據(jù)采集的數(shù)據(jù)驅(qū)動電機模塊完成相應的動作。考慮到成本和操作,本實驗使用的紅外探測器。紅外探測器(IR)是由紅外發(fā)射管、紅外接收管和部分電路組成。要做到4路循跡,需要使用4個獨立的紅外探測器器件。我們使用的IR5是一個集成模塊,這個集成模塊由5個紅外探測器組成。其中中間的1個IR探測器在本實驗中并未使用。紅外循跡模塊實物圖如圖2.27所示:本實驗使用的IR5集成模塊是由5個相同的IR探測器電路組成的,所以我們只需要了解一個IR探測器的工作原理即可。我們知道IR探測器是由紅外發(fā)射管、紅外接收管和部分電路組成。基本原理是紅外發(fā)射管發(fā)射紅外光經(jīng)地面反射,在黑色區(qū)域紅外光被吸收,在非黑色區(qū)域紅外光被反射,紅外接收管根據(jù)反射光的強度為比較器提供模擬量,從而輸出相應的電平量。其單個IR探測器電路原理圖如圖2.28所示:根據(jù)原理圖詳解下IR探測器的工作原理:VCC為模塊提供電源,是IR探測器工作的前提條件,紅外發(fā)射管DF2發(fā)射紅外光到達“地面”,經(jīng)反射后紅外光會到達DS2紅外接收管,由于不同顏色的地面會對光的吸收有著不同的效果,所以發(fā)射后的光的強度也會不同,反射強度不同,LM339的5腳會輸入一個變化的電壓量,LM339是一個電壓較器,當LM339的“+”端輸入信號大于“-”端的比較信號后,LM339的輸出端截止,在外部的上拉電源的作用下,使IR探測器的輸出端輸出+5v的電壓。同理,在“+”端電壓小于“—”端電壓時,LM339輸出端電壓飽和使IR探測器輸出為低電壓。因此可以通過調(diào)節(jié)R2的電阻值,改變比較電壓的大小即“—”端電壓的大小,從而控制探測的距離。R4是整個正反饋電路的重要組成部分,由于“+”輸入端電壓會經(jīng)常發(fā)生在比較電壓附近擾動的現(xiàn)象,這些微小的擾動都會造成輸出端的巨大變化,因此,我們采用正反饋的方式避免這種現(xiàn)象的發(fā)生。加入R4電阻,就成為人們所說的“施密特觸發(fā)器”,其特性圖如圖2.29所示:圖2.29施密特觸發(fā)器特性圖當輸入端的電壓發(fā)生轉(zhuǎn)化時,只要在比較電壓值附近的干擾不超過du之值,同時,帶來的缺點就是分辨率降低,因為只要在du附近輸出的電壓值就不會改IR5探測器的集成模塊的電路原理圖如圖2.30所示:圖2.30紅外循跡模塊電路圖根據(jù)電路原理圖,我們對循跡子程序進行設計,循跡子程序流程圖如圖2.31所是否圖2.31循跡子程序流程圖輸出為1。因此我們采用中斷的方式進行循跡,因為采用的是4路循跡,所以我們需要4個管腳與其一一對應,對應關系如下表:表2-3管腳與紅外探測器位置對應關系表管腳名稱紅外探測器位置左最左右最右文2.1.4節(jié)中已經(jīng)講過,我們在這里就不做介紹。2、編寫中斷服務函數(shù)我們在中斷初始化之后,就需要寫中斷服務函數(shù)啦,我們就以PE1為例,當PE1的值發(fā)生變化時,我們就進入中斷服務函數(shù),在中斷服務函數(shù)中判斷紅外探測器是否在黑帶上方,如果在,此時我們需要使小車向左轉(zhuǎn),如果不在黑帶上方,小車就繼續(xù)前進。其中斷服務函數(shù)代碼如下:#defineKEY3GPIO_ReadlnputDataBit(GEXTI_ClearlTPendingBit(EXTI_Line1);}//清除LINE2上的中斷標志位上文提到了各個模塊的電路設計及其程序設計,本章就根據(jù)各個模塊的電路設計進行相應的編程。我們使用keil3軟件進行程序仿真,然后使用mcuscip軟件把我們得到的目標文件燒到處理器中,即程序下載。RVMDK源自德國的KEIL公司,是RealViewMDK的簡稱。支持ARM7,ARM9,和最新的Cortrx-M3核處理器,自動配置啟動代碼,具有強大的軟件仿真功能,而且具有啟動代碼小,性能高的優(yōu)點,軟件keil3的操作主界面如圖3.1所示:g圖3.1Keil主界面在程序仿真中,我們只能觀察PC7腳位的電平變化,來判斷是否滿足超聲波的發(fā)射條件,而對于超聲波發(fā)射到接受的高電平持續(xù)時間t,我們在程序仿真中是無法觀測到的。因此我們只能通過對硬件進行測試,來完成對整個產(chǎn)品設計的考核。PC7的軟件仿真結果如下圖所示:圖3.2PC7腳電平仿真圖串口下載軟件使用mcuisp,該軟件屬于第三方軟件,由單片機在線編程網(wǎng)提供,該軟件啟動界面如圖3.2所示:非非mcuispV0.993--單片機在線編程專家--非非mcuispV0.993--單片機在線編程專家--DTR電平變高(+3-+12V)釋放復位RIS維持高開始連接…2,接收到:79在串口COH3連接成功8230400bps,耗時250毫秒芯片內(nèi)BootLoader版本號:2.2芯片PID:00000414芯片F(xiàn)LASH容量為512KB芯片己不包含此信息)96位的芯片唯一序列號:讀出的選項字節(jié):全片擦除成功第328毫秒,己準備好共寫入9KE,進度1004,耗時3172毫秒成功從0B000000開始運行W向您報告,命令執(zhí)行完畢,一切正?校驗?編程后執(zhí)行本節(jié)就是對硬件進行測試,驗證本次方案是否成圖4.1智能小車實物圖圖4.3智能小車避障圖此方案逐步完成了電路原理圖的設計以及軟件程序stm32微處理器為核心,添加其他外圍電路為輔助,并且加載必要的程序設計,最后我們對軟件、硬件進行測試,對于軟件測試,我們使用keil軟件進行程序仿真,而對于硬件測試,我們使用mcuisp硬件調(diào)試工具進行程序下載,驗證了間。假設小車的轉(zhuǎn)彎時間為T,小車的轉(zhuǎn)彎時的速度為V,我們要保證小車轉(zhuǎn)彎減小轉(zhuǎn)彎時間T小車的轉(zhuǎn)彎時間T與小車的轉(zhuǎn)彎靈敏度成反比。在保證小車速度適當?shù)氖牵涸谲囕喗撬俣纫欢ǖ那闆r下,車輪直徑越大,有公式V=線速度就越大,那么在單位時間內(nèi)有,小車的行駛距離就會變大。所以,反車輪直徑越小,靈敏度就越高。在本次試驗中我們采用的車輪直徑稍大,從而導致小車轉(zhuǎn)彎的靈敏度大大下降。因此,我們可以通過減少小車車輪的直徑大小來解決此問題。增加轉(zhuǎn)彎額定值S在本次試驗中,循跡探頭距小車的車輪距離太近,導致小車的額定值S過小,進而導致小車在循跡工作時誤差較大。解決此問題,我們可以拉大車輪與循跡探頭的距離。上文提到的兩種方法,又受到所采購的器件的物理尺寸的影響。在本次試驗中,器件的物理尺寸限制了小車轉(zhuǎn)彎靈敏度的最大值,所以本實驗的循跡模塊不是很理想,但是只要我們采用上述的兩種方法,一定可以提高循跡模塊的執(zhí)行效率??偟膩碚f,設計方案是完善的,基本上達到了設計所要求的目標。自己繼續(xù)努力,爭取使自己的人生對社會產(chǎn)生些許積極的價值!參考文獻[1]杜春雷.ARM體系結構與編程[M].北京:清華大學出版社,2003-02-01[2]姚文詳,宋巖.ARMCortex-M3權威指南[M].北京:北京航空航天大學出版[3]范書瑞.Cortex-M3嵌入式處理器原理與應用[M].北京:電子工業(yè)出版社,[4]李寧.基于MDK的STM32處理器開發(fā)應用[M].北京:北京航空航天大學出版社,2008:1-260.[5]劉軍,張洋.原子教你玩STM32[M].北京:北京航空航天大學出版社,[6]彭剛,秦志強.基于ARMCortex-M3的STM32系列[M].北京:電[8]周柱,孟文,田環(huán)宇.基于stm32智能小車設計[J].技術與市場,2011-06,[9]李亞巨,樊東.基于stm32f103zet6的智能小車的制作[J].電子制作,[10]趙志昊.智能小車的制作[J].科技傳播,2011-11,(21):202-203[11]李婕.基于STM32的智能小車的制無線視頻監(jiān)控智能小車設計[D].蘭州:蘭州理工大學出版社,2014-4:1-56附錄{RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5,ENABRCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//使能GPIOA時鐘GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;//PAO清除之前設置GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD;//PA0輸入//初始化定時器5TIM5TIM_TimeBaseStructure.TIM_Period=arr;//設定計數(shù)器自動重裝值TIM_TimeBaseStructure.TIM_Prescaler=psc;//預分頻器TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;//設置時鐘分割:TDTS=TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;//TIM向上計數(shù)模式TIM_TimeBaselnit(TIM5,&TIM_TimeBaseStructure);//根據(jù)TIM_TimeBaselni的參數(shù)初始化TIMx的時間基數(shù)單位//初始化TIM5輸入捕獲參數(shù)TIM5_ICIlnitStructure.TIM_Ch到Tl1上TIM5_IClnitStructure.TIM_ICPolarity=TIM_ICPolarity_Rising;//上升TIM5_IClnitStructure.TIM_ICTIM5_IClnitStructure.TIM_ICFilter=0×00;//IC1F=0000配置輸入濾波器不濾波//中斷分組初始化NVIC_InitStructure.NVIC_IRQChannel=TIM5_IRQn;//TIM5中斷NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1;//先占優(yōu)先級2級NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;//從優(yōu)先級0級NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;//IRQ通道被使能NVIC_Init(&NVIC_InitStructure);//根據(jù)NVIC_InitStruct中指定的參數(shù)初始化外設NVIC寄存器—42—TIM_ITConfig(TIM5,TIM_IT_Update|TIM_IT_CC1,ENABLE);//允許更新中斷,允許CC11E捕獲中斷TIM_Cmd(TIM5,ENABLE);//使能定時器5}{使能復用功能時鐘//GPIOD.2中斷線以及中斷初始化配置下降沿觸發(fā)EXTI_InitStructure.EXTI_Line=EXTI_Line1;//左1EXTI_InitStructure.EXTI_ModeEXTI_InitStructure.EXTI_Line=EXTI_Line2;//最左EXTI_InitStructure.EXTI_ModeEXTI_Init(&EXTI_InitStructure);//根據(jù)EXTI_InitStruct中指定的參數(shù)初始化外設//GPIOD.3中斷線以及中斷初始化配置下降沿觸發(fā)//右EXTI_Init(&EXTI_InitStructure);//根據(jù)EXTI_InitStruct中指定的參數(shù)初始化外設//GPIOD.4中斷線以及中斷初始化配置下降沿觸發(fā)//最右EXTI_Init(&EXTI_InitStructure);//根據(jù)EXTI_InitStruct中指定的參數(shù)初始化外設NVIC_InitStructure.NVIC_IRQChannel=EXTI1_IRQn;//使能左1所在的外部中斷通道NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x00;//搶占優(yōu)先級2,NVIC_InitStructure.NVIC_IRQChannelSubPriority=Ox06;//子優(yōu)先級3NVIC_InitStructure.NVIC_IRQChannelCmd=ENAB使能外部中斷通道NVIC_InitStructure.NVIC_IRQChannel=EXTI2_IRQn;//使能最左所在的外部中斷通道NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x00;//搶占優(yōu)先級2,NVIC_InitStructure.NVIC_IRQChannelSubPriority=Ox04;//子優(yōu)先級2NVIC_InitStructure.NVIC_IRQChannelCmd=ENAB使能外部中斷通道NVIC_InitStructure.NVIC_IRQChannel=EXTI3_IRQn;//使能右1所在的外部中斷通道NVIC_InitStructure.NVIC_IRQChannelPre

溫馨提示

  • 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論