天天看點

四天四夜,與時間賽跑,緻敬電賽!

作品封箱,電賽終于結束了。

組委會公布題目之後,本來打算做電源的我們,全體懵逼,A題強制性要求用TI公司晶片做控制器,而我們最常用的是STC公司的32系列處理器。C題和D題也與我們前期教育訓練和調試的電路有點關系,但關系不大,題目也挺難,經過讨論,我們在8.7上午确定了比賽題目,H題,電磁炮。确定完題目之後,抓緊找相應子產品,搭電路。作為隊長,主調由我負責,包括編寫代碼。下面我以比賽日期,來講述我的參賽曆程。

8.7上午确定題目之後,隊友負責電磁炮的電路搭建和打炮距離的測試。我負責硬軟體調試。我打算用兩個五相步進電機搭雲台,因為實驗室本來買的雲台是用兩個小舵機搭成的,且不考慮它的轉角精度問題,也考慮到後期還要在雲台上面裝炮筒,Openmv,超音波等等,承重一定要達标。是以我用市場上普遍的倆個五相步進電機作為X軸和Y軸。沒有ULN2003電機驅動子產品,下午趕緊托人去買。根據題目要求,在200cm-300cm,有靶子在一d值,很明顯d值是讓自己測得,并手動輸入距離,實作電磁炮的精準打擊。第一想法就是用超音波,在8.7下午6點的時候,超音波已經調好了,用了STM32F103ZE最小系統闆,加個OLED屏實時顯示檢測到的距離,在程式裡我調用的屏函數,可以顯示到小數點後三位,在200cm-300cm檢測,資料很準确,完全OK!下面我又抓緊調試電機,在用ZE核心闆實作對兩個電機的驅動,ULN2003驅動子產品需要12V的電壓單獨供電,所有要準備一套自己的輔助電源,確定有12V,5V,3.3V的電源供電口,因為我們前期已經準備,是以直接拿來用。在電機驅動電路搭完以後,在程式的主函數While循環裡寫下控制電機1和電機2正反轉4個函數,測試電機和驅動子產品,輔助電源系統是否能夠正常使用。事實證明,都沒有問題,當這些都測試完,已經是8.7晚上九點,接着寫人機互動-鍵盤程式 ,題目要求用按鍵輸入距離和角度,電磁炮可以自動改變方向和距離,說白了不就是用按鍵控制電機轉嗎?簡單!但是考慮到,對兩個變量實作控制,是以需要兩個按鍵實作加減,距離機關是厘米,是以是三位數,角度根據題目要求,在X軸對電機控制兩位數的轉向就可以,是以開始想到的就是按鍵個數問題。距離三位數,三個按鍵,個十百,角度兩位數,個十位,加減還需兩個鍵,還要有确認鍵,加一起,光鍵盤至少就得8個,不行,太多了。到8.7晚上12點有了新的想法,用兩個标志位即可,flag和flap,flag是距離的标志位,flap是角度的标志位。當flag0&&flap0,按鍵鎖死,當flag1&&flap0,加減鍵控制距離的個位,當flag2&&flap0,加減鍵控制距離的十位………….以此類推,角度也是這樣寫。

四天四夜,與時間賽跑,緻敬電賽!

到8.8夜裡兩點扛不住了,睡到8.8早上六點多,在八點多的時候,按鍵+雲台+OLED,已經可以用按鍵控制雲台的轉向和輸入距離,實作了H題基本要求第二三問。8.8下午隊友那邊在用Openmv識别紅色靶心,因為Openmv使用Phython語言控制的,之前沒接觸過,通過官網現學,晚上隊友已經識别到了紅色,要把這個資料傳送給我的控制器,就涉及到序列槽通信,我在編寫序列槽部分代碼時,将STM32的UART1設定成在上位機顯示用的序列槽1,将UART2設定成與Openmv實時通信的序列槽2,前期調試表明已經接收到資料坐标,是16進制數,傳回到電腦上位機是3H,8A之類的。

