九九热最新网址,777奇米四色米奇影院在线播放,国产精品18久久久久久久久久,中文有码视频,亚洲一区在线免费观看,国产91精品在线,婷婷丁香六月天

遙控智能小車課程設(shè)計

上傳人:1888****888 文檔編號:37096853 上傳時間:2021-11-02 格式:DOC 頁數(shù):24 大?。?73.01KB
收藏 版權(quán)申訴 舉報 下載
遙控智能小車課程設(shè)計_第1頁
第1頁 / 共24頁
遙控智能小車課程設(shè)計_第2頁
第2頁 / 共24頁
遙控智能小車課程設(shè)計_第3頁
第3頁 / 共24頁

下載文檔到電腦,查找使用更方便

15 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《遙控智能小車課程設(shè)計》由會員分享,可在線閱讀,更多相關(guān)《遙控智能小車課程設(shè)計(24頁珍藏版)》請在裝配圖網(wǎng)上搜索。

1、 嵌入式系統(tǒng)原理 課程設(shè)計說明書題 目: 遙控智能小車 院 (系): 計算機與電子系 專業(yè)班級: 電子科學與技術(shù)0902班 學生姓名: 嵌入式系統(tǒng)原理 課程設(shè)計任務(wù)書一、設(shè)計題目遙控智能小車二、設(shè)計主要內(nèi)容(1) 廣泛查找文獻資料,認真研究,反復論證,精心設(shè)計技術(shù)方案。(2) 嚴格遵守各項紀律,勤奮學習,認真思考,敢于挑戰(zhàn)困難并勇于創(chuàng)新。(3) 較為深入的掌握ARM處理器的體系結(jié)構(gòu)、指令系統(tǒng)、編程方法,初步了解ARM應(yīng)用系統(tǒng)的軟硬件開發(fā)方法及手段,較熟練地掌握ARM處理器幾種重要的片內(nèi)外設(shè)(定時器、PLL、I2C、RTC等)的基本原理及編程方法,初步掌握ARM處理器外圍電路的擴展方法。(4)

2、在現(xiàn)有車模的基礎(chǔ)上,以嵌入式ARM微處理器構(gòu)成小車控制核心,同時加裝聲光電、紅外線、超聲波傳感器、LED顯示等外圍設(shè)備,實現(xiàn)對小車的速度、位置、運行狀況的實時測量,并將測量數(shù)據(jù)傳送至處理器進行處理,然后由處理器根據(jù)所檢測的各種數(shù)據(jù)實現(xiàn)對電動車的智能控制;(5) 設(shè)計的智能小車應(yīng)該能夠?qū)崟r顯示時間、速度、里程,具有自動尋跡、尋光、避障功能,可程控行駛速度、準確定位停車。并有相應(yīng)的聲光電設(shè)備發(fā)出相關(guān)的提示或警示信息。(6) 遙控方式可自選,系統(tǒng)通過遙控器可以控制小車的行駛方向、速度、起停等運行狀態(tài),要求要達到一定的控制精度、距離及范圍,小車行駛速度應(yīng)達到3m/s以上。(7) 分析結(jié)果,獨立撰寫設(shè)計

3、總結(jié)報告陳述自己的觀點,格式應(yīng)嚴格遵守學校規(guī)范。內(nèi)容盡量翔實,其中必須要有自己獨立的見解和認識。三、原始資料硬件資源:四驅(qū)小車車模、STM32系統(tǒng)板、用于ARM處理器的JTAG仿真器、PC機Pentium100以上。設(shè)計指導書:STM32系統(tǒng)板配套光盤四、要求的設(shè)計成果(1)在現(xiàn)有車模的基礎(chǔ)上,以嵌入式ARM微處理器構(gòu)成小車控制核心,同時加裝聲光電、紅外線、超聲波傳感器、LED顯示等外圍設(shè)備,實現(xiàn)對小車的速度、位置、運行狀況的實時測量,并將測量數(shù)據(jù)傳送至處理器進行處理,然后由處理器根據(jù)所檢測的各種數(shù)據(jù)實現(xiàn)對電動車的智能控制。(2)撰寫課程設(shè)計說明書,要求簡潔、通順,格式規(guī)范,設(shè)計方案正確,實現(xiàn)

