自動巡線機器人姿態(tài)調(diào)整方法研究_第1頁
自動巡線機器人姿態(tài)調(diào)整方法研究_第2頁
自動巡線機器人姿態(tài)調(diào)整方法研究_第3頁
自動巡線機器人姿態(tài)調(diào)整方法研究_第4頁
自動巡線機器人姿態(tài)調(diào)整方法研究_第5頁
已閱讀5頁,還剩122頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

摘要本課題是以2006年全國CCTV杯機器人大賽的比賽用機器人研制為背景,根據(jù)比賽的實際場地和比賽需求,設(shè)計制作出了相應(yīng)的自動巡線機器人,探討了機器人行走的一般控制方法。論文首先對自動巡線機器人總體設(shè)計方案進行敘述,闡述其各要素的工作原理,然后就整個自動巡線機器人系統(tǒng)劃分為五個模塊,分章節(jié)對各個模塊設(shè)計制作進行闡述。機器人巡線算法是本文研究的重點,將機器人與引導(dǎo)線的相對位置關(guān)系分成典型的七種狀態(tài),控制系統(tǒng)分別就這七種狀態(tài)做出相應(yīng)的調(diào)整策略。論證了在這種機構(gòu)設(shè)計下通過不斷調(diào)整底盤姿態(tài)的方法可以讓底盤中心線逐漸與引導(dǎo)線重合的實現(xiàn)原理。機器人機械結(jié)構(gòu)部分,通過分析常用的車輪驅(qū)動配置方式,擇優(yōu)選擇了前排安裝兩個萬向輪、后排安裝兩個獨立驅(qū)動輪的設(shè)計方案,充分考慮到了巡線的簡易性和穩(wěn)定性。并針對比賽要求,設(shè)計了相應(yīng)的抓取、推送執(zhí)行機構(gòu)。機器人傳感器接口與驅(qū)動電路部分,詳細(xì)闡述了光電傳感器檢測信號原理,敘述了本次設(shè)計所采用的光電傳感器接口電路詳細(xì)設(shè)計方案,分析了傳感器采用該種布局方案的原因。針對機器人的機械特性和速度要求,設(shè)計了兩套基于不同原理的電機驅(qū)動電路,分析了各自的優(yōu)缺點和可行性。機器人主控系統(tǒng)硬件部分闡述了主控芯片選型,主控電路設(shè)計方案,以及相應(yīng)的接口說明。軟件部分在MSP430平臺上實現(xiàn)了快速、穩(wěn)定、準(zhǔn)確的巡線方法。比賽表明,該自動巡線機器人行走設(shè)計效果良好,經(jīng)過改進完善,今后可以用于工業(yè)控制物料搬運場合。關(guān)鍵詞:機器人;巡線;光電檢測;PWM驅(qū)動;姿態(tài)調(diào)整

AbstractTheprojecttakesthebackgroundoftherobotusedinthe2006NationalRobotTelevisionCompetition.Accordingtothecompetitiongroundandconstraints,anautonomousline-trackingrobothasbeenmade.Inthisthesis,theoveralldesignofautonomousline-trackingrobotandprincipleofeachessentialelementhavebeendescribed.Therobotsystemhasbeendividedintofivepartsasfellow.Theautonomousline-trackingarithmeticisthekeyofthisprojectresearch.Therelativepositionrelationshipbetweentherobotandtheleadinglineisdividedintoseventypicalstates;theadjustmentstrategyhasbeendescribedrespectively.Animplementationprincipletoenablecenterlineapproachingtheleading-linegraduallyhasbeendescribedbyadjustingcontinuouslychassisposture.Inmechanicalstructurepart,byanalyzingthenormalwheeldriveconfigurations,ithasbeenchoicedthattwouniversalwheelsareinstalledinthefrontandtwoindependentdrivingwheelsareinstalledintherear,whichtakesfullyintoaccountthesimplicityandstabilityoftheline-tracking.Tosatifythecompetitionrequirements,thecorrespondingexecutivemechanismshavebeendesigned,suchastaking,pushing.Insensorinterfaceanddrivecircuitpart,adetailexplanationofphotoelectricsensorandinterfacecircuithasbeendiscussedcarefully.Toadapttherobotmechanicalpropertiesandspeedrequirement,twomotordrivingcircuitsbasedondifferentprincipleshavebeendesignedandtheiradvantagesandfeasibilityanalyied.Inrobotcontrolsystempart,hardwareandsoftwarehavebeendiscussedsuchasCPUchoosing,controlcircuitdesigning,andhardwareinterfaceassigning,etc.BasedontheMSP430,thespeeddifferencefromleftandrightwheelcreatedbythePulse-WidthModulationadjuststhepositionoftherobotandleadingline,whichcarriesouttheautonomousrunsalongwiththeleadinglinequickly,stablyandaccurately.Ithasbeenverifiedbycompetitionthattheautonomousline-trackingrobotcanwalkseffectively.Keywords:Robot;Line-tracking;PhotoelectricSensor;PWM;Posture

