freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于stm32的智能小車設計畢業(yè)設計(已改無錯字)

2022-10-09 15:04:23 本頁面
  

【正文】 算公式為 T=((arr+1)*(psc+1))/Tclk。 Tclk 為系統(tǒng)周期,一般為 ,我們采用 PC7 作為觸發(fā)信號,根據(jù)超聲波時序圖,我們需要在中斷程序中給 PC7 一個持續(xù) 10ms 的高電平,中斷服務程序如下: 基于 stm32 的智能小車設計 26 void TIM2_IRQHandler(void) //TIM2 中斷 { if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET) { TIM_ClearITPendingBit(TIM2, TIM_IT_Update )。 GPIO_SetBits(GPIOC,GPIO_Pin_7)。 delay_ms(10)。 GPIO_ResetBits(GPIOC,GPIO_Pin_7)。 } } 采集超聲波發(fā)射到接受的持續(xù)時間 t 在本節(jié)試驗中,我們使用了通用定時器 TIM5 的輸入捕獲功能,輸入捕獲模式具有測量頻率或者測量脈沖的寬度的功能。我們開啟 TIM5 通道 CH1(定時器 5)的輸入捕獲模式,采集 ECHO 端口的高電平持續(xù)時間。配置定時器 5代碼格式為: void TIM5_Cap_Init(u16 arr,u16 psc){? } 下面我們就詳細講解一下,如何開啟并使用通用定時器的輸入捕獲功能。 輸入捕獲的原理,簡單的講就是通過檢測 TIM5(定時器)通道 CH1 的邊沿信號,當邊沿信號發(fā)生變化時,當前寄存器的值 TIM1_CNT 存放到通道的捕獲 /比較寄存器( TIM5_CCR1)里面。我們的實驗就是采集捕獲 /比較寄存器( TIM5_CCR1)中的值并進行處理,完成相應的動作。為了使 TIM5 通道 CH1 具有捕獲功能,我們需要用 到 TIM5_PSC、 TIM5_ARR、捕獲 /比較模式寄存器( TIM5_CCMR1)、捕獲 /比較使能寄存器 (TIM5_CCER)、捕獲 /比較寄存器( TIM5_CCR1)、 DMA/中斷使能寄存器( TIM5_DIER)、控制寄存器 (TIM5_CR1)。我們下面就簡單介紹下下這幾個寄存器。 TIM5_PSC、 TIM5_ARR、 TIM5_CCR1 這 3個寄存器用法與前節(jié)中相同,我們就不在贅述,而在本實驗中,捕獲 /比較寄存器 TIM5_CCMR1 非常重要,該寄存器的各位描述如下圖所示: 基于 stm32 的智能小車設計 27 圖 TIMx_CCMR1 各位描述 我們使用的是 TIM5 捕獲 /比較通道 CH1,所以圖中只介紹 [7:0]位。本次試驗我們設置 CC1S[1:0]=01, IC1PSC[1: 0]=00, IC1F[3: 0]=0000。 接著我們再來看看捕獲 /比較使能寄存器 TIMx_CCER,本節(jié)用到了 CC1E 和 CC1P兩位,描述如下圖所示: 圖 TIMx_CCER 最低兩位描述 基于 stm32 的智能小車設計 28 所以要使能通道 CH1輸入捕獲, CC1E 必須設置為 1,而 CC1P 則可以根據(jù)實際情況設置。 其次,我們再看看 DMA/中斷使能寄存器( TIM5_DIER),因為我們使用的是通道 CH1,所以我們僅介紹控制通道 CH1 的位,如下圖所示: 圖 TIMx_DIER 各位描述 通過此圖我們知道,我們需要設置 CC1IE 為 1 即可。 然后,我們再看看控制寄存器 TIMx_CR1,我們只用到了最低位,所以我們僅介紹位 0 的功能, TIMx_CR1 寄存器各位描述及位 0 功能描述如下如所示: 圖 TIMx_CR1 寄存器各位描述及位 0 功能描述 我們要使能計數(shù)器,所以位 0 設置為 1。至此,我們所使用的寄存器一一介紹完畢,下面介紹怎么配置輸入 /捕獲步驟: ? 開啟 TIM5 時鐘以及 GPIOA 時鐘。 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE)。 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE)。 ? 初始化 TIM5,設置 TIM5 的 psc 和 arr。 = arr。 =psc。 =TIM_CKD_DIV1?;?stm32 的智能小車設計 29 = TIM_CounterMode_Up。 TIM_TimeBaseInit(TIM5, amp。TIM_TimeBaseStructure)。 ? 設置 TIM5 的輸入比較參數(shù),開啟捕獲模式。 =TIM_Channel_1。 =TIM_ICPolarity_Rising。 = TIM_ICSelection_DirectTI。 = TIM_ICPSC_DIV1。 = 0x00。//IC1F=0000 TIM_ICInit(TIM5, amp。TIM5_ICInitStructure)。 ? 設置 TIM5 的 DIER 寄存器,使能捕獲和更新中斷功能。 TIM_ITConfig(TIM5,TIM_IT_Update|TIM_IT_CC1,ENABLE)。 ? 設置中斷分組并編寫中斷服務函數(shù) =TIM5_IRQn。 =1。 = 0。 = ENABLE。 NVIC_Init(amp。NVIC_InitStructure)。 ? 使能定時器 TIM_Cmd(TIM5,ENABLE )。 我們知道了如何設置 TIM5 的 CH1 為輸入捕獲模式,我們是在 TIM5 的中斷服務函數(shù)中采集持續(xù)時間 t 的, TIM5CH1_CAPTURE_STA 為輸入捕獲狀態(tài),TIM5CH1_CAPTURE_VAL 為輸入捕獲值, 中斷服務函數(shù)如下所示 : if((TIM5CH1_CAPTURE_STAamp。0X80)==0)//還未成功捕獲 { if (TIM_GetITStatus(TIM5, TIM_IT_Update) != RESET) { if(TIM5CH1_CAPTURE_STAamp。0X40)//已經(jīng)捕獲到高電平了 { if((TIM5CH1_CAPTURE_STAamp。0X3F)==0X3F)//高電平太長了 { TIM5CH1_CAPTURE_STA|=0X80。//標記成功捕獲了一次 TIM5CH1_CAPTURE_VAL=0XFFFF。 }else TIM5CH1_CAPTURE_STA++。}} if (TIM_GetITStatus(TIM5, TIM_IT_CC1) != RESET)//捕獲 1 發(fā)生捕獲事件 基于 stm32 的智能小車設計 30 { if(TIM5CH1_CAPTURE_STAamp。0X40) //捕獲到一個下降沿 { TIM5CH1_CAPTURE_STA|=0X80。 //標記成功捕獲到一次上升沿 TIM5CH1_CAPTURE_VAL=TIM_GetCapture1(TIM5)。 TIM_OC1PolarityConfig(TIM5,TIM_ICPolarity_Rising)。 //CC1P=0 設置為上升沿捕獲 }else //還未開始 ,第一次捕獲上升沿 { TIM5CH1_CAPTURE_STA=0。 //清空 TIM5CH1_CAPTURE_VAL=0。 TIM_SetCounter(TIM5,0)。 TIM5CH1_CAPTURE_STA|=0X40。 //標記捕獲到了上升沿 TIM_OC1PolarityConfig(TIM5,TIM_ICPolarity_Falling)。 //CC1P=1 設置為下降沿捕獲 }}} 對采集的時間 t進行處理,判斷前方是否有障礙 我們 對采集時間 t 的處理也是在 TIM5 的中斷服務函數(shù)中的,我們根據(jù) 因測量距離 =(高電平持續(xù)時間 t*340m/s) /2,得出只要高電平持續(xù)時間t1500us,距離就小于 25cm,就會判定前方有障礙,其詳細代碼如下: if(TIM5CH1_CAPTURE_STAamp。0X80)//成功捕獲到了一次上升沿 { temp=TIM5CH1_CAPTURE_STAamp。0X3F。 temp*=65536。//溢出時間總和 temp+=TIM5CH1_CAPTURE_VAL。//得到總的高電平時間 TIM_Cmd(TIM2, DISABLE)。 if(temp1500) { stopward()。t++。flag++。 if(t==1) { Midstate=temp。 TIM_SetCompare2(TIM3,60)。//舵機右轉(zhuǎn) } if(t==2){ Leftstate=temp。 TIM_SetCompare2(TIM3,250)。 //舵機左轉(zhuǎn) } if(t==3) {t=0。 基于 stm32 的智能小車設計 31 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。//開啟下一次捕獲 }} 循跡模塊設計 這節(jié)要完成的任務是使小車沿著黑帶運動。要想使小車沿著黑帶運動,必須使小車感應到黑跡在什么地方,然后讓小車的中央處理單元驅(qū)動硬件電路完成相應的行為動作。循跡模塊 的設計就是使小車能準確的識別黑帶的軌跡。小車的中央處理模塊從循跡模塊獲得數(shù)據(jù),然后中央處理模塊根據(jù)采集的數(shù)據(jù)驅(qū)動電機模塊完成相應的動作??紤]到成本和操作, 本實驗 使用的紅外探測器。 循跡模塊結構及其原理 紅外探測器( IR)是由紅外發(fā)射管、紅外接收管和部分電路組成。要做到 4 路循跡,需要使用 4 個獨立的紅外探測器器件。我們使用的 IR5 是一個集成模塊,這個集成模塊由 5 個紅外探測器組成。其中中間的 1 個 IR 探測器在本實驗中并未使用。紅外循跡模塊實物圖如圖 所示: 圖 紅外模塊正反面 基于 stm32 的智能小車設計 32 本實驗 使用的 IR5 集成模塊是由 5 個相同的 IR 探測器電路組成的,所以我們只需要了解一個 IR 探測器的工作原理即可。我們知道 IR 探測器是由紅外發(fā)射管、紅外接收管和部分電路組成?;驹硎羌t外發(fā)射管發(fā)射紅外光經(jīng)地面反射,在黑色區(qū)域紅外光被吸收,在非黑色區(qū)域紅外光被反射,紅外接收管根據(jù)反射光的強度為比較器提供模擬量,從而輸出相應的電平量。其單個 IR 探測器電路原理圖如圖 所示: 圖 IR 探測器電路原理圖 根據(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ā)器”,其特性圖如圖 所示: 基于 stm32 的智能小車設計 33 圖 施密特觸發(fā)器特性圖 當輸入端的電壓發(fā)生轉(zhuǎn)化時,只要在比較電壓值附近的干擾不超過 du 之值,輸出的電壓就不會改變。 R4 正反饋的引入,不僅提高了電路的處理速度,而且可以免除由于寄生電路耦合而產(chǎn)生的自己震蕩。但是, 在提升電路的處理速度的同時,帶來的缺點就是分辨率降低,因為只要在 du 附近輸出的電壓值就不會改變。 循跡模塊電路設計 IR5 探測器的集成模塊的電路原理圖如圖 所示: 圖 紅外循跡模塊電路圖 紅外循跡模塊程序設計
點擊復制文檔內(nèi)容
環(huán)評公示相關推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1