4、技術(shù)路線明確,論述內(nèi)容完整、清楚、規(guī)范,數(shù)據(jù)、資料真實可靠,軟件程序運行良好。(3)要求有完整的電路設(shè)計原理圖及軟件源代碼。五、進程安排(1)第 1 天:任務(wù)布置及相關(guān)知識講解(2)第2-3天:資料查閱與方案制定(3)第4-8天:硬件設(shè)計、程序編制與調(diào)試階段(4)第 9 天:撰寫設(shè)計報告(5)第 10 天:答辯與考核階段六、主要參考資料1 田澤. 嵌入式系統(tǒng)開發(fā)與應(yīng)用實驗教程. 北京航空航天工業(yè)大學出版社,2005.2 郭榮佐,王霖. 嵌入式系統(tǒng)原理.北京航空航天大學出版社,.2008.3 周根林.嵌入式系統(tǒng)原理與應(yīng)用.南京大學出版社, 2006.4 譚浩強. C語言程序設(shè)計(第2版).清華大

5、學出版社,20085 丁峰. ARM系統(tǒng)開發(fā)從實踐到提高. 中國電力出版社,2007.6 游雨云. 單片機PWM信號控制智能小車的實現(xiàn)方法.技術(shù)與市場, 2009,(12)7 袁新娜,余紅英,超聲波傳感器在智能小車避障系統(tǒng)中的應(yīng)用. 大眾商務(wù)教育版(民辦教育研究),2009,(8)指導教師(簽名): 20 年 月 日目 錄1. 總體思想12. 電機驅(qū)動22.1 簡介22.2 具體實現(xiàn)22.3 功能函數(shù)設(shè)計23 遙控系統(tǒng)73.1 遙控器簡介73.2 接收探頭與解碼73.3 紅外控制 84. 超聲波 124.1 簡介124.2 超聲波測距具體實現(xiàn)124.3 超聲波程序設(shè)計125. 紅外尋跡145.

6、1 反射式紅外傳感器145.2 具體實現(xiàn)方法145.3 尋跡程序設(shè)計156. 總結(jié)171.總體思想圖 1.1 設(shè)計全局圖本次課程設(shè)計,我們小組采用stm32作為主控芯片,L298N模塊作為電機驅(qū)動芯片。在小車車頭放置三個反射式紅外傳感器,由于紅外光易于被黑線吸收,利用這個原理,來檢測黑線,當檢測到黑線時,發(fā)射出去的紅外光被吸收,紅外傳感器接受不到反射信號,通過輸出信號反饋給STM32,產(chǎn)生中斷,作出相應(yīng)的調(diào)整,詳細介紹見下文第12頁。車頭部分采用一個US-100超聲波模塊,用于檢測前方障礙物,我們小組設(shè)置的安全距離為25cm,當小車與前方障礙之間的距離小于25cm時,小車蜂鳴器報警,stm32

7、控制電機,作出相應(yīng)的調(diào)整。關(guān)于超聲波工作詳情,請見下文第11頁。小車尾部安裝一枚HS0038紅外接收探頭,配合一塊遙控器,實現(xiàn)遙控小車的功能。我們小組選用的遙控器編碼為NEC協(xié)議。紅外遙控功能詳情,請見下文第7頁。我們在小車的車身上放置一塊3.2寸TFT液晶顯示器。用于顯示時間,車速。車速通過霍爾元件測得。2.電機驅(qū)動2.1簡介電機運轉(zhuǎn)需要大電流,而stm32驅(qū)動能力達不到電機正常運轉(zhuǎn)的要求,故我們小組采用L298N模塊驅(qū)動電機,L298N擁有4個輸入端口,由stm32直接輸入,4個輸出端,可以驅(qū)動兩個直流電機。stm32輸出端口的電平變換,可以控制電機的方向。PWM脈寬調(diào)制信號,可以控制電機

