光電組-南京師范大學-ALPS技術(shù)報告_第1頁
光電組-南京師范大學-ALPS技術(shù)報告_第2頁
光電組-南京師范大學-ALPS技術(shù)報告_第3頁
光電組-南京師范大學-ALPS技術(shù)報告_第4頁
已閱讀5頁,還剩110頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第六屆“飛思卡爾”杯全國大學生

智能汽車競賽技術(shù)報告附件B基于雙排傳感器智能車控制策略的實現(xiàn)學校:南京師范大學隊伍名稱:ALPS隊參賽隊員:鈕博文彭大成

彭煜聰帶隊教師:沈世斌關(guān)于技術(shù)報告和研究論文使用授權(quán)的說明本人完全了解第六屆“飛思卡爾”杯全國大學生智能汽車邀請賽關(guān)保留、使用技術(shù)報告和研究論文的規(guī)定,即:參賽作品著作權(quán)歸參賽者本人,比賽組委會和飛思卡爾半導體公司可以在相關(guān)主頁上收錄并公開參賽作品的設(shè)計方案、技術(shù)報告以及參賽模型車的視頻、圖像資料,并將相關(guān)內(nèi)容編纂收錄在組委會出版論文集中。參賽隊員簽名:鈕博文彭大成彭煜聰帶隊教師簽名:沈世斌日 期:2012-8-12摘要本文介紹了南京師范大學ALPS車隊隊員們在準備第六屆Freescale智能車大賽過程中的工作成果。智能車的硬件平臺采用帶飛思卡爾的Kinetis產(chǎn)品,軟件平臺為IAR6.3開發(fā)環(huán)境,車模采用大賽組委會統(tǒng)一提供的1:16的仿真越野車模。文中介紹了智能小車控制系統(tǒng)的軟硬件結(jié)構(gòu)和開發(fā)流程。為了提高小車特性,我們對系統(tǒng)進行了創(chuàng)造性的優(yōu)化:其一,對轉(zhuǎn)向系統(tǒng)進行了標定。其二,硬件上采用激光傳感器的方案,軟件上將PID算法、彎道預判、模糊算法。其三,獨立設(shè)計了控制電路板,用旋轉(zhuǎn)編碼器作為速度傳感器,大大提高了檢測精度,實現(xiàn)了速度閉環(huán)控制。其四,充分利用S12單片機現(xiàn)有模塊進行編程,同時無線串口、撥碼開關(guān)、狀態(tài)指示燈等方便了算法調(diào)試。關(guān)鍵字:智能車,激光管,PID控制TOC\o"1-5"\h\z\o"CurrentDocument"第一章引言 1\o"CurrentDocument"1.1賽事介紹 1\o"CurrentDocument"第二章智能車總體技術(shù)概要 3\o"CurrentDocument"第三章賽車機械結(jié)構(gòu)的調(diào)整 5\o"CurrentDocument"3.1上下排舵機的安裝調(diào)整 5\o"CurrentDocument"3.2前輪參數(shù)調(diào)整 6\o"CurrentDocument"3后輪差速機構(gòu)調(diào)整 8\o"CurrentDocument"測速模塊安裝 9PCB的整體安裝 10\o"CurrentDocument"其它機械調(diào)整 13\o"CurrentDocument"第四章硬件電路設(shè)計 15\o"CurrentDocument"電源模塊設(shè)計 15S12最小系統(tǒng) 16\o"CurrentDocument"電機驅(qū)動模塊 16\o"CurrentDocument"路線識別電路設(shè)計 17\o"CurrentDocument"串行通訊接口電路 19\o"CurrentDocument"6速度檢測模塊 20\o"CurrentDocument"4.7人機界面模塊 21\o"CurrentDocument"第五章軟件設(shè)計 23\o"CurrentDocument"1程序流程 23\o"CurrentDocument"5.2工作原理 235.3.PID控制 245.3.1PID 245.3.2PID參數(shù)的整定 24\o"CurrentDocument"5.4控制策略 26\o"CurrentDocument"5.5軟件開發(fā)工具 27\o"CurrentDocument"第六章模型車的主要技術(shù)參數(shù)說明 31\o"CurrentDocument"6.1模型車技術(shù)參數(shù)統(tǒng)計 31\o"CurrentDocument"第七章結(jié)論 33\o"CurrentDocument"1設(shè)計特點 33\o"CurrentDocument"系統(tǒng)存在的問題 33\o"CurrentDocument"改進方向 33\o"CurrentDocument"參考文獻 35\o"CurrentDocument"附錄A模型車控制主程序代碼 VI\o"CurrentDocument"附錄B基于雙舵機傳感器的智能車控制策略的實現(xiàn) VI第一章引言賽事介紹受教育部高等教育司委托,高等學校自動化專業(yè)教學指導分委會負責主辦全國大學生智能車競賽。該項比賽已列入教育部主辦的全國競賽之一。本屆的比賽,首先是在全國八大賽區(qū)進行預選賽,之后取一些優(yōu)秀隊伍參加總決賽。在比賽中,參賽選手須使用大賽組委會統(tǒng)一提供的競賽車模,推薦采用飛思卡爾16控制器MC9s12XS128作為核心控制單元,自主構(gòu)思控傳感器信號采集處理、控制算法及執(zhí)行、動力電機驅(qū)動、轉(zhuǎn)向舵機控制等,完成智能車工程制作及調(diào)試,于指定日期與地點參加場地比賽。參賽隊伍之名次(成績)由賽車現(xiàn)場成功完成賽道比賽時間為主,技術(shù)方案及制作工程質(zhì)量評分為輔來決定,車模改裝完畢后,尺寸不能超過:250mm寬和400mm長,高度無限制,跑道表面為白色,中心有連續(xù)黑線作為引導線,黑線寬25mm,并且跑道有坡道。方案介紹在方案設(shè)計的過程中,我們參閱了很多兄弟院校的往屆大賽技術(shù)報告,特別是北京科技大學、杭州電子科技大學,北京理工大學。在國內(nèi),他們對智能車研究起步的比較早,例如清華大學首創(chuàng)記憶算法、北京科技大學創(chuàng)先使用激光管。對于LED組來說,提高小車的速度和穩(wěn)定性,核心問題是如何更早且更準確的提取到賽道信息,并作出相應(yīng)的動作和判斷。所以我們采取的策略是激光傳感器加人工調(diào)參,共同實現(xiàn)我們的目標。這樣大大提高賽車的前瞻性,使賽車的穩(wěn)定性提高,從而提高總體速度。技術(shù)報告內(nèi)容安排本技術(shù)報告的正文分為四個部分。第一部分是對整個系統(tǒng)實現(xiàn)方法的一個概要說明,主要內(nèi)容是對整個技術(shù)方案的概述;第二部分是對系統(tǒng)機械結(jié)構(gòu)的說明,主要介紹系PCB板的固定和安裝、前輪參數(shù)調(diào)整和舵機的升高等;第三部分是對硬件電路設(shè)計的說明,主要介紹系統(tǒng)傳感器的設(shè)計及其他硬件電路的設(shè)計原理、創(chuàng)新點和實現(xiàn)過程等;第四部分是對系統(tǒng)軟件設(shè)計部分的說明,主要內(nèi)容是智能模型車設(shè)計中主要用到的控制理論、算法說明及代碼設(shè)計介紹以及開發(fā)工具的應(yīng)用等在這份技術(shù)報告中,我們小組通過對整體方案、電路、算法、調(diào)試、車輛參數(shù)的介紹,比較詳盡地闡述了我們的思想和創(chuàng)意,具體表現(xiàn)在電路的創(chuàng)新設(shè)計,以及算法控制方面的創(chuàng)新想法,在單片機的實際調(diào)試中我們克服了很多難題,付出了很多心血。這份報告凝聚著我們的心血和智慧,是我們共同努力后的成果。在準備比賽的過程中,我們小組成員詳細學習研究了控制策略、模式識別、傳感技術(shù)、汽車電子、電氣、計算機、機械等多個學科的知識,這次磨練對我們書本所學知識的一次大檢驗,充分發(fā)揮了隊員各自的特點,很好的鍛煉了我們的實際動手能力和創(chuàng)新能力,這必將在以后的學習工作中受益。第二章智能車總體技術(shù)概要賽車制作的主要思路是利用激光管來提取賽道前方的信息,并將信息采集到K06單片機AD□和GPIO口,并進行濾波等處理。在S12單片機中利用一定的算法來控制模型車的運行狀態(tài)。賽車的控制系統(tǒng)包括電源管理模塊、MCU模塊、路徑識別模塊、電機驅(qū)動模塊、舵機控制模塊、轉(zhuǎn)速測量模塊、人機界面模塊、無線串口傳送模塊等。在整個系統(tǒng)中,由電源管理模塊實現(xiàn)對其他各模塊的電源管理。其中,對單片一機、測速電路、無線串,人機電路提供3.3V電壓,對搖頭舵機提供6.5V電壓,轉(zhuǎn)向舵機提供5.5V電壓,對激光管提供3.3V電壓。賽車模型車是由四輪驅(qū)動的,路徑識別模塊則采用激光管傳感器尋跡方案。即路徑識別電路由6路光電發(fā)送與接收管組成。由于賽道中存在軌跡指示黑線,落在黑線區(qū)域內(nèi)的光電接收管接收到反射的光線的強度與白色的賽道不同,進而在光電接收管兩端產(chǎn)生不同的電壓值,由此判斷行車的方向。路徑識別模塊會將當前采集到的一組電壓值傳遞給MCU模塊。轉(zhuǎn)速測量模塊則安裝在電機下方,它每個周期反饋一次模型車行駛過程中的瞬時速度。人機模塊會設(shè)定模型車在行駛過程中一些較重要的參數(shù),如:直道速度、彎道速度,一些重要的P,I參數(shù)等。測量出的瞬時速度將輸入到單片機中,以幫助分析確定模型車與給定速度進行對比通過PID算法來確定下一步的速度、轉(zhuǎn)角等。無線串口傳送模塊會同LABVIEW顯示傳感器檢測值和模型車的速度等參數(shù),以方便對整車進行調(diào)試。MCU模塊會根據(jù)按鍵的設(shè)定值,路徑識別模塊采集到的電壓值以及轉(zhuǎn)速測量模塊反饋回的瞬時速度值等綜合分析,采用一定的算法對舵機和直流電機進行控制。以上即是技術(shù)方案的概要說明。第三章賽車機械結(jié)構(gòu)的調(diào)整上下排舵機的安裝調(diào)整轉(zhuǎn)向舵機轉(zhuǎn)向是整個控制系統(tǒng)中延遲較大的一個環(huán)節(jié),為了減小此時間常數(shù),通過改變舵機的安裝位置,而并非改變舵機本身結(jié)構(gòu)的方法可以提高舵機的響應(yīng)速度。分析舵機控制轉(zhuǎn)向輪轉(zhuǎn)向的原理可以發(fā)現(xiàn),在相同的舵機轉(zhuǎn)向條件下,轉(zhuǎn)向連桿在舵機一端的連接點離舵機軸心距離越遠,轉(zhuǎn)向輪轉(zhuǎn)向變化越快。這相當于增大力臂長度,提高線速度。由于這屆車模原本的位置機械結(jié)構(gòu)復雜且拐角較小,不利于過彎時的高速行駛,所以更改舵機的位置十分必要的。經(jīng)過反復的實驗,我們發(fā)現(xiàn)將舵機倒立放置來平推前輪效果不錯,這樣既有利于達到最大角度,而且架設(shè)的重心較低。圖3.1舵機布局由于我們采用了上排激光傳感器搖頭的設(shè)計方案,因此整個模型車使用了兩個舵機,上排舵機我們采用了矩形結(jié)構(gòu)作為支架,減小傳動結(jié)構(gòu)與舵機的距離,來防止賽車行徑中的抖動現(xiàn)象;同時,通過降低搖頭舵機高度,使之貼近底板達到車模重心降低,提高賽車的過彎穩(wěn)定性,和過彎最高速。在進行反復的調(diào)試中看出,這種架設(shè)方式是可行的如圖3.2。圖3.2上排舵機安裝前輪參數(shù)調(diào)整調(diào)試中發(fā)現(xiàn),在賽車過彎時,轉(zhuǎn)向舵機的負載會因為車輪轉(zhuǎn)向角度增大而增大。為了盡可能降低轉(zhuǎn)向舵機負載,對前輪的安裝角度,即前輪定位進行了調(diào)整。前輪定位的作用是保障汽車直線行駛的穩(wěn)定性,轉(zhuǎn)向輕便和減少輪胎的磨損。前輪是轉(zhuǎn)向輪,它的安裝位置由主銷內(nèi)傾、主銷后傾、前輪外傾和前輪前束等4個項目決定,反映了轉(zhuǎn)向輪、主銷和前軸等三者在車架上的位置關(guān)系。(1)主銷內(nèi)傾是指主銷裝在前軸略向內(nèi)傾斜的角度,它的作用是使前輪自動回正。角度越大前輪自動回正的作用就越強烈,但轉(zhuǎn)向時也越費力,輪胎磨損增大:反之,角度越小前輪自動回正的作用就越弱。(2)主銷后傾是指主銷裝在前軸,上端略向后傾斜的角度。它使車輛轉(zhuǎn)彎時產(chǎn)生的離心力所形成的力矩方向與車輪偏轉(zhuǎn)方向相反,迫使車輪偏轉(zhuǎn)后自動恢復到原來的中間位置上。由此,主銷后傾角越大,車速越高,前輪穩(wěn)定性也愈好。

