北航機電系嵌入式實驗報告_第1頁
北航機電系嵌入式實驗報告_第2頁
北航機電系嵌入式實驗報告_第3頁
北航機電系嵌入式實驗報告_第4頁
北航機電系嵌入式實驗報告_第5頁
已閱讀5頁,還剩10頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

1、組別嵌入式系統(tǒng)實驗報告項目名稱:巡線、直線軌跡智能車學號姓名主要工作指導老師:助教:2014年6月17目錄1 選題思路11.1 創(chuàng)意來源11.1.1 助教指導12 實現(xiàn)方案22.1硬件分配22.1.1 紅外傳感器ADC22.1.2 TIM計數(shù)和PWM輸出控制電機22.1.3碼盤22.1.4 EXTI中斷處理22.1.5 運行狀態(tài)指示22.2 USART串口23 程序流程圖34 關鍵代碼注解44.1 巡線44.1.1 main函數(shù)循環(huán)while(1)44.2直線軌跡54.2.1Main函數(shù)while(1)54.2.2中斷處理子程序64.2.3核心算法:電機PID控制65 調(diào)試問題86 現(xiàn)象及輸出

2、97 實驗課感想107.1課上的收獲107.2意見與建議10參考資料11 第 組 嵌入式實驗報告 巡線、直線軌跡智能車1 選題思路1.1 創(chuàng)意來源1.1.1 助教指導1.1.2 主題確定近十周的學習,讓我們初步掌握了STM32的應用方法,初步擬定小車工作的三種方式:巡線、避障、走直線軌跡。在實際的小車結(jié)構(gòu)改造、代碼編寫過程中,我們發(fā)現(xiàn)巡線和避障的原理、代碼編寫等過程存在很大的重疊性,于是就放棄了避障功能,僅保留巡線和走直線軌跡兩個功能,重點放在提高小車行走精度,降低失誤率上。在最后的展示環(huán)節(jié),智能車也沒讓我們失望,過急轉(zhuǎn)彎時敏銳的巡線功能和地面行走所畫出筆直的軌跡也得到了老師的高度贊揚!2 實

3、現(xiàn)方案2.1硬件分配2.1.1 紅外傳感器ADC1. 傳感器排列順序:在小車車頭,從右往左依次是AD0 AD3。 2.數(shù)據(jù)檢測:當檢測到黑線時,采樣的AD值變大(AD0變小)。使用AD0、AD1、AD2和AD3四個傳感器進行巡線,便于應對各種復雜路況,提高小車的適應性。2.1.2 TIM計數(shù)和PWM輸出控制電機TIM1每隔10ms對脈沖信號進行采樣累加。TIM2通道2對小車右輪進行碼盤脈沖信號的計數(shù)。TIM3通道3和通道4輸出PWM控制兩個電機。TIM4通道1對小車左輪進行碼盤脈沖信號的計數(shù)。2.1.3碼盤從直流伺服電機引出的 6 根線中,Output1 和 Output2 用于控制電機的轉(zhuǎn)速

4、和正反轉(zhuǎn),VDD 用于給碼盤供電,Encoder1A 和 Encoder1B 用于輸出脈沖信號。2.1.4 EXTI中斷處理EXTI中斷為外部按鍵中斷,按鍵中斷功能分配如下:S1切換至方式0(無IPD算法的直線軌跡行走),S2切換至方式1(有IPD算法的直線軌跡行走)。在按鍵中斷響應的過程中,加入防抖動處理,使切換更加準確高效。2.1.5 運行狀態(tài)指示通過LED的亮滅來指示小車走直線軌跡時的運行狀態(tài)。LED1亮小車運行方式是方式0,LED2亮小車運行方式是方式1。2.2 USART串口用串口調(diào)試助手顯示AD值,便于程序的調(diào)試。3 程序流程圖4 關鍵代碼注解4.1 巡線 4.1.1 main函數(shù)

5、循環(huán)while(1) while (1) ADC_Ch0_Res = ADC_RegularConvertedValueTab0 - ADC_Calibration_DR; ADC_Ch1_Res = ADC_RegularConvertedValueTab1 - ADC_Calibration_DR; ADC_Ch2_Res = ADC_RegularConvertedValueTab2 - ADC_Calibration_DR; ADC_Ch3_Res = ADC_RegularConvertedValueTab3 - ADC_Calibration_DR; /AD值采集完畢 if(ADC

6、_Ch3_Res>10000&&ADC_Ch0_Res<600) /優(yōu)先考慮兩側(cè)的AD采集數(shù)值來控制小車前進方向 Forward_Cmd(); /前進直行 else if(ADC_Ch3_Res>10000) SetSpeed(RightWheel, 90); /右輪正轉(zhuǎn) SetSpeed(LeftWheel, -60); /左輪反轉(zhuǎn) Delayb(0x111111); /延時處理,急轉(zhuǎn)彎更充分 else if(ADC_Ch0_Res<600) SetSpeed(LeftWheel, 90); /左輪正轉(zhuǎn) SetSpeed(RightWheel,-60)

7、; /右輪反轉(zhuǎn) Delayb(0x111111); /延時處理,急轉(zhuǎn)彎更充分 else if(ADC_Ch1_Res>30000&&ADC_Ch2_Res>30000) Forward_Cmd(); /直行前進 else if(ADC_Ch2_Res>30000) SetSpeed(RightWheel, 80); /右輪正轉(zhuǎn) SetSpeed(LeftWheel, 0); /左輪不轉(zhuǎn) else if(ADC_Ch1_Res>30000) SetSpeed(RightWheel,0); /右輪不轉(zhuǎn) SetSpeed(LeftWheel, 80); /左輪