四天四夜,與時間賽跑,緻敬電賽!

分别為X坐标的高八位低八位,Y軸的高八位低八位,接下來考慮的就是怎麼把接收到的16進制坐标轉換成10進制并實時顯示在OLED屏上,我在序列槽程式裡用一個Unsigned char Buff[flag]數組接收攝像頭傳來的程式,在列印調用printf(“c%”, Buff[flag++]),然後OLED_string()或OLED_number()取Buff[flag++]變量顯示,事實證明并沒有這麼簡單,是以必須要用一個函數在32接收到資料之後,将16進制資料提取出X,Y的高八位低八位,進度卡在這裡,到8.8晚上一直沒有解決,隊友那邊的電磁炮電路遲遲搭不起來,很着急,因為電磁炮發射不出來,我現在的所有工作都白費,隊友讓我安心調代碼,說沒問題,

8.9淩晨兩點睡了,六點多起來繼續調攝像頭,現在想一想,特别後悔沒有和隊友一起調電磁炮的基本電路,因為我在做的是發揮部分的題目,如果電磁炮射不出來,基礎部分的題目都拿不到分,談什麼發揮部分?到了8.9中午的時候,攝像頭的十進制坐标終于成功顯示在OLED上,通過模拟8.13号比賽測試場地,測得幾十組攝像頭在識别紅色靶心坐标,算得平均數,即坐标為(80,49), X,Y軸坐标誤差,即errorx=16,errory=16,考慮到發揮部分最後一問是在X軸轉動,X為-30°到30°循環轉動,尋找靶心,即在Control_key函數裡if(key==6&&sba(x_a-a)<=errorx)

{

自動開炮!

}

四天四夜,與時間賽跑,緻敬電賽!

程式全部寫完之後,就趕緊搭硬體調試,後來在調試硬體遇到好多問題,上一分鐘的程式,下一秒就不好使,全部癱瘓,沒有辦法,代碼調的太多了,不知道哪個是哪個了,無奈,重新寫了一遍。

到了8.10淩晨2點,睡到淩晨6點。隊友在通宵焊電磁炮的驅動電路,8.10下午總體測試,我擔心的事情還是發生了,炮打不出去,趕緊排查各個器件,有沒有短路,有沒有燒。檢查2104驅動電路,ZVS升壓電路。後來把電路重新焊接一遍,一個電磁炮的發射電路調到8.11淩晨3點,終于可以發射了。再過5小時就要封箱了,抓緊測試資料,手動發炮,充電1秒,測得儲能電容電壓174V,鋼珠的射程為250cm,測試幾次之後,調試自動發炮。我在定時器3對繼電器拉低400ms,key6按下,GPIOA推挽輸出,即繼電器的使能端。接入電路,測得0.4秒電容儲能150多v,射程200多厘米,到了淩晨7點多,整體電路全部搭完,攝像頭Openmv放置在最上面,當天測試的時候可以改變位置。整體上電之後,一堆問題來了!按鍵不能用,調整不了角度和距離,攝像頭采集的坐标顯示在OLED上,但是并沒有實時重新整理,電機也一直在發燙,第一反應就是檢查程式有沒有改錯,程式沒錯之後,電路檢查,發現Y軸的電機接反了,可能是太困了,看錯接線端子了,哎。上電之後,5V輔助電源冒煙了,初步判斷負載太多。改來改去,8.11早上8點10分,我這四天四夜調試的全部代碼終于能夠在我們的作品上面成功執行!按鍵調整模式,在OLED上輸入距離,角度,電機自動調整位置,攝像頭采集紅色靶心坐标,實時顯示在OLED上面,動态重新整理。确認全部功能無誤之後,轉頭對後面兩個隊友說:封箱!

四天四夜,與時間賽跑,緻敬電賽!

四天四夜,睡了14小時,最後的一天一夜沒吃一口飯,沒喝水。電賽,讓我的能力提升了不止一個檔次,感謝電賽,更感謝自己!

歡迎大家在留言區留言,有問題可以交流。

繼續閱讀