8、的轉(zhuǎn)速。實現(xiàn)加速減速的功能。2.2 具體實現(xiàn)通過stm32的PA0,PA1,根據(jù)TIM2產(chǎn)生的不同占空比的PWM波,控制電機的速度,以及正反轉(zhuǎn)。PA3,PA4控制小車前輪,前輪采用舵機控制,在轉(zhuǎn)向方面,不能大幅度轉(zhuǎn)彎,所以,在小車轉(zhuǎn)彎上,我們采用轉(zhuǎn)一段時間,然后倒退一段距離,然后再轉(zhuǎn),如此反復幾次。通過這種方式實現(xiàn)小車的900C轉(zhuǎn)彎。2.3 功能函數(shù)設(shè)計1.void Front() GPIOD-BRR = 0X03; GPIOA_Conf(); /配置A端口 GPIOA-BRR = 0x0f;GPIOA-BSRR = 0X01;調(diào)用這個函數(shù),實現(xiàn)小車全速向前形式。PD端口的D0,D1位,是控制

9、小車后面兩個尾燈。當小車前進時,尾燈關(guān)閉。2.void Back() GPIOD-BSRR = 0x03;GPIOA_Conf();GPIOA-BRR = 0x0f;GPIOA-BSRR = 0X02;調(diào)用這個函數(shù),實現(xiàn)小車全速后退。同時開啟車身后面的尾燈。 3 . void LeftSlideFront() GPIOD-BSRR = 0X01; GPIOD-BRR = 0X02; GPIOA-BRR = 0X04; GPIOA-BSRR = 0X08; Time_Configuration(350,0,500,7199);調(diào)用此函數(shù),實現(xiàn)小車前進,左轉(zhuǎn)彎。同時開啟尾部左邊的尾燈,關(guān)閉右邊的尾

10、燈。Time_Configuration(350,0,500,7199)為占空比調(diào)制函數(shù)。通過輸入不同的值,改變電機的轉(zhuǎn)速。4.void Time_Configuration(uint16_t CCR1_Val,uint16_t CCR2_Val,uint16_t periodValue,uint16_t PrescalerValue)/*開啟TM2定時器時鐘*/RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);/*TIM2定時器復用管腳PA0,PA1,PA2,PA3*/GPIO_InitStructure.GPIO_Pin = GPIO_

11、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); /*配置定時器時基*/ TIM_TimeBaseStructure.TIM_Period = periodValue; TIM_TimeBaseStructure.TIM_Prescaler = PrescalerValue; TIM_TimeBaseStructure.TIM_ClockD

12、ivision = 0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure); /*配置定時器各通道情況*/ TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; TIM_OCInitStructure.TIM_Pulse = CCR1_Val; TIM_OCInit

13、Structure.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_OC2PreloadCo

14、nfig(TIM2, TIM_OCPreload_Enable); TIM_ARRPreloadConfig(TIM2, ENABLE); TIM_Cmd(TIM2, ENABLE);PWM脈寬調(diào)制波形輸出,是stm32定時器功能的一大亮點,以往8位單片機輸出PWM波形,均為模擬,或者借助外圍芯片,而stm32內(nèi)部定時器,實現(xiàn)了精確的PWM波形直接輸出。上面功能函數(shù),為TIM2定時器的配置情況。我在使用時,開啟了TIM2定時器的通道1和通道2。分別為PA0,PA1,這兩個端口控制小車的后輪電機。由于前輪為舵機。所以,沒有采用PWM波形。而是直接給高低電平調(diào)整小車的方向。stm32定時器采用預分

