作者:車
郵箱:692604135@qq.com
學(xué)校:西安工程大學(xué)碩士研究生
方向:機(jī)器視覺、圖像分割、深度學(xué)習(xí)
1. 硬件設(shè)計(jì)–灰度循跡模塊電路設(shè)計(jì)
- 灰度循跡傳感器是主要用于小車沿黑色賽道循跡的傳感器。
- 灰度傳感器利用不同顏色的檢測面對光的反射程度不同,灰度感應(yīng)接收管對不同檢測面返回的光,其阻值也不同的原理進(jìn)行顏色深淺檢測。
- 灰度傳感器LED狀態(tài)指示,傳感器的管子照到灰度值較高的,輸出電平由高變低,對應(yīng)LED亮。此種輸出方式為數(shù)字輸出,即1或0輸出。
2. 軟件設(shè)計(jì)–循跡程序設(shè)計(jì)
- 循跡模塊的設(shè)計(jì)就是要完成小車沿黑線的循跡。在循跡的過程中,要用L298N直流電機(jī)驅(qū)動模塊驅(qū)動直流電機(jī)進(jìn)行前進(jìn)、后退停止操作;并且要通過兩個輪子的差速進(jìn)行左轉(zhuǎn)和右轉(zhuǎn)的轉(zhuǎn)向動作。
- L298N驅(qū)動板可驅(qū)動2路直流電機(jī),使能端ENA、ENB為高電平時有效,控制方式及直流電機(jī)狀態(tài)表如下表所示。
在灰度巡檢模塊的設(shè)計(jì)中,需要通過根據(jù)R、M、L三個引腳反饋給主控板數(shù)字信號0或1,對小車做出相應(yīng)的操作。對應(yīng)的邏輯關(guān)系如下表所示。
執(zhí)行一次循跡程序的流程圖如下圖所示。
下圖(a)~(f)是模擬的灰度巡線傳感器在循跡過程中的幾種情況,模擬的灰度巡線模塊也代表了小車的方向。
循跡模塊配了三個GPIO_Input引腳,分別命名為L_Pin、M_Pin、R_Pin引腳,分別與主控板的PE11、PE12、PD10引腳相連。
循跡程序設(shè)計(jì)的部分代碼如下:
if(HAL_GPIO_ReadPin(GPIOE,R_Pin))//讀取R_Pin的值;
dir = dir | 1;//把R_Pin的值放在dir第八位;
else dir = dir & 0xFE;//給R_Pin置零;
if(HAL_GPIO_ReadPin(GPIOE,M_Pin))//讀取M_Pin的值;
dir = dir | 2;//把M_Pin的值放在dir第七位;
else dir = dir & 0xFD;//給M_Pin置零;
if(HAL_GPIO_ReadPin(GPIOD,L_Pin))//讀取L_Pin的值;
dir = dir | 4;//把L_Pin的值放在dir第六位;
else dir = dir & 0xFB;//給L_Pin置零;
case 0: LEFT(); //左轉(zhuǎn);
case 1: RIGHT(); //右轉(zhuǎn);
case 2: GO(); //直行;
case 5: STOP(); //停止。
在循跡的過程中,需要用到很多控制函數(shù):直行GO函數(shù)、停止STOP函數(shù)、左轉(zhuǎn)LEFT函數(shù)、右轉(zhuǎn)RIGHT函數(shù)。舉例左轉(zhuǎn)函數(shù)如下。
左轉(zhuǎn)LEFT()函數(shù)部分代碼如下:
HAL_GPIO_WritePin(GPIOA, IN1_Pin|IN4_Pin, GPIO_PIN_RESET);
//給IN1_Pin、IN4_Pin引腳賦值0;
HAL_GPIO_WritePin(GPIOA, IN2_Pin|IN3_Pin, GPIO_PIN_SET);
//給IN2_Pin、IN3_Pin引腳賦值1;
HAL_Delay(5);//延遲5ms,使電機(jī)受到的損傷更小。
3. 燒錄程序
3.1 編寫各部分代碼
在Keil ARM中寫程序的時候,由于一些初始化和配置在STM32CubeMX的原因,必須在BEGIN和END之間寫代碼,如圖所示。如果寫錯地方,代碼在點(diǎn)擊編譯Rebuild之后就會被吞噬。
3.2 配置所用到的主芯片(STM32F407VET6)
點(diǎn)擊Options for Target,在Device里選擇用到的主芯片,本設(shè)計(jì)里用到的主芯片是STM32F407VET6,所以在這里選擇STM32F407VETx,點(diǎn)擊OK。
3.3 配置仿真器ST-Link
- 選擇完器件之后,繼續(xù)選擇Options for Target的Debug,選擇Use并且根據(jù)自己的仿真器選擇ST-Link Debugger。
- 點(diǎn)擊ST-Link Debugger右邊的setings,左邊一列自動選擇了ST-LINK/V2
- 如果可以識別到仿真器,那么SW Devive會出現(xiàn)0x2BA01447 ARM CoreSight SW-DP(ARM Core),然后點(diǎn)擊確定,
仿真器配置成功。演示如圖所示。
3.4 添加Flash
選擇Options for Target的Utilities頁面的Settings,然后點(diǎn)擊Settings頁面里面的Add,選擇512k的STM32F4xx 512kB Flash。然后點(diǎn)擊確定,這時候會返回上一頁面,點(diǎn)擊這個界面的OK。演示如圖所示。
3.5 編譯代碼
- 如果編譯后有問題,那么可以去Build Output窗口中看出現(xiàn)的錯誤,并根據(jù)出現(xiàn)錯誤的行提示和關(guān)鍵字提示去修改代碼,修改完成后繼續(xù)保存下載編譯代碼,直至沒有出現(xiàn)錯誤為止;
- 如果編譯后沒有錯誤,Build Output會顯示0 Error(s),工程文件編譯成功。
3.6下載程序
將ST-LINK仿真器一端插進(jìn)STM32的SWD接口,另一端與電腦相連,這時候紅燈亮起,下載時實(shí)物連接圖如圖所示。
點(diǎn)擊Keil ARM軟件中的LOAD,下載時,仿真器會紅黃燈交叉閃爍。如圖所示。
工程文件下載成功后,Build Output窗口會顯示Programming Done、Verify OK、Flash Load Finished,表示下載完成,工程文件下載成功如圖所示。
工程文件下載完成之后,就可以給STM32主控板和L298N直流電機(jī)驅(qū)動模塊上電。
4. 測試
4.1 直流電機(jī)驅(qū)動模塊測試
4.1.1 前進(jìn)、后退和停止
在直流電機(jī)驅(qū)動模塊的測試中,需要給IN1-IN4引腳賦值高、低電平,確保直流電機(jī)會正轉(zhuǎn)、反轉(zhuǎn)以及制動。首先給STM32主控板和L298N直流電機(jī)驅(qū)動模塊通電。
STM32供電實(shí)物展示
L298N直流電機(jī)驅(qū)動模塊通電后實(shí)物展示
在這里,直接給IN1~IN4引腳賦值高、低電平來驅(qū)動小車前進(jìn)、后退以及停止。
-
代碼中給IN1~IN4引腳賦值RESET(0)、SET(1)、RESET(0)、SET(1);小車可以前進(jìn)。
-
給IN1-IN4引腳賦值SET(1)、RESET(0)、SET(1)、RESET(0);小車可以后退。
4.1.2 左轉(zhuǎn)、右轉(zhuǎn)
STM32主控板輸出兩路PWM波形到L298N電機(jī)驅(qū)動模塊的ENA和ENB使能端口,通過調(diào)節(jié)兩路PWM波形占空比以此控制小車的車速。用示波器來顯示測得的占空比的大小和輸出頻率的大小。示波器與STM32的連接實(shí)物圖如圖所示。
-
當(dāng)兩個脈沖為Pulse=320,根據(jù)公式計(jì)算占空比為59.9%輸出的兩路PWM波的占空比=60.00%,頻率=10.00kHz。輸出的PWM波用示波器顯示如圖所示。
-
當(dāng)脈沖1為Pulse=320,脈沖2為Pulse=479,兩路PWM波的占空比為59.9%和49.9%。輸出的兩路PWM波的占空比分別為60.00%和40.00%。這時,小車右轉(zhuǎn)。
-
當(dāng)脈沖1為Pulse=479,脈沖2為Pulse=320,輸出的兩路PWM波的占空比分別為40.00%和60.00%。輸出的PWM波用示波器顯示如圖所示。這時,小車左轉(zhuǎn)。
4.2 灰度循跡模塊測試
設(shè)計(jì)了一個橢圓形環(huán)道的循跡。循跡賽道如圖所示。
在灰度循跡模塊的測試中,需要先編寫這一模塊的代碼,然后根據(jù)前面的步驟下載、編譯代碼,給STM32上電、下載工程文件。這時候,給STM32和L298N直流電機(jī)驅(qū)動模塊上電,然后把小車放在賽道上,讓其進(jìn)行循跡。正常情況如圖所示,這時灰度傳感器的返回值為010,電機(jī)正轉(zhuǎn),小車直行。
小車在循跡過程中會一直進(jìn)行調(diào)整,圖5-23小車循跡過程中偏右,這時灰度傳感器的返回值為110,右電機(jī)正轉(zhuǎn),左電機(jī)反轉(zhuǎn),小車進(jìn)行左轉(zhuǎn);圖5-23小車偏左的,這時灰度傳感器的返回值為001,左電機(jī)正轉(zhuǎn),右電機(jī)反轉(zhuǎn),小車進(jìn)行右轉(zhuǎn)操作。
(經(jīng)過多次反復(fù)測試,小車在彎度比較大的賽道上難以進(jìn)行循跡。原因本次實(shí)驗(yàn)使用的小車是沒有轉(zhuǎn)向功能的小車,必須通過兩個輪子進(jìn)行差速轉(zhuǎn)彎。當(dāng)彎度太大時,小車還沒反應(yīng)過來,就已經(jīng)沖出賽道了,還有就是小車的車體比較重,轉(zhuǎn)彎原本就需要更大的動力。所以此實(shí)驗(yàn)中不能在彎度較大的賽道上循跡。)文章來源:http://www.zghlxwxcb.cn/news/detail-470379.html
5. 結(jié)論
測試結(jié)果表明,小車可以在彎度比較平緩的賽道上進(jìn)行循跡。文章來源地址http://www.zghlxwxcb.cn/news/detail-470379.html
到了這里,關(guān)于基于STM32的智能巡檢小車系統(tǒng)設(shè)計(jì)--循跡模塊設(shè)計(jì)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!