(3)主銷內(nèi)傾和主銷后傾(如圖3.3)都有使汽車轉(zhuǎn)向自動回正,保持直線行駛的功能。不同之處是主銷內(nèi)傾的回正與車速無關(guān),主銷后傾的回正與車速有關(guān),因此高速時后傾的回正作用大,低速時內(nèi)傾的回正作用大。如圖3.3主銷后傾(4)前輪外傾角對汽車的轉(zhuǎn)彎性能有直接影響,它的作用是提高前輪的轉(zhuǎn)向安全性和轉(zhuǎn)向操縱的輕便性。前輪外傾角俗稱“外八字”,如果車輪垂直地面一旦滿載就易產(chǎn)生變形,可能引起車輪上部向內(nèi)傾側(cè),導致車輪聯(lián)接件損壞。所以事先將車輪校偏一個外八字角度,這個角度約在1°左右。(5)所謂前束是指兩輪之間的后距離數(shù)值與前距離數(shù)值之差,也指前輪中心線與縱向中心線的夾角。前輪前束的作用是保證汽車的行駛性能,減少輪胎的磨損。前輪在滾動時,其慣性力會自然將輪胎向內(nèi)偏斜,如果前束適當,輪胎滾動時的偏斜方向就會抵消,輪胎內(nèi)外側(cè)磨損的現(xiàn)象會減少如圖3.4o