15、頻處理,即將系統(tǒng)時鐘分頻后給定時器,這個預分頻值,由傳入的參數(shù)PrescalerValue決定。系統(tǒng)時鐘為72MHz,設(shè)分頻后的頻率為F,則:F = 72MHz/(PrescalerValue+1)定時器的計數(shù)周期為傳入?yún)?shù)periodValue的值決定。PWM占空比值由傳入?yún)?shù)CCR1_Val和CCR2_Val決定,分別控制PA0,PA1的占空比值。占空比 = CCR1_Val/periodValue。4. void LeftSlideBehind() GPIOD-BSRR = 0X01;GPIOD-BRR = 0X02;GPIOA-BRR = 0X04;GPIOA-BSRR = 0X08;

16、Time_Configuration(0,350,500,7199);調(diào)用此函數(shù),控制小車后退并左轉(zhuǎn)彎。同時開啟左邊尾燈,關(guān)閉右邊尾燈。5void RightSlideFront() GPIOD-BSRR = 0X02;GPIOD-BRR = 0X01;GPIOA-BRR = 0X08;GPIOA-BSRR = 0x04;Time_Configuration(350,0,500,7199); 調(diào)用此函數(shù),控制小車前進并右轉(zhuǎn)彎。同時關(guān)閉左邊尾燈,開啟右邊尾燈。6. void RightSlideBehind() /后退,右轉(zhuǎn)彎GPIOD-BSRR = 0X02;GPIOD-BRR = 0X01;

