版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
--#-2。1。4stm32中斷介紹本方案中,我們要使用stm32的中斷,在程序設(shè)計中,我們要開啟各個管道的中斷,打開各個中斷通道,配置中斷方式,我們先來講述下stm32單片機(jī)的中斷機(jī)制。結(jié)構(gòu)圖如下所示:PCLKI—*炸iftH塊誤門JuJu十怡圖2.32stm32外部中斷/事件控制器結(jié)構(gòu)圖圖中的實線箭頭,為外部中斷信號的傳輸路徑。首先外部信號從編號為1的輸入線進(jìn)入。其次這個外部信號通過編號2的邊沿檢測電路,這個邊沿檢測電路受到“上升沿選擇寄存器〃、“下降沿選擇寄存器”的控制,我們可以控制這兩個寄存器來選擇中斷的觸發(fā)方式。我們可以在程序中進(jìn)行設(shè)置,比如EXTI_InitStrueture。EXTI_Trigger=EXTI_Trigger_Rising;設(shè)置為上升沿觸發(fā)中斷然后該外部信號進(jìn)入編號為3或門,或門另一端是軟件中斷寄存器,如果,軟件中斷/事件寄存器的對應(yīng)位置1,編號3的輸出總是為有效信號1。之后進(jìn)入“中斷掛起請求寄存器”,該寄存器記錄了外部信號的電平變化.最后經(jīng)過編號為4的與門進(jìn)入NVIC中斷控制器,如果“中斷屏蔽寄存器”的對應(yīng)位置0,外部的中斷請求信號不能傳輸?shù)絅VIC中斷控制器,從而實現(xiàn)中斷的屏蔽。由于我們采用的是外部信號觸發(fā)中斷,所以我們只需了解外部中斷的請求機(jī)制,對于事件的中斷請求機(jī)制,我們在這里不做介紹.我們以PE1為例,介紹下外部中斷的一般步驟。步驟如下:開啟I/O的復(fù)用時鐘RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPI0E|RCC_APB2Periph_AFI0,ENABLE);
>初始化I/O為輸入GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;GPIO_InitStructure。GPIO_Mode=GPIO_Mode_IPU;GPIO_Init(GPIOE,&GPIO_InitStructure);>初始化線上中斷,設(shè)置觸發(fā)條件GPIO_EXTILineConfig(GPIO_PortSourceGPIOE,GPIO_PinSource1);EXTI_InitStructure。EXTI_Line=EXTI_Line1;EXTI_InitStructure。EXTI_Mode=EXTI_Mode_Interrupt;EXTI_InitStructure。EXTI_Trigger=EXTI_Trigger_Rising_Falling;EXTI_InitStructure。EXTI_LineCmd=ENABLE;EXTI_Init(&EXTI_InitStructure);>配置中斷分組NVIC,并使能中斷NVIC_InitStructure.NVIC_IRQChannel=EXTI1_IRQn;NVIC_InitStructure。NVIC_IRQChannelPreemptionPriority=0x00;NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x06;NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;NVIC_Init(&NVIC_InitStructure);>編寫中斷服務(wù)函數(shù)voidEXTI1_IRQHandler(void){}主要代碼詳見附錄2.2。1。5stm32定時/計數(shù)器介紹Stm32系列的單片機(jī)一般包含8個計數(shù)/定時器,TIM1、TIM8分別為高級控制定時器,TIM2~TIM5為通用定時器,TIM6以及TIM7為基本定時器。對于定時器的詳細(xì)內(nèi)容,我們不在這里一一介紹。然后我們介紹一下本實驗采用了那些定時器,以及這些定時器所要完成的功能有哪些。本實驗所采用的定時器以及功能如下表所示:表2-2定時器介紹表定時器名稱定時器配置模式主要功能TIM2定時器中斷模式通過定時器中斷,控制超
聲波的掃描周期TIM3PWM復(fù)用輸出模式控制小車速度及舵機(jī)轉(zhuǎn)向TIM5輸入捕獲模式米集超聲波發(fā)射到接受的高電平持續(xù)時間t2.1。6主程序設(shè)計流程圖在本節(jié)實驗中,循跡模塊以及避障模塊都是采用中斷方式進(jìn)行工作的,因此其主程序流程圖如下圖所示:開始r系統(tǒng)初始化f1、八\rr.前進(jìn)圖1o2主程序流程圖根據(jù)程序設(shè)計圖,主程序設(shè)計如下:intmain(void){u8TIM5CH1_CAPTURE_STA=0;//輸入捕獲狀態(tài)u16TIM5CH1_CAPTURE_VAL;//輸入捕獲值delay_init();//延時函數(shù)初始化NVIC_Configuration();//設(shè)置NVIC中斷分組2:2位搶占優(yōu)先級,2位響應(yīng)優(yōu)先級LED_Init();GPIO_Configuration();//端口初始化EXTIX_Init();//掃描軌跡TIM2_Int_lnit(4999,7199);//控制超聲波掃描周期TIM3_PWM_Init(1999,719);//控制舵機(jī)方向TIM5_Cap_lnit(OXFFFF,72—1);//以1Mhz的頻率計數(shù)while(1)
{farward_Low();delay_ms(10);}}——2。2電機(jī)驅(qū)動模塊Stm32對小車的控制,就是對電機(jī)的控制,通過控制電機(jī)的轉(zhuǎn)向,小車的運(yùn)動狀態(tài)就會發(fā)生改變。電機(jī)驅(qū)動模塊的主要器件為LM293N,我們下面就詳細(xì)講解下電機(jī)驅(qū)動模塊.2。2。1驅(qū)動模塊結(jié)構(gòu)及其原理電機(jī)驅(qū)動模塊的實物圖如圖2.8所示:圖2。8驅(qū)動電路實物圖電機(jī)驅(qū)動模塊的主要器件是芯片LM293D,內(nèi)部原理圖如圖2.9所示:全橋式驅(qū)動電路的4只開關(guān)管都工作在斬波狀態(tài),如圖1。2所示,K1、K2為一組,K3、K4為另一組,兩組的狀態(tài)互補(bǔ),一組導(dǎo)通則另一組必定關(guān)斷。當(dāng)K1、K2導(dǎo)通時,K3、K4關(guān)斷,電機(jī)兩端加正向電壓,電機(jī)實現(xiàn)正轉(zhuǎn)或反轉(zhuǎn)制動;當(dāng)K3、K4導(dǎo)通時,K1、K2關(guān)斷,電機(jī)兩端為反向電壓,電機(jī)實現(xiàn)反轉(zhuǎn)或正轉(zhuǎn)制動。
2。2.2驅(qū)動模塊電路設(shè)計電機(jī)驅(qū)動模塊的電路原理如圖2。10所示:圖2。10驅(qū)動模塊電路原理圖表2—2是各個端口狀態(tài)與運(yùn)動方向的關(guān)系,其關(guān)系如下表所示:表2—2端口與運(yùn)動方向關(guān)系表電機(jī)M1IN1IN2電機(jī)M2IN3IN4停止00停止00正轉(zhuǎn)10正轉(zhuǎn)10反轉(zhuǎn)01反轉(zhuǎn)01—11—112.2。3驅(qū)動軟件程序設(shè)計車輪電機(jī)的動作由GPIO口的輸出實現(xiàn),本節(jié)主要配置運(yùn)動方向和運(yùn)動速度,對于運(yùn)動速度的控制,我們必須使用PWM,通過改變PWM的占空比來調(diào)節(jié)速度的大小,其主要代碼設(shè)計如下所示:voidTIM3_PWM_Init(u16arr,u16psc){….}要想使stm32的通用定時器TIMx產(chǎn)生PWM輸出,需要用到的寄存器有:預(yù)分頻寄存器(TIMx_PSC)、自動重裝載寄存器(TIMx_ARR)、捕獲/比較模式寄存器(TIMx_CCMR1/2)、捕獲/比較使能寄存器(TIMx_CCER)、捕獲/比較寄存器(TIMx_CCR1?4)。我們先介紹這幾個寄存器,然后介紹如何使用庫函數(shù)產(chǎn)生PWM輸出.下面我們就簡單介紹下這些寄存器:首先是預(yù)分頻寄存器(TIMx_PSC),該寄存器可以用設(shè)置對時鐘進(jìn)行分頻,然后在提供給計數(shù)器作為計數(shù)器的時鐘。該寄存器的各位功能如圖所示:
圖2.11TIMx_PSC圖2.11TIMx_PSC寄存器各位描述接下來介紹自動重裝載寄存器(TIMx_ARR),該寄存器的各位描述如下圖所示:W工M工JE:g:!::10ARR[15:0]審mwh%it'兀邛r;r;n理瑞rrr;ARR[15:(q:H亙^^(Frescalervalue)詳讎?yán)?31迅告三帽時〕更翻亦E?蘭殞醴黠妙空匚計鵝不二巴圖2.12TIMx_ARR寄存器各位描述通過設(shè)置這兩個寄存器,我們就可以算出PWM的輸出周期,計算公式為:Tout二((arr+1)大(psc+1))/Tclk。其中Tclk為系統(tǒng)時鐘周期。其次我們介紹捕獲/比較模式寄存器(TIMx_CCMR1/2),總共有兩個,TIMx_CCMR1和TIMx_CCMR2,TIMx_CCMR1控制通道CH1和CH2,TIMx_CCMR2控制CH3和CH4。因為這2個寄存器差不多,我們僅以通道CH1為例,介紹其中的TIMx_CCMR1為例,該寄存器的各位描述如下圖所示:近1?1211:Ct_654i-210CC2:CC2:E0C:M[2:0:OCZPEX2FEQC2S[1:D.IC2F[3:O]IC2PSC[l:0:J二匚0dM:2:匚CC1?EjClFECllS:L:C0:X1?SC:1:D]圖2。13TIMx_CCMR1/2寄存器各位描述這里我們只介紹該寄存器的OCxM位,我們就以TIMx_CCMR1中的0C1M(控制通道CH1)為例,該位功能如下圖所示:
廊4OC1M[2:OJ:鈾出(OutputCcffiDane1mode)注J空定-乳了輸已茜老■■言弓DC1REF為龍毘:TyoC1REF^7tTOC1-.OC1N比值.OC1REF見左■屯T有蝕』PCJC仁O01Nd7-H^屯7T農(nóng)丈CC1300:輸±i土農(nóng)奇扌翠TlM尺1A計數(shù).器TlMNTlTdI尤姿:<OC1REF不起作.壬;301:□正尸臣堂:直建1沖有效宅芻L貢泰TlhbCCNT西偃旦罐茯廠C皈苗存器1(TIMX_CCR1老亙說強(qiáng)^iOC1REF^^.310:題正F代邏垃道1為無翹宅CNT戎運(yùn)占罐茯J丈安哥存齬1(TIMxCOR1拒專片,強(qiáng)4iC-C1REF^yF.311=翻轉(zhuǎn)一TlRdx_COR--TlRdx_CNTF7.引轉(zhuǎn)OC1REF?^f?zp.100:強(qiáng)豈為工執(zhí)屯三.i^^QCIR匚廠為匹.1U1:強(qiáng)制刃有致電丄.強(qiáng)110:PWM李弍1—在向上計或尸,一旦TlMzCNT<TIMzCCRirjSill^W?=平,召』于無垃電三;衽宜弓:-一強(qiáng)對,-3.TIMXCNT>WxCORlFdeigl^x^電m:OC1REF=%否則為有藪電平[OC1REF=1),111-PWMiS式:?一斗氏卜計憊疔,-BTlMx_CNT<TIMx_CC;R1iEf1=平.百有戰(zhàn)毛口:左尙下計教盯,-0TIMz_C:NT>TIMz_r;CR1有爼芝3至冃為壬址走平”;s1.一丘LUCK簸里設(shè)為HTIMx_EDTR盤住磊b吭LUCK空]戸且CU1£-00,:$適道主登.或適出}則謹(jǐn)世不肖蹴整改.:£2:在FWM醴式1立FWM偵式丄二:只2當(dāng)比輕品呆戰(zhàn)變丁或吐瞪出比世模朮二.億琢結(jié)生式境螢蘭」HWM宴弍:TOGIHbb毛二才蟲叟.圖2.14OC1M功能描述我們使用的是PWM輸出模式,所以0C1M必須設(shè)置為110/111.0C2M(控制通道CH2)各位描述與OC1M相同,我們這要不在敘述.然后我們介紹捕獲/比較使能寄存器(TIMx_CCER),該寄存器控制著各個輸入/輸出通道的開關(guān),對于該寄存器,各位描述如下圖所示:圖2。15TIMx_CCER寄存器描述該寄存器比較簡單,因為我們只介紹通道1,所以我們只講CC1E位。如果我們想使能輸入/捕獲1,我們只需使用CC1E位。要想使PWM從I/O口輸出,此位必須設(shè)置為1。最后介紹捕獲/比較寄存器(TIMx_CCR1?4),總共有4個,分別對應(yīng)CH1~4,因為這4個寄存器相似,我們僅以TIMx_CCR1為例,該寄存器的給位介紹如下圖所示:15Id1312111&yS7BCCE1[1d:D;rwnrnrnrnriviv:2ttivnrr?rwrvrwr?CCR1[15:0]毘擁Ef較玖這1兇直〔U*Lure/CEipae1value)若C"量H砒為■出:cn中m.二tl二f=H?/比茂1戛謀敗迫1耳刁飯弐”如云才1W:CL:“K1吁存融CKJ1l3k中京強(qiáng)饕弋竦議二-船,U.J:■並乍二二削告護(hù)仝二hZT特掘中.擊匚三右當(dāng)更部討+*.二乩.:低菸1S咗才礎(chǔ)至里貳站曲比皚1奇理雅〒-=蓊拎列卞杏彈場番乂匡十釵気II彌」:h"比戡護(hù)曰Qi出匚咅主強(qiáng)岀宿一-CCR1也皆丁由上一戰(zhàn)輸柚金1弓井膽1儲時計瑩總-t.圖2.16TIMx_CCR1寄存器各位描述
在輸出模式下,該寄存器的值與CNT中的值進(jìn)行比較,根據(jù)結(jié)果,實現(xiàn)電平的翻轉(zhuǎn)。至此,我們把用到的幾個寄存器都介紹完畢,下面我們就介紹如何通過庫函數(shù)來配置實現(xiàn)PWM三路輸出。開啟TIM3時鐘以及復(fù)用功能輸出。使能GPIO和端口復(fù)用功能時鐘。庫函數(shù)使能TIM3、GPIO以及復(fù)用功能時鐘的方法是:RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOAIRCC_APB2Periph_AFIOENABLE);初始化TIM3,設(shè)置TIM3的PSC和ARR.在開啟了TIM3的時鐘之后,我們要設(shè)置PSC和ARR寄存器的值來控制PWM的輸出周期。調(diào)用的格式如下:TIM_TimeBaseStructure.TIM_Period二arr;TIM_TimeBaseStructure。TIM_Prescaler=psc;TIM_TimeBaseStructure。TIM_ClockDivision=0;TIM_TimeBaseStructure。TIM_CounterMode二TIM_CounterMode_Up;TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);設(shè)置TIM3_CH1、CH2、CH3的PWM模式,使能TIM3的CH1、CH2、CH3輸出.在庫函數(shù)中PWM通道設(shè)置是通過TIM_OC1Init?TIM_OC4Init來設(shè)置的,這里我們需要3路PWM輸出,所以我們需要使用函數(shù)TIM_OC1Init、TIM_OC2Init、TIM_OC3Init。庫函數(shù)的調(diào)用格式如下:TIM_OCInitStructure.TIM_OCMode二TIM_OCMode_PWM1;TIM_OCInitStructure.TIM_OutputState二TIM_OutputState_Enable;TIM_OCInitStructure.TIM_Pulse=0;TIM_OCInitStructure。TIM_OCPolarity=TIM_OCPolarity_High;TIM_OC2Init(TIM3,&TIM_OCInitStructure);TIM_OC1Init(TIM3,&TIM_OCInitStructure);TIM_OC3Init(TIM3,&TIM_OCInitStructure);>使能TIM3。完成以上配置后,我們要使能定時器TIM3。庫函數(shù)調(diào)用格式如下:TIM_Cmd(TIM3,ENABLE);>通過修改TIM3_CCRx(x為1,2,3)來控制占空比?庫函數(shù)格式如下:VoidTIM_SetComparex(TIM3,uint16_tCompare2);
我們可以知道,通過定時器3控制PWM波的占空比,從而實現(xiàn)速度方面的控制。其中arr和psc可以控制PWM波的周期,TIM3_CCRx可以控制PWM波的占空比。我們只需要調(diào)用此函數(shù)就可以實現(xiàn)不同的速度控制.對于運(yùn)動方向控制的代碼我們就以后退為例,由于端口寄存器過于簡單,我們不在此介紹端口的寄存器。我們僅介紹如何通過庫函數(shù)進(jìn)行端口配置?對各個I/O端口配置的過程相似,我們僅以PD8為例:主要過程如下所示:>使能I/O口時鐘,調(diào)用格式如下所示:RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPI0D|RCC_APB2Periph_GPI0C,ENABLE);>初始化I/O參數(shù),調(diào)用格式如下所示:GPIO_InitStructure.GPIO_Pin=GPIO_Pin_8;GPIO_InitStructure。GPIO_Mode二GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_5OMHz;GPIO_Init(GPIOD,&GPIO_InitStructure);>操作I/O口GPIO_SetBits(GPIOD,GPIO_Pin_8);PD8置1GPIO_ResetBits(GPIOD,GPIO_Pin_8);PD8置0我們知道了如何對端口進(jìn)行操作之后就可以隨意的控制小車的運(yùn)動啦,運(yùn)動方向的程序設(shè)計,其基本函數(shù)單元如下所示:voidLeft_Low(void);…我們調(diào)用這些函數(shù),就可以實現(xiàn)不同運(yùn)動方向的控制。主要代碼詳見附錄3.2。3避障模塊設(shè)計在人類身體構(gòu)造系統(tǒng)中,眼睛可以使我們非常方便的采集到外界環(huán)境的信息,然后把信息及時的傳輸?shù)酱竽X,并對外界環(huán)境信息的變化做出相應(yīng)的處理?而對智能小車來說,避障模塊之于小車就相當(dāng)于眼睛之于人類。避障模塊可以采集外部地形數(shù)據(jù),然后把所采集的地形數(shù)據(jù)傳輸?shù)街醒胩幚砟K,從而實現(xiàn)躲避障礙的功能。避障模塊所采用的器件在市場中有許多類型,比如紅外檢測,光位移檢測,超聲波檢測等。本次試驗我們使用的是HC—SR04超聲波檢測,超聲波由于具有檢測能力強(qiáng),傳播路徑寬,因此我們決定使用HC—SR04器件。
在使用HC—SR04模塊進(jìn)行超聲波測距的同時,我們可以使用舵機(jī)進(jìn)行輔助.舵機(jī)的主要作用是改變HC-SR04模塊的照射方向,從而控制超聲波的發(fā)射方向。在程序編寫過程中,如果小車前方遇見障礙時,我們可以直接控制舵機(jī)的轉(zhuǎn)向,而小車的車身可以保持不變,在測量結(jié)束后,小車再做相應(yīng)的動作。2。3.1避障模塊器件結(jié)構(gòu)及其原理HC-SR04超聲波測距模塊測量范圍在2cm-400cm之間,可以實現(xiàn)無接觸式測距功能.HC—SR04超聲波測距模塊由一個超聲波發(fā)射器、一個超聲波接收器和控制電路組成,避障模塊的實物結(jié)構(gòu)圖如圖2017所示:9?m-IAMiMA9?m-IAMiMA圖2。17實物正反面結(jié)構(gòu)圖如結(jié)構(gòu)圖所示VCC提供5v電源,GND為接地線,TRIG為觸發(fā)信號線,ECHO為回向信號輸出線?;驹砣缦拢翰捎?0口TRIG觸發(fā)測距,給至少10us的高電平信號,在TRIG觸發(fā)沿到來后,超聲波發(fā)射器會自動發(fā)出8個40KHz的方波,并且檢測是否有信號返回,當(dāng)超聲波接收器接收到超聲波時,表明有信號返回,通過IO口ECHO輸出一高電平,高電平持續(xù)的時間就是超聲波從發(fā)射到返回的時間。因此測量距離=(高電平持續(xù)時間*340m/s)/2。測量時序圖如圖2。18所示:lOuSTTL融京怡號出g卜斗QKHe蹴沖1Hrinrlnr賊麗發(fā)am號荷出h響回響電平輪出潔號與檢測距咼咸此例圖2。18超聲波時序圖我們根據(jù)時序圖,可以編寫相應(yīng)的程序代碼.為了防止發(fā)射信號對回向信號的影響,我們的測量周期不易過小。并且由于HC-SRO4的感應(yīng)角度不大于15°,所以測距時,為了防止發(fā)射信號丟失,我們要求被測物體的面積不應(yīng)小于0。5平方米,否則可能導(dǎo)致測量結(jié)果不準(zhǔn)確。舵機(jī)在避障模塊的主要作用前面已經(jīng)提到,本節(jié)主要講解舵機(jī)的工作特性。舵機(jī)的實物圖如圖2。19所示:圖2。19舵機(jī)實物圖舵機(jī)的工作工作原理是stm32微處理器發(fā)出數(shù)據(jù)給舵機(jī),舵機(jī)內(nèi)部有一個基準(zhǔn)電路,它會產(chǎn)生周期為20ms,寬度為1。5ms的基準(zhǔn)信號,它將微處理器傳輸?shù)闹绷髌秒妷号c電位器的電壓數(shù)據(jù)進(jìn)行比較,獲得電壓差輸出。經(jīng)由電路板上的IC判斷轉(zhuǎn)動方向,再驅(qū)動無核心馬達(dá)開始轉(zhuǎn)動,透過減速齒輪將動力傳至擺臂,同時由位置檢測器送回反饋信號。舵機(jī)的轉(zhuǎn)動角度與stm32所提供的PWM信號相關(guān)?標(biāo)準(zhǔn)信號PWM周期為20ms,理論上來講脈寬為1?2ms,實際我們的脈寬為0.5?2.5ms,脈寬與所轉(zhuǎn)的角度對應(yīng)。角度與脈寬的對應(yīng)圖如圖2。20所示:
4aasgreeS1350微抄4aasgreeS1350微抄圖2。20舵機(jī)角度與脈寬對應(yīng)圖2.3.2HC—SR04模塊硬件電路設(shè)計超聲波模塊硬件原理圖如下圖所示:圖2。21超聲波硬件原理圖HC—SR04模塊主要由發(fā)射器、接收器和部分電路組成。在此試驗中,我們只需簡單了解電路的設(shè)計,對于其基本原理可以不用過多涉獵,我們只需明白它們的工作原理,并且能夠簡單運(yùn)用即可。2。3。3HC—SR04模塊程序設(shè)計根據(jù)硬件電路的設(shè)計,我們對避障子程序進(jìn)行設(shè)計,程序流程圖如圖2。22所示:
避障子程序結(jié)束圖2.22避障程序流程圖避障模塊在程序設(shè)計中,我們的工作主要是:1、控制超聲波的掃描周期2、采集超聲波發(fā)射到接受的高電平持續(xù)時間t3、對采集的高電平持續(xù)時間t進(jìn)行處理,判斷前方是否有障礙下面我們就詳細(xì)介紹我們是怎么通過軟件設(shè)計來完成這幾個步驟的:1、控制超聲波的掃描周期根據(jù)表2—2,我們采用的是TIM2來控制超聲波的掃描周期。首先我們把TIM2設(shè)置為定時器中斷模式,代碼格式為voidTIM2_Int_Init(u16arr,u16psc);由于配置定時器中斷模式十分簡單,我們就不在詳細(xì)介紹,其詳細(xì)代碼見附錄4。定時器TIM2的中斷周期計算公式為T二((arr+1)大(psc+1))/Tclk。Tclk為系統(tǒng)周期,一般為72Mh乙我們在中斷服務(wù)程序中控制超聲波的發(fā)射,我們采用PC7作為觸發(fā)信號,根據(jù)超聲波時序圖,我們需要在中斷程序中給PC7一個持續(xù)10ms的高電平,中斷服務(wù)程序如下:
voidTIM2_IRQHandler(void)//TIM2中斷{if(TIM_GetlTStatus(TIM2,TIM_IT_Update)!=RESET){TIM_ClearlTPendingBit(TIM2,TIM_IT_Update))GPIO_SetBits(GPIOC,GPIO_Pin_7);delay_ms(10);GPIO_ResetBits(GPIOC,GPIO_Pin_7);}}2、采集超聲波發(fā)射到接受的持續(xù)時間t在本節(jié)試驗中,我們使用了通用定時器TIM5的輸入捕獲功能,輸入捕獲模式具有測量頻率或者測量脈沖的寬度的功能?我們開啟TIM5通道CH1(定時器5)的輸入捕獲模式,采集ECHO端口的高電平持續(xù)時間。配置定時器5代碼格式為:voidTIM5_Cap_lnit(u16arr,u16psc){???}下面我們就詳細(xì)講解一下,如何開啟并使用通用定時器的輸入捕獲功能。輸入捕獲的原理,簡單的講就是通過檢測TIM5(定時器)通道CH1的邊沿信號,當(dāng)邊沿信號發(fā)生變化時,當(dāng)前寄存器的值TIM1_CNT存放到通道的捕獲/比較寄存器(TIM5_CCR1)里面.我們的實驗就是采集捕獲/比較寄存器(TIM5_CCR1)中的值并進(jìn)行處理,完成相應(yīng)的動作。為了使TIM5通道CH1具有捕獲功能,我們需要用到TIM5_PSC、TIM5_ARR、捕獲/比較模式寄存器(TIM5_CCMR1)、捕獲/比較使能寄存器(TIM5_CCER)、捕獲/比較寄存器(TIM5_CCR1)、DMA/中斷使能寄存器仃IM5_DIER)、控制寄存器(TIM5_CR1))我們下面就簡單介紹下下這幾個寄存器。TIM5_PSC、TIM5_ARR、TIM5_CCR1這3個寄存器用法與前節(jié)中相同,我們就不在贅述,而在本實驗中,捕獲/比較寄存器TIM5_CCMR1非常重要,該寄存器的各位描述如下圖所示:
15】:1312111C9&76£rI?3C2:0]K2FEXIC=KLiEWIFEOClSCLst]Kipsc:n&jrWTTT?TTTVTVITIT?JTPTBTTVIT!TVKTTZWTV£17:4iciFfioj:(Enpulrapture1niierjATTi1.羔宇;^哎界蟲一卉$付斤總舉走威.它記京JJN丁書特底去嚴(yán)主一廠曲已鋼沁com:壬ifiit謝臥怙勰桂iMa:晏桝棲#f^ru仙N~eMfll-^H.limipiinc,^fc>f_urf-N-?I'MIi昱播期3Tfijwpu!?=tt:T7^-N=fiMIO:索博蟲星li*wPUHG=fcK_?T”N-i1013;長播疫畫^=50011;采悴餵呂isAiiPuwi現(xiàn)兀wr,N-&^Oll;赳書01DD:采怦睪殂1沖汕曲氓禍,H=t1100;斤柿J!挹13耳禍=£宙苗,*1=0Oltll:棗tl華立1屮"吟日曠⑷,N=B1TOV慕植i?3iT屮jzi盧M矩.M=5Q1K):郭樣歴華STors/4,N=6111Gi卻莊莊仏皿痕=環(huán)"32,峙=60111:采徉妙宰N=BH11:采榕餵圭f卿和"盧乞ts/32,4=3IC1PSC.[1:C|:(iniMJLcaptureiprescaler)S2tt&J-TCC1IfcAOCI-且CGIEWtWi.GCE尺窯樣澤中卜fJ^?-S5ttSe.no-足理分捋梵址kzr上$崗鱉旳顯一牛弍沿乖檢雯一?丈肴圭.DI:10:辛止嚇事住也S:—占持匪;11;08傘喜匸竄雯一董蕭?^fcl.OCC15[1:?1:iCapiui^COTipare1Selecttin)逗2世定史畫通勞方敷韻出h應(yīng)鎗入jEBt唸羥-30;01:CM通道釀呃置沽締兀I?眾貯衽上10:icm^ei?2h-11:cciaattt£?sb*rA#芒trc上.此溝氏玄工帝生冉體苦l(xiāng)ui理人it逵半時■(宙TIMX.3MG尺晉磐廿的寸3土之洋“注:cci號収臣這誼關(guān)均pt(nfetw_ceER<?aj?jcci匡=0)才是可尊的-圖2.23TIMx_CCMR1各位描述我們使用的是TIM5捕獲/比較通道CH1,所以圖中只介紹[7:0]位?本次試驗我們設(shè)置CC1S[1:0]=01,IC1PSC[1:0]=00,IC1F[3:0]=0000。接著我們再來看看捕獲/比較使能寄存器TIMx_CCER,本節(jié)用到了CC1E和CC1P兩位,描述如下圖所示:也1CC1P:iGapfcjreCoflvare1彈欣1旳抑刃匚Clflitt配■為鞘扭:0:0C福電*紀(jì)5;仁06底燮平CC1通道配置為愉入:侵空近年豊吧1遲是忙1空豆整泡號牛為經(jīng)興31理曳它號.不展桶:再?i發(fā)為奮1口前上瑋&:號耳對豈尅時心懷更埸”1:反墀:的下盹蘭閏咋腫狂蟲境器時,1£1氐琲.S:-亙Lg腹創(chuàng)(TI恤BGT麗臺壘審凱OCK豈設(shè)犧5迄或誼堂不楚更諜叢.1ZDCC1E:虱■■攻嵌1萌出逮脫(CapturefComparsiouiput的北唧“創(chuàng)鍛配■為輸出;0主閔一0心榮止鋪出.因笑0C1的盔出電平密粧于MOE.OSSI.OSSR,0IS1.QISTN和CC1NE住的垃”1r7f.?-0C1借勺潼di訓(xùn)対垂的港壬刖霽.龍諭匕電M氓社于MOE、OSSLOSSR,OS1.01加卿OC1NE世的值.CC1iaififfiWWA=該社決定了計左蕃£宦是醬能燧熱\FIWx_CCR1番存器.0:±;ft靈菽宦能.圖2.24TIMx_CCER最低兩位描述
所以要使能通道CH1輸入捕獲,CC1E必須設(shè)置為1,而CC1P則可以根據(jù)實際情況設(shè)置.其次,我們再看看DMA/中斷使能寄存器(TIM5_DIER),因為我們使用的是通道CH1,所以我們僅介紹控制通道CH1的位,如下圖所示:15U1312111098■占5132107:E<CDE□EB1ETIECOKIECC4I-0C3IECOIECC1IElijEr?nrrs1"rrr?FFrrrrTiFIVrrnrCC1IE:卅棧飆t軟l申尸{Caplwre/Connpafe1interruptenable)o:聘止?比釧申記1:磐対割迪伸趴圖2。25TIMx_DIER各位描述通過此圖我們知道,我們需要設(shè)置CC1IE為1即可。然后,我們再看看控制寄存器TIMx_CR1,我們只用到了最低位,所以我們僅介紹位0的功能,TIMx_CR1寄存器各位描述及位0功能描述如下如所示:15U131211H937654S210C0L1JO:OEM血班ROFKDUSITISasrjrrrrrarrsT7CENr(Centerwable)0:凳止錢鈦1:豈審歌件食置tcen也樂片等訴篩.r:證獸武ft讒為裁轉(zhuǎn)畫才曉工卑?筆供弟氏可陳窘熾圖2。26TIMx_CR1寄存器各位描述及位0功能描述我們要使能計數(shù)器,所以位0設(shè)置為1。至此,我們所使用的寄存器一一介紹完畢,下面介紹怎么配置輸入/捕獲步驟:開啟TIM5時鐘以及GPIOA時鐘。RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPI0A,ENABLE);初始化TIM5,設(shè)置TIM5的psc和arr.TIM_TimeBaseStrueture。TIM_Period二arr;TIM_TimeBaseStrueture.TIM_Prescaler=psc;TIM_TimeBaseStrueture.TIM_ClockDivision二TIM_CKD_DIV1;
TIM_TimeBaseStrueture。TIM_CounterMode二TIM_CounterMode_Up;TIM_TimeBaselnit(TIM5,&TIM_TimeBaseStrueture);設(shè)置TIM5的輸入比較參數(shù),開啟捕獲模式。TIM5_ICInitStrueture。TIM_Channel二TIM_Channel_1;TIM5_ICInitStrueture.TIM_ICPolarity二TIM_ICPolarity_Rising;TIM5_ICInitStrueture.TIM_ICSeleetion二TIM_ICSeleetion_DireetTI;TIM5_ICInitStrueture。TIM_ICPresealer二TIM_ICPSC_DIV1;TIM5_ICInitStrueture。TIM_ICFilter二0x00;//IC1F=0000TIM_ICInit(TIM5,&TIM5_ICInitStrueture);設(shè)置TIM5的DIER寄存器,使能捕獲和更新中斷功能。TIM_ITConfig(TIM5,TIM_IT_Update|TIM_IT_CC1,ENABLE);設(shè)置中斷分組并編寫中斷服務(wù)函數(shù)NVIC_lnitStrueture.NVIC_IRQChanne丨二TIM5_IRQn;NVIC_lnitStrueture。NVIC_IRQChannelPreemptionPriority=1;NVIC_InitStrueture。NVIC_IRQChannelSubPriority二0;NVIC_InitStrueture。NVIC_IRQChannelCmd二ENABLE;NVIC_Init(&NVIC_lnitStrueture);>使能定時器TIM_Cmd(TIM5,ENABLE);我們知道了如何設(shè)置TIM5的CH1為輸入捕獲模式,我們是在TIM5的中斷服務(wù)函數(shù)中采集持續(xù)時間t的,TIM5CH1_CAPTURE_STA為輸入捕獲狀態(tài),TIM5CH1_CAPTURE_VAL為輸入捕獲值,中斷服務(wù)函數(shù)如下所示:if((TIM5CH1_CAPTURE_STA&0X80)=0)//還未成功捕獲{if(TIM_GetITStatus(TIM5,TIM_IT_Update)!二RESET){if(TIM5CH1_CAPTURE_STA&0X40)//已經(jīng)捕獲到高電平了{(lán)if((TIM5CH1_CAPTURE_STA&0X3F)==0X3F)//高電平太長了{(lán)TIM5CH1_CAPTURE_STAU0X80;//標(biāo)記成功捕獲了一次TIMSCHLCAPTURE—VALPXFFFF;}elseTIM5CH1_CAPTURE_STA++;}}if(TIM_GetITStatus(TIM5,TIM_IT_CC1)!=RESET)//捕獲1發(fā)生捕獲
事件{if(TIM5CH1_CAPTURE_STA&0X40)//捕獲到一個下降沿{TIM5CH1_CAPTURE_STA|=0X80;//標(biāo)記成功捕獲到一次上升沿TIM5CH1_CAPTURE_VAL二TIM_GetCapturel(TIM5);TIM_0C1PolarityConfig(TIM5,TIM_ICPolarity_Rising);//CC1P=0設(shè)置為上升沿捕獲}else//還未開始,第一次捕獲上升沿{TIM5CH1_CAPTURE_STA=0;//清空TIM5CH1_CAPTURE_VAL=0;TIM_SetCounter(TIM5,0);TIM5CH1_CAPTURE_STA|=0X40;//標(biāo)記捕獲到了上升沿TIM_0C1PolarityConfig(TIM5,TIM_ICPolarity_Falling);//CC1P=1設(shè)置為下降沿捕獲}}}3、對采集的時間t進(jìn)行處理,判斷前方是否有障礙我們對采集時間t的處理也是在TIM5的中斷服務(wù)函數(shù)中的,我們根據(jù)因測量距離二(高電平持續(xù)時間t大340m/s)/2,得出只要高電平持續(xù)時間t<1500us,距離就小于25cm,就會判定前方有障礙,其詳細(xì)代碼如下:if(TIM5CH1_CAPTURE_STA&0X80)//成功捕獲到了一次上升沿{temp=TIM5CH1_CAPTURE_STA&0X3F;temp大=65536;//溢出時間總和temp+=TIM5CH1_CAPTURE_VAL;//得到總的高電平時間TIM_Cmd(TIM2,DISABLE);if(temp〈1500){stopward();t++;flag++;if(t==1){Midstate二temp;TIM_SetCompare2(TIM3,60);//舵機(jī)右轉(zhuǎn)}
if(t==2){Leftstate二temp;TIM_SetCompare2(TIM3,250);//舵機(jī)左轉(zhuǎn)}if(t==3){t=0;Rightstate二temp;TIM_SetCompare2(TIM3,150);rotate_Left();}}else{if(flag==0){farward_Low();}if(flag==1){turn_Left();}if(flag==2){turn_Right();}if(flag>=3){flag=0;rotate_Left();}TIM_SetCompare2(TIM3,150);t=0;flag=0;}TIM_Cmd(TIM2,ENABLE);TIM5CH1_CAPTURE_STA=0;//開啟下一次捕獲}}2.4循跡模塊設(shè)計這節(jié)要完成的任務(wù)是使小車沿著黑帶運(yùn)動。要想使小車沿著黑帶運(yùn)動,必須使小車感應(yīng)到黑跡在什么地方,然后讓小車的中央處理單元驅(qū)動硬件電路完成相應(yīng)的行為動作。循跡模塊的設(shè)計就是使小車能準(zhǔn)確的識別黑帶的軌跡。小車的中央處理模塊從循跡模塊獲得數(shù)據(jù),然后中央處理模塊根據(jù)采集的數(shù)據(jù)驅(qū)動電機(jī)模塊完成相應(yīng)的動作??紤]到成本和操作,本實驗使用的紅外探測器。2.4。1循跡模塊結(jié)構(gòu)及其原理紅外探測器(IR)是由紅外發(fā)射管、紅外接收管和部分電路組成。要做到4路循跡,需要使用4個獨立的紅外探測器器件.我們使用的IR5是一個集成模塊,這個集成模塊由5個紅外探測器組成.其中中間的1個IR探測器在本實驗中并未使用。紅外循跡模塊實物圖如圖2。27所示:模塊正面|*■+—■■?■?QQ;.21—*w?:QQ
圖2.27紅外模塊正反面本實驗使用的IR5集成模塊是由5個相同的IR探測器電路組成的,所以我們只需要了解一個IR探測器的工作原理即可。我們知道IR探測器是由紅外發(fā)射管、紅外接收管和部分電路組成。基本原理是紅外發(fā)射管發(fā)射紅外光經(jīng)地面反射,在黑色區(qū)域紅外光被吸收,在非黑色區(qū)域紅外光被反射,紅外接收管根據(jù)反射光的強(qiáng)度為比較器提供模擬量,從而輸出相應(yīng)的電平量?其單個IR探測器電路原理圖如圖2。28所示:圖2。28IR探測器電路原理圖根據(jù)原理圖詳解下IR探測器的工作原理:VCC為模塊提供電源,是IR探測器工作的前提條件,紅外發(fā)射管DF2發(fā)射紅外光到達(dá)“地面”經(jīng)反射后紅外光會到達(dá)DS2紅外接收管,由于不同顏色的地面會對光的吸收有著不同的效果,所以發(fā)射后的光的強(qiáng)度也會不同,反射強(qiáng)度不同丄M339的5腳會輸入一個變化的電壓量,LM339是一個電壓較器,當(dāng)LM339的“+"端輸入信號大于“一"端的比較信號后,LM339的輸出端截止,在外部的上拉電源的作用下,使IR探測器的輸出端輸出+5v的電壓。同理,在“+”端電壓小于“一"端電壓時,LM339輸出端電壓飽和使IR探測器輸出為低電壓。因此可以通過調(diào)節(jié)R2的電阻值,改變比較電壓的大小即“-"端電壓的大小,從而控制探測的距離.R4是整個正反饋電路的重要組成部分,由于“+”輸入端電壓會經(jīng)常發(fā)生在比較電壓附近擾動的現(xiàn)象,這些微小的擾動都會造成輸出端的巨大變化,因此,我們采用正反饋的方式避免這種現(xiàn)象的發(fā)生。加入R4電阻,就成為人們所說的“施密特觸發(fā)器”,其特性圖如圖2.29
所示:MioUoM*T圖2。29施密特觸發(fā)器特性圖當(dāng)輸入端的電壓發(fā)生轉(zhuǎn)化時,只要在比較電壓值附近的干擾不超過du之值,輸出的電壓就不會改變。R4正反饋的引入,不僅提高了電路的處理速度,而且可以免除由于寄生電路耦合而產(chǎn)生的自己震蕩。但是,在提升電路的處理速度的同時,帶來的缺點就是分辨率降低,因為只要在du附近輸出的電壓值就不會改變。2。4。2循跡模塊電路設(shè)計IR5探測器的集成模塊的電路原理圖如圖2。30所示:rM圖2。30紅外循跡模塊電路圖2.4.3紅外循跡模塊程序設(shè)計根據(jù)電路原理圖,我們對循跡子程序進(jìn)行設(shè)計,循跡子程序流程圖如圖2。31所示:
開始系統(tǒng)初始化r前進(jìn)r否檢測是否出界是丄循跡子程序結(jié)束圖2.31循跡子程序流程圖我們在循跡程序設(shè)計中,主要工作為:1、配置管腳與紅外探測器的對應(yīng)關(guān)系當(dāng)紅外探測器模塊在黑帶上方時,輸出為0.當(dāng)紅外探測器模塊在白色上方時,輸出為1。因此我們采用中斷的方式進(jìn)行循跡,因為采用的是4路循跡,所以我們需要4個管腳與其一一對應(yīng),對應(yīng)關(guān)系如下表:表2—3管腳與紅外探測器位置對應(yīng)關(guān)系表管腳名稱紅外探測器位置PE1左PE2最左PE3右PE4最右在配置好管腳與紅外位置關(guān)系之后,我們就需要進(jìn)行中斷初始化,中斷程序上文2.1。4節(jié)中已經(jīng)講過,我們在這里就不做介紹。2、編寫中斷服務(wù)函數(shù)我們在中斷初始化之后,就需要寫中斷服務(wù)函數(shù)啦,我們就以PE1為例,當(dāng)
PE1的值發(fā)生變化時,我們就進(jìn)入中斷服務(wù)函數(shù),在中斷服務(wù)函數(shù)中判斷紅外探測器是否在黑帶上方,如果在,此時我們需要使小車向左轉(zhuǎn),如果不在黑帶上方,小車就繼續(xù)前進(jìn)。其中斷服務(wù)函數(shù)代碼如下:#defineKEY3GPIO_ReadlnputDataBit(GPIOE,GPIO_Pin_1)voidEXTI1_IRQHandler(void){if(KEY3==0){Right_Low();}EXTI_ClearITPendingBit(EXTI_Line1);}//清除LINE2上的中斷標(biāo)志位軟件調(diào)試上文提到了各個模塊的電路設(shè)計及其程序設(shè)計,本章就根據(jù)各個模塊的電路設(shè)計進(jìn)行相應(yīng)的編程?我們使用keil3軟件進(jìn)行程序仿真,然后使用mcuscip軟件把我們得到的目標(biāo)文件燒到處理器中,即程序下載。3。1程序仿真RVMDK源自德國的KEIL公司,是RealViewMDK的簡稱。支持ARM7,ARM9,和最新的Cortrx—M3核處理器,自動配置啟動代碼,具有強(qiáng)大的軟件仿真功能,而且具有啟動代碼小,性能高的優(yōu)點,軟件keil3的操作主界面如圖3.1所示:由生聲雖24*程4吉r*wi泌它二H耳£戸日■沖H-為■0吒X*ft2圖3.1Keil王界面在程序仿真中,我們只能觀察PC7腳位的電平變化,來判斷是否滿足超聲波的發(fā)射條件,而對于超聲波發(fā)射到接受的高電平持續(xù)時間t,我們在程序仿真中是無法觀測到的。因此我們只能通過對硬件進(jìn)行測試,來完成對整個產(chǎn)品設(shè)計的考核。PC7的軟件仿真結(jié)果如下圖所示:|MinlintfteFiritZxm|Cbde石已bpMiu'M*:Setic.|Emol.|hllflijM|!||9vhAlbIUlidoIOsrl-;I■iJ.[一一一一一一一一一一一ilod!:00xi圖3。2PC7腳電平仿真圖
3。2程序下載串口下載軟件使用mcuisp,該軟件屬于第三方軟件,由單片機(jī)在線編程網(wǎng)提供,該軟件啟動界面如圖3。2所示:3t^M瑪囪劭lEinguagc昭.時Pol砂*皿晶口龍旳Sr團(tuán)壓門隹卻個鈿切■I『'.■!!■<:t.r:\.-1■.±.--甘r如舊.tec...&1P-Mn..■■■n扌讖砂行nflfap-j*pixttftnsK-吊國匕片*口濟(jì)卿iffITIP!哥足頤主云!E5H4P!-FTrr-用戶或井沖-77圖3。2mcuisp啟動界面我們使用mcuisp軟件進(jìn)行程序下載,程序下載圖如下所示:mcuiipVDJ992--更h^lAj至虜!fl程?!鼍?-wiww-mcuisp-com
SRbZlUnguag?砂=期PndiCOMSb凹25獻(xiàn)D■wwwrrKuriF.r*刼丈些民£怎謹(jǐn)iW陽『朗MTTO1的曲文和山tt'KJ珂川匚呵應(yīng)戶站...I刁慣龍灼己裝文井手撲乃用舊亜ES列I手撲乃用舊亜ES列I即殛砂4I-PC2K..I5P讀昌#他恵麹醉茁片G0薩出羽讀伸護(hù)U-訓(xùn)護(hù)HFFI.F用Qtt妙LTPFI選如F區(qū);匚!■和1■貝AiHBlW曲麗車書BTR電平犬甚|4h+!L2V:!I&旦盤:乜*RT5ISW5開wmu>:3廷長蛋功■也柏Obpii.起時筈心耳*:芯片內(nèi)BGGUCwriJEHHS:車曙:2.Z占片:Hl:0DIXXIU4芯KrFLASH咅■巧畀2KE芯片匕平包音if患?2E怪5若障孚列號,afiFFina3QZ5D5l]ClCC42^^a養(yǎng)d菊堆廈寧卞IA£EJLfB5fiETD0FP<lflFFtiCiFiyiCIETtiDFF<ICI士檸邸■磬底功J*i2=?^r=卍?務(wù)好在弓人wrigrtaafcP舁時勺m牙吁慮曲.2.Q匕IWDMM開姑云衍WWW.BCUiHp.CjOfi囪您齊■占?矗些找?充?!觥觥缯龍D3。3mcuisp程序下載圖系統(tǒng)測試在程序調(diào)試中,我們知道PC7的電平變化已經(jīng)滿足了超聲波的發(fā)射條件,我們本節(jié)就是對硬件進(jìn)行測試,驗證本次方案是否成功。小車實物圖如下所示圖4.1智能小車實物圖當(dāng)小車前方遇到障礙時,小車舵機(jī)左轉(zhuǎn),觀測左側(cè)是否有障礙物,測試圖如下:圖4。2智能小車檢測障礙圖小車檢測到前方有障礙時,舵機(jī)左轉(zhuǎn),檢測小車左方是否有障礙,如果無,則小車左轉(zhuǎn),測試圖如下圖所示:圖4。3智能小車避障圖循跡模塊采用的是中斷的方式工作的,stm32微處理器通過采集紅外探測器的
數(shù)據(jù),對電機(jī)發(fā)出不同的命令,下圖為智能小車在循跡過程中所拍攝的畫面:5?總結(jié)本文根據(jù)畢業(yè)設(shè)計開題報告書所布置的任務(wù),制定了詳細(xì)的設(shè)計方案,并按照此方案逐步完成了電路原理圖的設(shè)計以及軟件程序的設(shè)計。本文的重點是基于stm32微處理器為核心,添加其他外圍電路為輔助,并且加載必要的程序設(shè)計,使小車智能化行動。整個智能小車系統(tǒng)以stm32微處理器為核心,外圍電路包括避障電路、循跡電路、電機(jī)驅(qū)動電路等,這些外圍電路通過stm32微處理器結(jié)合起來,使得各個模塊在保證工作準(zhǔn)確性的同時,提高了小車的智能化。論文首先分析了研究智能小車的研究意義,對于此次研究的必要性進(jìn)行了可行性分析。然后分析了國內(nèi)外的研究概況,最后再此基礎(chǔ)上提出了設(shè)計思路與程序流程,對于設(shè)計思路進(jìn)行了可行性的分析?接著分別介紹了各個模塊的硬件設(shè)計方案以及軟件設(shè)計方案。在硬件設(shè)計方案中包括對各個硬件電路所采用的器件進(jìn)行分析和對硬件電路的設(shè)計分析,從而決定器件的使用方案,以及硬件電路圖的設(shè)計?而在軟件設(shè)計方案中,我們只分析軟流程件設(shè)計,以確定對應(yīng)的程序編碼。最后我們對軟件、硬件進(jìn)行測試,對于軟件測試,我們使用keil軟件進(jìn)行程序仿真,而對于硬件測試,我們使用mcuisp硬件調(diào)試工具進(jìn)行程序下載,驗證了系統(tǒng)的穩(wěn)定性和實用性。在本方案中,由于受到所采購的硬件模塊尺寸的影響,循跡模塊在進(jìn)行工作的時候,受到外部影響的因素很大。在本次試驗設(shè)計中,由于循跡探頭的安裝距離小車車輪很近,當(dāng)循跡探頭采集數(shù)據(jù)傳輸?shù)紺PU時,小車已經(jīng)向前行駛了一段時間?假設(shè)小車的轉(zhuǎn)彎時間為T,小車的轉(zhuǎn)彎時的速度為V,我們要保證小車轉(zhuǎn)彎的路程不超過額定值S,那么就有公式VT<=S.要解決此問題,有兩種方案可供選擇。減小轉(zhuǎn)彎時間T小車的轉(zhuǎn)彎時間T與小車的轉(zhuǎn)彎靈敏度成反比?在保證小車速度適當(dāng)?shù)那闆r下,我們只有減少小車的轉(zhuǎn)彎時間來完成相應(yīng)的行為動作,即提高小車的轉(zhuǎn)彎靈敏度?小車的轉(zhuǎn)彎靈敏度與小車的車輪直徑有關(guān),具體來講就是:在車輪角速度一定的情況下,車輪直徑越大,有公式V=sR,車輪的線速度就越大,那么在單位時間內(nèi)有,小車的行駛距離就會變大。所以,小車的車輪直徑與轉(zhuǎn)彎靈敏度成反比,車輪直徑越大,靈敏度就越小,相反車輪直徑越小,靈敏度就越高。在本次試驗中我們采用的車輪直徑稍大,從而
導(dǎo)致小車轉(zhuǎn)彎的靈敏度大大下降。因此,我們可以通過減少小車車輪的直徑大小來解決此問題。增加轉(zhuǎn)彎額定值S在本次試驗中,循跡探頭距小車的車輪距離太近,導(dǎo)致小車的額定值S過小,進(jìn)而導(dǎo)致小車在循跡工作時誤差較大。解決此問題,我們可以拉大車輪與循跡探頭的距離。上文提到的兩種方法,又受到所采購的器件的物理尺寸的影響。在本次試驗中,器件的物理尺寸限制了小車轉(zhuǎn)彎靈敏度的最大值,所以本實驗的循跡模塊不是很理想,但是只要我們采用上述的兩種方法,一定可以提高循跡模塊的執(zhí)行效率?總的來說,設(shè)計方案是完善的,基本上達(dá)到了設(shè)計所要求的目標(biāo)。致謝
一個學(xué)期的學(xué)習(xí)和鍛煉,使我的畢業(yè)論文設(shè)計基本完成。在這期間,我在所學(xué)的基礎(chǔ)知識之上,去接觸stm32,在接觸之初,我不斷的遇到問題,而我也知道不經(jīng)一番寒徹骨,哪的梅香撲鼻來的道理,最終我克服了種種困難,不僅使自己的知識更加牢固,而且也鍛煉了自己的心性。當(dāng)然以上所有成績的取得都離不開老師和同學(xué)的幫助?我首先要感謝的是我的母校,它為我提供了一個良好的學(xué)習(xí)環(huán)境,非常感謝學(xué)院領(lǐng)導(dǎo)對我們畢業(yè)設(shè)計相關(guān)工作精心合理的安排。當(dāng)然,我的指導(dǎo)老師張健,我非常感謝他在我畢業(yè)設(shè)計的整個過程中始終予以的熱情指導(dǎo)和督促,對我提出的疑惑耐心地指點,他的指點是我克服困難、完成設(shè)計的重要因素,對我一個月的實習(xí)也產(chǎn)生了鼓勵和支持的作用。同時我還要感謝湯飛同學(xué)、柳曉峰同學(xué)的真誠指點,以及其他各位老師和同學(xué)的不吝指教,使我度過了緊張而又充實的三個月。畢業(yè)設(shè)計的這三個月,我不僅收獲了知識、能力,也深刻的體會到了師情和友情的珍貴,這段時光將成為我人生中少有的美好回憶,路漫漫其修遠(yuǎn)兮,吾將上下而求索,我會以此激勵自己繼續(xù)努力,爭取使自己的人生對社會產(chǎn)生些許積極的價值!參考文獻(xiàn)
[1]杜春雷。ARM體系結(jié)構(gòu)與編程[M]。北京:清華大學(xué)出版社,2003—02—01[2]姚文詳,宋巖。ARMCortex-M3權(quán)威指南[M]?北京:北京航空航天大學(xué)出版社,2009—07[3]范書瑞.Cortex—M3嵌入式處理器原理與應(yīng)用[M]。北京:電子工業(yè)出版社,2011-01—01[4]李寧。基于MDK的STM32處理器開發(fā)應(yīng)用[M]。北京:北京航空航天大學(xué)出版社,2008:1—260。[5]劉軍,張洋。原子教你玩STM32[M]?北京:北京航空航天大學(xué)出版社,2013—05-01[6]彭剛,秦志強(qiáng)?基于ARMCortex—M3的STM32系列[M]。北京:電子工業(yè)出版社,2011-01[7]張自強(qiáng),晏英俊?;趕tm32的步進(jìn)電機(jī)轉(zhuǎn)速控制實驗設(shè)計[J]。實驗室科學(xué),2010-12,13(6):59-61[8]周柱,孟文,田環(huán)宇。基于stm32智能小車設(shè)計[J]。技術(shù)與市場,2011-06,18(6):1-2[9]李亞巨,樊東。基于stm32f103zet6的智能小車的制作[J]。電子制作,2013—11,(19):52-53[10]趙志昊?智能小車的制作[J]?科技傳播,2011-11,(21):202—203[11]李婕。基于STM32的智能小車的制無線視頻監(jiān)控智能小車設(shè)計[D]。蘭州:蘭州理工大學(xué)出版社,2014-4:1-56附錄附錄1voidTIM5_Cap_lnit(u16arr,u16psc){GPI0_lnitTypeDefGPI0_lnitStructure;TIM_TimeBaselnitTypeDefTIM_TimeBaseStrueture;NVIC_lnitTypeDefNVIC_lnitStructure;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5,ENABLE);//使能TIM5時鐘RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPI0A,ENABLE);//使能GPIOA時鐘GPIO_InitStructure。GPIO_Pin二GPI0_Pin_0;//PA0清除之前設(shè)置GPIO_InitStructure.GPIO_Mode二GPIO_Mode_IPD;//PA0輸入GPIO_Init(GPIOA,&GPIO_InitStructure);GPIO_ResetBits(GPI0A,GPI0_Pin_0);//PA0下拉//初始化定時器5TIM5TIM_TimeBaseStrueture。TIM_Period二arr;//設(shè)定計數(shù)器自動重裝值TIM_TimeBaseStrueture。TIM_Prescaler=psc;//預(yù)分頻器TIM_TimeBaseStrueture。TIM_ClockDivision二TIM_CKD_DIV1;//設(shè)置時鐘分割:TDTS二Tck_timTIM_TimeBaseStrueture。TIM_CounterMode二TIM_CounterMode_Up;//TIM向上計數(shù)模式TIM_TimeBaseInit(TIM5,&TIM_TimeBaseStrueture);//根據(jù)TIM_TimeBaseInitStruct中指定的參數(shù)初始化TIMx的時間基數(shù)單位//初始化TIM5輸入捕獲參數(shù)TIM5_ICInitStructure。TIM_Channel二TIM_Channel_1;//CC1S=01選擇輸入端IC1映射到TI1上TIM5_ICInitStructure.TIM_ICPolarity二TIM_ICPolarity_Rising;//上升沿捕獲TIM5_ICInitStructure。TIM_ICSelection二TIM_ICSelection_DirectTI;//映射到TI1上TIM5_ICInitStructure.TIM_ICPrescaler二TIM_ICPSC_DIV1;//配置輸入分頻,不分頻TIM5_ICInitStructure。TIM_ICFilter二0乂00;//1曲二0000配置輸入濾波器不濾波TIM_ICInit(TIM5,&TIM5_ICInitStructure);//中斷分組初始化NVIC_InitStructure。NVIC_IRQChannel二TIM5_IRQn;//TIM5中斷NVIC_InitStructure。NVIC_IRQChannelPreemptionPriority二1;//先占優(yōu)先級2
NVIC_lnitStrueture.NVIC_IRQChannelSubPriority二0;//從優(yōu)先級0級NVIC_lnitStructure.NVIC_IRQChannelCmd二ENABLE;//IRQ通道被使能NVIC_Init(&NVIC_lnitStrueture);//根據(jù)NVIC_lnitStruet中指定的參數(shù)初始化外設(shè)NVIC寄存器TIM_ITConfig(TIM5,TIM_IT_Update|TIM_IT_CC1,ENABLE);//允許更新中斷,允許CC1IE捕獲中斷TIM_Cmd(TIM5,ENABLE);//使能定時器5}附錄2voidEXTIX_lnit(void){EXTI_InitTypeDefEXTI_InitStrueture;NVIC_InitTypeDefNVIC_InitStrueture;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPI0E|RCC_APB2Periph_AFI0,ENABLE);//使能復(fù)用功能時鐘//GPIODo2中斷線以及中斷初始化配置下降沿觸發(fā)GPIO_EXTILineConfig(GPIO_PortSourceGPlOE,GPIO_PinSouree1);EXTI_InitStrueture。EXTI_Line=EXTI_Line1;//左1EXTI_InitStrueture。EXTI_Mode二EXTI_Mode_lnterrupt;EXTI_InitStrueture.EXTI_Trigger二EXTI_Trigger_Rising_Falling;EXTI_InitStrueture。EXTI_LineCmd二ENABLE;EXTI_Init(&EXTI_InitStrueture);GPIO_EXTILineConfig(GPIO_PortSourceGPI0E,GPI0_PinSource2);EXTI_InitStrueture。EXTI_Line=EXTI_Line2;//最左EXTI_InitStrueture。EXTI_Mode二EXTI_Mode_lnterrupt;EXTI_InitStrueture.EXTI_Trigger二EXTI_Trigger_Rising_Falling;EXTI_InitStrueture。EXTI_LineCmd二ENABLE;EXTI_Init(&EXTI_InitStrueture);//根據(jù)EXTI_InitStruet中指定的參數(shù)初始化外設(shè)EXTI寄存器//GPIODo3中斷線以及中斷初始化配置下降沿觸發(fā)//右GPIO_EXTILineConfig(GPIO_PortSourceGPI0E,GPI0_PinSource3);EXTI_InitStrueture。EXTI_Line二EXTI_Line3;
EXTI_lnit(&EXTI_lnitStrueture);//根據(jù)EXTI_lnitStruct中指定的參數(shù)初始化外設(shè)EXTI寄存器//GPI0D.4中斷線以及中斷初始化配置下降沿觸發(fā)//最右GPIO_EXTILineConfig(GPIO_PortSourceGPlOE,GPI0_PinSource4);EXTI_InitStructure.EXTI_Line二EXTI_Line4;EXTI_Init(&EXTI_InitStructure);//根據(jù)EXTI_InitStruct中指定的參數(shù)初始化外設(shè)EXTI寄存器NVIC_lnitStructure。NVIC_IRQChannel二EXTI1_IRQn;//使能左1所在的外部中斷通道NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority二0x00;//搶占優(yōu)先級2,NVIC_InitStructure。NVIC_IRQChannelSubPriority二0x06;//子優(yōu)先級3NVIC_InitStructure。NVIC_IRQChannelCmd二ENABLE;//使能外部中斷通道NVIC_Init(&NVIC_lnitStructure);NVIC_InitStructure。NVIC_IRQChannel二EXTI2_IRQn;//使能最左所在的外部中斷通道NVIC_InitStructure。NVIC_IRQChannelPreemptionPriority二0x00;//搶占優(yōu)先級2,NVIC_InitStructure.NVIC_IRQChannelSubPriority二0x04;//子優(yōu)先級2NVIC_InitStructure.NVIC_IRQChannelCmd二ENABLE;//使能外部中斷通道NVIC_Init(&NVIC_lnitStructure);NVIC_InitStructure.NVIC_IRQChannel二EXTI3_IRQn;//使能右1所在的外部中斷通道NVIC_InitStructure。NVIC_IRQChannelPreemptionPriority二0x00;//搶占優(yōu)先級2NVIC_InitStructure。NVIC_IRQChannelSubPriority二0x07;//子優(yōu)先級1NVIC_InitStructure。NVIC_IRQChannelCmd二ENABLE;//使能外部中斷通道NVIC_Init(&NVIC_lnitStructure);//根據(jù)NVIC_lnitStruct中指定的參數(shù)初始化外設(shè)NVIC寄存器NVIC_InitStructure。NVIC_IRQChannel二EXTI4_IRQn;//使能最右所在的外部中斷通道
NVIC_lnitStrueture.NVIC_IRQChannelPreemptionPriority二0x00;//搶占優(yōu)先級2NVIC_InitStructure.NVIC_IRQChannelSubPriority二0x05;//子優(yōu)先級0NVIC_InitStructure。NVIC_IRQCha
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 職場溝通技巧培訓(xùn)課件及實踐案例
- 酒店客戶投訴處理流程及案例分析
- 2025航空服務(wù)等行業(yè)市場前景分析及投資開發(fā)與管理策略研究報告
- 2025航空旅游行業(yè)市場供需現(xiàn)狀及投資評估規(guī)劃分析研究報告
- 2025航空制造行業(yè)市場拓展技術(shù)分析及融資策略研究報告
- 2025航空制造業(yè)市場現(xiàn)狀供需分析及投資前景規(guī)劃評估研究報告
- 2025航空Industry風(fēng)險投資發(fā)展分析及投資融資策略研究報告
- 2025航海裝備制造業(yè)技術(shù)創(chuàng)新方向與極地資源開發(fā)投資前景調(diào)研報告
- 2025航海地球物理勘探領(lǐng)域現(xiàn)狀供需格局投資方向規(guī)劃評估報告
- 水泥穩(wěn)定碎石施工方案試卷教案
- 提高晨間護(hù)理合格率
- 廉潔校園主題班會課件
- 房顫患者非心臟手術(shù)麻醉管理
- 具有履行合同所必須的設(shè)備和專業(yè)技術(shù)能力的聲明函8篇
- 2025年中國高油玉米數(shù)據(jù)監(jiān)測報告
- 洗車設(shè)備管理制度
- GB/Z 15166.8-2025高壓交流熔斷器第8部分:應(yīng)用導(dǎo)則
- DB43T1027-2015 近自然森林可持續(xù)經(jīng)營技術(shù)規(guī)程
- 二零二五年度綠色生態(tài)住宅小區(qū)建設(shè)工程合同協(xié)議
- 2025-2030全球膜處理系統(tǒng)行業(yè)調(diào)研及趨勢分析報告
- 《以平和的心態(tài)迎接期末考試》班會課件
評論
0/150
提交評論