圖3.4車輪前束經(jīng)過與賽道的磨合,本隊智能車只對前輪的外傾角進行了調(diào)節(jié),其他皆為03.3差速機構(gòu)的調(diào)整差速機構(gòu)的作用是在賽車轉(zhuǎn)彎的時候,降低后輪與地面之間的滑動;并且還可以保證在輪胎抱死的情況下不會損害到電機。當車輛在正常的過彎行進中(假設(shè):無轉(zhuǎn)向不足亦無轉(zhuǎn)向過度),此時4個輪子的轉(zhuǎn)速(輪速)皆不相同,依序為:外側(cè)前輪〉外側(cè)后輪〉內(nèi)側(cè)前輪)內(nèi)側(cè)后輪。此次所使用賽車是仿真越野車模,其有前輪差速,中軸差速,和后輪差速。差速器的特性是:阻力越大的一側(cè),驅(qū)動齒輪的轉(zhuǎn)速越低;而阻力越小的一側(cè),驅(qū)動齒輪的轉(zhuǎn)速越高以此次使用的后輪差速器為例,在過彎時,因外側(cè)前輪輪胎所遇的阻力較小,輪速便較高;而內(nèi)側(cè)前輪輪胎所遇的阻力較大,輪速便較低。差速器的調(diào)整中,過松過緊都會使差速器性能降低,轉(zhuǎn)彎時阻力小的車輪會打滑,從而影響賽車的過彎性能。好的差速機構(gòu),在電機不轉(zhuǎn)的情況下,右輪向前轉(zhuǎn)過的角度與左輪向后轉(zhuǎn)過的角度之間誤差很小,不會有遲滯或者過轉(zhuǎn)動情況發(fā)生。中軸差速由電機帶動,主要用來傳動,而前輪后輪的差速起到了分擔動力,使前后輪的速度差變小,提高賽車的機械穩(wěn)定性。經(jīng)過試驗,發(fā)現(xiàn)四輪驅(qū)動對賽車的高速過彎有明顯的提高穩(wěn)定性的作用,所以我們?nèi)耘f采用車模原本的四輪驅(qū)動3.4測速模塊安裝我們采用的是旋轉(zhuǎn)編碼器測速,編碼器旋轉(zhuǎn)一周回產(chǎn)生200個脈沖,這已經(jīng)充分滿足的賽車的檢測精度,從而提高了賽車高速時速度控制的穩(wěn)定性,大大減小了檢測誤差。安裝方式如圖3.5。圖3.5安裝方式3.5PCB的整體安裝從開始設(shè)計賽車我們就非常注重賽車的中心配置,盡量降低賽車的重心是我們重點之一。結(jié)合上一次的參賽經(jīng)驗,賽車整體由主板,上排,下排,人機,CPU,驅(qū)動六塊PCB板組合而成,由于將舵機改至前端之后,賽車的中間空出的位置用來放置電路板,并且在主板中間鏤空4個洞,方便安裝搖頭舵機。驅(qū)動模塊和CPU分別固定在主板的左右兩側(cè)離水平面距離為2.5cm。下排傳感器通過兩個螺釘固定在賽車的最前方離地面距離為5cm,上排則固定在主板的正上方,從而避免了傳感器前伸帶來的一些缺點。電路板的安裝如圖3.6。圖3.6電路板的安裝第三章賽乍機械結(jié)構(gòu)的調(diào)整6其它機械調(diào)整另外,在模型車的機械結(jié)構(gòu)方面還有很多可以改進的地方,比如說車輪、避震、底盤、車身高度等。輪胎的長期的使用中易產(chǎn)生磨損現(xiàn)象,大大影響了車子的抓地力,從而影響車子的加減速的性能,因此在調(diào)試了一段時間后我們都會去輪胎的輪廓進行人為的修正,并達到了良好的效果。此外,我們還去除了本款車摸的避震結(jié)構(gòu),由于光電車對于激光抖動的影響的特別嚴重,在賽車行駛中,難免會有顛頗,如果裝有避震會使激光隨車體前后擺動,影響檢測的穩(wěn)定性,所以采取剛性的車體,在行駛過程中是很有利于激光管的發(fā)射和接收的穩(wěn)定。車模采用電機驅(qū)動,由競賽主辦方提供。齒輪差數(shù)對車模的驅(qū)動能力有很大的影響。齒輪傳動部分安裝位置的不恰當,會大大增加電機驅(qū)動后輪的負載,從而影響到最終成績。調(diào)整的原則是:兩傳動齒輪軸保持平行,齒輪間的配合間隙要合適,過松容易打壞齒輪,過緊又會增加傳動阻力,白白浪費動力;傳動部分要輕松、順暢,容易轉(zhuǎn)動,不能有卡住或遲滯現(xiàn)象.齒輪傳動機構(gòu)的調(diào)整就是調(diào)整電機輸出軸的齒輪與后輪軸上齒輪之間的耦合程度。當耦合比較松時由于兩齒輪之間存在較大的縫隙,齒輪轉(zhuǎn)動時會產(chǎn)生很大的兩齒輪之間的碰撞聲音,這樣會大大增加齒輪的磨損。當耦合的比較緊時齒輪之間的摩擦力變大,這樣就會使電機分出一部分驅(qū)動力克服齒輪之間的摩擦力做功,電機的負載無形中就增強,從而減小了電機對后輪的驅(qū)動能力。為了使齒輪的調(diào)整比較適當,經(jīng)過多次的調(diào)試,我們發(fā)現(xiàn)用聽齒輪之間的聲音的辦法來調(diào)整其耦合程度效果不錯。當齒輪耦合較松或兩齒輪之間不平行時的聲音很響,也就是齒輪之間撞擊的聲音很大,當齒輪耦合比較緊時聲音很沉悶并且遲滯,最佳狀態(tài)是基本上沒有撞擊的聲音,聲音清脆并且沒有遲滯現(xiàn)象。第四章硬件電路設(shè)計4.1電源模塊設(shè)計在整個系統(tǒng)中我們一共使用了四片電源芯片,對賽車各個模塊進行供電如框圖4.1o圖4.1電源設(shè)計框圖在電源的設(shè)計中根據(jù)以往的經(jīng)驗,電機等工作是會對單片機產(chǎn)生干擾,因此我們給單片進行了獨立的隔離電源供電(如圖4.2),同時為了給上下排傳感器提供足夠的功率都分別用一個1117進行供電如圖4.3。

圖4.2隔離電源塊圖4.3外部電源2K60最小系統(tǒng)以K60為核心的單片機系統(tǒng)的硬件電路設(shè)計主要包括以下幾個部分:時鐘電路、電源電路、復位電路、J-Link接口[1]。其中各個部分的功能如下:(1)時鐘電路給單片機提供一個外接石英晶振。(2)電源電路主要是給單片機提供3.3V電源。(3)復位電路在電壓達到正常值時給單片機一個復位信號。J-Link接口讓用戶可以通過J-Link頭向單片機下載和調(diào)試程序。為了減輕最小系統(tǒng)板的重量,我們根據(jù)自己的需要對電路板進行了重新的設(shè)計,主要的改動就是將電路板的體積減小,并只引出一些常用的引腳,最后定型大小為5.3cm*5.3cm(如圖4.4)。其它電路未進行改變。圖4.4單片機最小系統(tǒng)

電機驅(qū)動模塊綜合我們賽車的速度要求,以及穩(wěn)定性要求最終我們選用了BTS7960作為電機驅(qū)動模塊,為減小BTS7960的內(nèi)阻,電機頻繁調(diào)速時發(fā)熱嚴重,因此在實際的使用中我們采用了4片BTS7960并聯(lián)(如圖4.6)驅(qū)動的辦法,提高了驅(qū)動能力,而且發(fā)熱現(xiàn)象也大大改善。圖4.6驅(qū)動模塊路線識別電路設(shè)計為了準確并提前獲得賽道信息,所以必須選擇合適的路面信息檢測傳感器。目前常用的尋線技術(shù)有:光電尋線、磁誘導尋線和攝像頭尋線。光電尋線一般由多對紅外收發(fā)管組成,通過檢測接收到的反射光強,判斷黑白線。在這種方案中,一對收發(fā)管只能檢測一個點的信息,精度有限。但其優(yōu)點是電路簡單,處理方便。攝像頭尋線通過圖像采集,動態(tài)拾取路徑信息,并對各種情況進行分析。它具有信息量大,能耗低的優(yōu)點,但對數(shù)據(jù)的處理相對復雜。通過對以往屆比賽的研究,我們決定還是從光電管入手。由于簡易的紅外管由于線性度不好而且功耗較大,在實際的應(yīng)用中并不能提供大前瞻,無法提前獲取賽道信息。因此我們研究決定集中盡力研究激光傳感器,經(jīng)過一個多月的反復調(diào)試,驗證最終確定了電路,并基本達到了之前的設(shè)計要求。要提高速度并保證在入彎時不會沖出跑道,就必須增加傳感器的“視野”,以便及時減速。因此我們將上排傳感器設(shè)計成搖頭形式,從而大大增寬了視野,同時傳感器數(shù)目只控制在8個。由于臨近發(fā)射管對接收管會有較大干擾,所以經(jīng)過反復試驗后我們采用了間隔控制(如圖4.7),來減弱相鄰管子之間的干擾,并取得了良好的效果。rHHHhHrnlnnnHh圖4.7激光管工作原理總體俯視圖如圖4.8。