17、GPIOA-BRR = 0X08;GPIOA-BSRR = 0X04;Time_Configuration(0,350,500,7199); 調(diào)用此函數(shù),控制小車后退并右轉(zhuǎn)彎。同時關(guān)閉左邊尾燈,開啟右邊尾燈。7. void Upshift() uint16_t i;GPIOD-BRR = 0x03;for(i = 100;i = 180;i = i + 10)Delay(200);Time_Configuration(i,0,500,7199);while(i BSRR = 0X03;while(i 200)Time_Configuration(i,0,500,7199);i = i-50;D

18、elay(70);for(;i 170; i = i - 5)Time_Configuration(i,0,500,7199); Delay(80);調(diào)用此函數(shù),實現(xiàn)小車的減速,減速過程,我們也分為兩級。第一級為快速減速,第二級為慢速減速。使小車平穩(wěn)減速。9void Brake() GPIOD-BSRR = 0x03;GPIOA_Conf();GPIOA-BSRR = 0x0f;調(diào)用該函數(shù),小車將停止。同時后面尾燈開啟。3.遙控系統(tǒng)3.1 遙控器簡介我們小組使用的遙控器發(fā)射編碼為NEC協(xié)議,NEC編碼協(xié)議中,遙控器每發(fā)送一個8位數(shù)據(jù),可以分為5個部分:圖 3.1 NEC協(xié)議編碼規(guī)則當按下遙控器

19、上的任意一個鍵時,遙控器將發(fā)送一個38KHz的載波信號,根據(jù)NEC編碼協(xié)議,如果發(fā)送數(shù)據(jù)位為1,則向外發(fā)送38KHz的載波信號,持續(xù)發(fā)送0.56ms.然后停止發(fā)送1.685ms后繼續(xù)發(fā)送下一位。如果發(fā)送數(shù)據(jù)位為0,則紅外遙控向外發(fā)送38KHz的載波信號,持續(xù)發(fā)送0.56ms,然后停止發(fā)送0.565ms后繼續(xù)發(fā)送下一位。3.2 接收探頭與解碼接受紅外信號部分,我們采用HS0038接收探頭,HS0038共三個引腳,分別為,OUT、VCC、GND。通電后,當沒有收到紅外信號時,OUT端口默認為高電平。接受端口信號與紅外遙控發(fā)送信號電平相反。在解碼方面,接收探頭接受到38KHz的載波后,輸出端OUT電

20、平拉低。由于NEC發(fā)射編碼中,采用的是38KHz載波表示高,無發(fā)射表示低。所以在接受探頭部分的電平高低,與發(fā)射部分剛好相反。解碼部分,數(shù)據(jù)1,0的電平寬度為別是:圖 3.2 NEC協(xié)議1、0電平寬度由于每個數(shù)據(jù)位開始低電平均為0.56ms,所以,我們使用TIM3定時器,準確捕獲到每位數(shù)據(jù)高電平持續(xù)時間。通過捕獲到的值,來確認1和0.通過軟件解碼時,首先接受到引導碼,9ms的低電平和4.5ms的高電平,然后是地址碼和地址反碼,最后是數(shù)據(jù)碼和數(shù)據(jù)反碼。在程序設(shè)計上,我們定義個unsigned char型數(shù)組,分別記錄下地址碼、地址反碼、數(shù)據(jù)碼、數(shù)據(jù)反碼。取出數(shù)組下標為2和3的值,將下標為3的數(shù)組數(shù)

21、據(jù)取反,判斷是否相等,如果不相等,表示解碼數(shù)據(jù)有誤;如果相等,表示解碼正確。3.3 紅外控制將stm32的外部中斷3端口與紅外探頭的輸出端相連,捕捉紅外遙控發(fā)射來的信號。外部中斷端口程序配置如下:1.void EXTI3_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

22、_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_Tr

23、igger_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 = E

24、NABLE;NVIC_Init(&NVIC_InitStructure);配置好外部中斷后,當stm32上電后,便會實時監(jiān)控PC3端口,當接受到紅外信號后,便產(chǎn)生一個中斷信號,調(diào)用中斷處理函數(shù),處理該事件,下面為中斷處理函數(shù),主要是解碼紅外信號:2.void EXTI3_IRQHandler(void)int i,j,Counter = 0;char IR4 = 0;char ch1=0,ch2=0;if(EXTI_GetITStatus(EXTI_Line3) != RESET) TIM3-CNT = 0;TIM_Cmd(TIM3,ENABLE);while(TIM_GetCounter(T

25、IM3) 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;

26、i 4; i+)for(j = 0; j CNT = 0;TIM_Cmd(TIM3,ENABLE);while(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_3);Counter = TIM_GetCounter(TIM3);TIM_Cmd(TIM3,DISABLE);ch1 = ch11;if(Counter 840)ch1 = ch1|0x80;else ch1 = ch1|0;Counter = 0;IRi = ch1;ch1 = IR2;ch2 = IR3;ch2 = ch2;if(ch1 = ch2)switch(ch1)case 0x07:LeftSli

27、deFront();break;case 0x09:RightSlideFront();break;case 0x40:Front();break;case 0x19:Back();break;case 0x16:LeftSlideBehind();break;case 0x0d:RightSlideBehind();break; case 0x0c:Upshift();break;case 0x5e:SlowDown();break;case 0x15:Brake();break;default :Brake();break; Delay(500); EXTI_ClearITPendingB

28、it(EXTI_Line3); 這個函數(shù)為中斷處理函數(shù),在中斷處理函數(shù)中,我們又用到了一個TIM3定時器,該定時器主要是解碼紅外信號,根據(jù)上文所述的0,1編碼規(guī)則,用TIM3定時器,所捕獲到的值,來判斷信號0,1,實現(xiàn)軟件解碼紅外信號。下面為TIM3定時器的配置:3. void TIM3_Configuration() TIM_DeInit(TIM3);RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);TIM_TimeBaseStructure.TIM_Period = 50000; TIM_TimeBaseStructure.TIM_Pre

29、scaler = 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è)置預分頻值為71,經(jīng)過分頻后,計數(shù)器的

30、頻率為1MHz。周期為50000.計數(shù)方式為向上計數(shù)。雖然stm32普通定時器的時鐘為36MHz,如果將TIM_ClockDivision的值設(shè)置為0,則采用預分頻時,時鐘值應(yīng)選72MHz進行分頻。4.超聲波4.1 簡介 通過超聲波發(fā)射裝置發(fā)出超聲波,根據(jù)接收器接到超聲波時的時間差就可以知道距離了。超聲波發(fā)射器向某一方向發(fā)射超聲波,在發(fā)射時刻的同時開始計時,超聲波在空氣中傳播,途中碰到障礙物就立即返回來,超聲波接收器收到反射波就立即停止計時。(超聲波在空氣中的傳播速度為340m/s,根據(jù)計數(shù)器記錄的時間t,就可以計算出發(fā)射點距障礙物的距離(s),即:s=340t/2)4.2 超聲波測距具體實現(xiàn)

