遙控智能小車(chē)課程設(shè)計(jì)報(bào)告_第1頁(yè)
遙控智能小車(chē)課程設(shè)計(jì)報(bào)告_第2頁(yè)
遙控智能小車(chē)課程設(shè)計(jì)報(bào)告_第3頁(yè)
遙控智能小車(chē)課程設(shè)計(jì)報(bào)告_第4頁(yè)
遙控智能小車(chē)課程設(shè)計(jì)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩15頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

《嵌入式系統(tǒng)原理》課程設(shè)計(jì)闡明書(shū)題目:遙控智能小車(chē)院(系):信息與電氣工程學(xué)院專(zhuān)業(yè)班級(jí):通信二班學(xué)生姓名:周波學(xué)號(hào):指導(dǎo)教師:羅朝輝嵌入式系統(tǒng)原理課程設(shè)計(jì)任務(wù)書(shū)一、設(shè)計(jì)題目遙控智能小車(chē)二、設(shè)計(jì)重要內(nèi)容廣泛查找文獻(xiàn)資料,認(rèn)真研究,重復(fù)論證,精心設(shè)計(jì)技術(shù)方案。較為進(jìn)一步的掌握ARM解決器的體系構(gòu)造、指令系統(tǒng)、編程辦法,初步理解ARM應(yīng)用系統(tǒng)的軟硬件開(kāi)發(fā)辦法及手段,較純熟地掌握ARM解決器幾個(gè)重要的片內(nèi)外設(shè)(定時(shí)器、PLL、I2C、RTC等)的基本原理及編程辦法,初步掌握ARM解決器外圍電路的擴(kuò)展辦法。在現(xiàn)有車(chē)模的基礎(chǔ)上,以嵌入式ARM微解決器構(gòu)成小車(chē)控制核心,同時(shí)加裝聲光電、紅外線、超聲波傳感器、LED顯示等外圍設(shè)備,實(shí)現(xiàn)對(duì)小車(chē)的速度、位置、運(yùn)行狀況的實(shí)時(shí)測(cè)量,并將測(cè)量數(shù)據(jù)傳送至解決器進(jìn)行解決,然后由解決器根據(jù)所檢測(cè)的多個(gè)數(shù)據(jù)實(shí)現(xiàn)對(duì)電動(dòng)車(chē)的智能控制;設(shè)計(jì)的智能小車(chē)應(yīng)當(dāng)能夠?qū)崟r(shí)顯示時(shí)間、速度、里程,含有自動(dòng)尋跡、尋光、避障功效,可程控行駛速度、精擬定位停車(chē)。并有對(duì)應(yīng)的聲光電設(shè)備發(fā)出有關(guān)的提示或警示信息。遙控方式可自選,系統(tǒng)通過(guò)遙控器能夠控制小車(chē)的行駛方向、速度、起停等運(yùn)行狀態(tài),規(guī)定要達(dá)成一定的控制精度、距離及范疇,小車(chē)行駛速度應(yīng)達(dá)成3m/s以上。三、原始資料硬件資源:四驅(qū)小車(chē)車(chē)模、STM32系統(tǒng)板、用于ARM解決器的JTAG仿真器、PC機(jī)Pentium100以上。設(shè)計(jì)指導(dǎo)書(shū):STM32系統(tǒng)板配套光盤(pán)四、規(guī)定的設(shè)計(jì)成果(1)在現(xiàn)有車(chē)模的基礎(chǔ)上,以嵌入式ARM微解決器構(gòu)成小車(chē)控制核心,同時(shí)加裝聲光電、紅外線、超聲波傳感器、LED顯示等外圍設(shè)備,實(shí)現(xiàn)對(duì)小車(chē)的速度、位置、運(yùn)行狀況的實(shí)時(shí)測(cè)量,并將測(cè)量數(shù)據(jù)傳送至解決器進(jìn)行解決,然后由解決器根據(jù)所檢測(cè)的多個(gè)數(shù)據(jù)實(shí)現(xiàn)對(duì)電動(dòng)車(chē)的智能控制。(2)撰寫(xiě)課程設(shè)計(jì)闡明書(shū),規(guī)定簡(jiǎn)潔、通順,格式規(guī)范,設(shè)計(jì)方案對(duì)的,實(shí)現(xiàn)技術(shù)路線明確,敘述內(nèi)容完整、清晰、規(guī)范,數(shù)據(jù)、資料真實(shí)可靠,軟件程序運(yùn)行良好。(3)規(guī)定有完整的電路設(shè)計(jì)原理圖及軟件源代碼。五、進(jìn)程安排(1)第1天:任務(wù)布置及有關(guān)知識(shí)解說(shuō)(2)第2-3天:資料查閱與方案制訂(3)第4-8天:硬件設(shè)計(jì)、程序編制與調(diào)試階段(4)第9天:撰寫(xiě)設(shè)計(jì)報(bào)告六、重要參考資料[1]田澤.嵌入式系統(tǒng)開(kāi)發(fā)與應(yīng)用實(shí)驗(yàn)教程.北京航空航天工業(yè)大學(xué)出版社,.[2]郭榮佐,王霖.《嵌入式系統(tǒng)原理》.北京航空航天大學(xué)出版社,..[3]周根林.嵌入式系統(tǒng)原理與應(yīng)用.南京大學(xué)出版社,.[4]譚浩強(qiáng).C語(yǔ)言程序設(shè)計(jì)(第2版).清華大學(xué)出版社,[5]丁峰.ARM系統(tǒng)開(kāi)發(fā)——從實(shí)踐到提高.中國(guó)電力出版社,.[6]游雨云.單片機(jī)PWM信號(hào)控制智能小車(chē)的實(shí)現(xiàn)辦法.技術(shù)與市場(chǎng),,(12)[7]袁新娜,余紅英,超聲波傳感器在智能小車(chē)避障系統(tǒng)中的應(yīng)用.大眾商務(wù)教育版(民辦教育研究),,(8)指導(dǎo)教師(簽名):20年月日 1 2 2 2 2 6 6 7 7 11 11 11 12 13 13 14 14 15圖1.1設(shè)計(jì)全局圖通過(guò)stm32的PA0,PA1,根據(jù)TIM2產(chǎn)生的不同占空比的PWM波,控制電機(jī)的速度,以及正反轉(zhuǎn)。PA3,PA4控制小車(chē)前輪,前輪采用舵機(jī)控制,在轉(zhuǎn)向方面,不能大幅度轉(zhuǎn)彎,因此,在小車(chē)轉(zhuǎn)彎上,我們采用轉(zhuǎn)一段時(shí)間,然后倒退一段距離,然后再轉(zhuǎn),如此重復(fù)幾次。通過(guò)這種方式實(shí)現(xiàn)小車(chē)的900C轉(zhuǎn)彎。2.3功效函數(shù)設(shè)計(jì)1.voidFront() {GPIOD->BRR=0X03;GPIOA_Conf();//配備A端口GPIOA->BRR=0x0f;GPIOA->BSRR=0X01; }調(diào)用這個(gè)函數(shù),實(shí)現(xiàn)小車(chē)全速向前形式。PD端口的D0,D1位,是控制小車(chē)背面兩個(gè)尾燈。當(dāng)小車(chē)邁進(jìn)時(shí),尾燈關(guān)閉。2.voidBack() {GPIOD->BSRR=0x03;GPIOA_Conf();GPIOA->BRR=0x0f;GPIOA->BSRR=0X02;}調(diào)用這個(gè)函數(shù),實(shí)現(xiàn)小車(chē)全速后退。同時(shí)啟動(dòng)車(chē)身背面的尾燈。3.voidLeftSlideFront() { GPIOD->BSRR=0X01; GPIOD->BRR=0X02; GPIOA->BRR=0X04; GPIOA->BSRR=0X08; Time_Configuration(350,0,500,7199);} 調(diào)用此函數(shù),實(shí)現(xiàn)小車(chē)邁進(jìn),左轉(zhuǎn)彎。同時(shí)啟動(dòng)尾部左邊的尾燈,關(guān)閉右邊的尾燈。Time_Configuration(350,0,500,7199)為占空比調(diào)制函數(shù)。通過(guò)輸入不同的值,變化電機(jī)的轉(zhuǎn)速。4.voidTime_Configuration(uint16_tCCR1_Val,uint16_tCCR2_Val,uint16_tperiodValue,uint16_tPrescalerValue){ /*啟動(dòng)TM2定時(shí)器時(shí)鐘*/RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE); /*TIM2定時(shí)器復(fù)用管腳PA0,PA1,PA2,PA3*/GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0|GPIO_Pin_1;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_InitStructure); /*配備定時(shí)器時(shí)基*/TIM_TimeBaseStructure.TIM_Period=periodValue;TIM_TimeBaseStructure.TIM_Prescaler=PrescalerValue;TIM_TimeBaseStructure.TIM_ClockDivision=0;TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure); /*配備定時(shí)器各通道狀況*/TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;TIM_OCInitStructure.TIM_Pulse=CCR1_Val;TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;TIM_OC1Init(TIM2,&TIM_OCInitStructure);TIM_OC1PreloadConfig(TIM2,TIM_OCPreload_Enable);TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;TIM_OCInitStructure.TIM_Pulse=CCR2_Val;TIM_OC2Init(TIM2,&TIM_OCInitStructure);TIM_OC2PreloadConfig(TIM2,TIM_OCPreload_Enable); TIM_ARRPreloadConfig(TIM2,ENABLE);TIM_Cmd(TIM2,ENABLE);} PWM脈寬調(diào)制波形輸出,是stm32定時(shí)器功效的一大亮點(diǎn),以往8位單片機(jī)輸出PWM波形,均為模擬,或者借助外圍芯片,而stm32內(nèi)部定時(shí)器,實(shí)現(xiàn)了精確的PWM波形直接輸出。上面功效函數(shù),為T(mén)IM2定時(shí)器的配備狀況。我在使用時(shí),啟動(dòng)了TIM2定時(shí)器的通道1和通道2。分別為PA0,PA1,這兩個(gè)端口控制小車(chē)的后輪電機(jī)。由于前輪為舵機(jī)。因此,沒(méi)有采用PWM波形。而是直接給高低電平調(diào)節(jié)小車(chē)的方向。stm32定時(shí)器采用預(yù)分頻解決,即將系統(tǒng)時(shí)鐘分頻后給定時(shí)器,這個(gè)預(yù)分頻值,由傳入的參數(shù)PrescalerValue決定。系統(tǒng)時(shí)鐘為72MHz,設(shè)分頻后的頻率為F,則:F=72MHz/(PrescalerValue+1)定時(shí)器的計(jì)數(shù)周期為傳入?yún)?shù)periodValue的值決定。PWM占空比值由傳入?yún)?shù)CCR1_Val和CCR2_Val決定,分別控制PA0,PA1的占空比值。占空比=CCR1_Val/periodValue。 NEC編碼合同中,遙控器每發(fā)送一種8位數(shù)據(jù),能夠分為5個(gè)部分:圖3.1NEC合同編碼規(guī)則當(dāng)按下遙控器上的任意一種鍵時(shí),遙控器將發(fā)送一種38KHz的載波信號(hào),根據(jù)NEC編碼合同,如果發(fā)送數(shù)據(jù)位為1,則向外發(fā)送38KHz的載波信號(hào),持續(xù)發(fā)送0.56ms.然后停止發(fā)送1.685ms后繼續(xù)發(fā)送下一位。如果發(fā)送數(shù)據(jù)位為0,則紅外遙控向外發(fā)送38KHz的載波信號(hào),持續(xù)發(fā)送0.56ms,然后停止發(fā)送0.565ms后繼續(xù)發(fā)送下一位。3.2接受探頭與解碼接受紅外信號(hào)部分,我們采用HS0038接受探頭,HS0038共三個(gè)引腳,分別為,OUT、VCC、GND。通電后,當(dāng)沒(méi)有收到紅外信號(hào)時(shí),OUT端口默認(rèn)為高電平。接受端口信號(hào)與紅外遙控發(fā)送信號(hào)電平相反。在解碼方面,接受探頭接受到38KHz的載波后,輸出端OUT電平拉低。由于NEC發(fā)射編碼中,采用的是38KHz載波表達(dá)高,無(wú)發(fā)射表達(dá)低。因此在接受探頭部分的電平高低,與發(fā)射部分剛好相反。解碼部分,數(shù)據(jù)1,0的電平寬度為別是:圖3.2NEC合同1、0電平寬度由于每個(gè)數(shù)據(jù)位開(kāi)始低電平均為0.56ms,因此,我們使用TIM3定時(shí)器,精確捕獲到每位數(shù)據(jù)高電平持續(xù)時(shí)間。通過(guò)捕獲到的值,來(lái)確認(rèn)1和0.通過(guò)軟件解碼時(shí),首先接受到引導(dǎo)碼,9ms的低電平和4.5ms的高電平,然后是地址碼和地址反碼,最后是數(shù)據(jù)碼和數(shù)據(jù)反碼。在程序設(shè)計(jì)上,我們定義個(gè)unsignedchar型數(shù)組,分別統(tǒng)計(jì)下地址碼、地址反碼、數(shù)據(jù)碼、數(shù)據(jù)反碼。取出數(shù)組下標(biāo)為2和3的值,將下標(biāo)為3的數(shù)組數(shù)據(jù)取反,判斷與否相等,如果不相等,表達(dá)解碼數(shù)據(jù)有誤;如果相等,表達(dá)解碼對(duì)的。3.3紅外控制將stm32的外部中斷3端口與紅外探頭的輸出端相連,捕獲紅外遙控發(fā)射來(lái)的信號(hào)。外部中斷端口程序配備以下:1.voidEXTI3_Configration(){/***************配備PC3端口,作為外部中斷觸發(fā)端口***********/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOC,&GPIO_InitStructure);RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource3);/****************外部中斷線配備,設(shè)立為上升沿觸發(fā)****************/EXTI_InitStructure.EXTI_Line=EXTI_Line3;EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;EXTI_InitStructure.EXTI_LineCmd=ENABLE;EXTI_Init(&EXTI_InitStructure);/********************中斷向量表配備*****************/NVIC_InitStructure.NVIC_IRQChannel=EXTI3_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x01;NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x01;NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;NVIC_Init(&NVIC_InitStructure);}配備好外部中斷后,當(dāng)stm32上電后,便會(huì)實(shí)時(shí)監(jiān)控PC3端口,當(dāng)接受到紅外信號(hào)后,便產(chǎn)生一種中斷信號(hào),調(diào)用中斷解決函數(shù),解決該事件,下面為中斷解決函數(shù),重要是解碼紅外信號(hào):2.voidEXTI3_IRQHandler(void){inti,j,Counter=0;charIR[4]={0};charch1=0,ch2=0;if(EXTI_GetITStatus(EXTI_Line3)!=RESET){ TIM3->CNT=0; TIM_Cmd(TIM3,ENABLE); while(TIM_GetCounter(TIM3)<7000); TIM_Cmd(TIM3,DISABLE); TIM3->CNT=0; if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_3)==0) { while(!GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_3)); TIM3->CNT=0; TIM_Cmd(TIM3,ENABLE); while(TIM_GetCounter(TIM3)<3500); TIM_Cmd(TIM3,DISABLE); if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_3)==1) { while(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_3)); for(i=0;i<4;i++) { for(j=0;j<8;j++) { while(!GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_3)); TIM3->CNT=0; TIM_Cmd(TIM3,ENABLE); while(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_3)); Counter=TIM_GetCounter(TIM3); TIM_Cmd(TIM3,DISABLE); ch1=ch1>>1; if(Counter>840) { ch1=ch1|0x80; } else { ch1=ch1|0; } Counter=0; } IR[i]=ch1; } ch1=IR[2]; ch2=IR[3]; ch2=~ch2; if(ch1==ch2) { switch(ch1) { case0x07:LeftSlideFront();break; case0x09:RightSlideFront();break; case0x40:Front();break; case0x19:Back();break; case0x16:LeftSlideBehind();break; case0x0d:RightSlideBehind();break; case0x0c:Upshift();break; case0x5e:SlowDown();break; case0x15:Brake();break; default:Brake();break; } } } }Delay(500);EXTI_ClearITPendingBit(EXTI_Line3); }} 這個(gè)函數(shù)為中斷解決函數(shù),在中斷解決函數(shù)中,我們又用到了一種TIM3定時(shí)器,該定時(shí)器重要是解碼紅外信號(hào),根據(jù)上文所述的0,1編碼規(guī)則,用TIM3定時(shí)器,所捕獲到的值,來(lái)判斷信號(hào)0,1,實(shí)現(xiàn)軟件解碼紅外信號(hào)。下面為T(mén)IM3定時(shí)器的配備:3.voidTIM3_Configuration(){TIM_DeInit(TIM3);RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);TIM_TimeBaseStructure.TIM_Period=50000;TIM_TimeBaseStructure.TIM_Prescaler=0;TIM_TimeBaseStructure.TIM_ClockDivision=0;TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure); TIM_PrescalerConfig(TIM3,71,TIM_PSCReloadMode_Immediate); TIM_ARRPreloadConfig(TIM3,DISABLE); TIM_Cmd(TIM3,DISABLE);} 設(shè)立預(yù)分頻值為71,通過(guò)分頻后,計(jì)數(shù)器的頻率為1MHz。周期為50000.計(jì)數(shù)方式為向上計(jì)數(shù)。即使stm32普通定時(shí)器的時(shí)鐘為36MHz,如果將TIM_ClockDivision的值設(shè)立為0,則采用預(yù)分頻時(shí),時(shí)鐘值應(yīng)選72MHz進(jìn)行分頻。4.超聲波4.1介紹 通過(guò)超聲波發(fā)射裝置發(fā)出超聲波,根據(jù)接受器接到超聲波時(shí)的時(shí)間差就能夠懂得距離了。超聲波發(fā)射器向某一方向發(fā)射超聲波,在發(fā)射時(shí)刻的同時(shí)開(kāi)始計(jì)時(shí),超聲波在空氣中傳輸,途中碰到障礙物就立刻返回來(lái),超聲波接受器收到反射波就立刻停止計(jì)時(shí)。(超聲波在空氣中的傳輸速度為340m/s,根據(jù)計(jì)數(shù)器統(tǒng)計(jì)的時(shí)間t,就能夠計(jì)算出發(fā)射點(diǎn)距障礙物的距離(s),即:s=340t/2)4.2超聲波測(cè)距具體實(shí)現(xiàn) 我們?cè)谛≤?chē)的前端放置一種超聲波模塊,采用查詢(xún)法,每隔1s,發(fā)射一種10us以上的脈沖信號(hào),超聲波模塊便自動(dòng)發(fā)送8個(gè)40Khz的信號(hào)。當(dāng)模塊接受到返回信號(hào)時(shí),輸出端會(huì)輸出一種高電平,這個(gè)高電平的持續(xù)時(shí)間,就是超聲波模塊達(dá)成障礙物,聲速的來(lái)回時(shí)間。如果測(cè)得前方障礙物距離不大于設(shè)立距離,則小車(chē)后退,并發(fā)出報(bào)警蜂鳴聲。4.3超聲波程序設(shè)計(jì)1.floatDistance(){ floatdistance; inttime; TIM3->CNT=0; //非常重要,不清零,沒(méi)成果 GPIOB->BSRR=0X01; while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1)==0);//等待接受到反回信號(hào) GPIOB->BRR=0X01; TIM_Cmd(TIM3,ENABLE);//啟動(dòng)定時(shí)器,記下電平持續(xù)時(shí)間 while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1)==1); TIM_Cmd(TIM3,DISABLE); time=TIM_GetCounter(TIM3); distance=(float)time*0.017;//cm數(shù)量級(jí) returndistance;} 程序中的TIM3定時(shí)器,在上文3.3.3已經(jīng)具體的描述。我們將stm32的PB0作為發(fā)送10us以上高電平的端口,將PB1作為接受超聲波模塊饋送的時(shí)間信號(hào)電平端口。該高電平的時(shí)間,為超聲波來(lái)回障礙物的時(shí)間。該函數(shù)返回值,即為小車(chē)到障礙物的距離。2.voidKeepDistance() //超聲波測(cè)距,距離控制函數(shù){ GPIOB->BRR=0x100; if(Distance()<25.0) { GPIOB->BSRR=0x100; RightSlideBehind(); Delay(200); GPIOB->BRR=0x100; Delay(700); GPIOA->BSRR=0x0c; Time_Configuration(70,0,100,71); } } 調(diào)用這個(gè)函數(shù),當(dāng)小車(chē)查詢(xún)到前方距離不大于25cm時(shí),便進(jìn)行某些列的調(diào)節(jié),如蜂鳴器想起,小車(chē)向右后轉(zhuǎn)。5.紅外尋跡5.1反射式紅外傳感器圖5.1反射式紅外傳感器 如圖5.1所示,當(dāng)紅外發(fā)射管發(fā)射信號(hào),經(jīng)地面反射到接受管時(shí),接受管部位電阻值很?。划?dāng)紅外傳感器與地面距離拉大,接受管接受不到反射信號(hào)時(shí),接受管部位電阻值很大。采用一種電壓比較器LM393,LM393為兩端輸入,一端輸出,比較兩個(gè)輸入信號(hào)的大小。我們將紅外傳感器接受管在接受到信號(hào)和沒(méi)有接受到信號(hào)時(shí),電阻兩端的電壓與一種固定的值相比,接受到信號(hào)時(shí),LM393輸出低電平;沒(méi)有接受到信號(hào)時(shí),LM393輸出高電平。通過(guò)高低電平,判斷紅外管發(fā)出的信號(hào)與否被黑線吸取。5.2具體實(shí)現(xiàn)辦法小車(chē)上的黑線檢測(cè)設(shè)備,采用的中斷觸發(fā)方式是,下降沿。由于電機(jī)在轉(zhuǎn)動(dòng)過(guò)程中,不可避免的會(huì)發(fā)生忽然變向,減速等。這樣會(huì)干擾電源電壓,由于我我們組采用的stm32為3.3V供電,該電壓有6個(gè)電池串聯(lián),通過(guò)穩(wěn)壓芯片穩(wěn)壓后,輸出3.3V給stm32,當(dāng)點(diǎn)擊由于忽然變向,加速減速才生大電流,對(duì)電池電壓產(chǎn)生較大的沖擊,穩(wěn)壓芯片輸出截止。黑線檢測(cè)的模塊與stm32并聯(lián),當(dāng)穩(wěn)壓芯片輸出的3.3V電壓忽然截止時(shí),尋跡模塊輸出電壓為0.如果采用下降沿觸發(fā),這時(shí),由于電壓的不穩(wěn)定而造成了一種有害的觸發(fā)中斷。通過(guò)修改硬件電路,采用上升沿觸發(fā),當(dāng)紅外對(duì)管檢測(cè)到黑線時(shí),輸出信號(hào)為0,當(dāng)小車(chē)沒(méi)有檢測(cè)到黑線時(shí),輸出信號(hào)為1。當(dāng)穩(wěn)壓芯片忽然截止時(shí),輸出也0,這樣能夠有效的解決電機(jī)對(duì)尋跡模塊的干擾。 我們小組采用3個(gè)尋跡模塊,stm32采用3個(gè)外部觸發(fā)端口分別與3個(gè)尋跡模塊相連。左右兩邊尋跡模塊用于檢測(cè)跑到邊沿,避免小車(chē)沖出跑到。中間尋跡模塊用于檢測(cè)小車(chē)轉(zhuǎn)彎線。stm32分槍占式優(yōu)先級(jí)和響應(yīng)式優(yōu)先級(jí)。如果搶占式優(yōu)先級(jí)相似,則不能發(fā)生中斷嵌套。小車(chē)通過(guò)轉(zhuǎn)彎線時(shí),三個(gè)尋跡模塊均會(huì)檢測(cè)到黑線。因此,我們?cè)O(shè)立中間尋跡模塊的搶占式優(yōu)先級(jí)最高,兩邊搶占式等級(jí)低于中間,當(dāng)小車(chē)通過(guò)轉(zhuǎn)彎線時(shí),三個(gè)中斷同時(shí),或一次來(lái)臨。中間中斷等級(jí)打斷兩邊,確保中間的中斷執(zhí)行程序能順利執(zhí)行。5.3尋跡程序設(shè)計(jì)我們采用三個(gè)外部中斷,分別為PC0,PC1,PC3三個(gè)端口,分別監(jiān)控三個(gè)尋跡模塊。下面以外部中斷0為例:1.voidEXTI0_Configration(){/************配備PC0端口,作為外部中斷觸發(fā)端口*******/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_0;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;GPIO_Init(GPIOC,&GPIO_InitStructure);RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource0);/****************外部中斷線配備,設(shè)立為下降沿觸發(fā)****************/EXTI_InitStructure.EXTI_Line=EXTI_Line0;EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Rising;EXTI_InitStructure.EXTI_LineCmd=ENABLE;EXTI_Init(&EXTI_InitStructure);/********************中斷向量表配備*****************/NVIC_InitStructure.NVIC_IRQChannel=EXTI0_IRQn;NVIC_InitStructure.NVIC_IRQCha

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論