串行通訊接口電路串行通訊接口電路的作用是使得MCU可以與PC機的RS-232串行接口連接并進行通訊。RS-232是異步串行通信中應(yīng)用最早,也是目前應(yīng)用最為廣泛的標準串行總線接口之一,它有多個版本,其中應(yīng)用最廣的是修訂版C,即RS-232CoRS-232原是基于公用電話網(wǎng)的一種串行通信標準,傳輸距離一般不超過15m。

6速度檢測模塊為了提高瞬時速度提取的準確度,最終我們決定使用旋轉(zhuǎn)編碼器(如圖4-9)作為速度檢測模塊,編碼器可以再5-12V之間安全工作,而且外圍電路簡單,但是價格比較昂貴。

7人機界面模塊鑒于比賽的過程和平時調(diào)試時需要變化賽車的一些參數(shù),我們設(shè)計了一個旋轉(zhuǎn)開關(guān)和液晶組成的人機界面,在平時的調(diào)試中發(fā)揮了很大的作用圖4.10人機界面圖4.11人機界面原理圖第五章軟件設(shè)計程序流程在賽車的控制中主要用到K60芯片中的FTM模塊,PIT模塊、GPIO模塊以及UART模塊等模塊化設(shè)計。FTM模塊主要用來控制舵機和電機的運轉(zhuǎn);PIT模塊主要是用在了測速模塊和數(shù)據(jù)采集,捕捉中斷并計算瞬時速度;GPIO模塊主要是用來分配給按鍵和激光管的觸發(fā)和輸入;UART模塊主要用在無線串口傳送模塊。圖5.1程序流程圖工作原理由于往屆競賽對光電傳感器排布方式研究已經(jīng)比較深入,傳統(tǒng)的“一”字型排布方式在眾多排布方式中效果顯著,是最常用的一種排布方式。但是由于本次比賽首次采用雙線為了能適應(yīng)賽道使用內(nèi)八排布方式控制器設(shè)置了快速的控制周期,在每個運算周期內(nèi),控制器即時地得到智能車車速以及傳感器采樣來的道路信號,經(jīng)過控制算法的計算后,控制單元輸出相應(yīng)的前輪控制轉(zhuǎn)角以及電機占空比的值,PWM脈寬信號傳至前輪舵機以及驅(qū)動電機,從而實現(xiàn)一個周期的控制。3.1PID控制5.4流程圖PID控制策略其結(jié)構(gòu)簡單,穩(wěn)定性好,可靠性高,并且易于實現(xiàn)。其缺點在于控制器的參數(shù)整定相當繁瑣,需要很強的工程經(jīng)驗。相對于其他的控制方式,在成熟性和可操作性上都有著很大的優(yōu)勢。所以最后我們選擇了PID的控制方式。在小車跑動中,本方案中上排舵機舵機轉(zhuǎn)角控制采用位置式的PID控制,下排舵機采用了位置式PD控制,速度閉環(huán)控制采用了增量式PID控制。在本方案中,使用試湊法來確定控制器的比例、積分和微分參數(shù)。3.2PID參數(shù)的整定試湊法是通過閉環(huán)試驗,觀察系統(tǒng)響應(yīng)曲線,根據(jù)各控制參數(shù)對系統(tǒng)響應(yīng)的大致影響,反復試湊參數(shù),以達到滿意的響應(yīng),最后確定PID控制參數(shù)。試湊不是盲目的,而是在控制理論指導下進行的。在控制理論中已獲得如下定性知識:(1)比例部分在模擬PID控制器中,比例環(huán)節(jié)的作用是對偏差瞬間作出反應(yīng)。偏差一旦產(chǎn)生控制器立即產(chǎn)生控制作用,使控制量向減少偏差的方向變化??刂谱饔玫膹娙跞Q于比例系數(shù)KP,比例系數(shù)越大,控制作用越強,則過渡過程越快,控制過程的靜態(tài)偏差也就越??;但是KP越大,也越容易產(chǎn)生振蕩,破壞系統(tǒng)的穩(wěn)定性。故而,比例系數(shù)選擇必須恰當,才能過渡時間少,靜差小而又穩(wěn)定的效果。(2)積分部分從積分部分的數(shù)學表達式可以知道,只要存在偏差,則它的控制作用就不斷的增加;只有在偏差=0時,它的積分才能是一個常數(shù),控制作用才是一個不會增加的常數(shù)??梢?,積分部分可以消除系統(tǒng)的偏差。積分環(huán)節(jié)的調(diào)節(jié)作用雖然會消除靜態(tài)誤差,但也會降低系統(tǒng)的響應(yīng)速度,增加系統(tǒng)的超調(diào)量。積分常數(shù)越TI大,積分的積累作用越弱,這時系統(tǒng)在過渡時不會產(chǎn)生振蕩;但是增大積分常數(shù)TI會減慢靜態(tài)誤差的消除過程,消除偏差所需的時間也較長,但可以減少超調(diào)量,提高系統(tǒng)的穩(wěn)定性。當Ti較小時,則積分的作用較強,這時系統(tǒng)過渡時間中有可能產(chǎn)生振蕩,不過消除偏差所需的時間較短。所以必須根據(jù)實際控制的具體要求來確定Ti。(3)微分部分實際的控制系統(tǒng)除了希望消除靜態(tài)誤差外,還要求加快調(diào)節(jié)過程。在偏差出現(xiàn)的瞬間,或在偏差變化的瞬間,不但要對偏差量做出立即響應(yīng)(比例環(huán)節(jié)的作用),而且要根據(jù)偏差的變化趨勢預先給出適當?shù)募m正。為了實現(xiàn)這一作用,可在PI控制器的基礎(chǔ)上加入微分環(huán)節(jié),形成PID控制器。微分環(huán)節(jié)的作用使阻止偏差的變化。它是根據(jù)偏差的變化趨勢(變化速度)進行控制。偏差變化的越快,微分控制器的輸出就越大,并能在偏差值變大之前進行修正。微分作用的引入,將有助于減小超調(diào)量,克服振蕩,使系統(tǒng)趨于穩(wěn)定,特別對高階系統(tǒng)非常有利,它加快了系統(tǒng)的跟蹤速度。但微分的作用對輸入信號的噪聲很敏感,對那些噪聲較大的系統(tǒng)一般不用微分,或在微分起作用之前先對輸入信號進行濾波。微分部分的作用由微分時間常數(shù)Td決定。Td越大時,則它抑制偏差變化的作用越強;Td越小時,則它反抗偏差變化的作用越弱。微分部分顯然對系統(tǒng)穩(wěn)定有很大的作用。適當?shù)剡x擇微分常數(shù)Td,可以使微分作用達到最優(yōu)。試湊法的具體實施過程為:(1)整定比例部分,將比例系數(shù)由小變大,并觀察相應(yīng)的系統(tǒng)響應(yīng),直至得到反應(yīng)快、超調(diào)小的響應(yīng)曲線。如果系統(tǒng)靜差小到允許范圍,響應(yīng)曲線已屬滿意,那么只需比例控制即可,由此確定比例系數(shù)。(2)如果在比例控制基礎(chǔ)上系統(tǒng)靜差不能滿足設(shè)計要求,則加入積分環(huán)節(jié),整定時首先置積分時間(為很大值,并將經(jīng)第一步整定得到的比例系數(shù)略微縮?。ㄈ缈s小為原值的0.8),然后減小積分時間,使得在保持系統(tǒng)良好動態(tài)的情況下,靜差得到消除,在此過程中,可根據(jù)響應(yīng)曲線的好壞反復改變比例系數(shù)和積分時間,以期得到滿意的控制過程,得到整定參數(shù)。(3)若使用比例積分控制消除了靜差,但動態(tài)過程經(jīng)反復調(diào)整仍不能滿意,則可加微分環(huán)節(jié),構(gòu)成比例、積分、微分控制器。在整定時,先置微分時間I,為零,在第二步整定基礎(chǔ)上增大刀,同樣地相應(yīng)改變比例系數(shù)和微分時間,逐步試湊以獲得滿意的調(diào)節(jié)效果和控制參數(shù)。控制策略在路徑采集回來的信息中,如果中間傳感器長時間對準中間黑線,我們既可以認為小車現(xiàn)在正在行駛在長直道上,因此可以加速至高速狀態(tài)。當小車連續(xù)在傳感器左部分檢測到黑線,則可以認為小車在左彎道的位置。這樣,我們就可以檢測判斷到現(xiàn)在小車所處的位置,并做出相應(yīng)的程序響應(yīng),程序中事先限制了車子的最高速和最低速。在速度檢測的控制部分,我們是采用旋轉(zhuǎn)編碼器采集回來的脈沖數(shù)字進行計算,將其轉(zhuǎn)換成為與后輪圈數(shù)相對應(yīng)的一個參數(shù)值,根據(jù)此參數(shù)值我們能夠

