基于STM32的智能循迹避障小车
【1】研究背景
隨著計算機,微電子技術(shù)的快速發(fā)展,智能化技術(shù)的開發(fā)越來越快,智能程度也越來越高,應用的范圍也得到了極大的擴展。因此,基于嵌入式技術(shù)的智能小車應運而生。
近來兩年,智能小車在生活中有著廣泛的應用,如自動駕駛技術(shù)、引導機器人、自動化生產(chǎn)線上的物料陪送機器人等。循跡小車也是智能小車的一種,歸屬于機器人的范疇。目前,自動駕駛和智能小車的應用也越來越廣泛。
基于STM32F103主控板搭建智能小車的控制系統(tǒng),并采用模塊化的設(shè)計思想編寫控制系統(tǒng)程序,為能夠在復雜地形下進行巡檢作業(yè)的輪式小車研究提供理論依據(jù)。
【2】實訓環(huán)境
(一) 實訓環(huán)境
Java環(huán)境、STM32CubeMX、Keil5、st-link v2驅(qū)動安裝、Pl2303驅(qū)動安裝
(二) 環(huán)境介紹
(1)Java 環(huán)境:
STM32CubeMX環(huán)境需要Java支持,所以第一步必須要安裝Java
雙擊Java安裝包:~/stm32環(huán)境必備/jdk-7u60-windows-x64.exe
注意: 安裝過程中,直接選擇下一步,請不要更改文件安裝路徑
檢測java是否安裝成功:打開cmd(左下角搜索cmd或者windows+r運行內(nèi)輸入cmd),輸入java –version,顯示如下信息,則說明安裝成功,如果安裝不成功,查看下頁app,進行設(shè)置。
(2) STM32CubeMX
1.雙擊打開文件:~/stm32環(huán)境必備/ SetupSTM32CubeMX-4.9.0.exe
2.直接選擇下一步即可(注意:不要修改安裝路徑,安裝路徑不能有中文)
3.安裝成功后,桌面上會有圖標
4.如果圖標上面不顯示圖案,點擊圖標,右鍵—屬性—更改圖標,雙擊圖標,確定即可
5.導入芯片包
5.1.雙擊圖標打開軟件,選擇Help—Install New Libraries—From…
5.2雙擊鼠標選擇文件:~/stm32環(huán)境必備/ stm32cubef1_1.3.1.zip,等待自動加載完成即可
(3) Keil5
1.雙擊打開文件:~/stm32環(huán)境必備/mdk514.exe,按照提示安裝,選擇默認路徑即可,安裝時間較長,請耐心等待
2.安裝完成之后可能會彈出一個窗口,關(guān)閉即可
3.安裝芯片包: ~/stm32環(huán)境必備/ Keil.STM32F1xx_DFP.1.1.0.pack
(4) st-link v2 驅(qū)動安裝
st-link v2是我們下載stm32程序的接口,該硬件需要安裝驅(qū)動,方法如下:
找到驅(qū)動文件:~/stm32環(huán)境必備/st-link_v2_usbdriver.exe,直接安裝即可
檢測安裝是否成功:右鍵計算機—屬性—設(shè)備管理器,如果安裝成功則會有如下顯示:
如果安裝完成之后還是無法下載,再安裝如下驅(qū)動:
~/stm32環(huán)境必備/ST-LINK_V2/stlink_winusb_install.bat
(5) Pl2303 驅(qū)動安裝
Pl2303是USB轉(zhuǎn)串口上面的主要芯片,它需要安裝驅(qū)動才能正常工作,安裝方法如下:
找到驅(qū)動文件:~/stm32環(huán)境必備/PL2303Driver/PL-2303 Win7(X32)(X64) Driver Installer.exe,直接安裝即可
如果安裝完成之后還是無法下載,再安裝如下驅(qū)動:~/stm32環(huán)境必備/PL2303Driver/PL2303_Prolific_DriverInstaller_v1.10.0.exe
【3】項目物聯(lián)網(wǎng)硬件搭建
本項目利用STM32作為智能小車的主控制器來驅(qū)動智能小車的直流電機工作,電機驅(qū)動芯片采用L298N微型集成電路電機驅(qū)動芯片,配合STM32核心板使用實現(xiàn)四個直流電機運行和PWM軟件調(diào)速,通過改變直流電機占空比的電壓來改變平均電壓的數(shù)值,從而改變電機的轉(zhuǎn)速變化來驅(qū)動小車運行。智能小車行駛的狀態(tài)有:前進、后退、左轉(zhuǎn)、右轉(zhuǎn)和停止。當智能小車在行駛過程中遇到障礙物,超聲波避障檢測模塊檢測周圍障礙物,小車自動停止或轉(zhuǎn)向。
硬件系統(tǒng)主要由單片機主控模塊、電源模塊、三色LED燈模塊、電機驅(qū)動模塊、超聲波避障模塊和控制終端模塊組成。硬件系統(tǒng)框圖如圖:
(1) 主控模塊
主控模塊采用STM32F103為主控制器,STM32F103屬于中低端的32位ARM微控制器,該系列芯片是意法半導體(ST)公司出品,其內(nèi)核是Cortex-M3。該系列芯片按片內(nèi)Flash的大小可分為三大類:小容量(16K和32K)、中容量(64K和128K)、大容量(256K、384K和512K)。STM32F103可使用keil語言編譯,支持ST Link-SWD在線調(diào)試,主要用于收集信息、處理數(shù)據(jù)、協(xié)調(diào)系統(tǒng)中的每個功能模塊預計要完成的任務(wù)。
(2) 電源模塊
電源模塊在小車的運行過程中,需要給單片機、電機、各大模塊及傳感器供電。
(3) 三色LED燈模塊
三色LED燈模塊是R,G,B三個管芯的LED。工作原理是:由紅綠藍三基色混色實現(xiàn)七種顏色的變化,采用輸出波形的脈寬調(diào)制,即調(diào)節(jié)LED燈導通的占空比,在掃描速度很快的情況下,利用人的視覺惰性達到漸變的效果。
(4) 電機驅(qū)動模塊
電機驅(qū)動模塊采用L298N為電機驅(qū)動芯片。L298N是ST公司生產(chǎn)的一種高電壓、大電流電機驅(qū)動芯片。主要特點是:工作電壓高,最高工作電壓可達46V;輸出電流大,瞬間峰值電流可達3A,持續(xù)工作電流為2A;額定功率25W。內(nèi)含兩個H橋高電壓大電流全橋式驅(qū)動器,可以用來驅(qū)動直流電動機和步進電動機、繼電器線圈等感性負載;采用標準邏輯電平信號控制;具有兩個使能控制端,在不受輸入信號影響的情況下允許或禁止器件工作有一個邏輯電源輸入端,使內(nèi)部邏輯電路部分在低電壓下工作;可以外接檢測電阻,將變化量反饋給控制電路。使用L298N芯片驅(qū)動電機,該芯片可以驅(qū)動一臺兩相步進電機或四相步進電機,也可以驅(qū)動兩臺直流電機,并聯(lián)時可以驅(qū)動四臺電機。本次項目將L298N配合STM32核心板無縫對插使用,實現(xiàn)無損擴展并對四個馬達進行驅(qū)動和PWM調(diào)速。
(5) 超聲波避障模塊
原理:在模塊上電以后,給Trig管腳一個持續(xù)20us以上的高電平,該模塊可以開始工作。這時,該模塊會自動從這一個“大喇叭”發(fā)送8個40KHZ的方波,并將Echo管腳拉高,然后自動檢測是否有信號返回。如果返回,Echo管腳便拉低,那么Echo高電平持續(xù)的時間就是超聲波從發(fā)送到接收的時間。我們要做的就是開啟超聲波模塊,然后再通過Echo知道超聲波從發(fā)送到接收的時間就可以。
(6) 紅外感應模塊
光電開關(guān)又稱紅外光電傳感器,反饋反射型。發(fā)射口不間斷發(fā)射光束,接收器把收到的光能量轉(zhuǎn)換為電流,傳輸給后面的檢測線路
可以正常反射 → 低電平;紅外光被吸收 → 高電平。
【4】實訓具體任務(wù)及內(nèi)容
1.開機后紅燈閃爍3次,黃燈閃爍2次,然后亮綠燈,開始循跡行駛
2.行駛過程需根據(jù)軌道能平緩調(diào)整方向
3.行駛過程前面20cm范圍內(nèi)有障礙物,需能停止,并亮紅燈,障礙物移開后,需亮綠燈并開始前行
【5】實訓結(jié)果(項目運行說明及截圖)
(一)項目運行說明
在Application/User中新建LED.c 、redlight.c 、delay.c 、car.c 四個函數(shù),在四個函數(shù)中分別建立相對應的函數(shù),需要用到某個函數(shù)直接在主函數(shù)里調(diào)用,就可以實現(xiàn)功能。
(1) 在LED.c中自定義ChangeLed函數(shù),采用PWM時鐘延時使三色LED閃爍,使用 HAL 庫中的__HAL_TIM_SetCompare 修改脈沖寬度來修改占空比,在主函數(shù)中調(diào)用修改3個通道的值可以修改所亮燈的顏色以及亮度。
(2) 在redlight.h中定義HASLEFT、HASLEFTMID、HASMIDDLE、HASRIGHTMID、HASRIGHT、HASNOTHING六個參數(shù)值;在redlight.c中自定義ScanRed函數(shù),使用 HAL 庫中的HAL_GPIO_ReadPin 判斷讀取的引腳是最左邊、最右邊、左中、右中或中間,并返回相應的參數(shù)值。在主函數(shù)中引入switch…case語句,通過判斷HASLEFT等幾個參數(shù)值,去執(zhí)行相應的語句,使小車做出相對應的動作。
(3) 在delay.c中,自定義兩個延時函數(shù)delay_nus和delay_nms,在主函數(shù)中調(diào)用完成延時。
(4) 在car.c中,自定義ChangeSpeed函數(shù),使用 HAL 庫中的__HAL_TIM_SetCompare 修改脈沖寬度來修改占空比,設(shè)定兩個通道left、right。再自定義left_go、left_stop、left_back、right_go、right_stop、right_back六個函數(shù),使用 HAL 庫中的HAL_GPIO_WritePin 讀取引腳是RESET或SET,通過改變left、right的速度FULL_Speed或ZeroSpeed,判斷小車左右輪前進或后退。
【6】實訓小結(jié)
1.闡述實訓過程遇到的難題及解決辦法,給自己帶來的收獲;
(一)難題及解決辦法:
(1)STM32CubeMX導入到Keil uVision5中,顯示“The ARM C/C++ Compiler 已停止工作,由于出現(xiàn)問題,程序停止正常工作。Windows將關(guān)閉程序,并會在有可用的解決方案時通知你。”,找了好多資料,修改中文用戶名,配置環(huán)境變量等,試了很多種方法,都沒有解決。后來問了王老師,安裝了另外一個版本的Keil uVision5。
(2)驅(qū)動安裝成功,但是在設(shè)備管理器無法顯示,或者就是有一個“!”,安裝存在問題,也是安裝了另一個版本的ST-LINK_V2驅(qū)動。
(3)串口接口接觸不良,插頭插在電腦上顯示設(shè)備“USB2.0-Serial”有“!”,無法與小車之間構(gòu)成連接。
(4)串口連接成功且PL2303顯示安裝成功,卻無法檢測到串口。
(5)循跡行駛的時候,小車行駛時的速度快,來不及調(diào)整好方向就繼續(xù)往前走,導致沒有沿著黑膠帶行駛,且左輪的轉(zhuǎn)速較右輪慢,通過修改速度FULL_Speed以及左右方向調(diào)整的延時delay_nms去調(diào)整小車整體的循跡方向。
(二)收獲:
本學期為期一周的嵌入式實訓在不知不覺中結(jié)束了,雖說這次實訓的時間不是很長,但是感覺自己收獲頗豐,不僅學習到了一些新知識,回顧了以前的一些快要遺忘的知識點,而且使自己的學習目標更加明確,學習方法更加完善,也體會到了軟件開發(fā)的趣味,更加認識到了自己在軟件編程及學習上的一些不足之處。
此次實訓是由西安的華清遠見公司的王樂王老師帶我們完成的。項目的實施方式是團隊分組合作,共同完成,讓我們體會到了公司開發(fā)項目的氛圍。我們一人一臺電腦,老師邊講邊練。雖然有一些實驗,我們之前也都學習了解過,但是大多停留在淺層次,實際做項目卻很少。這次實訓給了我們一個很好的邊學習邊實踐的機會,對我們深入學習這些技術(shù)有很大幫助,深刻體會到了這些技術(shù)的實用性。每當自己成功調(diào)試一段代碼或者通過自己的努力克服一個技術(shù)困難,滿滿的成就感。
沒有做實驗之前,總是覺得做起來很簡單,可是實驗過程中,往往會出現(xiàn)很多意料不到的問題,比如,在緊急時刻,電腦突然卡了,寫的代碼什么的就需要再重新去寫。剛開始了解實訓題目的時候,感覺很難去完成,經(jīng)過這幾天的學習,一步一步的,發(fā)現(xiàn)也沒有那么難。它讓我學會了如何通過自己的努力去了解一件新事物,更重要的是端正自己的學習態(tài)度,只要真正下功夫去學習,才能有收獲;學會了如何去分析問題,遇到問題時,不能急躁,要去找出問題的根源,進而去解決。讓我深刻意識到“實踐出真知”;沒有實踐,就不會知道實驗中會出現(xiàn)什么問題,也就不能從中得到收獲。
此次實訓最大的收獲不是我學到了多少知識而是這幾天實訓給我的感悟:首先是心態(tài)。一定要有一個積極的心態(tài),獨立解決問題的意識,培養(yǎng)扎實基礎(chǔ)的認識,不要什么東西都感覺很簡單就不去做了或者不屑一顧。有自己的東西自己的付出才會有程序運行成功時的喜悅和小自豪,這樣也有助于培養(yǎng)自己的興趣。要時刻牢記態(tài)度決定一切。其次是興趣。學習工作中興趣很關(guān)鍵,一個引發(fā)人積極性的問題,有了興趣就自覺了,效率自然就高了。再次要敢于嘗試和挑戰(zhàn)。不要安于現(xiàn)成,不要害怕失敗,在程序調(diào)試的過程中這點尤為重要,“發(fā)現(xiàn)問題然后解決問題”是一個積累經(jīng)驗的過程,而且很高效。最后要不懈追求。對于源代碼進行不斷的完善,盡可能的實現(xiàn)項目要求。對于初學者或者開發(fā)較少的人來說,大量寫程序還是有必要的,但同時要注意思考,理解其實現(xiàn)的內(nèi)在意義。還可以自己添加一些有意義的功能去實現(xiàn)。當看到自己編寫的程序正常運行時,興趣也會隨之而來。
2.闡述此次實訓對自己實踐能力的影響,對已學專業(yè)知識的認識,對將來工作學習方向的影響;
(1)對自己實踐能力的影響:
實訓是一個有針對性的訓練,跟平常上課不太一樣,平時上完理論課很少有時間上機或者隔幾天才上機聯(lián)系,等到上機時一些東西就遺忘了,很耗費時間。此次實訓,認識到自己的計算機水平還有待提高,要打好基礎(chǔ),才能進一步深入的學習。
(2)對已學專業(yè)知識的認識:
嵌入式軟件開發(fā)應用廣泛而且前景很好,目前正處于人才緊缺的關(guān)口,嵌入式技術(shù)在未來能夠得到更加廣泛的應用。學好嵌入式,C語言很重要,基礎(chǔ)不太好的有必要再學習積累一下這方面的知識。很多東西的學習不是一帆風順也是耗時的,嵌入式也不例外,要想學好必須要下大功夫,還要堅持。這次的實訓讓我明確了:嵌入式系統(tǒng)開發(fā)對于提升我們的系統(tǒng)知識有很大的幫助,尤其是操作系統(tǒng)的知識。嵌入式系統(tǒng)對于知識面的要求很廣,且有一定的深度。
(3)對將來工作學習方向的影響:
一周的實訓,感受到了計算機在我們生活中工作中的運用,這些軟件、程序能讓我們提高工作的效率,更直觀便捷的切入主題。在計算機這個神秘的領(lǐng)域,我感覺自己還有好多東西要學,還有好多東西不懂,但是這也再次堅定了我考研深造的決心。
總結(jié)
以上是生活随笔為你收集整理的基于STM32的智能循迹避障小车的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: web期末大作业 使用HTML+CSS制
- 下一篇: Rails的启动