目錄第1章緒論………………………11.1引言……………11.2機器人大賽產(chǎn)生背景…………21.2.1機器人賽事……………21.2.2全國大學(xué)生機器人電視大賽…………21.3本文研究的背景和主要內(nèi)容…………………31.3.1研究背景……………31.3.2課題的主要內(nèi)容………5第2章自動巡線機器人總體方案設(shè)計……………72.1機器人要素分析………………72.2機器人總體分析………………82.2.1場地分析……………82.2.2機械結(jié)構(gòu)分析………92.2.3控制系統(tǒng)框架設(shè)計……………………9第3章自動巡線機器人姿態(tài)調(diào)整方法研究……103.1總體分析………………………103.2姿態(tài)分析……………………113.3可行性原理分析………………133.4改進方法……………………173.5交叉引導(dǎo)線處調(diào)整分析………173.6轉(zhuǎn)彎分析……………………173.7巡線失效分析…………………173.8結(jié)論……………18第4章機械結(jié)構(gòu)設(shè)計……………194.1移動機器人的車輪驅(qū)動配置…………………194.1.1機器人常用車輪驅(qū)動配置介紹………194.1.2本系統(tǒng)所采用的車輪驅(qū)動方式配置……214.2機器人機械尺寸設(shè)計…………224.2.1底盤的設(shè)計……………224.2.2夾取機構(gòu)設(shè)計…………234.2.3推送機構(gòu)設(shè)計…………25第5章傳感器接口電路設(shè)計……………………275.1微動開關(guān)………………………275.2紅外光電反射式傳感器………275.2.1紅外光電反射式傳感器原理…………295.2.2基于反射光強度測量的紅外光電反射式傳感器電路………………295.3紅外光電反射式傳感器布局…………………31第6章電機驅(qū)動電路設(shè)計………346.1驅(qū)動電機的選用………………346.2直流電機的轉(zhuǎn)動控制…………356.3直流電機的速度控制…………376.4電機驅(qū)動電路設(shè)計……………396.4.1基于L298的驅(qū)動電路…………………396.4.2基于電磁繼電器的驅(qū)動電路…………42第7章主控系統(tǒng)的設(shè)計…………467.1主控制芯片的選型……………467.1.1MSP430系列單片機……………………467.1.2選用的MSP430F449的原因……………487.1.3MSP430F449的引腳……………………487.2主控單元電路設(shè)計……………497.3MSP430實現(xiàn)巡線算法…………527.4巡線改進方法的實現(xiàn)…………557.5交叉引導(dǎo)線處調(diào)整分析………597.6轉(zhuǎn)彎分析………………………617.7計數(shù)方法………………………667.8執(zhí)行機構(gòu)………………………66第8章圖片資料及參賽總結(jié)……………………67總結(jié)與展望…………72致謝………………73參考文獻(xiàn)……………74附錄………………76附1:硬件部分原理圖…………76附2:軟件部分程序……………81攻讀碩士學(xué)位期間發(fā)表的論文…………………103西南交通大學(xué)碩士研究生學(xué)位論文第圖7-9轉(zhuǎn)彎流程圖voidZhuanWan(intzhuanwandirect)//轉(zhuǎn)彎{unsignedinti;intk=0;Stop();//轉(zhuǎn)彎前所有電機停止轉(zhuǎn)動Delay(50000);/*轉(zhuǎn)彎前后退一段距離*/Run_FrontDrive();CCR1=410;CCR2=410;//非全速后退nBasicTimerCounter=0;//對轉(zhuǎn)彎計時,防止傳感器失效后檢測不到白線而不停打轉(zhuǎn)BackRightFlag=0;BackLeftFlag=0;while(nBasicTimerCounter<HOUTUITIME)//125ms*HOUTUITIME以內(nèi){BackSensorState();//后排傳感器與水平線位置if((BackRightFlag==1)&&(BackLeftFlag==1))//后排傳感器如果全在白線上break;if(((BackRightFlag==1)&&(BackLeftFlag==0))||((BackRightFlag==0)&&(BackLeftFlag==1))){BackCloseToHor_FrontDrive();//水平對齊break;}}BackRightFlag=0;BackLeftFlag=0;switch(zhuanwandirect){caseYOUZHUANWAN:{Left_Cw_Right_UCw();//右轉(zhuǎn)彎for(i=0;i<13;i++)Delay(6000);nBasicTimerCounter=0;while(1){if((nBasicTimerCounter>MINTURNTIME)&&(k>0))break;if(nBasicTimerCounter>MAXTURNTIME)break;if(DE_TURNRIGHT==0x00)//轉(zhuǎn)彎傳感器檢測到白色引導(dǎo)線{Delay(200);if(DE_TURNRIGHT==0x00)//防止誤判k++;}}break;}caseZUOZHUANWAN:{Right_Cw_Left_UCw();//左轉(zhuǎn)彎for(i=0;i<15;i++)Delay(6000);while(k==0){if(DE_TURNLEFT==0x00){Delay(200);if(DE_TURNLEFT==0x00)//防止誤判k++;}}break;}}}voidLeft_Cw_Right_UCw(void)//右轉(zhuǎn)彎{P5OUT|=LEFT_1;P5OUT&=~LEFT_2;//左電機正轉(zhuǎn)CCR1=250;P5OUT&=~RIGHT_1;P5OUT|=RIGHT_2;//右電機反轉(zhuǎn)CCR2=250;}voidRight_Cw_Left_UCw(void)//左轉(zhuǎn)彎{P5OUT&=~LEFT_1;P5OUT|=LEFT_2;//左電機反轉(zhuǎn)CCR1=250;P5OUT|=RIGHT_1;P5OUT&=~RIGHT_2;//右電機正轉(zhuǎn)CCR2=250;}

7.7計數(shù)方法機器人在地面行走距離的測量方法是在機器人底盤的前后兩排各放置一個傳感器(、)用于計數(shù),雙重計數(shù)防止多計或者少計,使得計數(shù)相當(dāng)準(zhǔn)確可靠。當(dāng)檢測到白線時,讓巡線函數(shù)始終執(zhí)行,直到走出白線區(qū)域,此時計數(shù)器加1,同理。當(dāng)對和統(tǒng)計走過線條數(shù)的計數(shù)器滿足設(shè)定值時,就進行相應(yīng)的轉(zhuǎn)彎(或執(zhí)行機構(gòu)動作)。7.8執(zhí)行機構(gòu)當(dāng)機器人計數(shù)模塊累計數(shù)達(dá)到設(shè)定值時(或者微動開關(guān)碰觸到目標(biāo)),執(zhí)行機構(gòu)將動作。執(zhí)行動作包括抓取、夾緊、推送三個動作。主控系統(tǒng)發(fā)送電機轉(zhuǎn)動方向的命令,讓相應(yīng)的電機帶動機構(gòu)動作。