很清晰的看出來現(xiàn)在這個狀態(tài)時,電機的轉(zhuǎn)速為多少,從而可以很快地換算出當前時刻的速度情況。軟件開發(fā)工具此次智能車大賽的軟件開發(fā)平臺為IAR公司的IAR46.3開軟件。其使用界面如圖5.5所示:況FM(? *糕叁金況FM(? *糕叁金Dof付儼圖5.5調(diào)試界面IAR的功能非常強大,可用于絕大部分單片機、嵌入式系統(tǒng)的開發(fā)。用戶可在新建工程時將芯片的類庫添加到集成環(huán)境開發(fā)環(huán)境中,工程文件一旦生成就是一個最小系統(tǒng),用戶無需再進行繁瑣的初始化操作,就能直接在工程中添加所需的程序代碼。在使用J-Link的調(diào)試過程(如圖5.6)中我們能進行很有效的一些操作如監(jiān)視寄存器狀態(tài)、修改PC指針、設(shè)置斷點等,這樣能快速地幫助我們找到軟件或硬件的問題。

口圖5.6BDM調(diào)試在軟件的調(diào)試中我們還充分運用了無線模塊,我們讓單片機實時的發(fā)揮傳感器的各種狀態(tài),包括誤判是傳感器的值,上坡時,過彎時的一些參數(shù),結(jié)合車體的狀態(tài)進行參數(shù)或閥值得調(diào)節(jié),這種方法大大簡化了我們的工作,提高了效率。在賽車的運行過程中我們針對不同的情況使人機界面上的數(shù)碼管顯示不同的數(shù)值,從而判斷賽車在整個行進過程中是否出現(xiàn)誤判。第六章模型車的主要技術(shù)參數(shù)說明6.1模型車技術(shù)參數(shù)統(tǒng)計車模的各項參數(shù)歸類如下表6.1表6.1賽車技術(shù)參數(shù)項目參數(shù)路徑檢測方式激光傳感器車模幾何尺寸(長,寬,高)(mm)380/190/150車模平均電流(勻速狀態(tài))1750mA電容總?cè)萘竣臚)1900四傳感器種類及個數(shù)3種3個新增舵機個數(shù)1個賽道信息檢測空間精度(mm)20mm賽道信息檢測頻率(次/秒)100次/秒主要集成電路種類/數(shù)量5種/6塊車模重量(帶電池)(Kg)1.4Kg第七章結(jié)論設(shè)計特點(1)在本次的智能車設(shè)計中我們查閱了很多資料,并結(jié)合以往的比賽經(jīng)驗我們使用了激光傳感器來提取道路信息,從而增加了前瞻,將智能車的速度和穩(wěn)定性都提高了一個新的臺階。(2)根據(jù)平時的調(diào)試經(jīng)驗,賽車在行進過程中傳感器常常會出現(xiàn)檢測盲區(qū),雖然軟件上可以解決,但賽車的穩(wěn)定性降低了,因此我們設(shè)計了上排傳感器自動循線,怎大了傳感器的視野,并取得了良好的效果。(3)針對舵機響應(yīng)的速度,我們隊舵機的左右連桿進行改造,增大了力臂,從而加快了相應(yīng)速度(4)為了使單片機的工作與其它功率器件和電機的工作隔離開,在電源的設(shè)計中我們引入了隔離電源模塊,使MCU得工作是相對獨立的。系統(tǒng)存在的問題盡管在設(shè)計中我們作了很大的努力,但是由于時間緊迫以及缺乏經(jīng)驗等原因,本系統(tǒng)仍然存在著一些問題,主要有以下幾點:(1)系統(tǒng)控制算法采用經(jīng)典的PID算法??梢钥紤]更加高級的控制算法以改進系統(tǒng)性能。(2)由于賽車電路由不同的模塊組成,在小車上出現(xiàn)連線過多。(3)在上排傳感器的設(shè)計中由于時間和經(jīng)驗的不足,上排傳感器重量較大,對賽車的高速行駛造成了一定的影響。改進方向在條件允許的情況下,本系統(tǒng)可以做以下幾個方面的改進:(1)研究更加可靠的激光管電路,并減輕傳感器的重量,增大檢測精度。(2)k60單片機擁有獨具特色的FlexMemory,很方便用來實現(xiàn)內(nèi)存最優(yōu)化的分配。FlexMemory的實現(xiàn)將有利于系統(tǒng)性能的大幅度提升。(3)在畫PCB板時,應(yīng)當注意插針的布局,有效地減少電路之間的連線的長度,使電路整潔。參考文獻[1]邵貝貝.單片機嵌入式應(yīng)用的在線開發(fā)方法[M].北京:清華大學出版社,2004[2]康華光.模擬電子技術(shù)基礎(chǔ).北京:高等教育出版社,2001[3]閻石.數(shù)字電子技術(shù)基礎(chǔ).北京:高等教育出版社,1998[4]張宇河,董寧.計算機控制系統(tǒng).北京:北京理工大學出版社,2002[5]譚浩強.C程序設(shè)計[M].北京:清華大學出版社,2001[6]侯國屏,王坤,葉齊鑫.LabVIEW7.1編程與虛擬儀器設(shè)計[M].北京:清華大學出版社,2005HCS12SerialCommunicationInterface(SCI)BlockGuideV02.05S12SCIV2/DMetrowerks.IDEHelpforCodeWarriorPlug-inforMotorola.MetrowerksSemiconductor,Inc.,2005[9]周斌,李立國,黃開勝.智能車光電傳感器布局對路徑識別的影響研究.電子產(chǎn)品世界,2006.5[10]卓晴,黃開勝,邵貝貝,學做智能車[M].北京:北京航天航空出版社,2007[11]江思敏等.Protel電路設(shè)計[M].北京?清華大學出版社.2002附錄A模型車控制主程序代碼附錄A模型車控制主程序代碼// *// IA % pAu: isr.c*// Ep A 4- :OD 1Iz!A 1Ay3I*// EOOY'6N§?EE%6"1uQlEeE14Ipl3EpN6EO2011Ae#include"includes.h'1#include"DataDefine.hintStartFlag=O;intopp_time=0;intF_time=0;uint8T=0;//la^OyOAf--^?AE±,?O,Aeuint8T=0;#defineLED_0_UGPIOD_PDOR1=GPIO_PDOR_PDO(GPIO_PIN(0));#defineLED_0_DGPIOD_PDOR1=GPIO_PDOR_PDO(GPIO_PIN(3));#defineLED_1_UGPIOD_PDOR1=GPIO_PDOR_PDO(GPIO_PIN(1));#defineLED_1_DGPIOD_PDOR1=GPIO_PDOR_PDO(GPIO_PIN(4));#define LED_2_UGPIOD_PDOR1=#define LED_2_UGPIOD_PDOR1=GPIO_PDOR_PDO(GPIO_PIN(0)IGPIO_PIN(1));TOC\o"1-5"\h\z#define LED_2_D GPIOD_PDOR 1=GPIO_PDOR_PDO(GPIO_PIN(3)IGPIO_PIN(4));#defineLED_3_UGPIOD_PDOR1=GPIO_PDOR_PDO(GPIO_PIN(2));#defineLED_3_DGPIOD.PDOR1=GPIO_PDOR_PDO(GPIO_PIN(5));#define LED_4_U GPIOD_PDOR 1=GPIO_PDOR_PDO(GPIO_PIN(2)IGPIO_PIN(0));#define LED_OFF_U GPIOD_PDOR &=~GPIO_PDOR_PDO(GPIO_PIN(0)IGPIO_PIN(1)IGPIO_PIN(2));#define LED_OFF_D GPIOD_PDOR &=~GPIO_PDOR_PDO(GPIO_PIN(3)IGPIO_PIN(4)IGPIO_PIN(5));//#defineAD_OUT_LeftOGPIOD_PDOR1=GPIO_PDOR_PDO(GPIO_PIN(6));//#defineAD_OUT_LeftlGPIOD_PDOR1=GPIO_PDOR_PDO(GPIO_PIN(7));//#defineAD_OUT_RightOGPIOA_PDOR1=GPIO_PDOR_PDO(GPIO_PIN(4));//#defineAD_OUT_RightlGPIOA_PDOR1=GPIO_PDOR_PDO(GPIO_PIN(5));voiddelay_us(inti)(while(i—)asm("nop");asm(^nop11);-vm-asm("nopM);asm(nnopn);asm("nop");asm(nnopn);asm("nopH);asm(nnop,f);asm("nop',);asm(t,nopt,);asm("nop");asm(,,nopn);asm(Mnopn);asm(Hnopn);asm(”nop”);asm(“nop”);asm("nop");asm(,,nopn);asm("nop");asm(nnopn);asm("nop");asm(nnop");asm("nop");asm(t,nopt,);asm("nop");asm(Mnop;asm("nop',);asm("nopn);asm("nop',);asm(t,nopt,);asm("nop");asm(nnopn);asm("nop");asm(nnopn);asm("nop");asm(nnopn);asm("nop");asm(nnopn);asm("nop");asm(nnopn);asm("nop");asm(“iK)p");asm("nop");asm(nnop;asm("nopH);asm(t,nopt,);asm("nop");asm(nnopM);asm("nop");asm("nop");asm("nop");asm(nopT,);asm("nop");asm(“nop”);asm("nop");asm("nop");asm("nop");asm(°nop°);asm("nop");asm("nop");asm(',nopn);asm("nopn);asm("nop");asm(Mnopn);asm(HnopM);asm(MnopH);asm("nopn);asm(,,nopn);asm("nop");asm(nnopn);asm("nop");asm("nop");asm("nop");asm("nopn);asm("nop");asm(nnopn);asm("nopH);asm("nop*1);asm(HnopM);asm(MnopH);asm("nop");asm(MnopH);asm(nnopn);asm("nopn);asm(HnopK);asm(Hnopn);asm(nnopn);asm(MnopH);asm(',nopn);asm("nopn);asm("nop");asm(nnopn);asm(“nop”);asm("nop”);asm("nopH);asm(,,nopH);asm("nop");asm(nnopn);asm(nnopn);asm("nopn);})functionname:minfunctioneffect:OOXTDiOpintmin(intx,inty)if(x<=y)retum(x);elseretum(y);functionname:maxfunctioneffect:OOXiz6Op qintmax(intx,inty){if(x<=y)retum(y);elseretum(x);}voidsample(void)LED_OFF_ULED_OFF_DLED_0_ULED_0_Ddelay_us(Light/3);Data_left[0][0J((GPIO_PDIR_REG(PTC_BASE_PTR)?12)&(0x1));Data_right[OJ[OJ((GPIO_PDIR_REG(PTC_BASE_PTR)?13)&(0x1));Down_Data_left[01[0]((GPIO_PDIR_REG(PTB_BASE_PTR)?9)&(0xl));Down_Data_right[0][0J((GPIO_PDIR_REG(PTC_BASE_PTR)?10)&(0x1));Data_left[0][5]((GPIO_PDIR_REG(PTC_BASE_PTR)?10)&(0x1));Data_right[0][5]((GPIO_PDIR_REG(PTC_BASE_PTR)?17)&(0x1));Down_Data」eft[0][5]((GPIO_PDIR_REG(PTB_BASE_PTR)?9)&(0x1));Down_Data_rightL0][5]((GPIO_PDIR_REG(PTC_BASE_PTR)?10)&(0x1));delay_us(Light/3);Data_left[l][01((GPIO_PDIR_REG(PTC_BASE_PTR)?12)&(0x1));Data_right[l][01((GPIO_PDIR_REG(PTC_BASE_PTR)?13)&(0x1));Down_Data_left[1][0]((GPIO_PDIR_REG(PTB_BASE_PTR)?9)&(0xl));Down_Data_right[l][0]((GPIO_PDIR_REG(PTC_BASE_PTR)?10)&(0x1));Data_left[l][5]((GPIO_PDIR_REG(PTC_BASE_PTR)?10)&(0x1));Data_right[lJ[5]((GPIO_PDIR_REG(PTC_BASE_PTR)?17)&(0x1));Down_Data_leftl1][5]((GPIO_PDIR_REG(PTB_BASE_PTR)?9)&(0x1));Down_Data_right[l][5]((GPIO_PDIR_REG(PTC_BASE_PTR)?10)&(0x1));delay_us(Light/3);Data_left[2][01((GPIO_PDIR_REG(PTC_BASE_PTR)?12)&(0x1));Data_right[2][0]((GPIO_PDIR_REG(PTC_BASE_PTR)?13)&(0xl));Down_Data_leftl2][0]((GPIO_PDIR_REG(PTB_BASE_PTR)?9)&(0x1));Down_Data_right[2][0]((GPIO_PDIR_REG(PTC_BASE_PTR)?10)&(0x1));Data_left[2][5]((GPIO_PDIR_REG(PTC_BASE_PTR)?10)&(0x1));Data_right[2][5]((GPIO_PDIR_REG(PTC_BASE_PTR)?17)&(0x1));-xni-Down_Data_leftl2J[5]((GPI0_PDIR_REG(PTB_BASE_PTR)?9)&(0x1));Down_Data_right[2][5]((GPIO_PDIR_REG(PTC_BASE_PTR)?10)&(0x1));LED_OFF_ULED_OFF_Ddelay_us(100);if((DataJeftl0]l0J+Data_leftLl]l0J+DataJeft[2][0J)>=2)(Data_left_F[O]=l;)else{Data_left_F[O]=O;)ifi((Data_right[O][O]+Data_right[1][0]+Data_right[2][0])>=2)(Data_right_F[0]=l;}elseData_right_F[OJ=0;)if( (Down_Data」eft⑼[0]+ Down_Data_left[1][0]+Down_Data」eft⑵[0])>=2){Down_Data_left_F[0]=1;|else|Down_Data_left_F[0]=0;}Down_Data_right[1][0]+if( (Down_Data_right[0][0]+Down_Data_right[1][0]+Down_Data_right⑵⑼)>=2)(Down_Data_right_F[0]=1;}elseDown_Data_right_F[0]=0;if((Data_leftlOJl5J+DataJeftll][5J+Data_left[2][5J)>=2)Data_left_F[5J=l;}else(Data_left_F[51=0;}if((Data_right[0][5]+Data_right[l][5]+Data_right[2][5])>=2)(Data_right_F[5]=l;}else{Data_right_F[5J=0;|if( (Down_Data_left[0][5]+ Down_Data_left[1][5]+Down_DataJeft[2][5])>=2)(Down_Data_left_F[5]=1;}else(Down_Data_left_F[5]=0;)Down_Data_right[1]Down_Data_right[1][5]+Down_Data_right[2][5])>=2)(Down_Data_right_F[5]=1;)else(Down_Data_right_F[5]=0;}LED_1_ULED_1_Ddelay_us(Light/3);Data_left[O][l]((GPIO_PDIR_REG(PTC_BASE_PTR)?10)&(0x1)(GPIO_PDIR_REG(PTC_BASE_PTR)?ll)&(Ox1)(GPIO_PDIR_REG(PTC_BASE_PTR)?12)&(0x1));Data_right[OJ[l]((GPIO_PDIR_REG(PTC_BASE_PTR)?13)&(Oxl)(GPIO_PDIR_REG(PTC_BASE_PTR)?16)&(0x1)(GPIO_PDIR_REG(PTC_BASE_PTR)?17)&(0x1));Down_Data_left[0][1]((GPI0_PDIR_REG(PTB_BASE_PTR)?9)&(0x1));Down_Data_right[0][1]((GPIO_PDIR_REG(PTC_BASE_PTR)?10)&(0x1));delay_us(Light/3*l);Data_left[l][l]TOC\o"1-5"\h\z((GPIO_PDIR_REG(PTC_BASE_PTR)?10)&(0x1) &(GPIO_PDIR_REG(PTC_BASE_PTR)?11)&(0x1) &(GPIO_PDIR_REG(PTC_BASE_PTR)?12)&(Oxl));Data_right[l][l] =((GPIO_PDIR_REG(PTC_BASE_PTR)?13)&(0x1) &(GPIO_PDIR_REG(PTC_BASE_PTR)?16)&(0x1) &(GPIO_PDIR_REG(PTC_BASE_PTR)?17)&(0x1));Down_Data_left[1][1] =((GPI0_PDIR_REG(PTB_BASE_PTR)?9)&(Oxl));Down_Data_right[1][1]((GPIO_PDIR_REG(PTC_BASE_PTR)?10)&(0x1));delay_us(Light/3*1);TOC\o"1-5"\h\zData_left[2][l] =((GPIO_PDIR_REG(PTC_BASE_PTR)?10)&(0x1) &(GPIO_PDIR_REG(PTC_BASE_PTR)?ll)&(Ox1) &(GPIO_PDIR_REG(PTC_BASE_PTR)?12)&(Oxl));Data_rightr2][l] =((GPIO_PDIR_REG(PTC_BASE_PTR)?13)&(0x1) &(GPIO_PDIR_REG(PTC_BASE_PTR)?16)&(0x1) &(GPIO_PDIR_REG(PTC_BASE_PTR)?17)&(0x1));Down_Data」eft[2][l] =((GPI0_PDIR_REG(PTB_BASE_PTR)?9)&(0x1));Down_Data_right[2][l]((GPIO_PDIR_REG(PTC_BASE_PTR)?10)&(0x1));LED_OFF_ULED_OFF_Ddelay_us(100);if((Data_left[O][1]+DataJeft[l][1]+DataJeft[2][1])>=2)(Data_left_F[l]=l;elseData_left_F[1]=0;)if((Data_rightfO][l]+Data_right[1][1]+Data_right[2][1])>=2)(Data_right_F[1]=1;}elseData_right_F[1]=0;}Down_Data_left[1][1]+if(( Down_Data_left[01[l]+Down_Data_left[1][1]+Down_Data_left[2][1])>=2)Down_Data_left_F[1]=1;}elseDown_Data_left_F[1]=0;if( (Down_Data_right[0][l]+ Down_Data_right[1][1]+Down_Data_right[2][1])>=2)Down_Data_right_F[1]=1;)else(Down_Data_right_F[l]=0;)LED_2_ULED_2_Ddelay_us(Light/3);TOC\o"1-5"\h\zData_left[0][2] =((GPIO_PDIR_REG(PTC_BASE_PTR)?10)&(0x1) &(GPIO_PDIR_REG(PTC_BASE_PTR)?11)&(0x1) &(GPIO_PDIR_REG(PTC_BASE_PTR)?12)&(0x1));Data_right[0][2] =((GPIO_PDIR_REG(PTC_BASE_PTR)?13)&(0x1) &(GPIO_PDIR_REG(PTC_BASE_PTR)?16)&(0x1) &(GPIO_PDIR_REG(PTC_BASE_PTR)?17)&(0x1));Down_Data」eft⑼⑵ =((GPI0_PDIR_REG(PTB_BASE_PTR)?9)&(Oxl));Down_Data_right[0][2] =((GPIO_PDIR_REG(PTC_BASE_PTR)?10)&(0x1));deiay_us(Light/3);Data_left[l][2] =((GPIO_PDIR_REG(PTC_BASE_PTR)?10)&(0x1) &(GPIO_PDIR_REG(PTC_BASE_PTR)?ll)&(Ox1) &(GPIO_PDIR_REG(PTC_BASE_PTR)?12)&(0x1));Data_right[l][2] =((GPIO_PDIR_REG(PTC_BASE_PTR)?13)&(0x1) &(GPIO_PDIR_REG(PTC_BASE_PTR)?16)&(0x1) &(GPIO_PDIR_REG(PTC_BASE_PTR)?17)&(0x1));Down_Data_left[l][2]((GPI0_PDIR_REG(PTB_BASE_PTR)?9)&(0x1));Down_Data_right[l][2]((GPIO_PDIR_REG(PTC_BASE_PTR)?10)&(0x1));delay_us(Light/3);TOC\o"1-5"\h\zData_left[2][2] =((GPIO_PDIR_REG(PTC_BASE_PTR)?10)&(0x1) &(GPIO_PDIR_REG(PTC_BASE_PTR)?11)&(0x1) &(GPIO_PDIR_REG(PTC_BASE_PTR)?12)&(Oxl));Data_right[2][2] =((GPIO_PDIR_REG(PTC_BASE_PTR)?13)&(0x1) &(GPIO_PDIR_REG(PTC_BASE_PTR)?16)&(0x1) &(GPIO_PDIR_REG(PTC_BASE_PTR)?17)&(0x1));Down_Data_left[2][2] =((GPI0_PDIR_REG(PTB_BASE_PTR)?9)&(Oxl));Down_Data_right[2][21((GPIO_PDIR_REG(PTC_BASE_PTR)?10)&(0x1));LED_OFF_LJLED_OFF_Ddelay_us(100);if((Data_left[01[2]+Data_left[ll[2]+Data_left[2][21)>=2)(Data_left_F[2]=l;}else(Data_left_F[21=0;}if((Data_right[O][2]+Data_right[1][2]+Data_right[2][2])>=2)Data_right_F[2]=l;}elseData_right_F[2]=0;)if( (Down_Data_left[0][2J+ Down_Data_left[1][2]+Down_Data_left[2J[2])>=2)(Down_Data」eft_F[2]=1;)elseDown_Data_left_F[2]=0;if( (Down_Data_right[01[2]+ Down_Data_right[1][2]+Down_Data_right[2][2])>=2)(Down_Data_right_F[2]=1;)elseDown_Data_right_F[2]=0;LED_3_ULED_3_DdeIay_us(Light/3);TOC\o"1-5"\h\zData_left[0][3] =((GPIO_PDIR_REG(PTC_BASE_PTR)?10)&(0x1) &(GPIO_PDIR_REG(PTC_BASE_PTR)?11)&(0x1) &(GPIO_PDIR_REG(PTC_BASE_PTR)?12)&(0x1));Data_rightlO][3] =((GPIO_PDIR_REG(PTC_BASE_PTR)?13)&(0x1) &(GPIO_PDIR_REG(PTC_BASE_PTR)?16)&(0x1) &(GPIO_PDIR_REG(PTC_BASE_PTR)?17)&(Oxl));delay_us(Light/3);Data_left[l][3] =((GPIO_PDIR_REG(PTC_BASE_PTR)?10)&(0x1) &(GPIO_PDIR_REG(PTC_BASE_PTR)?11)&(0x1) &(GPIO_PDIR_REG(PTC_BASE_PTR)?12)&(0x1));Data_right[l][3] =((GPIO_PDIR_REG(PTC_BASE_PTR)?13)&(0x1) &(GPIO_PDIR_REG(PTC_BASE_PTR)?16)&(0x1) &(GPIO_PDIR_REG(PTC_BASE_PTR)?17)&(0x1));delay_us(Light/3);Data_left[2][3] =((GPIO_PDIR_REG(PTC_BASE_PTR)?10)&(0x1) &(GPIO_PDIR_REG(PTC_BASE_PTR)?11)&(0x1) &(GPIO_PDIR_REG(PTC_BASE_PTR)?12)&(Oxl));

