依靠黑白間隔點巡跡的四輪電動爬坡小車
- 題目
- 第一天
- 第二天
- 第三天
- 第四天
2020年電賽終于結束了,因為疫情的原因,今年的電賽也推遲了,所以我先參加了智能車競賽再參加的電子設計競賽,準備時間不是很充分,就準備了一個國慶的時間,因此我們準備的小車就是智能車的舵機和電機,為了符合比賽要求,底板是我們重新打的,然后在國慶期間,我找到了Ti芯片的MSP430F5529的硬體設備庫并且分別將S3010舵機,RS380電機,按鍵,撥碼,OLED顯示屏等外設調通,小車上使用了智能車的穩壓電源和電機驅動,至此完成小車運行的任務,調通了一輛可以運行的小車,
題目

我們選擇了C題的小車控制題目,拿到了題目,我們當時“膨脹”了,以為很簡單哈哈哈,結果現實打了我們一個大耳光啊哈哈,
第一天
第一天的早上我們討論了一下小車前輪的安裝情況(其實并沒有啥用),然后開始搭車,因為我國慶摸魚了,沒有搭出一輛可以跑的車子,只是把外設調通了而已,所以第一天的白天我和隊友A就是在搭一輛可以下地跑的小車,
看了題目之后我們覺得小車控制速度非常關鍵,但是我們用的MSP430F5529芯片只有4個定時器,一個產生電機PWM,一個產生舵機PWM,還有一個做定時中斷使用,而后面2路的正交解碼信號也需要2個定時中斷進行解碼,因此我使用了2塊Ti芯片,芯片A進行正交解碼,并且以波特率115200通過串口將資料傳輸給芯片B,由芯片B進行小車外設的控制
512線正交解碼時序圖:
當后車輪往前轉的時候,編碼器方向輸出為高電平(1),反之為低電平(0),同時輸出脈沖數(當編碼器轉完一圈的時候輸出512個脈沖,因此是512線編碼器)表示輪子轉過的角度,基于這種資料傳輸方式我寫了對應的正交解碼程式,
以后左輪為例,右輪相同,初始化一個定時器作為脈沖計數,具體配置方式如下,我用的是大佬的開源庫,大家最好還是用官方的庫吧,同時設定GPIO口判斷后輪轉動的方向,這些都是小問題,

接下來是在脈沖中斷函式中做的事情了,每次脈沖讀取中斷觸發一次,便進入一次中斷函式,因此在中斷函式中進行脈沖計數變數的自加操作,

然后在定時中斷(我設定了50ms)里面通過前面的g_left_over_flow變數數值結合脈沖計數函式獲得脈沖數,然后通過串口發送出去,資料發送完畢之后將變數清零,同時將脈沖計數器里面的脈沖計數清零,至此完成了脈沖計數采集以及發送,

至于巡跡模塊,我們當時看了準備材料,買了一個openmv攝像頭,打算用這個來進行黑白巡線,所以隊友B在調openmv的尋跡代碼,下午隊友B也做了題目里面要求的賽道,
晚上在調芯片B的串口接收程式,摸魚中進行度過,看了隊友B調出來的openmv效果不是很滿意,仔細詢問,居然全是調庫,遂噴其一頓,結束了第一天的摸魚作業,回寢室睡了個美滋滋的覺,
第二天
第一天晚上芯片B串口接收脈沖資料還有些問題,具體的bug是這樣的:
串口實際發送的資料如下圖:

比如芯片A發送了資料0112;的資料給芯片b,芯片對該資料進行解碼,得到脈沖數為112,演算法思路是:當接收到0之后跳過該位,當接收到;之后表示這個數字的接收已經完成了,但是這個演算法有個問題就是資料0110;會被識別成11, 第二天早上去實驗室的時候我才發現了這個bug,并將其修正過來,
早上我們還在討論黑白間隔點的巡跡方案,因為我們之前打算用攝像頭的,但是我們之前做的車子實在是太長了,所以攝像頭放不下了,而且擬合的巡跡線也不是很好,因此我們不得不尋找新的巡跡模塊,我的騷想法又冒了出來,想用光電巡跡模塊,但是我們車子實在是太長了,因此這個光電傳感器的擺放位置被大大的限制了,所以第二天我們幾乎就是在討論光電巡跡的方案,
終于在晚上我們決定了光電擺放方案以及巡跡方案,
方案如下:
我們通過推車發現當小車在入彎的某個點打最大打角之后剛好可以以完美的姿態通過彎道,因此我們在小車前面放了2個光電傳感器用于基本的黑白點巡跡,當左邊光電探測到黑線的時候就往左給一個打角,當右邊光電探測到黑線的時候往右給一個打角,從而保證小車可以基本沿著直線行駛,接下來就是過彎道的思路了,我們在小車底板的舵機附近開了一個視窗,并且在視窗里面放置了一個光電傳感器,這個光電傳感器放在了小車中線偏右的地方,一般情況下這個光電是不會檢測到黑塊的,但是在入彎的時候卻會檢測到黑塊,因此在這個光電傳感器檢測到黑塊的時候就把小車往右邊打角死,并且通過編碼器積分保證小車通過彎道之后再切換到正常直線巡跡,最后當小車前面2個光電傳感器同時檢測到黑塊之后進行停車,
第二天白天我主要做了代碼整體框架的建立,包括電機PI除錯以及整體邏輯的建立,晚上隊友A,B用打孔機在地板上開了一個很大的視窗,
第三天
這天是我們進展最大的一天,也是我最遺憾的一天!
當天早上我們完成了第二天定下來的傳感器擺放位置,以及巡跡和控制方案,一氣呵成,在早上10點鐘的時候完成了題目的1,2題要求!下午修繕細節,完成了20度的測驗!
因為隊友A鋪設信號線的時候位置擺放有錯誤,未滿足比賽要求,然后我做了最錯誤的一個決定:重做引導線,本來明明可以撕下來貼到上面一點就可以解決的事,我居然讓A重新貼一條,我真想穿越回去給自己兩巴掌啊,引導線重貼了之后小車就跑不了了,導致的結果就是晚上隊友B花了40min重貼引導線,我和隊友B畫了8個小時重新恢復小車的運行姿態,
我在事后進行了深刻的反思,這可能是我大學做的唯一一件會后悔的事情吧,我還原了當時我自己深處的內心活動抽絲剝繭之后,我發現我當時最主要的思考就是:把同一根引導線撕下來之后再貼過就會粘不牢,其實當時這個問題明明可以用雙面膠來解決的,我發現我有時候總會做一些完全沒有必要的事情呢,僅僅是因為我的感性思維在起作用,沒有仔細理性的思考權衡這件事情的利弊,我覺得這個是我在此次電賽中學到最最最重要的知識,
第四天
在第四天,我們將傳感器的位置進行了微調,勉強完成了小車運行,但是最高的角度也只有10度,而且成功率也不是100%,但是最后還是裝了箱,在裝箱之后我還是感覺到了如釋重負,
果不其然,測評結果不如意,拿了個不太好看的獎項,總之,算是一次比較遺憾的經歷吧,但是我一定會汲取經驗,不斷成長!
加油,奧利給!

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/186858.html
標籤:其他
上一篇:RFID環衛車輛管理系統應用方案
