版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第一屆“飛思卡爾”杯全國(guó)大學(xué)生 智能汽車(chē)邀請(qǐng)賽 技術(shù)報(bào)告 附件B智能移動(dòng)小車(chē)的開(kāi)發(fā)與研制 學(xué)校:四川大學(xué) 隊(duì)伍名稱(chēng):四川大學(xué) 1隊(duì) 參賽隊(duì)員: 楊承凱、鐘鵬、陳果 帶隊(duì)教師:楊剛 II / 70 關(guān)于技術(shù)報(bào)告和研究論文使用授權(quán)的說(shuō)明 本人完全了解第一屆“飛思卡爾”杯全國(guó)大學(xué)生智能汽車(chē)邀請(qǐng)賽關(guān)保留、 使用技術(shù)報(bào)告和研究論文的規(guī)定,即:參賽作品著作權(quán)歸參賽者本人,比賽組 委會(huì)和飛思卡爾半導(dǎo)體公司可以在相關(guān)主頁(yè)上收錄并公開(kāi)參賽作品的設(shè)計(jì)方 案、技術(shù)報(bào)告以及參賽模型車(chē)的視頻、圖像資料,并將相關(guān)內(nèi)容編纂收錄在組 委會(huì)出版論文集中。 參賽隊(duì)員簽名:楊承凱鐘鵬 陳果 帶隊(duì)教師簽名:楊剛 日 期:2006-8
2、-5 目錄 第一章前言 3 第二章模型車(chē)設(shè)計(jì)制作的主要思路以及實(shí)現(xiàn)的技術(shù)方案概要說(shuō)明 2 2.1 檢測(cè)機(jī)構(gòu) 2 2.1.1 普通紅外對(duì)管 3 2.1.2 帶調(diào)制紅外傳感器 3 2.1.3 CCD 圖像傳感器 3 2.2 控制算法 3 第三章模型車(chē)機(jī)械部分安裝及改造、傳感器的設(shè)計(jì)安裝、系統(tǒng)電路板的固定及 連接等 4 3.1 機(jī)械改動(dòng)及電路板安裝 4 3.2線(xiàn)陣CCD圖像傳感器的設(shè)計(jì)5 3.3 速度檢測(cè)傳感器 8 第四章電路設(shè)計(jì)說(shuō)明 8 第五章HS12控制軟件主要理論、算法說(shuō)明及代碼設(shè)計(jì)介紹等10 5.1 模糊控制器的基本結(jié)構(gòu) 11 5.1.1 模糊集合的隸屬函數(shù) 12 5.1.2 論域 12 5
3、.1.3 模糊推理 12 第六章開(kāi)發(fā)工具、制作、安裝、調(diào)試過(guò)程說(shuō)明 20 第七章模型車(chē)的主要技術(shù)參數(shù)說(shuō)明 21 結(jié)論 22 參考文獻(xiàn) 23 附錄 A :源代碼 XXIV 附錄B:智能移動(dòng)小車(chē)的開(kāi)發(fā)與研制 XXVII 第一章 前言 本智能車(chē)采用了紅外光電開(kāi)關(guān)作為速度檢測(cè)單元,線(xiàn)陣CCD圖像傳感器作 為引導(dǎo)線(xiàn)檢測(cè)單元,模糊控制作為主要控制算法。紅外光電開(kāi)關(guān)發(fā)出的紅外線(xiàn) 受安裝在驅(qū)動(dòng)電機(jī)轉(zhuǎn)軸上的扇頁(yè)片切割,通過(guò)其兩次跳變信號(hào)的時(shí)間間隔即可 計(jì)算出車(chē)輪轉(zhuǎn)速;CCD的驅(qū)動(dòng)信號(hào)由外部獨(dú)立數(shù)字電路產(chǎn)生,輸出信號(hào)由放大 比較電路處理后將空間上引導(dǎo)線(xiàn)的位置映射為時(shí)間上相應(yīng)時(shí)刻的脈沖信號(hào), MCU只需要向CCD發(fā)
4、出幀同步信號(hào)然后檢測(cè)輸出脈沖發(fā)生的時(shí)間便可以判斷出 引導(dǎo)線(xiàn)的位置,軟件消耗極??;模糊控制器以 CCD視覺(jué)中心偏離引導(dǎo)線(xiàn)的誤差 和誤差變化率作為輸入量,以舵機(jī)轉(zhuǎn)向角作為輸出量,輸入隸屬函數(shù)采用三角 形法,輸出隸屬函數(shù)采用脈沖法,由人的駕駛經(jīng)驗(yàn)和智能車(chē)實(shí)際運(yùn)行情況得到 模糊規(guī)則,采用MAX-MIN隹理法則得到輸出語(yǔ)言,通過(guò)重心法計(jì)算出轉(zhuǎn)向角。 報(bào)告的第一部分介紹模型車(chē)設(shè)計(jì)制作的主要思路以及實(shí)現(xiàn)的技術(shù)方案; 第二部分介紹模型車(chē)的機(jī)械改裝、電路板固定和傳感器的設(shè)計(jì); 第三部分介紹模型車(chē)主控板的電路設(shè)計(jì)說(shuō)明; 第四部分介紹模糊控制的主要理論、算法說(shuō)明和代碼設(shè)計(jì)介紹; 第五部分介紹開(kāi)發(fā)工具、制作、安裝、調(diào)
5、試過(guò)程說(shuō)明; 第六部分介紹模型車(chē)的主要技術(shù)參數(shù); 第七部分是對(duì)設(shè)計(jì)的總結(jié) 第二章 模型車(chē)設(shè)計(jì)制作的主要思路以及實(shí)現(xiàn)的技術(shù)方案概要 說(shuō)明 智能車(chē)是一個(gè)集光、機(jī)、電于一體的綜合性系統(tǒng),主要包括執(zhí)行機(jī)構(gòu)、檢 測(cè)機(jī)構(gòu)和控制器,系統(tǒng)結(jié)構(gòu)如圖 2.1。執(zhí)行機(jī)構(gòu)由大賽統(tǒng)一規(guī)定,本設(shè)計(jì)未做 任何改裝,現(xiàn)主要考慮的是檢測(cè)機(jī)構(gòu)和控制算法。 圖2.1 2.1檢測(cè)機(jī)構(gòu) 檢測(cè)白色背景上黑線(xiàn)的方法很多,主要分為普通紅外對(duì)管,帶調(diào)制紅外傳 感器,CCD圖像檢測(cè)等。 2.1.1 普通紅外對(duì)管 普通紅外對(duì)管使用簡(jiǎn)單、反應(yīng)快、信號(hào)穩(wěn)定、靈敏度好,在智能車(chē)前方安 裝一排這種對(duì)管可以較好的檢測(cè)到地面上的引導(dǎo)線(xiàn),但其檢測(cè)距離近,一般有
6、 效距離為5mm-20mm不能探測(cè)到前方賽道信息,在小車(chē)高速時(shí)通過(guò)這種方式 檢測(cè)到賽道變化再做出反應(yīng)一般來(lái)不及,很容易沖出賽道,本設(shè)計(jì)中沒(méi)有采用 此方案。 2.1.2 帶調(diào)制紅外傳感器 普通紅外對(duì)管經(jīng)過(guò)調(diào)制 調(diào)制頻率一般為 40K)后可以探測(cè)到更遠(yuǎn)的距 離,但要求反射面垂直,智能車(chē)檢測(cè)賽道時(shí)射線(xiàn)是傾斜反射的,探測(cè)距離大打 折扣 不過(guò)仍然能達(dá)到 30cm 左右,本設(shè)計(jì)曾采用過(guò)此方案,實(shí)測(cè)中發(fā)現(xiàn)調(diào)制后 不同對(duì)管之間容易產(chǎn)生干擾,若采用時(shí)分方式總體采樣率又太低,故放棄了此 2.1.3 CCD 圖像傳感器 CCD圖像傳感器分為線(xiàn)陣和面陣兩種,由于智能小車(chē)只需要檢測(cè)黑線(xiàn)的位 置,可以不需要面信息,選用了
7、線(xiàn)陣 CCD比較合適。CCDffl像傳感器優(yōu)點(diǎn)在于 可以穩(wěn)定的檢測(cè)到較遠(yuǎn)距離的賽道信息 一般在30cm以上),并且檢測(cè)分辨率 高,幀采樣頻率也較高V100HZ以上),不過(guò)使用復(fù)雜,一般需要占用較多的 MCU處理時(shí)間,并且需要穩(wěn)定的環(huán)境光??紤]到比賽場(chǎng)地在室內(nèi),光線(xiàn)比較均 勻,受環(huán)境光影響的這一缺點(diǎn)可以忽略。再考慮到本設(shè)計(jì)中實(shí)際上只需要區(qū)分 出黑白兩種顏色,完全可以直接通過(guò)外部放大、比較電路將CCD言號(hào)做二值化 處理后再由MCU僉測(cè)電平信息,而不必對(duì)其做 A/D轉(zhuǎn)換;同時(shí)CCD驅(qū)動(dòng)信號(hào)也 可以通過(guò)外部電路產(chǎn)生, MCU只需要給出幀同步信號(hào),這樣便大大降低了對(duì) MCU勺消耗。本設(shè)計(jì)最終采用了這種方
8、案。 2.2 控制算法 智能車(chē)需要根據(jù)實(shí)際檢測(cè)到的賽道信息對(duì)轉(zhuǎn)向角做出自動(dòng)調(diào)整,傳統(tǒng)上一 般使用PID算法作為控制算法,但本設(shè)計(jì)由于系統(tǒng)模型復(fù)雜,智能車(chē)的動(dòng)力學(xué) 模型與很多因素相關(guān),如智能車(chē)重量、電機(jī)特性、機(jī)械系統(tǒng)傳遞效率、車(chē)輪彈 性系數(shù)、輪與地之間摩擦系數(shù)、最大靜摩擦力等等,所以決定采用模糊控制算 法,因?yàn)槠洳灰蕾?lài)與精確的數(shù)學(xué)模型。本設(shè)計(jì)中以 CCD圖像傳感器視覺(jué)中心相 對(duì)與引導(dǎo)線(xiàn)的位置誤差和誤差變化率作為輸入量,根據(jù)人的駕駛經(jīng)驗(yàn)得到轉(zhuǎn)向 角輸出,實(shí)驗(yàn)中取得了良好的效果。 另外,智能車(chē)不僅需要轉(zhuǎn)向控制,還需要速度控制,否則在高速轉(zhuǎn)彎時(shí)將 沖出賽道。不過(guò)本設(shè)計(jì)中并沒(méi)有采用精確的速度控制,因?yàn)橹?/p>
9、能車(chē)本身對(duì)行駛 速度不需要一個(gè)精確的定量,本文使用的方法是在轉(zhuǎn)彎時(shí)采用了“點(diǎn)剎”控 制,其他情況下以全速行駛,實(shí)踐中完全滿(mǎn)足預(yù)定需求,智能車(chē)在行駛時(shí)不會(huì) 沖出跑道。 第三章 模型車(chē)機(jī)械部分安裝及改造、傳感器的設(shè)計(jì)安裝、系 統(tǒng)電路板的固定及連接等 3.1 機(jī)械改動(dòng)及電路板安裝 模型車(chē)在按照廠家圖紙完成車(chē)輪、舵機(jī)、連桿的正常裝配后,需要解決主 控電路板和CCD電路的安裝。利用車(chē)身后架已有的兩個(gè)支撐柱,再在車(chē)身中部 打兩個(gè)孔安上廠家原配的兩根支撐柱完成對(duì)主控板的支撐;轉(zhuǎn)速傳感器由連在 電機(jī)主軸上的扇頁(yè)和光電開(kāi)關(guān)構(gòu)成,扇頁(yè)直接插進(jìn)電機(jī)主軸用膠固牢,光電開(kāi) 關(guān)也用膠粘在電機(jī)的梁架上;CCD傳感器的安裝稍
10、微復(fù)雜點(diǎn),先在車(chē)頭部底架 上打三個(gè)孔安裝上結(jié)構(gòu)銅柱,再把一個(gè)前端仰起的鋁板安在結(jié)構(gòu)銅柱上,最后 再把CCD電路板安裝在鋁板前端仰起的部分;所有部分通過(guò)排線(xiàn)相連,安裝完 成后實(shí)物圖如圖 3.1 。 圖3.1 3.2線(xiàn)陣CCD圖像傳感器的設(shè)計(jì) CCD電路由線(xiàn)陣CCD圖像傳感器芯片卩PD3575D輸出信號(hào)放大比較電路 構(gòu)成,由于圖像傳感器芯片對(duì)光線(xiàn)要求較高,所以本設(shè)計(jì)在其下面放置一個(gè)強(qiáng) 光白色LED來(lái)調(diào)節(jié)照明。CCD的驅(qū)動(dòng)信號(hào)主要由外部電路產(chǎn)生,MCU控制幀同 步信 號(hào),CCD輸出信號(hào)先經(jīng)過(guò)放大然后通過(guò)比較器提取出賽道上的黑線(xiàn)信息,MCU 通過(guò)測(cè)定黑線(xiàn)對(duì)應(yīng)的脈沖在幀信號(hào)里的出現(xiàn)時(shí)刻來(lái)判斷黑線(xiàn)的位置。
11、 卩PD3575D是NEC公司生產(chǎn)的一種高靈敏度、低暗電流、1024像元的內(nèi) 置采樣保持電路和放大電路的線(xiàn)陣 CCD圖像傳感器。它內(nèi)部包含一列1024像 元的光敏二極管和兩列525位CCD電荷轉(zhuǎn)移寄存器。該器件可工作在 5V驅(qū)動(dòng) (脈沖 和12V電源條件下。在使用 卩PD3575D設(shè)計(jì)線(xiàn)陣CCD圖像傳感器的過(guò) 程中有兩個(gè)難點(diǎn)。一是驅(qū)動(dòng)信號(hào)的產(chǎn)生,二是輸出信號(hào)的處理。卩PD3575D的 驅(qū)動(dòng)需要四路脈沖,分別為轉(zhuǎn)移柵時(shí)鐘10、復(fù)位時(shí)鐘RO采樣保持時(shí)鐘 SH0和傳輸門(mén)時(shí)鐘TG,它們的時(shí)序圖如下: t)TG 積分時(shí)間* 一 SS * 10 血 RO u 1Mwmw dSHO J 圖3.2 在明確了
12、CCD勺驅(qū)動(dòng)時(shí)序后,下面關(guān)心的便是如何產(chǎn)生這四路驅(qū)動(dòng)信號(hào)。 有兩種方案:錯(cuò)誤!由單片機(jī)程序產(chǎn)生四路時(shí)鐘驅(qū)動(dòng)信號(hào),這種辦法簡(jiǎn)單易 行。但實(shí)際上是不適用于智能小車(chē)系統(tǒng)的。因?yàn)轵?qū)動(dòng)信號(hào)的頻率相當(dāng)高 8M,如果用單片機(jī)產(chǎn)生這個(gè)信號(hào),那幾乎將占用所有的單片機(jī)時(shí)間,導(dǎo)致 無(wú)法對(duì)信號(hào)做出處理和響應(yīng)其他操作。錯(cuò)誤!由外圍電路直接產(chǎn)生 CCD驅(qū)動(dòng)時(shí) 鐘,這種辦法比較復(fù)雜,要用計(jì)數(shù)器和觸發(fā)器專(zhuān)門(mén)設(shè)計(jì)一個(gè)時(shí)序電路 因?yàn)榇?賽規(guī)定另外不能用可編程器件),單片機(jī)只需要產(chǎn)生一個(gè)幀同步信號(hào)傳輸門(mén) 信號(hào)TG與外圍時(shí)續(xù)電路保持同步即可。這種方式雖然在操作上比較復(fù)雜, 但給單片機(jī)留出了大量的空閑時(shí)間,以便能夠?qū)ζ渌畔⒆鎏幚?,適
13、合于實(shí) 際,本設(shè)計(jì)就是采用的這種方式。 S-8-WQ3 4KC 4.CCD Drive Signuk U43A era- Gi MCHHCMSb 1M5S W: MCflMmil:- MOmcrr+L ET LD EHT 2 亠昌 MI+HCIOD MC7tHC10D 圖3.3 CCD驅(qū)動(dòng)信號(hào)電路 CCD俞出的是模擬信號(hào),將圖象采集進(jìn)單片機(jī),一般要對(duì)CCD信號(hào)做A/D 轉(zhuǎn)換,完成這些需要一個(gè)高速的 A/D轉(zhuǎn)換器和信號(hào)處理器件,這對(duì)單片機(jī)的性 能要求顯然是比較高的??紤]到本設(shè)計(jì)中實(shí)際上只需要區(qū)分黑色和白色,CCD 對(duì)于這兩者輸出的信號(hào)差異較大,將 CCD信號(hào)放大后直接使用一個(gè)比較器對(duì)信 號(hào)進(jìn)行二
14、值化處理即可,由單片機(jī)檢測(cè)二值信號(hào)的跳變時(shí)間,便可以計(jì)算出黑 線(xiàn)的位置,這樣便進(jìn)一步縮短了單片機(jī)在 CCD消耗的時(shí)間。 圖3.4 CCD輸出信號(hào)處理電路 C21 lOu OOlu JO 2 RO 3 SHO 4 5 f*WTi idj 0 7 TO 3 9 )0 GND GHD IC Wit RO OD SHO ED HC NC NC HC NC NC TG IR 蟲(chóng) CH ro 14 T 12 Ti OHD 20_J 17 15 圖 3.5 UPD3575D 3.3速度檢測(cè)傳感器 速度檢測(cè)傳感器由連在電機(jī)主軸上的扇頁(yè)和光電開(kāi)關(guān)構(gòu)成,電機(jī)旋轉(zhuǎn)時(shí) 帶 動(dòng)扇頁(yè)旋轉(zhuǎn)遮擋光電開(kāi)關(guān)產(chǎn)生脈沖。 圖3.6扇
15、頁(yè)和光電開(kāi)關(guān) 第四章電路設(shè)計(jì)說(shuō)明 主控電路板比較簡(jiǎn)單,主要由微控器MC9S12DB128電機(jī)驅(qū)動(dòng)芯片、光電 開(kāi)關(guān)接口、舵機(jī)接口、 CCD信號(hào)接口、串口構(gòu)成。微控器 MC9S12DB12的周邊 小電路包括電源、晶振、復(fù)位電路和 BDM調(diào)試接口,電機(jī)驅(qū)動(dòng)芯片采用組委會(huì) 提供的MC33996電機(jī)和舵機(jī)的控制信號(hào)均是 PWM波,所以電機(jī)控制芯片接 PWM2舵機(jī)接PWM1光電開(kāi)關(guān)接IC0,CPU過(guò)測(cè)定光電開(kāi)關(guān)兩個(gè)相同跳變沿 之間的時(shí)間來(lái)測(cè)定電機(jī)的轉(zhuǎn)速;CCDS口由CPU的驅(qū)動(dòng)信號(hào)和CCD返回的檢測(cè) 信號(hào)構(gòu)成;串口電路就是標(biāo)準(zhǔn) MAX232接口電路。另外為了調(diào)試方便,我們引 入了無(wú)線(xiàn)開(kāi)關(guān)來(lái)啟動(dòng)和停止模型車(chē)
16、。 li To. a ! 1 i inNn wzBra SP- tip . S s-rolJ- SQ. 口口 MBEPfa-lS3 W3II-L JJr ” 71011 址葺 ds TVS. CUE wcr.J EDmruuLli Euu KSS.2S 亠窖Msaa fe. MMSKHfe Mg?* JS1 Kw苛 色目* RALI M3 RMH.C s j=0; n=0; buff_oreaen=O; i=0; buff_erroren=O; 計(jì)算隸屬度sub Y ccd_error.da處于 func_errori.func.a 與 fun c_errori.fu nc.c之間? sub=
17、m in bufl_error.arr_errori.sub, buff_dferror.arr_dferrorj.sub; ccd_error.key二fun c_errori.key; ccd error.sub二sub; buff_error.arr_errorbuff_erroren=ccd_error; buff_erroren+; key二rulebuff_error.arr_errori.key buff_dferror.arr_dferrorj.key; n vbufl_oreaen? buff_orea.arr_orea n.key i+; i7? N Y buff_orea
18、.arr_orea n.sub sub? 讀取CCD視覺(jué)誤差變化率 ccd dferror.dat buff_orea.arr_orea n.sub二sub; i=0; buff_dferroren=O; BufLorea.arr_orea n.key二key Buff_orea.arr_orea n.sub二sub buff_oreaen+; - ccd_dferror.da處于 fun c_dferrori.fu nc.a 與fun c_dferrori.fu nq.c之間? n=0; result_orea=0; sum=0 計(jì)算隸屬度sub ccd_dferror.key=fu nc_
19、dferrori.key; ccd dferror.sub=sub; bufl_dferror.arr_dferrorbuff_dferroren二ccd_error buff dferroren+; fun c=fu nc_oreabufl_orea.arr_orea n.key.fu n sub=buff orea.arr orea n.sub; 4 result_orea+=fu ncsubc sum+=sub; J * i+; 檢測(cè)頻率 100HZ 結(jié)論 1. 根據(jù)智能移動(dòng)小車(chē)的特點(diǎn)和設(shè)計(jì)目標(biāo),采取了模糊控制算法對(duì)小車(chē)的尋 跡進(jìn)行控制,實(shí)踐中控制器發(fā)揮了相當(dāng)不錯(cuò)的效果,智能小車(chē)在彎、直
20、道上均 能快速轉(zhuǎn)向并很快達(dá)到穩(wěn)定,尋跡速度約為 1.4m/s 。 2. 所設(shè)計(jì)的CCD圖象傳感器系統(tǒng),與MCI接口簡(jiǎn)單,占用極小的MCI軟件 資源,使用方便可靠,在應(yīng)用實(shí)際應(yīng)用中發(fā)揮出了良好的性能。 3. 使用了紅外光電開(kāi)關(guān)檢測(cè)車(chē)輪的轉(zhuǎn)速,性能穩(wěn)定可靠。 4. 不足和尚需完善之處:在智能移動(dòng)小車(chē)走小的 S 型彎道可以想辦法讓小 車(chē)不轉(zhuǎn)彎直線(xiàn)行駛過(guò)去,因?yàn)楸荣悤r(shí)智能小車(chē)可以跑兩圈,打算在第一圈記錄 一些統(tǒng)計(jì)信息,第二圈時(shí)根據(jù)上一圈的統(tǒng)計(jì)信息識(shí)別出前方S型彎道,通過(guò)讓 參考點(diǎn)偏移的方法使小車(chē)直線(xiàn)通過(guò)。 參考文獻(xiàn) 1 蔣新松.機(jī)器人學(xué)導(dǎo)論 .第一版 .沈陽(yáng):遼寧人民出版社 .1994 :420-42
21、6 2 吳廣玉、姜復(fù)興 . 機(jī)器人工程導(dǎo)論 . 第一版 . 哈爾濱:哈爾濱工業(yè)大學(xué)出版社 1988: 196-241 3 徐國(guó)華,譚民 . 移動(dòng)機(jī)器人的發(fā)展現(xiàn)狀及其趨勢(shì). 機(jī)器人技術(shù)與應(yīng)用, 2001 年第三 期: 5-16 頁(yè) 4 周遠(yuǎn)清、張?jiān)倥d . 智能機(jī)器人系統(tǒng) . 第一版 . 北京:清華大學(xué)出版社, 1989: 24-27 5 張吉禮 .模糊-神經(jīng)網(wǎng)絡(luò)控制原理與工程應(yīng)用.第二版 . 哈爾濱:哈爾濱工業(yè)大學(xué) 出版社, 2004: 19-21 6 西三一郎 .自律型機(jī)器人制作 .第一版 .北京:科學(xué)出版社, 2001: 89-94 7 張巖、胡秀芳等 .傳感器應(yīng)用技術(shù) .第一版 .福建:福
22、建科學(xué)技術(shù)出版社, 2005: 24-28 8 王國(guó)鼎、袁海慶、陳開(kāi)利 . 橋梁檢測(cè)與加固 . 第一版 . 北京:人民交通出版社, 2003: 16-17 9 邵貝貝 .單片機(jī)嵌入式應(yīng)用的在線(xiàn)開(kāi)發(fā) .第一版 .北京:清華大學(xué)出版社, 2004: 40-42 附錄A:源代碼 *Copyright (c* 四川大學(xué) * 文件信息 * 文 件 名 : datatype.h * 創(chuàng) 建 人: 陳果 *最后修改日期 : 2006 年 4月 14日 *描述: 重新定義數(shù)據(jù)類(lèi)型以方便編程 * 歷史版本信息 * 創(chuàng)建人 : 陳果 * 版 本 : 1.0 * 日 期: 2006年 4月 14日 * 描 述 :
23、原始版本 * 當(dāng)前版本修訂 * 修改人 : * 日 期 : * 描 述 : * */ #ifndef _DATATYPE_H #define _DATATYPE_H typedef unsigned char uint8 。 typedef signed char int8 。 typedef unsigned int uint16 。 typedef signed int int16 。 typedef unsigned long uint32 。 typedef signed long int32 。 typedef float fp32 。 typedef double fp64 。 t
24、ypedef struct uint8 nCounter 。 uint16 arrLine5 。 LINE_INFO 。 extern LINE_INFO gLineInfo 。 extern LINE_INFO lLineInfo 。 extern uint8 ctrFlag 。 extern int32 fRev 。 /extern fp32 fAcc 。 extern uint8 CpFlag 。 extern uint8 gAngle 。 #endif #include datatype.h LINE_INFO gLineInfo 。 LINE_INFO lLineInfo 。 uin
25、t8 ctrFlag=1 。 uint8 CpFlag=0 。 int32 fRev=0 。 /fp32 fAcc=0 。 uint8 gAngle = 90 。 *Copyright (c* 四川大學(xué) * 文件信息 * 文 件 名: UART.h * 創(chuàng) 建 人: 陳果 *最后修改日期 : 2006 年 4月 15日 *描述: UATRT 頭文件 ,只提供發(fā)送功能用于程序調(diào)試 * 歷史版本信息 * 創(chuàng)建人 : 陳果 * 版 本 : 1.0 * 日 期: 2006年 4月 15日 * 描 述: 原始版本 * * 當(dāng)前版本修訂 - * 修改人 : * 日 期: * 描 述: * */ #ifnd
26、ef _UART_H #define _UART_H #include #include datatype.h #include /#define BaudRate 9600 /#define BusClock 24000000 void UART_Ini(void 。 void UART_SendChar(unsigned char b 。 void UART_SendStr(char *p 。 #pragma CODE_SEG _NEAR_SEG NON_BANKED void interrupt Isr_RecUART(void 。 #pragma CODE_SEG DEFAULT #e
27、ndif #include datatype.h #include motorcontrol.h #include timer.h #include pwm.h #define MAXACC 100 #define KVOT 1 #define KP 6 #define KI 10 #define MAXDIVU 5 int32 CurRev 。 /fRev int32 CurAcc 。 int32 PreErrAcc 。 int32 VisualVot 。 /fAcc void SetRev(int32 refRev int32 RefAcc 。 int32 ErrRev 。 int32 E
28、rrAcc 。 int32 ErrVot 。 int32 OutV ot 。 CurRev = fRev 。 / CurAcc = fAcc 。 ErrRev = refRev - CurRev 。 RefAcc = ErrRev * 1000 。 if(RefAccMAXACC RefAcc = MAXACC。 ErrAcc = RefAcc - CurAcc 。 ErrVot = 80*ErrAcc - 78*PreErrAcc 。 ErrVot /= 100 。 VisualVot += ErrV ot 。 OutVot = VisualV ot / KVOT 。 /*if(OutVot
29、 = 0 else OutVot = -OutVot 。 */ if(OutV ot = 255 OutV ot = 255 。 if(OutV ot OutV ot = 0 。 PWMDTY2 = OutV ot。 PreErrAcc = ErrAcc 。 void PISetRev(uint32 refRev static int32 preerror=0 。 static int32 sumu=0 。 int32 divu 。 int32 error 。 error = refRev - fRev 。 divu = KP*(error - preerror + KI*error 。 di
30、vu /= 60 。 if(divuMAXDIVU divu = MAXDIVU 。 if(divu divu = -MAXDIVU 。 sumu += divu 。 if(sumu255 sumu = 255 。 if(sumu sumu = 0 。 PWMDTY2 = sumu 。 preerror = error 。 #ifndef _MOTORCONTROL_H #define _MOTORCONTROL_H void SetRev(int32 refRev 。 void PISetRev(uint32 refRev 。 #endif #include pwm.h void PWM_I
31、ni(void /DDRA = 0X0F 。 / /PORTA_BIT0 = 0 。 /PORTA_BIT1 = 1 。 DDRB = 0XFF 。 PORTB = 0X20 。 DDRA = 0XF0 。 PORTA_BIT5 = 1 。 PWME = 0 ) PWMPOL = 0Xfb 。 PWMCAE = 0 。 PWMCTL = 0X10 。 PWMCLK = 0X07 。 PWMSCLA = 133 。 PWMSCLB = 5 。 /PWMPER0 = 0X07 。 /PWMPER1 = 0X08 。 PWMPER0 = 0X03 。 PWMPER1 = 0X86 。 PWMPER2
32、 = 0XFF 。 PWMDTY0 = 0 。 PWMDTY1 = 148 。 PWMDTY2 = 0 。 PWME = 0X07 。 void SteeringgearAngle (unsigned char a if(a = 180 a = 180 。 if(a a = 0 。 PWMDTY1 = 58 + a 。 void MotoSpeed(unsigned char s unsigned char nTemp 。 nTemp = PWMDTY2 。 if (s PWMDTY2 = s 。 else while(nTemp PWMDTY2 = nTemp 。 nTemp+ 。 PWMD
33、TY2 = nTemp 。 /PWMDTY2 = s 。 #ifndef _PWM_H #define _PWM_H #include void PWM_Ini(void 。 void SteeringgearAngle (unsigned char a 。 void MotoSpeed(unsigned char s 。 #endif *Copyright (c* 四川大學(xué) * 文件信息 * 文 件 名 : timer.c * 創(chuàng) 建 人: 陳果 *最后修改日期 : 2006 年 4月 15日 * 描述 : timer 主文件 * 歷史版本信息 * 創(chuàng)建人 : 陳果 * 版 本 : 1.0
34、* 日 期: 2006年 4月 15日 * 描 述 : 原始版本 * 當(dāng)前版本修訂 * 修改人 : * 日 期 : * 描 述 : * * #include timer.h #define TG PORTK_BIT0 #define Pulse_EN PORTK_BIT1 #define _8us asm ( nop 。 nop 。 nop 。 nop 。 nop 。 nop 。 nop。 nop 。 nop 。 nop 。 nop 。 nop。 nop 。 nop 。 nop 。 nop 。 nop 。 nop 。 nop 。 nop 。 nop。 nop 。 nop 。 nop 。 nop
35、 。 nop。 nop 。 nop 。 nop 。 nop 。 nop 。 nop 。 nop 。 nop 。 nop。 nop 。 nop 。 nop 。 nop 。 nop。 nop 。 nop 。 nop。 nop 。 nop 。 nop 。 nop 。 nop 。 nop。 nop 。 nop 。 nop 。 nop 。 nop。 nop 。 nop 。 nop 。 nop 。 nop 。 nop 。 nop 。 nop 。 nop。 nop 。 nop 。 nop 。 nop 。 nop。 nop 。 nop 。 nop 。 nop 。 nop 。 nop 。 nop 。 nop 。
36、 nop。 nop 。 nop 。 nop 。 nop 。 nop。 nop 。 nop 。 nop。 nop 。 nop 。 nop 。 nop 。 nop 。 nop。 nop 。 nop 。 nop 。 nop 。 nop。 nop 。 nop 。 nop 。 nop 。 nop 。 nop 。 nop 。 nop 。 nop。 nop 。 nop 。 nop 。 nop 。 nop。 nop 。 nop 。 nop 。 nop 。 nop 。 nop 。 nop 。 nop 。 nop。 nop 。 nop 。 nop 。 nop 。 nop。 nop 。 nop 。 。 #defin
37、e _1us asm ( nop 。 nop 。 nop 。 nop 。 nop 。 nop 。 nop。 nop 。 nop 。 nop 。 nop 。 nop。 nop 。 nop 。 nop 。 nop 。 nop 。 nop 。 nop 。 nop 。 nop。 nop 。 nop 。 nop 。 nop 。 nop。 nop 。 nop 。 nop 。 nop 。 nop 。 nop 。 nop 。 nop 。 nop。 nop 。 nop 。 nop 。 nop 。 nop。 nop 。 nop 。 nop 。 nop 。 nop 。 nop。 nop 。 nop 。 #defin
38、e MAXPULSEWIDTH 1200 #define MINPULSEWIDTH 100 uint32 nOFCounter = 0 。 uint32 nRevPeriod=0 。 /uint16 cnt 。 / char str20 。 void Timer_Ini(void MCCTL = 0Xc6 。 MCCNT = 30000 。 / TSCR2_PR = 3 。 TSCR2_TOI = 0 。 TSCR1_TFFCA = 1 。 TCTL4_EDG0A = 1 。 TCTL4_EDG0B = 0 。 TCTL4_EDG1A = 0 。 TCTL4_EDG1B = 1 。 TCTL
39、4_EDG2A = 1 。 TCTL4_EDG2B = 0 。 TIE = 0X03 。 TSCR1_TEN = 1 。 / DDRK = 0X03 。 TG = 1 。 Pulse_EN = 0 。 / EnableInterrupts 。 void GetRev(void static int32 arrPreRev8 。 /static fp32 fPreRev 。 static uint8 nRevCounter=0 。 /fp32 nRevTemp 。 /nRevTemp = (nRevPeriod=0?0:(750000/nRevPeriod 。 arrPreRevnRevCoun
40、ter = nRevPeriod 。 nRevCounter+ 。 if(nRevCounter = 8 nRevCounter = 0 。 fRev (arrPreRev0+arrPreRev1+arrPreRev2+arrPreRev3+arrPreRev4+arrPreRev5+arrPreRe v6+arrPreRev7/8 。 fRev /= 100 。 /fAcc = fRev - fPreRev 。 /fPreRev = fRev 。 #pragma CODE_SEG _NEAR_SEG NON_BANKED void interrupt Isr_Timer(void /stat
41、ic uint16 counter=0 。 uint16 temp 。 temp = MCCNT 。 /TIE = 0X01 。 /MCFLG_MCZF = 1 。 Pulse_EN = 0 。 TG = 0 。 _8us TG = 1 。 _1us Pulse_EN = 1 。 / gLineInfo = lLineInfo 。 lLineInfo.nCounter = 0 。 ctrFlag = 1 。 nOFCounter+ 。 void interrupt Isr_IC0(void static uint32 nPreOFCounter = 0 。 static uint16 nPre
42、TC0 = 0 。 uint32 nPeriod 。 uint16 nTemp 。 nTemp = TC0 。 nTemp = MCCNT 。 if(nPeriod *0X7530 + nPreTC0 - nTemp 。 750000 nRevPeriod = nPeriod 。 nPreOFCounter = nOFCounter 。 nPreTC0 = nTemp 。 CpFlag = 1 。 GetRev( 。 void interrupt Isr_IC1(void uint16 nTemp 。 nTemp = TC1 。 lLineInfo.arrLinelLineInfo.nCoun
43、ter = MCCNT。 / /cnt = MCCNT 。 nTemp = TC2 。 TIE |= 0X04 。 void interrupt Isr_IC2(void uint16 nTemp 。 nTemp = TC2 。 nTemp = MCCNT 。 nTemp = lLineInfo.arrLinelLineInfo.nCounter - nTemp 。 /sprintf(str,%u=%u=%u ,nTemp,lLineInfo.arrLinelLineInfo.nCounter- 1,lLineInfo.nCounter 。 /UART_SendStr(str 。 if(nTe
44、mpMINPULSEWIDTH i=0; buff_erroren=O; sub=m in buff_error.arr_errori.sub, buff_dferror.arr_dferrorj.sub; _ ccd_error.dat 處于 func_errori.funca j_ 與 func_errori.func.c 之間? key二rulebuff_error.arr_errori.key bufl_dferror.arr_dferrorj.key; 計(jì)算隸屬度sub ccd_error.key=fu nc_errori.key; ccd_error.sub=sub; buff_e
45、rror.arr_errorbuff_erroren二ccd_error; buff_erroren+; n+; buff_orea.arr_orea n.key =key? orea.l en? Y N i+; i7? buff_orea.arr_orea n.sub sub? . - - 讀取CCD視覺(jué)誤差變化率 ccd dferror.dat bufl_orea.arr_orea n.sub二sub; i=0; buff_dferroren=0; Buff_orea.arr_orea n.key二key; Buff_orea.arr_orea n.sub二sub; buff oreaen
46、+; Wj+;jvbuff_dferroren? -ccd_dferror.dat 處于-* fun c_dferrori.fu nc.a 與func_dferrori.func.c 之間? Y 心 j+; ivbuff_errore n? n=0; result_orea=0; sum=0; 計(jì)算隸屬度sub ccd_dferror.key=fu nc_dferrori.key; ccd dferror.sub=sub; 1 fun c=fu nc_oreabuff_orea.arr_orea n.key.fu nc;丫 sub二buff orea.arr orea n.sub; buff_
47、dferror.arr_dferrorbuff_dferroren=ccd_error; buff dferroren+; n=+; n vbufl_oreae n? result_orea+=func sulb sum+=sub; result orea/=sum; 圖3.9尋跡控制程序流程圖 3. 4智能移動(dòng)小車(chē)行駛平穩(wěn)性控制 眾所周知,汽車(chē)在高速行使駛?cè)绻蝗晦D(zhuǎn)向,會(huì)出現(xiàn)側(cè)滑現(xiàn)象。一是由于 在轉(zhuǎn)彎過(guò)程中,汽車(chē)所受到的摩擦力下降;二是由于車(chē)速太高,轉(zhuǎn)彎半徑太 小,所需要的向心力很大,當(dāng)車(chē)輪與地面的靜摩擦力不足以提供那么大的向心 力時(shí),汽車(chē)便開(kāi)始側(cè)滑,智能移動(dòng)小車(chē)的行駛性能也是同樣的道理。本設(shè)計(jì)的 控制目的之一是避免小車(chē)的側(cè)滑現(xiàn)象,所以在智能小車(chē)上安裝了加速度傳感 器,以檢測(cè)是否發(fā)生側(cè)滑。在車(chē)速為v,轉(zhuǎn)向角為、:,車(chē)體質(zhì)量為m,軸距為 L,當(dāng)理想轉(zhuǎn)向時(shí),向心加速度為 a,貝U 2 a 二 mv tan、/l 3-7) 當(dāng)加速度傳感器反饋回的實(shí)際加速度 a*小于理論加速度a時(shí)實(shí)際中應(yīng)當(dāng)保持 一定的死區(qū)),表明存在側(cè)滑現(xiàn)象,這時(shí),便命令智能移動(dòng)小車(chē)減速,減速參 考量為 v* 二 la
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版房地產(chǎn)買(mǎi)賣(mài)合同擔(dān)保及產(chǎn)權(quán)轉(zhuǎn)移范本3篇
- 2025版農(nóng)業(yè)科技股份收購(gòu)與農(nóng)產(chǎn)品品牌合作合同3篇
- 2025年高標(biāo)準(zhǔn)住宅小區(qū)水電安裝及售后服務(wù)合同2篇
- 2025年銷(xiāo)售薪資與銷(xiāo)售團(tuán)隊(duì)激勵(lì)合同3篇
- 桶裝水銷(xiāo)售合同中的質(zhì)量糾紛處理2025年度3篇
- 2025版事業(yè)單位職工食堂職工餐飲滿(mǎn)意度調(diào)查與分析承包合同3篇
- 2025版司機(jī)雇傭服務(wù)質(zhì)量監(jiān)督與考核合同3篇
- 2025版標(biāo)準(zhǔn)二手車(chē)鑒定評(píng)估師服務(wù)合同3篇
- 二零二五版門(mén)頭廣告位招商與運(yùn)營(yíng)管理合同4篇
- 2025版?zhèn)€人小額教育貸款抵押擔(dān)保協(xié)議3篇
- 油氣行業(yè)人才需求預(yù)測(cè)-洞察分析
- 《數(shù)據(jù)采集技術(shù)》課件-Scrapy 框架的基本操作
- 高一化學(xué)《活潑的金屬單質(zhì)-鈉》分層練習(xí)含答案解析
- 華為集團(tuán)干部管理
- 圖書(shū)館前臺(tái)接待工作總結(jié)
- 衛(wèi)生院藥品管理制度
- 理論力學(xué)智慧樹(shù)知到期末考試答案章節(jié)答案2024年中國(guó)石油大學(xué)(華東)
- 2024老年人靜脈血栓栓塞癥防治中國(guó)專(zhuān)家共識(shí)(完整版)
- 四年級(jí)上冊(cè)脫式計(jì)算100題及答案
- 上海市12校2023-2024學(xué)年高考生物一模試卷含解析
- 儲(chǔ)能電站火災(zāi)應(yīng)急預(yù)案演練
評(píng)論
0/150
提交評(píng)論