TOC\o"1-5"\h\zData_rightl2][3] =((GPIO_PDIR_REG(PTC_BASE_PTR)?13)&(0x1) &(GPIO_PDIR_REG(PTC_BASE_PTR)?16)&(0x1) &(GPIO_PDIR_REG(PTC_BASE_PTR)?17)&(Oxl));LED_OFF_ULED_OFF_Ddelay_us(100);if((Data_leftlO][3]+Data_left[l][3J+DataJeft[2][3])>=2)(Data_left_F[3]=l;}else{Datableft_F[3]=0;|if((Data_right[0][3]+Data_right[l][3]+Data_right[2][3])>=2)Data_right_F[3]=1;}elseData__right_F[3]=0;}if((Down_Data」if((Down_Data」eft[0][3]+Down_Data_left[1][3]+Down_Data_left[2][3])>=2)Down_Data_left_F[3]=l;)else(Down_Data」eft_F[3]=0;}Down_Data_right[1][3]+if(( Down_Data_right[0][3]+Down_Data_right[1][3]+Down_Data_right[2][3])>=2)(Down_Data_right_F[3]=1;}else(Down_Data_right_F[3]=0;}LED_4_Udelay_us(Light/3);Data_left[0][4J=((GPIO_PDIR_REG(PTC_BASE_PTR)?10)&(0x1)& (GPIO_PDIR_REG(PTC_BASE_PTR)?11)&(0x1) &(GPIO_PDIR_REG(PTC_BASE_PTR)?12)&(0x1));Data_rightlOJ[4J=((GPIO_PDIR_REG(PTC_BASE_PTR)?13)&(0x1)& (GPIO_PDIR_REG(PTC_BASE_PTR)?16)&(Oxl) &(GPIO_PDIR_REG(PTC_BASE_PTR)?17)&(0x1));delay_us(Light/3);Data_left[l][4J=((GPIO_PDIR_REG(PTC_BASE_PTR)?10)&(0x1)TOC\o"1-5"\h\z& (GPIO_PDIR_REG(PTC_BASE_PTR)?11)&(0x1) &(GPIO_PDIR_REG(PTC_BASE_PTR)?12)&(0x1));Data_right[l][4]=((GPIO_PDIR_REG(PTC_BASE_PTR)?13)&(0x1)& (GPIO_PDIR_REG(PTC_BASE_PTR)?16)&(0x1) &(GPIO_PDIR_REG(PTC_BASE_PTR)?17)&(Oxl));deIay_us(Light/3);Data_left[2][4J=((GPIO_PDIR_REG(PTC_BASE_PTR)?10)&(0x1)& (GPIO_PDIR_REG(PTC_BASE_PTR)?11)&(0x1) &(GPIO_PDIR_REG(PTC_BASE_PTR)?12)&(0x1));Data_rightL2][4J=((GPIO_PDIR_REG(PTC_BASE_PTR)?13)&(0x1)& (GPIO_PDIR_REG(PTC_BASE_PTR)?16)&(0x1) &(GPIO_PDIR_REG(PTC_BASE_PTR)?17)&(0x1));LED_OFF_ULED_OFF_Dif((Data」eft[O]⑷+Data」eft[l][4]+Data」eft⑵[4])>=2)(Data_left_F[4]=l;)else(Data_left_F[4]=0;

if((Data_right[0][4]+Data__right[1][4]+Data_right[2][4])>=2)Data_right_F[41=l;)else(Data_right_F[4]=0;if( (Down_Data」eft[0][4]+Down_Data」eft⑵[4])>=2)(Down_Data_left_F[4]=1;}else(Down_Data_left_F[4]=0;}if(( Down_Data_right[OJ[4J+Down_Data_left[1][4]+Down_Data_left[1][4]+Down_Data_right[1J[4]+Down_Data_right_F[4]=1;)elseDown_Data_right_F[4]=0;AD_Leftf01=ad_mid(ADCO,AD13,ADC_8bit);AD_Left[1l=ad_mid(ADCO,AD12,ADC_8bit);AD_Right[0]=ad_mid(ADC0,AD9,ADC_8bit);AD_Right[1l=ad_mid(ADCO,AD8,ADC_8bit);)voidPortCBitOIsr(void){//EncoderDown_ISR//PORTC_ISFR=1?0; //ClearthePTE25interruptflagsif(StartFlag!=O)(if(press<2)(press=press+l;Jelsepress=O;))elseStartVaule[O]=-StartVaule[O];}voidPortCBit3Isr(void){//EncoderTurnJSRif(press==0){//AD^INidnpAE^O4-i??'EQ,±I?if(((GPIO_PDIR_REG(PTC_BASE_PTR)?2)&0xlu)==0)StartFlag=min(39,(int)(StartFlag+1));//ADUIX6Dy?dOBOC)DyelseStartFlag=max(O,(int)(StartFlag-1));No=0;}elseif(press==l){if(StartFlag<=24){if(((GPIO_PDIR_REG(PTC_BASE_PTR)?2)&0xlu)==0)StartVaulefStartFlagl=min(9999,StartVaule[StartFlagl+l);//ADlIX6Dy?oOBOODyelseStartVaule[StartFlag]=max(O,StartVaule[StartFlag]-l);)elseif(((GPIO_PDIR_REG(PTC_BASE_PTR)?2)&0xlu)==0){if(StartFlag==25)No=min(ll,No+l)y/ADHiX6Dy?ddBOdDyelseNo=min(15,No+l);}elseNo=max(0,No-l);))elseif(StartFlag==25)(if(((GPIO_PDIR_REG(PTC_BASE_PTR)?2)&0xlu)==0)StartVaule[StartFlag+No]=min(999,StartVaule[StartFlag+No]-F1);//ADHIX6Dy?ddBOdDyelseStartVaule[StartFlag+No]=max(0,StartVaule[StartFlag+No]-l);)elseif(StartFlag==26){if(((GPIO_PDIR_REG(PTC_BASE_PTR)?2)&0xlu)==0)StartVaule[StartFlag+No+ll]=min(999,StartVaule[StartFlag+No+l1]+1);//ADUIX6Dy?dOBOODyelseStartVaule[StartFlag+No+ll]=max(O,StartVaule[StartFlag+No+l1J-1);)else(if(((GPIO_PDIR_REG(PTC^BASE_PTR)?2)&0xlu)==0)StartVaule[StartFlag+261=min(9999,StartVaule[StartFlag+26]+l);//ADX6Dy?odBOdDyelseStartVaule[StartFlag+26]=max(0,StartVaule[StartFlag+26]-l);FunctionData_dispoalvoidData_dispoal(void)Left_Flag=DataJeft_F[0]*1+Data_left_F[1]*2

+Data」eft_F⑵*4+Data_left_F[3]*8+Data」eft_F[4]*16+Data_left_F[5J*32switch(Left_Flag)case0:Flag_left[0J=60;break;case1:Flag_left[0]=o;break;case2:Flag_leftfO]=10;break;case3:Flag_left[0]=0;break;case4:Flag_left[0J=20;break;case5:Flag_left

溫馨提示

  • 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

提交評論