31、我們在小車的前端放置一個超聲波模塊,采用查詢法,每隔1s,發(fā)射一個10us以上的脈沖信號,超聲波模塊便自動發(fā)送8個40Khz的信號。當模塊接收到返回信號時,輸出端會輸出一個高電平,這個高電平的持續(xù)時間,就是超聲波模塊到達障礙物,聲速的來回時間。如果測得前方障礙物距離小于設(shè)置距離,則小車后退,并發(fā)出報警蜂鳴聲。4.3 超聲波程序設(shè)計1. float Distance()float distance;int time;TIM3-CNT = 0; /非常重要,不清零,沒結(jié)果GPIOB-BSRR = 0X01;while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1)

32、= 0);/等待接收到反回信號GPIOB-BRR = 0X01; TIM_Cmd(TIM3,ENABLE); /開啟定時器,記下電平持續(xù)時間while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1) = 1);TIM_Cmd(TIM3,DISABLE);time = TIM_GetCounter(TIM3);distance = (float)time*0.017; /cm數(shù)量級return distance;程序中的TIM3定時器,在上文3.3.3已經(jīng)詳細的描述。我們將stm32的PB0作為發(fā)送10us以上高電平的端口,將PB1作為接受超聲波模塊饋送的時間信號

33、電平端口。該高電平的時間,為超聲波來回障礙物的時間。該函數(shù)返回值,即為小車到障礙物的距離。2. void KeepDistance() /超聲波測距,距離控制函數(shù) GPIOB-BRR = 0x100;if(Distance() BSRR = 0x100;RightSlideBehind(); Delay(200);GPIOB-BRR = 0x100;Delay(700); GPIOA-BSRR = 0x0c;Time_Configuration(70,0,100,71);調(diào)用這個函數(shù),當小車查詢到前方距離小于25cm時,便進行一些列的調(diào)整,如蜂鳴器想起,小車向右后轉(zhuǎn)。5.紅外尋跡5.1 反射式

34、紅外傳感器 圖5.1 反射式紅外傳感器如圖5.1所示,當紅外發(fā)射管發(fā)射信號,經(jīng)地面反射到接收管時,接收管部位電阻值很??;當紅外傳感器與地面距離拉大,接收管接收不到反射信號時,接收管部位電阻值很大。采用一個電壓比較器LM393,LM393為兩端輸入,一端輸出,比較兩個輸入信號的大小。我們將紅外傳感器接收管在接收到信號和沒有接收到信號時,電阻兩端的電壓與一個固定的值相比,接收到信號時,LM393輸出低電平;沒有接受到信號時,LM393輸出高電平。通過高低電平,判斷紅外管發(fā)出的信號是否被黑線吸收。5.2 具體實現(xiàn)方法小車上的黑線檢測設(shè)備,采用的中斷觸發(fā)方式是,下降沿。由于電機在轉(zhuǎn)動過程中,不可避免的

35、會發(fā)生突然變向,減速等。這樣會干擾電源電壓,由于我我們組采用的stm32為3.3V供電,該電壓有6個電池串聯(lián),經(jīng)過穩(wěn)壓芯片穩(wěn)壓后,輸出3.3V給stm32,當點擊由于突然變向,加速減速才生大電流,對電池電壓產(chǎn)生較大的沖擊,穩(wěn)壓芯片輸出截止。黑線檢測的模塊與stm32并聯(lián),當穩(wěn)壓芯片輸出的3.3V電壓突然截止時,尋跡模塊輸出電壓為0.如果采用下降沿觸發(fā),這時,由于電壓的不穩(wěn)定而導致了一個有害的觸發(fā)中斷。通過修改硬件電路,采用上升沿觸發(fā),當紅外對管檢測到黑線時,輸出信號為0,當小車沒有檢測到黑線時,輸出信號為1。當穩(wěn)壓芯片突然截止時,輸出也0,這樣可以有效的解決電機對尋跡模塊的干擾。我們小組采用3

36、個尋跡模塊,stm32采用3個外部觸發(fā)端口分別與3個尋跡模塊相連。左右兩邊尋跡模塊用于檢測跑到邊沿,防止小車沖出跑到。中間尋跡模塊用于檢測小車轉(zhuǎn)彎線。stm32分槍占式優(yōu)先級和響應(yīng)式優(yōu)先級。如果搶占式優(yōu)先級相同,則不能發(fā)生中斷嵌套。小車經(jīng)過轉(zhuǎn)彎線時,三個尋跡模塊均會檢測到黑線。所以,我們設(shè)置中間尋跡模塊的搶占式優(yōu)先級最高,兩邊搶占式等級低于中間,當小車經(jīng)過轉(zhuǎn)彎線時,三個中斷同時,或一次來臨。中間中斷等級打斷兩邊,保證中間的中斷執(zhí)行程序能順利執(zhí)行。5.3 尋跡程序設(shè)計我們采用三個外部中斷,分別為PC0,PC1,PC3三個端口,分別監(jiān)控三個尋跡模塊。下面以外部中斷0為例:1.void EXTI0_

37、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(

38、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); /*中斷向量表配置*/ NVI

39、C_InitStructure.NVIC_IRQChannel = EXTI0_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0f; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure);將外部中斷設(shè)置為上升沿觸發(fā),出現(xiàn)中斷后,按照中斷處理函數(shù)進行,下面為中斷處理函數(shù):2.void EXTI0_IRQHan