第8章圖片資料及參賽總結(jié)(a)(b)(c)(d)圖8-1機器人外觀圖片

(a)(b)(c)圖8-2轉(zhuǎn)彎圖片(a)(b)(c)圖8-3巡線圖片(a)(b)(c)圖8-4巡線失敗圖片2006年7月,西南交通大學(xué)機器人代表隊帶著該設(shè)計參加了全國機器人電視大賽,在無任何經(jīng)驗和人員缺乏的艱苦條件下,我們學(xué)校代表隊進入了32強,在分組賽中遇到了華南理工、中科大、哈工程等老牌強隊,最終停留在了32強。但在整個比賽日程中,該設(shè)計所采用的快速PWM調(diào)整算法顯示出了穩(wěn)定、快速、準(zhǔn)確的特點。通過這次比賽我們發(fā)現(xiàn)了和其他學(xué)校代表隊的差距,總結(jié)以下幾點:1、我們在機構(gòu)制作與加工方面有很大差距,校辦工廠和工業(yè)中心已經(jīng)不能滿足高精度的機械加工。我們在預(yù)賽中出現(xiàn)的機構(gòu)卡死就是由于機械的加工問題造成的,幸好沒有影響到比賽的最后成績。輪子電機的固定方法,輪子的固定方法等是我們急需解決的問題。2、機構(gòu)的設(shè)計方面。機器人大賽本身機構(gòu)占的比重相當(dāng)大,他的復(fù)雜程度不是一般比賽所能比及的。以后的指導(dǎo)老師和隊員要在機械機構(gòu)方面,特別是干擾方面多想些方法。今年我們沒有干擾很吃虧,干擾明年我們一定要做,并且一定要做好。3、電測控系統(tǒng)的穩(wěn)定性。比賽中我們電源系統(tǒng)接觸不良,這是我們比賽經(jīng)驗不足造成的。比賽前的調(diào)試都沒有發(fā)生什么問題,但是在搬運過程中的晃動使得電源接口松動,造成了比賽中的電源斷電。所以在以后的比賽中我們要設(shè)計更加可靠穩(wěn)定的系統(tǒng),避免因類似的問題造成的不要的丟分。4、傳感器的穩(wěn)定性也是問題。華南理工大學(xué)用的色標(biāo)傳感器巡線穩(wěn)定性很好,但是價格是RMB500元。包括中國科技大學(xué)的反饋編碼盤,來控制機器人定距離行走這一套系統(tǒng),我們下一屆就要采用。這樣下一次比賽的預(yù)算就會相應(yīng)提高。5、比賽的組織和管理。由于是第一次比賽,又是到外省參賽,這次比賽我們的組織管理很不充分。有些工作沒有到位,讓我們在比賽中也處于不利的地位,沒能發(fā)揮出最好的水平。希望下一屆比賽能夠得到改觀。6、整體的調(diào)試和練習(xí)。我們在整體的調(diào)試和練習(xí)上面安排不夠,沒有調(diào)整到最好。自動機器人的調(diào)試最少要一個月,哪怕是到最后邊修改邊調(diào)試。手動機器人也要多加練習(xí)。

總結(jié)與展望本文以2006第五屆全國大學(xué)生機器人電視大賽為背景,設(shè)計制作了針對該比賽場地的全自動機器人,能夠根據(jù)比賽要求完成相應(yīng)的任務(wù)。重點對比賽機器人進行巡線算法研究和實現(xiàn),使得巡線機器人根據(jù)實際需要可改變自己的機構(gòu)特征,其定位非常準(zhǔn)確可靠,很適合于工業(yè)控制中的物料搬運和定點工作的場合。在控制系統(tǒng)設(shè)計部分,首先根據(jù)機器人的機械特征,分析了通過直流電機的起/停控制機器人行走的可能性,然后把傳感器檢測到的機器人底盤與引導(dǎo)線的相對位置劃分為典型的7種狀態(tài),做出相應(yīng)的調(diào)整策略。繼而分析證明這種調(diào)整策略會校正機器人運行姿態(tài),再具體到應(yīng)用TI公司的低功耗系列單片機MSP430F449予以實現(xiàn)。最后,改進了這種一停一動的校正方法,提出了一個新方法,用PWM控制左右電機的轉(zhuǎn)速產(chǎn)生速度差,由于左右驅(qū)動輪的速度差值小了,因此可使機器人在調(diào)整的過程中減輕晃動,并使行走加快。自制了可識別不同顏色的光電傳感器,可根據(jù)需要調(diào)節(jié)傳感器的檢測范圍,復(fù)用性強;設(shè)計制作了驅(qū)動24V直流電機的驅(qū)動電路,解決了電流過大和電機高速旋轉(zhuǎn)不易控制的問題,滿足了比賽的要求。限于本人的能力和時間等因素,研究尚存在以下不足之處:1、避障的解決方案。當(dāng)探測到前方有障礙物時,需要設(shè)置相應(yīng)的避障算法。在最初任務(wù)的規(guī)劃時已安排避障模塊的設(shè)計工作,但由于時間很緊,這部分工作沒有完成。2、在機器人頂部安裝CCD攝像頭,采用圖象處理的手段來解決避障。由于在圖象處理方法上,需采用DSP處理CCD攝像頭獲取的信息,工作非常復(fù)雜,具有挑戰(zhàn)性,沒有做這方面的補充工作。如果能將上面所提到的兩點實現(xiàn),就可以根據(jù)獲取的外部圖像信息,避開障礙物而選擇合理路徑行進,該機器人真正意義上實現(xiàn)了智能化。

