




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
單片機(jī)控制的遙控避障小車系統(tǒng)軟件設(shè)計(jì)案例目錄TOC\o"1-3"\h\u12324單片機(jī)控制的遙控避障小車系統(tǒng)軟件設(shè)計(jì)案例 1148051.1STM32F103C8T6單片機(jī) 2321221.2避障模塊的設(shè)計(jì) 240471.3藍(lán)牙模塊、紅外模塊的設(shè)計(jì) 56911.4電機(jī)模塊的設(shè)計(jì) 6接收到紅外遙控器的信號(hào)接收到藍(lán)牙信號(hào)否否避障完成進(jìn)行避障是否檢測(cè)到障礙物發(fā)送超聲波執(zhí)行相應(yīng)動(dòng)作進(jìn)行避障是否檢測(cè)到障礙物發(fā)送超聲波執(zhí)行相應(yīng)動(dòng)作等待接受遙控器指令上電首先,可以來通過程序的流程圖了解一下程序的運(yùn)行過程,程序流程圖如下圖所示:接收到紅外遙控器的信號(hào)接收到藍(lán)牙信號(hào)否否避障完成進(jìn)行避障是否檢測(cè)到障礙物發(fā)送超聲波執(zhí)行相應(yīng)動(dòng)作進(jìn)行避障是否檢測(cè)到障礙物發(fā)送超聲波執(zhí)行相應(yīng)動(dòng)作等待接受遙控器指令上電避障完成避障完成圖1.1程序流程圖如流程圖1.1所示,首先按下小車中間的紅色按鈕對(duì)小車進(jìn)行上電操作,小車的紅燈進(jìn)行閃爍,進(jìn)入等待命令的狀態(tài)。當(dāng)收到藍(lán)牙手機(jī)的信號(hào)時(shí),執(zhí)行相對(duì)應(yīng)的動(dòng)作;當(dāng)收到紅外遙控器的信號(hào)時(shí),執(zhí)行相對(duì)應(yīng)的動(dòng)作。紅外遙控和藍(lán)牙遙控的中斷優(yōu)先級(jí)等同,例如你用藍(lán)牙遙控發(fā)出前進(jìn)的指令,小車收到命令后前進(jìn),隨后用紅外遙控器發(fā)出左轉(zhuǎn)的指令,小車收到命令后立即左轉(zhuǎn)。另外,小車在行駛過程中,若正前方遇到障礙物,小車會(huì)立即停下,隨后左轉(zhuǎn)。1.1STM32F103C8T6單片機(jī)本次畢業(yè)設(shè)計(jì)要進(jìn)行所用到的模塊進(jìn)行設(shè)計(jì)的時(shí)候,需要提前去學(xué)習(xí)到stm32的編程思想。無論是什么處理器,stm32的也不例外,都需要讓處理器通過一定的操作,使得其可以實(shí)現(xiàn)一些相應(yīng)的動(dòng)作。在本方案中,stm32的中斷是本設(shè)計(jì)將會(huì)用到的,也是本設(shè)計(jì)開發(fā)時(shí)經(jīng)常遇見的,在程序設(shè)計(jì)里面,中斷的作用是不可或缺的,下面來講述一下stm32的中斷機(jī)制:在中斷發(fā)生的時(shí)候,系統(tǒng)會(huì)保存正在運(yùn)行的狀態(tài),隨后會(huì)去執(zhí)行中斷向量處的程序,在中斷結(jié)束后又會(huì)跳轉(zhuǎn)到之前保存的地方繼續(xù)執(zhí)。開發(fā)人員不能去調(diào)用中斷服務(wù)函數(shù),要通過提前設(shè)置好中斷向量,即是相應(yīng)中斷執(zhí)行的第一個(gè)地址。在中斷發(fā)生之后會(huì)自動(dòng)的執(zhí)行,因此不需要在main中調(diào)用,而是在源代碼中去定義。1.2避障模塊的設(shè)計(jì)在設(shè)計(jì)避障模塊的應(yīng)用程序代碼時(shí),本設(shè)計(jì)主要需要做的一件事情就是去正確控制超聲波掃描的周期,隨后去采集一個(gè)超聲波從前方發(fā)射至接受過程中高電平持續(xù)的時(shí)間t,緊接著就去采集一個(gè)超聲波的高電平持續(xù)時(shí)間t,進(jìn)行一定的分析和處理,借此小車就可以準(zhǔn)確地判斷出前方或后方是否存在障礙物。下面是避障模塊初始化的代碼:voidHcsr04Init(){ TIM_TimeBaseInitTypeDefTIM_TimeBaseStructure;GPIO_InitTypeDefGPIO_InitStructure; NVIC_InitTypeDefNVIC_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_12;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_Init(GPIOB,&GPIO_InitStructure);GPIO_ResetBits(GPIOB,GPIO_Pin_12);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13;//GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOB,&GPIO_InitStructure);//GPIO_ResetBits(GPIOB,GPIO_Pin_6);RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);TIM_DeInit(TIM3);TIM_TimeBaseStructure.TIM_Period=(1000-1);//TIM_TimeBaseStructure.TIM_Prescaler=(72-1);//TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;//TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);TIM_ClearFlag(TIM3,TIM_FLAG_Update);TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE); NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;NVIC_Init(&NVIC_InitStructure);TIM_Cmd(TIM3,DISABLE);}首先把TIM3的定時(shí)器的模式設(shè)置成中斷,代碼為TIM_DeInit(TIM3),通過TIM3來控制超聲波的掃描周期。隨后通過避障模塊1,獲取前方障礙物的距離,代碼如下所示:floatHcsr04GetLength(void){u32t=0;inti=0;floatlengthTemp=0;floatsum=0;while(i!=1){GPIO_SetBits(GPIOB,GPIO_Pin_12);Delay_Us(20);GPIO_ResetBits(GPIOB,GPIO_Pin_12);while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13)==0);OpenTimerForHc();i=i+1;while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_13)==1);CloseTimerForHc();t=GetEchoTimer();lengthTemp=((float)t/58.0);sum=lengthTemp+sum;msHcCount=0; Delay_Ms(100);}lengthTemp=sum/1.0; returnlengthTemp;}獲取到距離之后,通過判斷,當(dāng)距離小于一定的值后,向電機(jī)發(fā)出停止轉(zhuǎn)到的命令,使其停下來,代碼如下所示: if(mov_sta==1||mov_sta==3||mov_sta==4) { aa=Hcsr04GetLength(); if(aa<40) {PC13=0;tz(); ht();dde(300); PA4=0; PA5=1; PA6=1; PA7=0; TIM_SetCompare3(TIM2,21000); TIM_SetCompare4(TIM2,21000); dde(300); PC13=1; qianjin(); }1.3藍(lán)牙模塊、紅外模塊的設(shè)計(jì)該模塊主要是對(duì)小車進(jìn)行控制和發(fā)送命令的模塊。通過對(duì)小車發(fā)送命令,改變電機(jī)的運(yùn)動(dòng)狀態(tài),從而實(shí)現(xiàn)對(duì)小車的遙控。如下是部分控制的代碼:while(1) { switch(ly_da) {case'A':ly_da=0;if(mov_sta!=1){qianjin();mov_sta=1;}break; case'B':ly_da=0;if(mov_sta!=2){ht();mov_sta=2;}break; case'C':ly_da=0;if(mov_sta!=3){zz();mov_sta=3;}break; case'D':ly_da=0;if(mov_sta!=4){yz();mov_sta=4;}break; case'E':ly_da=0;if(mov_sta!=5){tz();mov_sta=5;}break; } switch(tqe[2]) { case0x18: if(mov_sta==2){tz();dde(500);} qianjin();tqe[2]=0;mov_sta=1;break; case0x52:if(mov_sta==1||mov_sta==3||mov_sta==4){tz();dde(500);} ht();tqe[2]=0;mov_sta=2;break; case0x08:if(mov_sta==2){tz();dde(500);} zz();tqe[2]=0;mov_sta=3;break; case0x5a:if(mov_sta==2){tz();dde(500);} yz();tqe[2]=0;mov_sta=4;break; case0x1c: tz();tqe[2]=0;mov_sta=0;break; } }由代碼可見,通過從藍(lán)牙還有紅外遙控器接收到的命令,改變了兩個(gè)電機(jī)的運(yùn)動(dòng)狀態(tài),在兩個(gè)電機(jī)不同轉(zhuǎn)向的搭配下,使得小車按照本設(shè)計(jì)指定的方向前進(jìn)。1.4電機(jī)模塊的設(shè)計(jì)本次畢業(yè)設(shè)計(jì)用的是L298N,這是通過單片機(jī)的I/O輸入,從而調(diào)整芯片控制端的電平,最后便可以使得電機(jī)完成本設(shè)計(jì)想要的運(yùn)動(dòng)狀態(tài),具體關(guān)系如表1.1所示:表1.1引腳邏輯關(guān)系表EIn1In2運(yùn)動(dòng)狀態(tài)0xx停止110正轉(zhuǎn)101反轉(zhuǎn)111剎停100停止首先是使能I/O口時(shí)鐘:RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);然后初始化I/O參數(shù),其中設(shè)置為推挽輸出,I/O口速度為50MHz:GPIO_InitStructure.GPIO_Pin=GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; GPIO_Init(GPIOA,&GPIO_InitStructure); 然后對(duì)I/0口進(jìn)行操作并且定義:#definePA4PAout(4)//PC13 #definePA5PAout(5)//#definePA6PAout(6)#definePA7PAout(7)最后對(duì)各個(gè)方向的運(yùn)動(dòng)進(jìn)行封裝設(shè)計(jì):voidqianjin(){PA4=1; PA5=0; PA6=1; PA7=0; TIM_SetCompare3(TIM2,21500); TIM_SetCompare4(TIM2,20000);}voidht({PA4=0; PA5=1; PA6=0;PA7=1;TIM_SetCompare3(TIM2,21000); TIM_SetCompare4(TIM2,21000);}voidzz(){PA4=1; PA5=0; PA6=1; PA7=0; TIM_SetCompare3(TIM2,16000); TIM_SetCompare4(TIM2,28000);}voidzz1(){PA4=1; PA5=0; PA6=1; PA7=0; TIM_SetCompare3(TIM2,19000); TIM_SetCompare4(TIM2,19000);}voidzz2(){PA4=1; PA5=0; PA6=1; PA7=0; TIM_SetCompare3(TIM2,0);
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025湖南省中南林業(yè)科技大學(xué)第一批招聘21人模擬試卷及答案詳解(歷年真題)
- 2025廣東中山市南頭鎮(zhèn)人民政府招聘合同制人員2人模擬試卷附答案詳解(典型題)
- 2025內(nèi)蒙古某國企招聘模擬試卷完整答案詳解
- 2025年宣城寧國市人民醫(yī)院招聘醫(yī)療衛(wèi)生人才15人模擬試卷及完整答案詳解1套
- 2025寶雞騰軒實(shí)業(yè)有限公司招聘(2人)模擬試卷完整參考答案詳解
- 2025年河北中興冀能實(shí)業(yè)有限公司高校畢業(yè)生招聘(第三批)考前自測(cè)高頻考點(diǎn)模擬試題及答案詳解(新)
- 2025年寧夏醫(yī)科大學(xué)總醫(yī)院自主公開招聘?jìng)浒溉藛T(醫(yī)技藥管)考前自測(cè)高頻考點(diǎn)模擬試題有完整答案詳解
- 2025年寧波余姚市衛(wèi)生健康事業(yè)單位公開招聘衛(wèi)生技術(shù)人員179人考前自測(cè)高頻考點(diǎn)模擬試題有完整答案詳解
- 2025河北承德市消防救援支隊(duì)政府專職消防隊(duì)員招聘73人考前自測(cè)高頻考點(diǎn)模擬試題(含答案詳解)
- 2025年河北省煙草專賣局(公司)招聘141人模擬試卷及答案詳解(易錯(cuò)題)
- 2025年吉安縣公安局面向社會(huì)公開招聘留置看護(hù)男勤務(wù)輔警29人筆試備考試題及答案解析
- 愛吃糖的大獅子
- 手術(shù)操作分類代碼國家臨床版3.0
- 家用藥箱會(huì)整理(課件)人教版勞動(dòng)六年級(jí)上冊(cè)
- 脊髓損傷神經(jīng)學(xué)分類國際標(biāo)準(zhǔn)
- 職稱若干問題回答
- 英國文化入門智慧樹知到答案章節(jié)測(cè)試2023年天津科技大學(xué)
- 獵人海力布課本劇劇本
- GB/T 17748-2016建筑幕墻用鋁塑復(fù)合板
- 《飼料和飼料添加劑管理?xiàng)l例》及配套規(guī)章解讀
- 水泥基自流平超平地面施工工藝課件
評(píng)論
0/150
提交評(píng)論