freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

畢業(yè)設(shè)計-基于單片機的足球機器人小車系統(tǒng)設(shè)計-資料下載頁

2025-06-06 16:02本頁面
  

【正文】 先對程序運行的重要環(huán)節(jié) — AD轉(zhuǎn)換器的讀寫控制進行了說明,再針對各個功能模塊設(shè)計了相關(guān)軟件,各模塊間相互獨立,可用于測試各個部件的運行狀況。最后合成一個具有完整性能和多判斷的比賽應(yīng)用程序。 A/D 轉(zhuǎn)換器的讀寫控制模 塊 [8] A/D 轉(zhuǎn)換的過程首先向 P0 和 P2端口輸入 AD0809 的通道 0 地址,此時 ALE 地址鎖存在信號將,地址鎖存,單片機讀寫端 RD____,W__R__, OE 有高電平打開三態(tài)門,同時, STRAT 和 ALT接在 一起,程序輸入一個正脈沖啟動 A/D 轉(zhuǎn)換,把內(nèi)部轉(zhuǎn)換的數(shù)據(jù)送往總路線,當(dāng) EOC 由低變高時數(shù)據(jù)轉(zhuǎn)換結(jié)換結(jié)束。 用 C語言實現(xiàn)的代碼如下 [9]: include include define IN0 XBYTE[0xFEF8] /* 0 通道的絕對地址 */ define IN1 XBYTE[0xFEFA] /*2 通道的絕對地址 * void abc0809_1(uchar idata *x)。 /*找球傳感器的值 */ void abc0809_2(uchar idata *x)。 /*灰度傳感器的值 */ void main (void) { uchar idata ab[2]。 /*存放找球傳感器的數(shù)值 */ uchar idata ac[2]。 /*存放灰度傳感器的數(shù)值 */ uchar idata ad[2]。 /*存放最原始灰度傳感器的值 */ abc0809_2(ad)。 /*提取灰度傳器最原始的值 */ abc0809_1(ab)。 /*取找球傳感器的數(shù)值 */ } void abc0809_1(uchar data *x) /*提取找球傳感器值的函數(shù) */ { uchar i 。 uchar idata *ad_dr。 ad_dr=amp。IN0。 焦作大學(xué)畢業(yè)設(shè)計 3 足球機器人的軟件設(shè)計 24 for(i=0。j2。i++) { do{*ad_dr=i x[i]=*ad_dr。 }while(P1^5==0)。 } } void abc0809_2(uchar data *x) /*提取灰度傳感器值的函數(shù) */ { uchar i 。 uchar idata *ad_dr。 ad_dr=amp。IN1。 for(i=0。j2。i++) { do{*ad_dr=i x[i]=*ad_dr。 }while(P1^5==0)。 } } 程序原理 機器人在實際運用中,需要作出的動作有:前進、后退、左轉(zhuǎn)和右轉(zhuǎn),其中,左右轉(zhuǎn)可以根據(jù)需要分別有以車身中心為圓心轉(zhuǎn)動和以車輪為圓心轉(zhuǎn)動。其工作原理為,通過 8051 的 P1 口向電機驅(qū)動芯片 L298 傳送 4位的控制信號控制左右兩個電機的正轉(zhuǎn)反轉(zhuǎn), 同時在單片機一個引腳輸出 PWM 波型來調(diào)節(jié)電機轉(zhuǎn)速 完成動作。其中, 兩個輪子反向轉(zhuǎn)動時,可實現(xiàn)以車身中心為圓心轉(zhuǎn)彎,當(dāng)一個輪轉(zhuǎn)動時,可實現(xiàn)以車輪為圓心轉(zhuǎn)彎。 運動控制模塊 在驅(qū)動電路的邏輯表可得正反轉(zhuǎn)電機,通過二個電機的相互配合就可以使機器人在賽場中靈活的運動。 ( 1) 直行程序 void line(void) /*用于進攻 */ { p1^1=1。 /* 由電機旋轉(zhuǎn)邏輯表得 */ p1^2=0。 焦作大學(xué)畢業(yè)設(shè)計 3 足球機器人的軟件設(shè)計 25 p1^3=1。 p1^4=0。 pwm1()。 /*長距離運動 */ } ( 2) 輪心左轉(zhuǎn) void left(void) /*用于找球 */ { p1^1=1。 /* 由電機旋轉(zhuǎn)邏輯表得 */ p1^2=0。 p1^3=0。 p1^4=0。 pwm2(); /*短距離運動 */ } ( 3) 輪心右轉(zhuǎn) void right(void) /*用于找球 */ { p1^1=0。 /* 由電機旋轉(zhuǎn)邏輯表得 */ p1^2=0。 p1^3=0。 p1^4=1。 pwm2()。 /*短距離運動 */ } ( 4)旋轉(zhuǎn)程序 void xuanzhuang(void) /*用于找球 */ { p1^1=1。 /* 由電機旋轉(zhuǎn)邏輯表得 */ p1^2=0。 p1^3=0。 p1^4=1。 pwm2()。 /*短距離運動 */ } ( 5) 后退程序 void houtui(void) /*用碰撞時用 */ { p1^1=0。 /* 由電機旋轉(zhuǎn)邏輯表得 */ 焦作大學(xué)畢業(yè)設(shè)計 3 足球機器人的軟件設(shè)計 26 p1^2=1。 p1^3=0。 p1^4=1。 pwm2(); /*短距離運動 */ p1^1=1。 p1^2=0。 p1^3=0。 p1^4=1。 pwm2()。 /*當(dāng)后退后在旋轉(zhuǎn)調(diào) 頭 */ } 編程思路 找球的過程是通過對左右兩個紅外傳感器的電壓數(shù)字量比較實現(xiàn)的。當(dāng)球在左前方時,左紅外傳感器接收光量大于右紅外,電壓數(shù)字量也大于右紅外,這時控制機器人向左轉(zhuǎn)。右轉(zhuǎn)情況相同。當(dāng)球在正前方時,左右傳感器電壓數(shù)字量相等,此時控制機器人直行。當(dāng)球在背后時,兩個紅外傳感器沒有光接收,此時以車身中心為圓心進行轉(zhuǎn)動,直到搜索到球為止。 找球程序有以下幾點值得注意。 ( 1) 找球目的在于盡快地接近球,于是當(dāng)球不在正前方時,每次調(diào)整方向后,調(diào)入一段短距離直行程序,在修正方向的同時 ,不斷地向球靠近;當(dāng)球在正前方時,調(diào)入一段長距離執(zhí)行程序,縮短找球時間。 ( 2)由 于 AD 轉(zhuǎn)換以及傳感器的誤差的存在,即使球完全正對機器人,也不可能得到兩個完全相等的電壓數(shù)字量,于是在比較時應(yīng)設(shè)一個閾值,當(dāng)左右差值小于閾值時,認(rèn)為正對足球,調(diào)用長直行;當(dāng)差值大于閾值時,再進行左右大小判斷,調(diào)用轉(zhuǎn)彎程序。 ( 3) 當(dāng)進行閾值判斷時,差值有可能得到負(fù)數(shù),在此情況下應(yīng)求其相反數(shù)。 ( 4) 當(dāng)球不在紅外傳感器可視范圍,即傳感器接收到的紅外信號為零時,由于周圍環(huán)境的影響和暗電流的存在,其輸出電壓不可能為零,而是約 V 左右。 找球程序流程圖 焦作大學(xué)畢業(yè)設(shè)計 3 足球機器人的軟件設(shè)計 27 圖 31 找球程序流程圖 Figure 31 flow chart to find the ball 用 C語言編寫的程序代碼 void find(void) /*找球子程序 */ { uchar a,b。 abc0809_1(ab)。 /*提取找球傳感器的值 */ 焦作大學(xué)畢業(yè)設(shè)計 3 足球機器人的軟件設(shè)計 28 a=ad[0]ad[1]。 /*判斷傳感器的值 */ b=abs(a)。 if(ab[0]==0||ab[1]==0) { xuanzhuang(); } /*調(diào)用原地旋程序 */ elseif(b2) { line(); } /*直線長行走 */ elseif(ab[0]ab[1]) { life()。 } /*左轉(zhuǎn) */ else { right()。 } } 編程思路 進攻方向的判斷是根據(jù)對面灰度的增減比較來進行的。在接近白色的區(qū)域,對紅外光的反射量大,光電判讀器即灰度傳感器的輸出電壓高,在接近黑色區(qū)域,輸出電壓則低。在此,默認(rèn)從白到黑為進攻方向進行編程。當(dāng)機器人找到球并持球時,程序進入進攻模塊。該模塊大致分為兩個步驟,首先判斷前進的方向是否是進攻的方向,之后,再判斷前進的方向是否平行于邊線正對球門。 在進攻程序之前的找球程序模塊中,多次用到讀取 AD 轉(zhuǎn)換結(jié)果的程序 READ,在該程序中,每執(zhí)行一次,將讀 進 2 個傳感器的轉(zhuǎn)換結(jié)果,其中左灰度和右灰度的轉(zhuǎn)換結(jié)果存放在 數(shù)組 ac[2]兩個地址單元里。在判斷正確前進方向時,里存放著前一次的轉(zhuǎn)換結(jié)果,先把它們轉(zhuǎn)移到 數(shù)組 ac[2]中,在 于 ad[2]中的原始 灰度轉(zhuǎn)換結(jié)果,分別與 當(dāng)前 的結(jié)果進行比較,只要其中有一個值增大,就認(rèn)定為前進方向錯誤,這時調(diào)用以車身中心為圓心的原地轉(zhuǎn)動程序,當(dāng)轉(zhuǎn)過約 180 度后,讀取當(dāng)前灰度值保存,再調(diào)用一段短距離直行程序,再次比較灰度值變化趨勢,直到左右兩個灰度值都為減小,這時,機器人前進方向為正確進攻方向。 在大方向調(diào)正之后,許要調(diào)整機器人的前進角度 ,即使前進方向平行于邊線,正對球門。這個動作左右兩個灰度傳感器轉(zhuǎn)換結(jié)果之間的比較完成。先讀取當(dāng)前灰度值,左右兩個結(jié)果進行比較,如果左灰度大于右灰度,說明前進方向偏左,調(diào)用原地轉(zhuǎn)動程序向右偏轉(zhuǎn),調(diào)整后,再次讀取,比較,直到左右相等為止,這時方向正對球門,調(diào)用長距離直行程序,開始進攻,把球攻入球門。 焦作大學(xué)畢業(yè)設(shè)計 3 足球機器人的軟件設(shè)計 29 在兩個灰度值大小比較時,與紅外傳感器有類似的問題需要注意:相減時出現(xiàn)負(fù)數(shù)時需要調(diào)整為相反數(shù);判斷相等時有傳感器誤差存在,需要設(shè)定閾值,差值小于閾值即認(rèn)為相等。 圖 32 進攻判斷 Figure 32 attack judgment 進攻程序模塊流程圖 進攻程序模塊流程圖 如圖 33 所示: 焦作大學(xué)畢業(yè)設(shè)計 3 足球機器人的軟件設(shè)計 30 圖 33 進攻流程圖 Figure 33 offensive flow chart 用 C 語言編寫的程序代碼 void attack(void) /*進攻子程序 */ { uchar a,d。 abc0809_2(ac)。 /*提取灰度傳感器的值 */ 焦作大學(xué)畢業(yè)設(shè)計 3 足球機器人的軟件設(shè)計 31 a=ac[0]ac[1]。 d=abs(a)。 if(!(ac[0]ad[1]||ac[1]ad[1])) /*判斷進攻方向 */ { xuanzhuang(); } elseif(abs(a)2) /*比較左右灰度傳感器的值 */ { line(); } /*長距離運動 */ elseif(ac[0]ac[1]) { life()。} /*左轉(zhuǎn) */ else { right(); } /*右轉(zhuǎn) */ } 碰撞避讓程序的硬件實現(xiàn) 本設(shè)計的碰撞避讓系統(tǒng),是通過 51 單片機的中斷控制功能實現(xiàn)的。 MCS51系列單片機有 5 個中斷源,可分為 2 個中斷優(yōu)先級。本碰撞避讓系統(tǒng)所用到的中斷源為 ,即 外部中斷 0。其請求信號由 輸入請求信號有效電平由 IT0 和設(shè)置,一旦輸入信號有效,則將 TCON 中的 IE0 標(biāo)志位置 1,可向 CUP 申請中斷 [10]。 中斷控制設(shè)置 MCS51 系統(tǒng)中斷控制由 4 個專用寄存器組成。 中斷請求標(biāo)志 TCON 其中 IE0 為外部中斷零的申請標(biāo)志位。當(dāng)外部中斷源有請 求時,該位置 1,其復(fù)位由觸發(fā)方式來設(shè)置。 IT0為外部中斷觸發(fā)方式設(shè)置位, IT0=0 時,為電平觸發(fā)方式,該方式下, CUP 每個機器周期對外部中斷源采樣,如果為低電平,則進入中斷。該方式中 CUP 響應(yīng)中斷后不能自動清除 IE標(biāo)志位,所以中斷返回前,外部中斷源引腳上的低電平必須撤銷。 IT0=1 時為脈沖觸發(fā)方式,即在兩個相鄰的機器周期內(nèi) 上的電平發(fā)生由高到低的跳變即進入中斷 IE=1 保持到 CUP 響應(yīng)中斷時,才由硬件清除,該方式下,中斷源低電平需要至少保持一個機器周期。 焦作大學(xué)畢業(yè)設(shè)計 3 足球機器人的軟件設(shè)計 32 ? 中斷開放和屏蔽 IE 其中, EA為總中斷允許位, EA=1 時開放中斷, EA=0 時關(guān)斷一切中斷。 EX0 為外部中斷 0 允許位, EX0=1 時允許。 ? 中斷優(yōu)先級設(shè)定 IP 其中 PX0 為外部中斷 0優(yōu)先級設(shè)定, PX0=1 時,為高優(yōu)先級。 碰撞系統(tǒng)模塊程序 中斷控制設(shè)置: IT0=1 ;選擇觸發(fā)方式為電平觸發(fā) IE=0X85H ; EA=1,EX0=1,開放外部中斷 0 中斷服務(wù)子程序 用 C語言編寫的程序代碼如下: void pengzhuang(void)interrupt 0 { houtui() /*用碰撞時用 */ } 以上所述的幾大功能模塊,都可以獨立使用,分別完成不同的任務(wù),而把它們聯(lián)系到一塊,則可 以形成一個完整的程序,使機器人在賽場上完成整場比賽。而把他們聯(lián)系在一起的橋梁則是前中提到的持球探測壁以及其上的持球傳感器。 持球傳感器也一個紅外接收管,不需要 AD轉(zhuǎn)換,只需要邏輯判斷,當(dāng)機器人持球時,該傳感器從 口輸入一個高電平。整個程序運行過程中,通過查詢方焦作大學(xué)畢業(yè)設(shè)計 3 足球機器人的軟件設(shè)計 33 式來判斷是否持球。當(dāng) =0 時,執(zhí)行找球程序,當(dāng) =1 時,執(zhí)行進攻程序。在整個程序中,中斷開放,實現(xiàn)任何狀態(tài)下的碰撞避讓。 2.整體 程序 流程圖如圖 34 圖 34 整體程序流程圖 焦作大學(xué)畢業(yè)設(shè)計 4 功能測試 34 4 功能 測試 找球功能模塊測試 ? 測試條件:用一個高功率紅外發(fā)光管模擬比賽用球,在室內(nèi)日光燈光源下進行測試。 ? 測試軟件:找球程序模塊,差值閾值 ,無紅外情況輸出電壓 。轉(zhuǎn)彎延時 秒,直行延時 秒。 ? 測試結(jié)果:機器人能在 40CM 距離左右發(fā)現(xiàn)球,在向球運動過程中,前半段由于基礎(chǔ)電壓小,差值小 于閾值,直線前進;當(dāng)靠近球時,電壓增大,差值大于閾值,機器人左右調(diào)整方向,逐漸靠近小球。 碰撞功能模塊測試 ? 測試條件:面向墻壁直行,模擬碰撞場地?fù)醢濉? ? 測試軟件:裝入直行程序,中斷開放,中斷服務(wù)程序為倒退延時 1 秒,原地轉(zhuǎn)彎延時 1秒。 ? 測試結(jié)果:機器人在直行碰撞墻壁后,順利進入中斷服務(wù)程序,倒退并調(diào)頭,之后中斷返回繼續(xù)直行。 方向判斷功能模塊測試 ? 測試條件:用黑白兩色紙模擬場地基板,室內(nèi)日光燈光源。 ? 測試軟件:方向判斷程序模塊。默認(rèn)由白向黑進攻。在起點采樣,直行到另一色地面再次 采樣,比較判斷。 ? 測試結(jié)果:由白向黑行進時,機器人判斷方向為正確進攻方向 ,繼續(xù)前進;由黑向白行進時,機器人發(fā)現(xiàn)方向錯誤,掉頭前進。 焦作大學(xué)畢業(yè)設(shè)計 5 設(shè)計總結(jié) 35 5 設(shè)計總結(jié) 本設(shè)計的優(yōu)點及創(chuàng)新之處 本設(shè)計利用簡單的器件使機器人擁有了較為完善的功能, 用 C 語言做為 其 編程語言,即保證了 程序 的效率又使程序的 模塊 構(gòu)架清晰 ,用戶能夠根據(jù)需要方便的編寫輸入不同的程序,使得機器人的性能可以不斷的完善 ; 同時, 并行口數(shù)模轉(zhuǎn)換提高了數(shù)據(jù)的處理速度;還有為 留有諸多的擴展接口( 8 個 AD 轉(zhuǎn)換接口, 5個中斷源)給今后的功能擴展留下了廣闊的空間。 機器人的外形結(jié)構(gòu)可以根據(jù)需要改變,并實現(xiàn)一定功能,本設(shè)計中的 “ 持球探測臂 ” 就是通過機器人的外形實現(xiàn)功能,大大簡化了軟件程序的算法,是本設(shè)計的創(chuàng)新之處。 本設(shè)計屬于第一 次嘗試,許多功能還不夠完善,結(jié)構(gòu)也過于簡單。在以下方面有待改進 。 ( 1) 移動方式方面:目前所使用的 2 個驅(qū)動輪方式都只有兩個自由度,還不能實現(xiàn)任意定位和定向 , 若 4 個輪子都具備獨立驅(qū)動和轉(zhuǎn)向能力,則可實現(xiàn)全方位的運動,大大增加其靈活性。 ( 2) 數(shù)值的使用 :目前能使用的紅外傳感器只能實現(xiàn)簡單地計算比較 , 精確的計算差值,必利 用差值對轉(zhuǎn)向進行精確的控制, 在用差值去調(diào)整 PWM 去改變電機轉(zhuǎn)速,再加入 PID 環(huán)節(jié)就會更好, 這也是改進的方向之一。 ( 3) 傳感器方面:本次設(shè)計只使
點擊復(fù)制文檔內(nèi)容
畢業(yè)設(shè)計相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1