致謝本論文研究是在導(dǎo)師肖世德教授指導(dǎo)下完成的,兩年多來肖老師不僅在學(xué)習(xí)上對我精心指導(dǎo),在生活上更給予了無微不至的關(guān)懷。經(jīng)過兩年多的科研實踐,我不僅在理論知識上獲得了很大的進步,同時在實踐中分析和解決問題的能力得到了提高,為我今后的職業(yè)生涯奠定了堅實的基礎(chǔ)。在此,向?qū)煴硎局孕牡母兄x和誠摯的敬意!感謝西南交通大學(xué)智能機電技術(shù)研究所的孟文副教授,周倫副教授,孟祥印講師等所有老師,他們在我課題的完成過程中給予熱情幫助和耐心指導(dǎo)。感謝機器人小組的全體成員,在半年多的機器人設(shè)計和制作中,我們團結(jié)協(xié)作,克服了在機器人的設(shè)計制作中遇到的種種困難,特別是那種頑強和鍥而不舍的科研精神將鼓舞著我不斷前進。感謝機電教研室的所有師弟師妹們,是你們給我?guī)砹擞郎y忘的快樂和感動。在此,我還要特別感謝我的父母對我的關(guān)心、支持、期望和鼓勵。2006年11月

參考文獻(xiàn)龔安邦,陳振華等.機器人機械設(shè)計.電子工業(yè)出版社,1995.11.張福學(xué).機器人技術(shù)及其應(yīng)用.北京:電子工業(yè)出版社,2000.1.耿德根,詹衛(wèi)前,李青.單片機創(chuàng)新開發(fā)與機器人制作.北京:北京航空航天大學(xué)出版社,2005.3.邱鐵.競技機器人控制通用平臺設(shè)計與應(yīng)用:[碩士學(xué)位論文].大連:大連理工大學(xué),2005.12.西原主計,山藤和男,牛連強,趙文珍.機器人C語言機電一體化接口.北京:科學(xué)出版社:OHM社,2002.宗光華.機器人的創(chuàng)意設(shè)計與實踐.北京:北京航空航天大學(xué)出版社,2004.2.船倉一郎,土屋堯,堀桂太郎,宗光華,楊洋,唐伯雁.機器人控制電子學(xué).北京:科學(xué)出版社,2004.5.(美)賀爾(Hall,爾尼,L),賀爾(Hall,貝蒂,C.).機器人學(xué)入門.天津:天津大學(xué)出版社,1987.11.蔡自興.機器人學(xué)的發(fā)展趨勢和發(fā)展戰(zhàn)略.機器人技術(shù)與應(yīng)用,2001.周祖德,陳幼平.機電一體化控制技術(shù)與系統(tǒng).武漢:華中理工大學(xué)出版社,2003.清弘智昭,鈴木升,劉本偉.機器人制作寶典.北京:科學(xué)出版社:OHM社,2002.高橋友一,宗光華.小型機器人的基礎(chǔ)技術(shù)與制作:挑戰(zhàn)RoboCup小型機器人.北京:科學(xué)出版社,2004.5.張洪潤、唐昌建.電子線路與電子技術(shù).科學(xué)出版社,2003.1.沈建華,楊艷琴,翟驍曙.MSP430系列16位超低功耗單片機原理與應(yīng)用.北京:清華大學(xué)出版社,2004.11.MagrabEB,馬會生等.MATLAB原理與工程應(yīng)用.北京:電子工業(yè)出版社,2002.何國偉.機電產(chǎn)品的可靠性.上海:上海科學(xué)技術(shù)出版社,1989.8.欒桂冬.傳感器及其應(yīng)用.西安:西安電子科技大學(xué)出版,2002.譚茀娃.電機拖動與控制基礎(chǔ).上海:上海交通大學(xué)出版社,2002.高國富,謝少榮,羅均.機器人傳感器及其應(yīng)用.北京:化學(xué)工業(yè)出版社,2005.賈大義,艾高烈.常用電機原理與設(shè)計.北京:中國輕工業(yè)出版社,1996.李東生等.Protel99SE電路設(shè)計技術(shù)入門與應(yīng)用.北京:電子工業(yè)出版社,2002.2.胡燁,姚鵬翼,江思敏.Protel99SE電路設(shè)計與仿真教程.北京:機械工業(yè)出版社,2005.趙亮,侯國銳.單片機C語言編程與實例.北京:人民郵電出版社,2003.梁恩主,梁恩維.Protel99SE電路設(shè)計與仿真應(yīng)用.北京:清華大學(xué)出版社,2000.ReinhardWilhelm.CompilerConstruction.Springer,2001.ThinasArts,MarkusMohnen.ImplementationofFunctionalLanguge.Springer,2002.JamesL.Crowley.NavigationforanIntelligentMobileRobot.IEEEJournalofRoboticsandAutomation,1985,1.譚浩強.C程序設(shè)計.清華大學(xué)出版社,1991.7.李守成,張志波.數(shù)字電子技術(shù)基礎(chǔ).西南交通大學(xué)出版社,1994.7.張繼和,封志宏.電機與控制.西南交通大學(xué)出版社,1994.12.邱成悌.電子組裝技術(shù).云南大學(xué)出版社,1998.8.秦和等.實用電子元器件手冊.上海科學(xué)技術(shù)出版社,1998.李仁定.電機的微機控制.機械工業(yè)出版社,1999,第1版.陳大欽.模擬電子技術(shù)基礎(chǔ).北京:高等教育出版社,2000.6.張申科,崔葛瑾.數(shù)字電子技術(shù)基礎(chǔ).北京:電子工業(yè)出版社,2005.21IC中國電子網(wǎng):/.芯片資料網(wǎng):/.機器人發(fā)展史./sjdw/works/robot/ROBOT01.

附錄附1硬件部分原理圖附圖1主控制系統(tǒng)原理圖附圖2傳感器放置板原理圖附圖3傳感器調(diào)節(jié)板原理圖附圖4采用電磁繼電器的驅(qū)動電路原理圖附圖5采用半導(dǎo)體器件的驅(qū)動電路原理圖