8、正轉(zhuǎn) else Forward_Cmd(); /前進直行 4.2直線軌跡4.2.1Main函數(shù)while(1)/定義PID的比例系數(shù)Kp,積分系數(shù)Ki和微分系數(shù)Kd(其參數(shù)值為實驗多次得出)double Kp=0.5;double Ki=0.05;double Kd=9;while (1) if(flag=1) /方式1,進入PID算法控制的直線軌跡行走 if(step=10000)/PID采樣時間 in_value=Pulse_A+Pulse_B;/A脈沖數(shù)為正,B脈沖數(shù)為負,相加得脈沖差值 Ek=in_value;/脈沖差值記錄 if(Ek<50&&Ek>-50

9、) SumErr+=Ek;/脈沖差值累加,積分 else SumErr=0; out_value=Kp*Ek+SumErr*Ki+Kd*(Ek-Ek-1);/IPD算法控制 Ek-1=Ek; printf("rn e %d",Ek);/串口調(diào)試助手顯示兩輪脈沖數(shù)差值,便與調(diào)試參數(shù) vl=out_value/5.022+vl; /輸出脈沖數(shù)轉(zhuǎn)化為左輪速度 step=0; step+; SetSpeed(RightWheel,50); SetSpeed(LeftWheel,vl); /使左輪速度逼近右輪速度,完成直線行走 else Forward_Cmd(); 4.2.2中斷處

10、理子程序 *按鍵0中斷處理 flag=0; GPIO_SetBits(GPIOC,GPIO_Pin_13); /LED2滅 GPIO_ResetBits(GPIOA,GPIO_Pin_8); /LED1 亮 Delay(500);EXTI_ClearITPendingBit(EXTI_Line2); /清除中斷標志*按鍵1中斷處理 flag=1; GPIO_SetBits(GPIOA,GPIO_Pin_8); /LED1滅 GPIO_ResetBits(GPIOC,GPIO_Pin_13); /LED2 亮 Delay(500); EXTI_ClearITPendingBit(EXTI_Lin

11、e11); /清除中斷標志*脈沖采樣TIM1中斷處理TIM1_ClearFlag(TIM1_FLAG_Update); TIM1_ITConfig(TIM1_IT_Update,ENABLE); /使能定時器TIM1中斷 TIM1_Cmd(ENABLE); /TIM1用于10ms的定時器4.2.3核心算法:電機PID控制if(step=10000)/延時反饋更準確 in_value=Pulse_A+Pulse_B;/A脈沖數(shù)為正,B脈沖數(shù)為負,相加得脈沖差值 Ek=in_value;/脈沖差值記錄 if(Ek<50&&Ek>-50) SumErr+=Ek;/脈沖差值

12、累加 else SumErr=0; out_value=Kp*Ek+SumErr*Ki+Kd*(Ek-Ek-1);/IPD算法控制 Ek-1=Ek; printf("rn e %d",Ek); vl=out_value/5.022+vl; step=0;5 調(diào)試問題1. 小車巡線時遇到急轉(zhuǎn)彎會方向選擇錯誤。解決辦法:ADC信息采集后,優(yōu)先處理小車兩邊的感應信號,既傳感器0和3的信號,傳感器1、2的采集信息用來輔助進行緩彎和直線行進。2. 串口軟件無法使用解決辦法:串口軟件使用時,盡量先關閉燒寫軟件,每次觀察信號前要先將前面得到的數(shù)據(jù)清零;先點擊“采集數(shù)據(jù)”再啟動小車,方能得

13、到更全面的數(shù)據(jù)。 3. 小車直線行走時,開始直線性可以,遠了之后開始走弧線。解決辦法:累積誤差導致直線性失真。可以通過加入PID算法的反饋機制,解決誤差累計問題,從而實現(xiàn)直線行走。4. 小車直線行走時,無法看出具體的行走軌跡。解決辦法:在小車上固定彩色中性筆,讓小車在白紙上行走,通過筆尖記錄小車的運行軌跡。5. 按鍵中斷響應后,小車運行狀態(tài)轉(zhuǎn)變不及時。解決辦法:加入防抖動環(huán)節(jié)。6 現(xiàn)象及輸出1.巡線: 現(xiàn)象:小車沿著黑線行進。遇到緩彎,通過順利;遇到急轉(zhuǎn)彎,車頭轉(zhuǎn)彎速度會加快,可能會出現(xiàn)輕微抖動。2.直線軌跡 現(xiàn)象:按下按鍵0,進入方式0,加入PID算法的直線軌跡行走,同時LED1亮,小車在白紙上畫出一條筆直的直線;按下按鍵1,進入方式1,未加入PID算法的直線軌跡行走,同時LED2亮,小車在白紙上畫出。7 實驗課感想7.1課上的收獲在本學期嵌入式系統(tǒng)的實驗課上,通過以STM32處理器為控制核心的智能車平臺,同時在助教的指導和幫助下,我們初步掌握了嵌入式系統(tǒng)的開發(fā)流程,在了解嵌入式處理器的架構(gòu)和開發(fā)的基礎上,進行相關功能算法的編寫與實踐。嵌入式系統(tǒng)的理論課比較抽象,有些知識點難于

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論