40、dler(void)if(EXTI_GetITStatus(EXTI_Line0) != RESET) EXTI_ClearITPendingBit(EXTI_Line0);Back();Delay(5);RightSlideBehind();Delay(1000);GPIOA-BSRR = 0X0C;Time_Configuration(350,0,500,7199);EXTI_ClearITPendingBit(EXTI_Line0); 其余兩個中斷按照類似的方法配置。端口號改為PC1,PC2。6.總結(jié)由于超聲波模塊使用的頻率是40KHz,紅外遙控使用的是38KHz頻率。在小車運行過程中,

41、會產(chǎn)生沖突。即遙控器發(fā)送的信號會干擾超聲波對距離的判斷,考慮到黑色的紙可以較好的吸收紅外信號,為了減小干擾。我們在小車的車上,靠近超聲波模塊的地方,貼上了黑色紙張。減小紅外信號對超聲波模塊的干擾。測試證明,效果很明顯。基本解決了遙控器發(fā)射的紅外信號對超聲波的干擾。小車與TFT模塊,霍爾測速上的通信。通過SPI接口,實現(xiàn)STM32與STC89C52的通信。把霍爾元件測得的車速,超聲波模塊測得的距離實時傳送到STC89C52控制的TFT顯示器上。實現(xiàn)測量數(shù)據(jù)的可視化,直觀化。主函數(shù)為:int main()RCC_Config();GPIO_Configuration();GPIOB-BRR = 0

42、x100; /初始化蜂鳴器-關(guān)閉GPIOD-BRR = 0X03; /關(guān)掉尾燈Delay_ms(1000); /消除上電時,脈沖導致的莫名其妙的中斷操作。/*4個外部中斷*/EXTI0_Configration(); /左邊黑線檢測EXTI1_Configration(); /中間黑線檢測EXTI2_Configration(); /右邊黑線檢測EXTI3_Configration(); /紅外控制端口TIM3_Configuration(); /定時器配置,用于超聲波測距while(1) KeepDistance();Delay(100); /控制采樣時間。 課程設(shè)計成績評定表成績評定項 目比例得 分平時成績(百分制記分)30%業(yè)務(wù)考核成績(百分制記分)70%總評成績(百分制記分)100%評定等級優(yōu) 良 中 及格 不及格指導教師(簽名):20 年 月 日18

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

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!