附2:軟件部分程序#include<msp430x44x.h>typedefunsignedcharuchar;#defineDELAYTIME2000#defineZUOZHUANWAN0//左轉(zhuǎn)彎#defineYOUZHUANWAN1//右轉(zhuǎn)彎/***任務(wù)格子數(shù)***/constcharCommand_1=14;//設(shè)定第一次直走的格子數(shù)constcharCommand_2=7;//設(shè)定第一次直走的格子數(shù)constcharCommand_3=2;//設(shè)定第三次直走的格子數(shù)constcharCommand_4=2;//2格constcharCommand_5=2;#defineHOUTUITIME10//后退調(diào)整時間#defineMAXTURNTIME12//最大轉(zhuǎn)彎時間#defineMINTURNTIME3//最小轉(zhuǎn)彎時間#defineHALFSTEPTIME5//半格時間/*******以下是光電傳感器與I/O口的接線方法********//*左側(cè)傳感器<>P3*/#defineS1BIT0#defineS2BIT1#defineS3BIT2#defineS4BIT3#defineS5BIT4#defineS6BIT5#defineS7BIT6#defineS8BIT7/*右側(cè)傳感器<>P4*/#defineS9BIT0#defineS10BIT1#defineS11BIT2#defineS12BIT3#defineS13BIT4#defineS14BIT5#defineS15BIT6#defineS16BIT7#defineS17BIT4//后#defineS18BIT5//后-右#defineS19BIT6//前#defineS20BIT7//前-右#defineFRONTS19#defineBACKS17#defineBACKCOUNTERS18//后計數(shù)#defineFRONTCOUNTERS20//前計數(shù)#defineFRONTLEFTS5#defineFRONTRIGHTS16#defineBACKLEFTS1#defineBACKRIGHTS12#defineTURNRIGHTSENSORS14#defineTURNLEFTSENSORS6/*****各個傳感器狀態(tài)標(biāo)定*****//*尋線狀態(tài)*/#defineDE_LEFTS_FRONT(((P3IN&0XF0)>>4))//將P3口的高四位值(前排左側(cè))取出存于一個寄存器的低四位中#defineDE_LEFTS_BACK((P3IN&0X0F))//將P3口的低四位值(后排左側(cè))取出存于一個寄存器的低四位中#defineDE_RIGHTS_FRONT(((P4IN&0XF0)>>4))//將P4口的高四位值(前排右側(cè))取出存于一個寄存器的低四位中#defineDE_RIGHTS_BACK((P4IN&0X0F))//將P4口的低四位值(后排右側(cè))取出存于一個寄存器的低四位中#defineDE_FRONT((P1IN&FRONT))//前中傳感器#defineDE_BACK((P1IN&BACK))//后中傳感器/*計數(shù)狀態(tài)*/#defineDE_BACKCOUNTER((P1IN&BACKCOUNTER))//后-右計數(shù)#defineDE_FRONTCOUNTER((P1IN&FRONTCOUNTER))//前-右計數(shù)/*轉(zhuǎn)彎狀態(tài)*/#defineDE_TURNRIGHT((P4IN&TURNRIGHTSENSOR))//右轉(zhuǎn)彎判別#defineDE_TURNLEFT((P3IN&TURNLEFTSENSOR))//左轉(zhuǎn)彎判別/*******以下是直流電機驅(qū)動板與I/O口的接線方法********//***控制小車行進的直流電機控制板<>P5***/#defineLEFT_1BIT0//左電機輸入1#defineLEFT_2BIT1//左電機輸入2#defineRIGHT_1BIT2//右電機輸入1#defineRIGHT_2BIT3//右電機輸入2#defineSHENCHU_1BIT6//伸出電機輸入1#defineSHENCHU_2BIT7//伸出電機輸入2#defineJIAJIN_1BIT4//夾緊電機輸入1#defineJIAJIN_2BIT5//夾緊電機輸入2/*推送電機控制口<>P60,P61*/#defineTUISONG_1BIT0//推送電機輸入1#defineTUISONG_2BIT1//推送電機輸入2#defineSWITCH_SHENCHUBIT1//打開伸出#defineSWITCH_JIAJINBIT2//關(guān)閉伸出,夾緊打開#defineSWITCH_STOP_JIAJINBIT3//夾緊終止#defineSWITCH_TUISONGBIT4//退送停止#defineSELECT_FANGANBIT5//方案選擇/****變量定義****/intnFrontCounter=0;//FRONTCOUNTER計數(shù)intnBackCounter=0;//BACKCOUNTER計數(shù)intBackLeftFlag=0;intBackRightFlag=0;intnBasicTimerCounter=0;//基本定時器計數(shù)intFlagShenChu=0;//伸出機構(gòu)回收時間設(shè)置intINCFlag=0;//加速標(biāo)志intHoutuiFlag=0;//后退標(biāo)志/***以下是占空比設(shè)置***/intPWM_100,PWM_85,PWM_70,PWM_55,PWM_40,PWM_32,PWM_25,PWM_15,PWM_10,PWM_0;voidXunJi_BackDrive(void);voidRunCounter(void);//計數(shù)/*后輪驅(qū)動*/voidTurnRight_BackDrive(void);voidTurnLeft_BackDrive(void);voidRun_BackDrive(void);/*前輪驅(qū)動*/voidRun_FrontDrive(void);voidTurnRight_FrontDrive(void);voidTurnLeft_FrontDrive(void);voidStop(void);voidTuiSong(void);voidShenChu(void);voidZhuaQu(void);voidLeft_Cw_Right_UCw(void);voidRight_Cw_Left_UCw(void);voidINC_By_PWM(void);voidDEC_By_PWM(void);voidIniTimeA_PWM(void);voidIniMotorOutput(void);voidIniSensorInput(void);voidIniBasicTimer(void);voidDelay(unsignedinti);voidDoCommand_1(void);//執(zhí)行第一次行走格子數(shù)voidDoCommand_2(void);//執(zhí)行第二次行走格子數(shù)voidDoCommand_3(void);//執(zhí)行第3次行走格子數(shù)voidDoCommand_4(void);voidDoCommand_5(void);voidDoCommand_2_2(void);//執(zhí)行第二次行走格子數(shù)voidDoCommand_3_2(void);//執(zhí)行第3次行走格子數(shù)voidDoCommand_4_2(void);voidHalfStep(charNumber);//整+半格行進voidWholeStep(charNumber);//整格行進voidFinish(void);voidBackSensorState(void);voidBackCloseToHor_BackDrive(void);voidBackCloseToHor_FrontDrive(void);voidZhuanWan(intzhuanwandirect);voidmain(void){WDTCTL=WDTPW+WDTHOLD;//關(guān)閉看門狗INC_By_PWM();IniTimeA_PWM();IniMotorOutput();IniSensorInput();IniBasicTimer();_EINT();if((P2IN&SELECT_FANGAN)!=0X00)//最終目標(biāo)手動區(qū){DoCommand_1();//執(zhí)行第一次行走格子數(shù)13ZhuanWan(YOUZHUANWAN);//轉(zhuǎn)彎DoCommand_2();//執(zhí)行第二次行走格子數(shù)7.5DoCommand_3();//2格ZhuanWan(YOUZHUANWAN);//轉(zhuǎn)彎DoCommand_4();//2格ZhuanWan(ZUOZHUANWAN);//轉(zhuǎn)彎DoCommand_5();//2.5}else//最終目標(biāo)1分箱{DoCommand_1();//執(zhí)行第一次行走格子數(shù)13ZhuanWan(YOUZHUANWAN);//轉(zhuǎn)彎DoCommand_2_2();//執(zhí)行第二次行走格子數(shù)7.5DoCommand_3_2();//3格ZhuanWan(ZUOZHUANWAN);//轉(zhuǎn)彎DoCommand_4_2();//2格}Finish();for(;;){_BIS_SR(CPUOFF);_NOP();}}voidINC_By_PWM(void)//加速{PWM_100=1511;//100%PWM_85=1284;//85%PWM_70=1058;//70%PWM_55=831;//55%PWM_40=604;//40%PWM_32=484;//32%PWM_25=378;//25%PWM_15=227;//15%PWM_10=151;//10%PWM_0=0;//0%}voidDEC_By_PWM(void)//減速原來速度的80%{PWM_100=1511/5;//100%PWM_85=1284/5;//85%PWM_70=1058/5;//70%PWM_55=831/5;//55%PWM_40=604/5;//40%PWM_32=484/5;//32%PWM_25=378/5;//25%PWM_15=227/5;//15%PWM_10=151/5;//10%PWM_0=0;//0%}voidIniTimeA_PWM(void){FLL_CTL0|=XCAP14PF;//ConfigureloadcapsTACTL=TASSEL1+TACLR;//SMCLK,ClearTarCCR0=1511;//PWMPeriodCCTL1=OUTMOD_7;//CCR1reset/setCCR1=PWM_100;//CCR1PWMdutycycleCCR1-100%PWMCCTL2=OUTMOD_7;//CCR2reset/setCCR2=PWM_100;//CCR2PWMdutycycleCCR2-100%PWM}voidIniMotorOutput(void){/*PWM信號輸出端*/P1DIR|=0x04;//P1.2outputP1SEL|=0x04;//P1.2TA1otionP2DIR|=0x01;//P2.0outputP2SEL|=0x01;//P2.0TA2otionTACTL|=MC0;//StartTimer_AinupmodeP5DIR=0xff;P5OUT=0X00;P6DIR=0XFF;P6OUT=0X00;Run_BackDrive();}voidIniSensorInput(void){P3DIR=0x00;/*左側(cè)傳感器<>P3*///查詢方式P4DIR=0x00;/*右側(cè)傳感器<>P4*///查詢方式P1DIR&=~(FRONT+BACK+BACKCOUNTER+FRONTCOUNTER);P2DIR&=~(SWITCH_SHENCHU+SWITCH_JIAJIN+SWITCH_TUISONG+SWITCH_STOP_JIAJIN+SELECT_FANGAN);}voidIniBasicTimer(void){FLL_CTL0|=XCAP14PF;BTCTL=BT_ADLY_125;//125ms產(chǎn)生一次中斷IE2|=BTIE;//EnableBTinterrupt}#pragmavector=BASICTIMER_VECTOR__interruptvoidBasic_Timer(void){nBasicTimerCounter++;if(nBasicTimerCounter>30000)nBasicTimerCounter=0;if((FlagShenChu==1)&&(nBasicTimerCounter>30)){P5OUT&=~(SHENCHU_1+SHENCHU_2);//伸出停止FlagShenChu=0;}}voidXunJi_BackDrive(void)//后輪驅(qū)動尋跡{Run_BackDrive();if((DE_BACK==0X00)&&(DE_FRONT==0X00))//傳感器BACK,FRONT同時在白線內(nèi)則直進{/*占空比大*/CCR1=PWM_100;CCR2=PWM_100;}elseif((DE_BACK==0X00)&&(DE_LEFTS_FRONT!=0x0F))//5,6,7,8中的傳感器有一個在白線上&BACK在白線上則左轉(zhuǎn){CCR2=PWM_100;switch(DE_LEFTS_FRONT){case0x07://0111BACK&8在白線CCR1=PWM_85; break;case0x0B://1011BACK&7在白線 CCR1=PWM_70; break;case0x0D://1101BACK&6在白線CCR1=PWM_40;break;case0x0E://1110BACK&5在白線CCR1=PWM_25;break;default:break;}}elseif((DE_BACK==0X00)&&(DE_RIGHTS_FRONT!=0x0F))//13,14,15,16中的傳感器有一個在白線上&BACK在白線上則右轉(zhuǎn){CCR1=PWM_100; switch(DE_RIGHTS_FRONT){case0x0E://1110BACK&13在白線CCR2=PWM_85; break;case0x0D://1101BACK&14在白線 CCR2=PWM_70; break;case0x0B://1011BACK&15在白線CCR2=PWM_40;break;case0x07://0111BACK&16在白線CCR2=PWM_25;break;default:break;}} elseif((DE_LEFTS_BACK!=0X0F)&&(DE_LEFTS_FRONT!=0X0F))//左側(cè)的傳感器1,2,3,4與5,6,7,8同在白線上,則左轉(zhuǎn){CCR2=PWM_100;switch(DE_LEFTS_FRONT){case0x07://01118在白線CCR1=PWM_55; break;case0x0B://10117在白線 CCR1=PWM_40; break;case0x0D://11016在白線CCR1=PWM_10;break;case0x0E://11105在白線CCR1=PWM_0;break;default: break;}}elseif((DE_RIGHTS_BACK!=0X0F)&&(DE_RIGHTS_FRONT!=0X0F))//右側(cè)的傳感器9,10,11,12與13,14,15,16同在白線上,則右轉(zhuǎn){CCR1=PWM_100;switch(DE_RIGHTS_FRONT){case0x0E://111013在白線CCR2=PWM_55; break;case0x0D://110114在白線 CCR2=PWM_40; break;case0x0B://101115在白線CCR2=PWM_10;break;case0x07://011116在白線CCR2=PWM_0;break;default: break;}}elseif(((DE_LEFTS_BACK!=0X0F)&&(DE_RIGHTS_FRONT!=0X0F))||((DE_LEFTS_BACK!=0X0F)&&(DE_FRONT==0X00)))//1,2,3,4與13,14,15,16同在白線上或者1,2,3,4在白線且FRONT在白線上,則右轉(zhuǎn){CCR1=PWM_100;if(DE_FRONT==0X00)//FRONT在白線上CCR2=PWM_70;elseswitch(DE_RIGHTS_FRONT){case0x0E://111013在白線CCR2=PWM_40; break;case0x0D://110114在白線 CCR2=PWM_25; break;case0x0B://101115在白線CCR2=PWM_10;break;case0x07://011116在白線CCR2=PWM_0;break;default: break;}}elseif(((DE_RIGHTS_BACK!=0X0F)&&(DE_LEFTS_FRONT!=0X0F))||((DE_RIGHTS_BACK!=0X0F)&&(DE_FRONT==0X00)))//9,10,11,12與5,6,7,8同在白線上或者9,10,11,12在白線且FRONT在白線上,則左轉(zhuǎn){CCR2=PWM_100; if(DE_FRONT==0X00)//FRONT在白線上CCR1=PWM_70;elseswitch(DE_LEFTS_FRONT){case0x07://01118在白線CCR1=PWM_40; break;case0x0B://10117在白線 CCR1=PWM_25; break;case0x0D://11016在白線CCR1=PWM_10;break;case0x0E://11105在白線CCR1=PWM_0;break;default: break;}}else{/*占空比大*/CCR1=PWM_100;CCR2=PWM_100;}Delay(DELAYTIME);}voidTurnRight_BackDrive(void)//右轉(zhuǎn):左電機正轉(zhuǎn),右電機停{P5OUT|=LEFT_1;P5OUT&=~LEFT_2;//左電機正轉(zhuǎn)CCR1=250;P5OUT&=~(RIGHT_1+RIGHT_2);//右電機停CCR2=0;}voidTurnLeft_BackDrive(void)//左轉(zhuǎn):左電機停,右電機正轉(zhuǎn){P5OUT&=~(LEFT_1+LEFT_2);//左電機停CCR1=0;P5OUT|=RIGHT_1;P5OUT&=~RIGHT_2;//右電機正轉(zhuǎn)CCR2=250;}voidRun_BackDrive(void)//直進,兩個電機同時正轉(zhuǎn){P5OUT|=LEFT_1;P5OUT&=~LEFT_2;//左電機正轉(zhuǎn)P5OUT|=RIGHT_1;P5OUT&=~RIGHT_2;//右電機正轉(zhuǎn)}voidDelay(unsignedinti){while(i)i--;}voidRunCounter(void)//計數(shù){//后-右計數(shù)if(DE_BACKCOUNTER==0x00)//檢測到白線{Delay(200);if(DE_BACKCOUNTER==0x00)//防止誤判{while(DE_BACKCOUNTER==0x00){XunJi_BackDrive();}nBackCounter++;}}//前-右計數(shù)if(DE_FRONTCOUNTER==0x00)//檢測到白線{Delay(200);if(DE_FRONTCOUNTER==0x00)//防止誤判{while(DE_FRONTCOUNTER==0x00){XunJi_BackDrive();}nFrontCounter++;}}}voidWholeStep(charNumber)//整格行進{nBackCounter=0;nFrontCounter=0;DEC_By_PWM();//減速運行兩格while(nFrontCounter<1){RunCounter();XunJi_BackDrive();//后輪驅(qū)動}nBackCounter=0;nFrontCounter=0;if(INCFlag==1)INC_By_PWM();//加速while((nBackCounter<(Number-2))||(nFrontCounter<(Number-2)))//差一格就到轉(zhuǎn)彎處{RunCounter();XunJi_BackDrive();//后輪驅(qū)動}nBackCounter=0;nFrontCounter=0;INCFlag=0;DEC_By_PWM();//減速while(nFrontCounter<1){RunCounter();XunJi_BackDrive();//后輪驅(qū)動}while(1){XunJi_BackDrive();BackSensorState();if((BackRightFlag==1)&&(BackLeftFlag==1))break;if(((BackRightFlag==1)&&(BackLeftFlag==0))||((BackRightFlag==0)&&(BackLeftFlag==1))){BackCloseToHor_BackDrive();//水平對齊break;}}nBackCounter=0;nFrontCounter=0;BackRightFlag=0;BackLeftFlag=0;}voidHalfStep(charNumber)//整+半格行進{nBackCounter=0;nFrontCounter=0;DEC_By_PWM();//減速運行兩格while(nFrontCounter<2){RunCounter();XunJi_BackDrive();//后輪驅(qū)動}if(INCFlag==1)INC_By_PWM();//加速nBackCounter=0;nFrontCounter=0;while((nBackCounter<(Number-2))||(nFrontCounter<(Number-3)))//差0.5格就到轉(zhuǎn)彎處{RunCounter();XunJi_BackDrive();//后輪驅(qū)動}INCFlag=0;DEC_By_PWM();//減速while(nFrontCounter<1){RunCounter();XunJi_BackDrive();//后輪驅(qū)動}nBasicTimerCounter=0;//最后半格while(nBasicTimerCounter<HALFSTEPTIME){if((P2IN&SWITCH_SHENCHU)!=0X00){Delay(200);if((P2IN&SWITCH_SHENCHU)!=0X00)break;}XunJi_BackDrive();}}voidDoCommand_1(void)//執(zhí)行第一次行走格子數(shù){nBackCounter=0;nFrontCounter=0;DEC_By_PWM();//減速運行兩格while(nFrontCounter<2){RunCounter();XunJi_BackDrive();//后輪驅(qū)動}nBackCounter=0;nFrontCounter=0;INC_By_PWM();//加速while((nBackCounter<(Command_1-3))||(nFrontCounter<(Command_1-4)))//差一格就到轉(zhuǎn)彎處{RunCounter();XunJi_BackDrive();//后輪驅(qū)動}nBackCounter=0;nFrontCounter=0;INCFlag=0;DEC_By_PWM();//減速while(nFrontCounter<2){RunCounter();XunJi_BackDrive();//后輪驅(qū)動}while(1){XunJi_BackDrive();BackSensorState();if((BackRightFlag==1)&&(BackLeftFlag==1))break;if(((BackRightFlag==1)&&(BackLeftFlag==0))||((BackRightFlag==0)&&(BackLeftFlag==1))){BackCloseToHor_BackDrive();//水平對齊break;}}nBackCounter=0;nFrontCounter=0;BackRightFlag=0;BackLeftFlag=0;}voidDoCommand_2(void)//執(zhí)行第二次行走格子數(shù){intk=0,i;INCFlag=1;HalfStep(Command_2);//7.5Stop();//停車ShenChu();//神出ZhuaQu();//抓取//收回伸出機構(gòu)P5OUT|=SHENCHU_2;P5OUT&=~SHENCHU_1;nBasicTimerCounter=0;//啟動定時器do{}while(nBasicTimerCounter<30);P5OUT&=~(SHENCHU_1+SHENCHU_2);//伸出停止FlagShenChu=1;//收回標(biāo)志HoutuiFlag=1;/***放了兩塊物體后后退一格***/while(1){Run_FrontDrive();//全速后退CCR1=200;CCR2=200;BackSensorState();//后排傳感器與水平線位置if((BackRightFlag==1)&&(BackLeftFlag==1))//后排傳感器如果全在白線上break;if(((BackRightFlag==1)&&(BackLeftFlag==0))||((BackRightFlag==0)&&(BackLeftFlag==1))){BackCloseToHor_FrontDrive();//水平對齊break;}}Stop();Delay(2000);nBackCounter=0;nFrontCounter=0;BackRightFlag=0;BackLeftFlag=0;Right_Cw_Left_UCw();//左轉(zhuǎn)彎for(i=0;i<10;i++)Delay(6000);while(k==0){if(DE_TURNLEFT==0x00){Delay(200);if(DE_TURNLEFT==0x00)//防止誤判k++;}}}voidDoCommand_3()//2格{nBackCounter=0;nFrontCounter=0;DEC_By_PWM();//減速運行兩格while(nFrontCounter<2){RunCounter();XunJi_BackDrive();//后輪驅(qū)動}nBackCounter=0;nFrontCounter=0;while(1){XunJi_BackDrive();BackSensorState();if((BackRightFlag==1)&&(BackLeftFlag==1))break;if(((BackRightFlag==1)&&(BackLeftFlag==0))||((BackRightFlag==0)&&(BackLeftFlag==1))){BackCloseToHor_BackDrive();//水平對齊break;}}nBackCounter=0;nFrontCounter=0;BackRightFlag=0;BackLeftFlag=0;}voidDoCommand_4()//2格{DoCommand_3();}voidDoCommand_5(void){nBackCounter=0;nFrontCounter=0;DEC_By_PWM();//減速運行兩格while(nFrontCounter<2){RunCounter();XunJi_BackDrive();//后輪驅(qū)動}nBasicTimerCounter=0;//最后半格while(nBasicTimerCounter<HALFSTEPTIME){if((P2IN&SWITCH_SHENCHU)!=0X00){Delay(200);if((P2IN&SWITCH_SHENCHU)!=0X00)break;}XunJi_BackDrive();}Stop();TuiSong();}voidBackSensorState(void)//后排傳感器與水平線位置{if((P4IN&BACKRIGHT)==0X00){Delay(200);if((P4IN&BACKRIGHT)==0X00)BackRightFlag=1;elseBackRightFlag=0;}elseBackRightFlag=0;if((P3IN&BACKLEFT)==0X00){Delay(200);if((P3IN&BACKLEFT)==0X00)BackLeftFlag=1;elseBackLeftFlag=0;}elseBackLeftFlag=0;}voidBackCloseToHor_BackDrive(void)//后排傳感器調(diào)整{while(((BackRightFlag==1)&&(BackLeftFlag==0))||((BackRightFlag==0)&&(BackLeftFlag==1))){BackSensorState();if((BackRightFlag==1)&&(BackLeftFlag==0))//右先進入白線,右轉(zhuǎn)TurnRight_BackDrive();elseif((BackRightFlag==0)&&(BackLeftFlag==1))//左先進入白線,左轉(zhuǎn)TurnLeft_BackDriv

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論