投籃機(jī)械人設(shè)計_第1頁
投籃機(jī)械人設(shè)計_第2頁
投籃機(jī)械人設(shè)計_第3頁
投籃機(jī)械人設(shè)計_第4頁
投籃機(jī)械人設(shè)計_第5頁
已閱讀5頁,還剩32頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、目 錄 第一章 緒 論.1 1.1 課題背景 .1 1.1.1 機(jī)器人的發(fā)展及特點(diǎn)及發(fā)展前景.1 1.2 比賽規(guī)則 .2 1.2.1 規(guī)則簡介.2 1.2.2 競技型投籃機(jī)器人的設(shè)計與制作的意義.3 1.2.3 場地簡介.3 1.3 方案簡介 .4 1.3.1 總體方案.4 1.3.2 小自動機(jī)器人技術(shù)要求.5 1.3.3 小自動機(jī)器人初步設(shè)想.5 第二章 機(jī)械結(jié)構(gòu)設(shè)計.7 2.1 行走機(jī)構(gòu) .7 2.2 定位機(jī)構(gòu) .9 2.3 升降機(jī)構(gòu) .9 2.4 投籃機(jī)構(gòu) .10 第三章 電氣裝備設(shè)計.13 3.1 電機(jī)及驅(qū)動器 .13 3.2 數(shù)字羅盤 .13 3.2.1 性能簡介.13 3.2.2

2、操作步驟.14 3.3 單片機(jī)電路板 .15 3.3.189C51 單片機(jī).16 3.3.2 計數(shù)器/定時器 8253 簡介.20 3.3.3 電路板原理.23 3.3.4 PCB .23 3.4 電氣系統(tǒng)總體說明 .23 第四章 自動控制設(shè)計.26 4.1 編程準(zhǔn)備工作 .26 4.1.1 設(shè)置電機(jī)驅(qū)動器.26 4.1.2 確定地址.26 4.1.3 計算測量某些參數(shù).27 4.2 子程序的編寫 .27 4.2.1 羅盤接受程序.27 4.2.2 羅盤標(biāo)定程序.30 4.2.3 電機(jī)速度控制系列程序.31 4.2.4 電機(jī)位移控制系列程序.31 4.2.5 定位機(jī)構(gòu)檢測程序流程圖.33 4.

3、2.6 投籃機(jī)構(gòu) A 控制程序流程圖.34 4.2.7 投籃機(jī)構(gòu) B 控制程序流程圖.35 結(jié) 論.36 致 謝.37 參考文獻(xiàn).38 附錄 1 控制程序.39 附圖 1 硬件原理圖 .55 附圖 2 PCB .56 親,由于某些原因,沒有上傳完整的畢業(yè)設(shè)計(完整的應(yīng)包括畢業(yè) 設(shè)計說明書、相關(guān)圖紙 CAD/PROE、中英文文獻(xiàn)及翻譯等),此文檔 也稍微刪除了一部分內(nèi)容(目錄及某些關(guān)鍵內(nèi)容)如需要的朋友, 請聯(lián)系我的 Q 2.PDA,移動電話,望遠(yuǎn)鏡; 3.導(dǎo)航系統(tǒng); 4.仿真實(shí)體. 3.主要性能 誤差 3 度 精度 0.5 度 重復(fù)度 3 度 4.能量供應(yīng) 所需電壓 3V5V 所需電流 休眠模

4、式 1uA 標(biāo)定模式 8mA 5.通信 TDCM3 提供 2400,4800,9600,19200 波特率 4 個等級的頻率。 6.特色 探測失真:當(dāng)有磁介質(zhì)干擾等將會顯示一個警告標(biāo)記。并妥善處理當(dāng)前的 電信號.并具有自動標(biāo)定算法庫。 7.管角設(shè)定 如圖 3-2: 圖 3-2 管腳設(shè)定 在實(shí)際應(yīng)用中,我將羅盤直接安裝在它本身直帶的調(diào)試電路板上。而在 上電狀態(tài)下,調(diào)試電路板將 RTS 腳經(jīng)電阻接高電平。為使 RTS 腳可置低電平, 我用光電藕合器將其接地。光電藕合器的通斷決定 RTS 腳的電平:光電藕合 器接通時 RTS 腳為低電平;光電藕合器斷開時 RTS 腳為高電平。 RXD 接單片機(jī)的 T

5、X 腳,接收單片機(jī)的通信信號;TX 接單片機(jī)的 RX 腳, 向單片機(jī)傳送羅盤所測得的數(shù)據(jù)。 3.2.23.2.2 操作步驟操作步驟 當(dāng)設(shè)備上電時,TDCM3 就準(zhǔn)備好了輸出。當(dāng)設(shè)備第一次啟用時他可能需要 標(biāo)定.TDCM3 還為用戶提供 3 個程序。它們是普通,連續(xù)和標(biāo)定模式。一般情況 下,TDCM3 進(jìn)入睡眠模式以節(jié)省能量。 1.普通模式 當(dāng)主機(jī)通過 RTS 管腳向設(shè)備發(fā)出請求,設(shè)備就會輸出。請注意在主機(jī)給設(shè) 備發(fā)出脈沖請求前,RX 角必須保持高電平。(請看圖 3-3 普通模式波形表) 圖 3-3 普通模式波形圖 主機(jī)接受到的是 3 個連續(xù)字節(jié)。第一字節(jié)是狀態(tài)字節(jié),狀態(tài)字節(jié)表示 TDCM3 的

6、狀態(tài),在正常狀態(tài)下,狀態(tài)字節(jié)等于 80H,當(dāng)查出失真時,狀態(tài)字節(jié)等于 81H,這時必須要標(biāo)定。(請看 P.6 標(biāo)定模式);第二個是羅盤測得角度值的高 字節(jié);第三個是羅盤測得角度值的低字節(jié)。 即羅盤傳輸?shù)?3 個字節(jié)為: LMSMSB noteStatus)( 見計算公式(3-1): (3- 2 256 LSBMSB 1) 2.連續(xù)模式 當(dāng)主機(jī)把 RTS 腳設(shè)為低電平時,數(shù)字羅盤將要進(jìn)入連續(xù)模式。他將自動輸 出數(shù)據(jù)。請注意如果連續(xù)模式一旦開啟就不能返回到睡眠模式。 3.標(biāo)定模式 當(dāng)狀態(tài)字節(jié)等于 81H 時扭曲被發(fā)現(xiàn),這時用戶就需要執(zhí)行標(biāo)定。 當(dāng)主機(jī)通過 RTS 腳給羅盤信號(同時 RX 腳必須置

7、低電平),這時模塊進(jìn)入 標(biāo)定狀態(tài),把模塊旋轉(zhuǎn)兩周。接著讓主機(jī)置 RX 管腳為高電平(模塊將會回復(fù) RDY)。之后模塊將會返回到睡眠模式。 3.33.3 單片機(jī)電路板單片機(jī)電路板 考慮到欲實(shí)現(xiàn)的功能比較復(fù)雜和繁多,我采用單片機(jī)系統(tǒng)來做主控板。功 能要求如下: 1.能夠給電機(jī)提供 4 個方向信號,4 個脈沖信號; 2.能夠通過對脈沖的個數(shù)對電機(jī)進(jìn)行開環(huán)位移控制; 3.能夠方便地對電機(jī)進(jìn)行速度控制; 2.能夠與數(shù)字羅盤進(jìn)行通信; 3.能夠接收 8 個限位開關(guān)信號。 為滿足以上要求,我們需要大量的計數(shù)器和脈沖發(fā)生器,以及擴(kuò)展足夠數(shù) 量的 I/O 口,故選擇芯片主要如下表: 表 3-1 主要芯片的選擇及

8、選擇理由 序 號 芯 片 名 稱選 擇 理 由 1 單片機(jī) 89C51 技術(shù)非常成熟,性能穩(wěn)定,價格也非 常低廉,其內(nèi)存容量為 4K,考慮到程序不 是太長,所以 89C51 是最佳的選擇。 2 計數(shù)器/定時器 8253 一片 8253 中有 3 個計數(shù)器。每個計 數(shù)器可以分別設(shè)定工作模式。其工作模式 有 6 種之多,且用 8253 是硬件計數(shù),不占 用寶貴的 CPU 的資源。 3 I/O 擴(kuò)展 8155 8155 能夠擴(kuò)展更多的 I/O 口,并且可 以編程定義 I/O 口的輸入/輸出功能。內(nèi)部 自帶了鎖存器,而且還提供了 256 個 RAM 單元。 3.3.13.3.189C5189C51 單

9、片機(jī)單片機(jī) 由 ATMEL 公司生產(chǎn)的 AT89C51 是與 8031 系列完全兼容的單片機(jī),主要區(qū)別 是它內(nèi)部有 4KBIT 的 ROM,出廠所配晶振頻率為 11.0592M,每個機(jī)器周期為 1.085s,用戶可更換晶振以提高速度。程序存儲器為 64K,其中前 4K 在 CPU 內(nèi)部。 89C51 單片機(jī)組成。 (1)、一個 8 位微處理器 CPU。 (2)、數(shù)據(jù)存儲器 RAM 和特殊功能寄存器 SFR。 (3)、內(nèi)部程序存儲器 ROM。 (4)、兩個定時/計數(shù)器,用以對外部事件進(jìn)行計數(shù),也可用做定時器。 (5)、四個 8 位可編程的 I/O(輸入/輸出)并行端口,每個端口既可作輸入也 可做

10、輸出。 (6)、一個串行端口,用于數(shù)據(jù)的串行通信。 (7)、中斷控制系統(tǒng)。 (8)、內(nèi)部時鐘電路。 以上各部分由系統(tǒng)內(nèi)部總線連接。該單片機(jī)具備一個完整的計算機(jī)所具有 的基本組成部分,即 CPU(運(yùn)算器和控制器)、存儲器(ROM 和 RAM)和 I/O 接口等。 因此,89C51 單片機(jī)是一個功能很強(qiáng)的 8 位微處理器。 89C51 的硬件結(jié)構(gòu)有如下一些主要特點(diǎn): (1)、內(nèi)部程序存儲器(ROM)和內(nèi)部數(shù)據(jù)存儲器(RAM)。 (2)、輸入/輸出(I/O)口。 具有 4 個 8 位可編程的 I/O 并行端口,尤其是有一個全雙 I 的串行口,該 串口由兩根 I/O 位線構(gòu)成,有四種工作方式,可通過編

11、程選定。89C51 最多有 32 根 I/O 位線。 (3)、外部程序存儲器和外部數(shù)據(jù)存儲器尋址空間。 89C51 單片機(jī)可對 64KB 的外部數(shù)據(jù)存儲器尋址,而對程序存儲器是內(nèi)外總 空間為 64KB,外部程序存儲器的最大尋址空間為 64KB。 (4)、中斷與堆棧。 89C51 單片機(jī)有 5 個中斷源,分為 2 個優(yōu)先級,每個中斷源的優(yōu)先級是可 編程的,它的堆棧位置也是可編程的,堆棧深度可達(dá) 128 字節(jié)。 (5)、定時/計數(shù)器與寄存器區(qū)。 89C51 有 2 個 16 位定時/計數(shù)器,通過編程可實(shí)現(xiàn)四種工作模式;在內(nèi)部 RAM 中設(shè)置了四個通用工作寄存器區(qū),共 32 個通用寄存器,以適應(yīng)多種

12、中斷或 子程序嵌套的要求。 (6)、指令系統(tǒng)。 89C51 指令系統(tǒng)功能強(qiáng)大,指令短,執(zhí)行速度快。如外接晶振的頻率為 12MHZ 時,大部分指令執(zhí)行時間為 1s。 存儲空間配置和功能 89C51 單片機(jī)的存儲器組織結(jié)構(gòu)可以分為三個不同的存儲空間,分別是: (1)、64KB 程序存儲器(ROM),包括片內(nèi) ROM 和片外 ROM; (2)、64KB 外部數(shù)據(jù)存儲器(外 RAM); (3)、256B(包括特殊功能寄存器)內(nèi)部數(shù)據(jù)存儲器(內(nèi) RAM)。 三個不同的存儲空間用不同的指令和控制信號實(shí)現(xiàn)讀寫功能操作: (1)、ROM 空間用 MOVC 指令實(shí)現(xiàn)只讀功能操作,用 PSEN 信號選通讀外 RO

13、M。 (2)、外 RAM 空間用 MOVX 指令實(shí)現(xiàn)讀寫功能操作,用 RD 信號選通讀外 RAM,用 WR 信號選通寫外 RAM。 (3)、內(nèi) RAM(包括特殊功能寄存器)用 MOV 指令實(shí)現(xiàn)讀寫和其它功能操作。 程序存儲器(ROM): ROM 空間共 64KB 。其中 60KB 在片外。地址范圍 1000HFFFFH,無論片內(nèi) 片外,ROM 地址空間是統(tǒng)一的,不重疊。對于有內(nèi) ROM 的 89C51,EA 應(yīng)接高電 平,復(fù)位后先從內(nèi) ROM0000H 開始執(zhí)行程序,當(dāng) PC 值超出內(nèi) ROM4KB 空間時,會 自動轉(zhuǎn)向片外 ROM1000H 依次執(zhí)行程序。 讀 ROM 是以程序計數(shù)器 PC

14、作為 16 位地址指針,依次讀相應(yīng)地址 ROM 中的 指令和數(shù)據(jù),每讀一個字節(jié),(PC)+1PC,這是 CPU 自動形成的。但是有些指 令有修改 PC 的功能,例如轉(zhuǎn)移類指令和 MOVC 指令,CPU 將按修改后的 PC16 位 地址讀 ROM。讀外 ROM 的過程:CPU 從 PC 中取出當(dāng)前 ROM 的 16 位地址,分別由 P0 口(低 8 位)和 P2 口(高 8 位)同時輸出,ALE 信號有效時由地址鎖存器鎖存低 8 位地址信號,地址鎖存器輸出的低 8 位地址信號和 P2 口輸出的高 8 位地址信 號同時加到外 ROM16 位地址輸入端,當(dāng) PSEN 信號有效時,外 ROM 將相應(yīng)地

15、址存 儲單元中的內(nèi)容送至數(shù)據(jù)總線(P0 口),CPU 讀入后存入指定單元。需要指出的 是,64KB 中有一小段范圍是單片機(jī)系統(tǒng)的專用單元,0003H0023H 是五個中斷 源中斷服務(wù)程序入口地址,用戶不能安排其它內(nèi)容。單片機(jī)復(fù)位后,(PC) =0000H,CPU 從地址為 0000H 的 ROM 單元中讀取指令和數(shù)據(jù)。從 0000H 到 0003H 只有 3 個字節(jié),根本不可能安排一個完整的系統(tǒng)程序,而單片機(jī)又是依次讀 ROM 字節(jié)的,因此,這 3 個字節(jié)只能用來安排一條跳轉(zhuǎn)指令,跳轉(zhuǎn)到其它合適 的地址范圍執(zhí)行真正的主程序。 外部數(shù)據(jù)存儲器(外 RAM) 外部數(shù)據(jù)存儲器共 64KB,讀寫外 R

16、AM 用 MOVX 指令,控制信號是 P3 的 WR 和 RD。 此處省略 NNNNN NNNNNNN NNNN NNN NN 字 #define CM 37 /* 行走機(jī)構(gòu)前進(jìn) 1cm 所需的脈沖數(shù) 14*100/(pi*120)*10 */ #define O 24 /* 行走機(jī)構(gòu)旋轉(zhuǎn) 1 度所需的脈沖數(shù) 14*100/360/120*735 */ #define S1 15 /* 定義升降機(jī)構(gòu)行程單位 cm */ #define S2 50 #define S3 80 bit flag,JUMPflag,ARRIVEflag; /* 臨時標(biāo)志,臨時標(biāo)志,到達(dá)白盤正上方標(biāo)志 */ uint

17、 LASTv; /* 紀(jì)錄上一次設(shè)置轉(zhuǎn)速時左輪的轉(zhuǎn)速 */ int Q,Q0,QC,QR0; /*電子羅盤測得的角度值,初始(參考)位置的角度值,糾正角度,角度寄存變量 */ uchar Qst,QH,QL,QHl,; /*從羅盤接收到的狀態(tài)位,角度值高字節(jié),低字節(jié),上一次接收的高字節(jié)*/ uchar input; /* 寄存 I/O 口(行程開關(guān))輸入狀態(tài) */ void COM8155(void) /* 初始化 8155 */ COM8155A=0 x0F; /* 定義 8155A 的 a 口 b 口 c 口均為輸出方式 */ COM8155B=0 x00; /* 定義 8155A 的 a

18、 口 b 口 c 口均為輸入方式 */ COM8253B=0 x76; APA=APA APC=APC void DELAY(uint time) /* 延時函數(shù),單位:1ms */ uchar j; while (time-) for(j=0;j122;j+) /* 循環(huán) 122 次的時間正好為 1ms,用設(shè)置斷點(diǎn)的試驗方法測得 */ ; void RECEIVE(void) /* 接收電子羅盤數(shù)據(jù),串行口 */ uchar k; k=0; RI=0; while (k!=3) /* 每一組接收 3 個字節(jié)的數(shù)據(jù) */ while(RI=0) /* RI 在中定義,表示單片機(jī)的中斷標(biāo)志 位,

19、等待中斷,RI=1 */ ; RI=0; /* 中斷結(jié)束,軟件清零 */ k+; switch(k) case 1: Qst=SBUF;break; /* 接收狀態(tài)位 */ case 2: QH=SBUF;break; /* 接收角度值高字節(jié) */ case 3: QL=SBUF;break; /* 接收角度值低字節(jié) */ int GETQ(void) /* 處理接收數(shù)據(jù) */ RECEIVE(); while(QH2) /* 如果發(fā)現(xiàn)通訊錯誤重新接收 */ RECEIVE(); if(QHl=2 if(QHl=0 Q=QH*256+QL; /* 說明書提供的角換算公式,單位:度/2 */ Q

20、=Q/2+QC-Q0; /* 單位轉(zhuǎn)化為度,修正角度,并換算為相對(初始位置)角度 */ QHl=QH; /* 紀(jì)錄上一次角度值高字節(jié) */ return(Q); /* 反饋測得角度值 */ void LEFTV(uint v) /* 左輪速度控制 */ uint fk; /* 8253 分頻數(shù) */ uchar fkl,fkh; /* 分頻數(shù)低 8 位,高 8 位 */ APA=APA|0 x10; /* 打開控制電機(jī) A 的 8253 的 GATE 門 */ LASTv=v; /* 紀(jì)錄上一次左輪速度 */ fk=CMS/v; /* 把速度(cm/s)轉(zhuǎn)化為分頻數(shù) */ fkl=fk%25

21、6;fkh=fk/256; COM8253C=0 x36; /* 設(shè)置 8253C 的 0 口工作模式為脈沖發(fā)生器 */ C0AP=fkl;C0AP=fkh; /* 給 8253 賦值分頻 */ void RIGHTV(uint v) /*右輪速度控制 */ uint fk; uchar fkl,fkh; APA=APA|0 x40; /* 打開控制電機(jī) B 的 8253 的 GATE 門 */ fk=CMS/v; fkl=fk%256;fkh=fk/256; COM8253C=0 xB6; /* 設(shè)置 8253C 的 2 口工作模式為脈沖發(fā)生器 */ C2BP=fkl;C2BP=fkh; /

22、* 給 8253 賦值分頻 */ void SETS(uint s) /* 設(shè)定左輪路程 */ uint ge; uchar gel,geh; ge=CM*s; /* 把行程(cm)轉(zhuǎn)化為計數(shù)值 */ gel=ge%256;geh=ge/256; APA=APA|0 x20; /* 打開控制電機(jī) A 的 8253 計數(shù)器的 GATE 門 */ COM8253C=0 x70; /* 設(shè)置 8253C 的 1 口工作模式為方式 0 */ C1AC=gel;C1AC=geh; /* 給 8253 賦值計數(shù) */ uint READC(uchar xdata *po) /* 讀取脈沖個數(shù)(減計數(shù)),*

23、p 為所讀寄存器地址指針 */ uchar geh,gel; uint ge,sn; gel=*po;po+;po-; /* 刷新指針,防止讀值錯誤 */ geh=*po; /* 先讀低再讀高 */ ge=geh*256+gel; sn=ge/CM; /* 計算 sn,sn 為剩余行程 */ return(sn); void CHECKS() /* 監(jiān)測是否到位 */ uint sn; sn=1; while(sn0) /* 所剩行程為 0 時跳出循環(huán) */ DELAY(3); /* 延時,確保讀數(shù)無干擾 */ COM8253C=0 x40; /* 設(shè)置 8253C 的 1 口工作模式為閂鎖模

24、式 */ COM8253C=0 x40; sn=READC( /* 讀取剩余行程 */ void AAA(uint v0,uint v1,uchar dire) /* 雙輪加速,減速*/ /*v0 為初始速度,v1 為最終速度,dire 為方向 */ uint v,sn; switch(dire) case 1: /* 行走方向為正前 */ APA=APA /* 設(shè)置電機(jī) A 的方向為 0 */ APA=APA|0 x02; /* 設(shè)置電機(jī) B 的方向為 1 */ break; case 2: /* 行走方向為正后 */ APA=APA|0 x01; /* 設(shè)置電機(jī) A 的方向為 1 */ A

25、PA=APA/*設(shè)置電機(jī) B 的方向為 0,兩個電機(jī)安裝方向相反,如此才可走直線 */ break; case 3: /* 行走方向為逆時針旋轉(zhuǎn) */ APA=APA|0 x01; APA=APA|0 x02; break; case 4: /* 行走方向為順時針旋轉(zhuǎn) */ APA=APA APA=APA break; sn=1; if(v1v0) for(v=v0;vv1;v-=1) LEFTV(v); RIGHTV(v); DELAY(6); void STOP(void) /* 急停程序 */ uint fk,v; uchar fkl,fkh; for(v=LASTv;v1;v-=1)

26、LEFTV(v); RIGHTV(v); DELAY(4); APA=APA /* 所有 8253 的可控 gate 門關(guān)閉 */ void LS(uint s,uchar dire) /* 直線行走程序,s 為行走的距離 */ s=s-12; SETS(s); AAA(1,70,dire); /* 速度為 70cm/s */ CHECKS(); STOP(); void RS(int dec) /* 開環(huán)自轉(zhuǎn)程序,dec 為旋轉(zhuǎn)的角度,+表示順時針,-表示逆時針 */ uint sdec,vdec; /* 自轉(zhuǎn)車輪軌跡行程,自轉(zhuǎn)速度 */ if(dec0) sdec=dec*O/CM*8/9

27、; /* 將旋轉(zhuǎn)的角度車輪軌跡行程 */ SETS(sdec); vdec=5+dec/2; if(dec3) AAA(1,vdec,4); else /* 如果旋轉(zhuǎn)的角度小于 3 度,就不用加速,防止旋轉(zhuǎn)角度過大,造成振蕩 */ AAA(1,1,4); /* 方向為順時針 */ LEFTV(vdec); RIGHTV(vdec); CHECKS(); else sdec=(-dec)*O/CM*8/9; SETS(sdec); vdec=5+(-dec)/2; if(-dec)3) AAA(1,vdec,3); else AAA(1,1,3); /* 方向為逆時針 */ LEFTV(vdec

28、); RIGHTV(vdec); CHECKS(); STOP(); Q=GETQ(); void ROTATE(int dec) /* 閉環(huán)自轉(zhuǎn)程序,dec 為旋轉(zhuǎn)的目標(biāo)羅盤讀數(shù),反 饋校正方向 */ int Qdec,Qdecl,Qdech; Q=GETQ(); Qdec=dec; Qdecl=Qdec-p; /* Qdecl 為旋轉(zhuǎn)后滿足要求的最小角度值 */ Qdech=Qdec+p; /* Qdech 為旋轉(zhuǎn)后滿足要求的最大角度值 */ while(QQdech) /* 如果角度仍不滿足,再旋轉(zhuǎn)目標(biāo)值與測量值的差 值 */ RS(Qdec-Q); void TRANSITION(ui

29、nt v0L,uint v0R,uint v1L,uint v1R) /* 變速運(yùn)動程序,變量分別為左輪初始速度,右輪初始速度 */ /* 左輪目標(biāo)速度,右輪目標(biāo)速度,行走方向由程序外部確定 */ uint v,vL,vR; for(v=1;v21;v+) if(v0Lv1L) vL=v0L+(v1L-v0L)*v/20; else vL=v0L-(v1L-v0L)*v/20; if(v0Rv1R) vR=v0R+(v1R-v0R)*v/20; else vR=v0R-(v1R-v0R)*v/20; LEFTV(vL); RIGHTV(vR); DELAY(6); void DISCOVERL

30、(void) /* 檢測白盤 */ input=BPA; /* BPA 為限位開關(guān)輸入 */ if(input /* 急停 */ JUMPflag=1; /* 程序跳出循環(huán)的標(biāo)志 */ ARRIVEflag=1; /* 表示已到位的標(biāo)志 */ if(input if(input /* 急停 */ RS(-50); /* 左旋 50 度 */ JUMPflag=1; /* 檢測到白盤(程序跳出循環(huán))的標(biāo)志 */ if(input if(input RS(50); JUMPflag=1; void DISCOVERR(void) /* 巡邏程序,沿螺旋線尋找附近白盤,在機(jī)器人丟失目標(biāo)時調(diào)用 */

31、uint v; STOP(); AAA(1,30,2); /* 后退 50cm */ DELAY(500); STOP(); QR0=GETQ(); RS(90); /* 右轉(zhuǎn) 90 度 */ STOP(); APA=APA APA=APA Q=GETQ(); TRANSITION(1,1,30,1); /* 繞右輪旋轉(zhuǎn) 270 度 */ QR0=QR0+270; while(QQR0) Q=GETQ(); DISCOVERL(); /* 循環(huán)檢測白盤 */ if(JUMPflag=1) break; /* 一旦檢測到白盤跳出 */ APA=APA|0 x02; if(JUMPflag=0)

32、TRANSITION(30,1,30,8); /* 沿小圓轉(zhuǎn) 180 度 */ QR0=QR0+180; while(QQR0) Q=GETQ(); DISCOVERL(); if(JUMPflag=1) break; if(JUMPflag=0) TRANSITION(30,8,40,15); /* 沿中圓轉(zhuǎn) 180 度 */ QR0=QR0+180; while(QQR0) Q=GETQ(); DISCOVERL(); if(JUMPflag=1) break; if(JUMPflag=0) TRANSITION(40,15,50,25); /* 沿大圓轉(zhuǎn) 180 度 */ QR0=QR0

33、+180; while(Q122) j+; k=0; if(j5000) /* j5000 說明已過一定時間還未到位,可能卡在 籃筐上了 */ if(flag=1) break; /* flag=1 表示已旋轉(zhuǎn)過,就跳出 */ APC=APC /* 斷開繼電器 */ APA=APA /* 設(shè)置電機(jī) D 的方向為 0,反轉(zhuǎn) */ APC=APC|0 xFF; /* 接通繼電器 */ DELAY(2000); APA=APA|0 x08; /* 將電機(jī) D 方向口置 1,防止繼電器抱死,具體原因不明 */ APC=APC /* 斷開繼電器 */ RS(60); /* 機(jī)器人自轉(zhuǎn) 60 度,避開籃筐

34、 */ APA=APA|0 x08; /* 設(shè)置電機(jī) D 正轉(zhuǎn) */ APC=APC|0 xFF; /* 接通繼電器 */ DELAY(500); input=BPA; DELAY(500); while(input j=0; flag=1; /* 表示已旋轉(zhuǎn)過 */ APC=APC /* 斷開繼電器 */ DELAY(1000); APA=APA /* 設(shè)置電機(jī) D 的反轉(zhuǎn) */ APC=APC|0 xFF; /* 接通繼電器 */ DELAY(3000); APA=APA|0 x08; /* 將電機(jī) D 方向口置 1,防止繼電器抱死 */ APC=APC /* 斷開繼電器 */ main(

35、) uchar i,k; uint j; int dec; uint sn; COM8155(); /* 初始化 8155 */ DELAY(300); /* 延時,給羅盤反應(yīng)時間 */ TMOD=0 x20; /* 設(shè)定計時器 1 */ TF1=0;TR1=0; /* 計時器標(biāo)志位初始化 */ TL1=0 xFD;TH1=0 xFD; /* 設(shè)定計時初始值 */ SCON=0 x58; /* 設(shè)定串行口以方式 1 通信 */ PCON=0 x00; /* 當(dāng) PCON=0 時,此時串行口以 9600 波特率通信 */ TR1=1; /* 計時器開始工作 */ i=0;QHl=0;QC=0;Q

36、0=0; /* 各變量和標(biāo)志初始化 */ ARRIVEflag=0;JUMPflag=0; input=0; APC=APC /* 數(shù)字羅盤自動標(biāo)定程序 */ DELAY(3); APC=APC|0 xFF; P3=P3 /* P3 即單片機(jī)的 TX 腳,與羅盤的 RXD 腳相連 */ DELAY(1); APC=APC RECEIVE(); DELAY(100); for(i=0;i8;i+) RS(103); /* 連續(xù)旋轉(zhuǎn) 8 次,剛好 720 度左右 */ P3=P3|0 x02; DELAY(53); RECEIVE(); APC=APC|0 xEF; /* 啟動羅盤,為連續(xù)工作模式

37、 */ Q0=GETQ(); /* 接受機(jī)器人初始位置的角度,并作為基準(zhǔn)角度,定義為相對 0 度 */ LS(212,1); /* 前進(jìn) 212cm */ ROTATE(90); /* 右轉(zhuǎn)到 90 度 */ LS(160,1); /* 前進(jìn) 160cm */ SETS(80); /* 設(shè)定 80cm 行程 */ AAA(1,15,1); /* 設(shè)定速度加速到 15cm/s */ for(i=0;i+) DISCOVERL(); /* 檢測是否碰到白盤 */ if(JUMPflag=1) /* 一旦碰到,跳出循環(huán) */ break; if(i=0) /* 變量 i 每溢出一次,便檢測行程是否已

38、走完 */ DELAY(3); COM8253C=0 x40; COM8253C=0 x40; sn=READC( if(sn360) /* 如果 Q360 度了,重定義 360 度為基準(zhǔn)點(diǎn) */ QC=QC-360; Q=GETQ(); if(Q90) /* 如果 Q90 度,則轉(zhuǎn)到 270 度,節(jié)省行程 */ if(Q180) ROTATE(180); ROTATE(270); LS(50,1); ROTATE(270); JUMPflag=0; ARRIVEflag=0; for(i=0;i+) DISCOVERL(); /* 檢測是否碰到白盤 */ if(JUMPflag=1) /*

39、一旦碰到,跳出循環(huán) */ break; if(i=0) /* 變量 i 每溢出一次,便檢測行程是否已走完 */ DELAY(3); COM8253C=0 x40; COM8253C=0 x40; sn=READC( if(sn122) j+; k=0; if(j5000) /* j5000 說明已過一定時間還未到位,可能卡在籃筐上了 */ if(flag=1) /* flag=1 表示已旋轉(zhuǎn)過,就跳出 */ break; B2CC=0 x01;B2CC=0 x00; /* 否則直接更改計數(shù)器 B2CC 的計數(shù)值 */ /* 使 B2CC 把脈沖口 B3PP 的 GATE 門關(guān)閉,結(jié)束發(fā)波 */

40、 UPDOWN(20,1); /* 升降機(jī)構(gòu)下降 20cm */ DELAY(2000); RS(60); /* 機(jī)器人自轉(zhuǎn) 60 度 */ UPDOWN(25,0); /* 升降機(jī)構(gòu)上升 25cm,再次投籃 */ while(input j=0; flag=1; B2CC=0 x01;B2CC=0 x00; /* 更改計數(shù)器 B2CC 的計數(shù)值,使 B2CC 把脈沖口 B3PP 的 GATE 門關(guān)閉,結(jié)束發(fā)波 */ DELAY(1000); UPDOWN(S3,1); /* 升降機(jī)構(gòu)下降 S3 行程,復(fù)位 */ for(;) /* 末尾死循環(huán) */ ; 附圖附圖 1 硬件原理圖硬件原理圖 E

41、A/VP 31 X1 19 X2 18 RESET 9 INT0 12 INT1 13 T0 14 T1 15 P1.0 1 P1.1 2 P1.2 3 P1.3 4 P1.4 5 P1.5 6 P1.6 7 P1.7 8 P0.0 39 P0.1 38 P0.2 37 P0.3 36 P0.4 35 P0.5 34 P0.6 33 P0.7 32 P2.0 21 P2.1 22 P2.2 23 P2.3 24 P2.4 25 P2.5 26 P2.6 27 P2.7 28 RD 17 WR 16 PSEN 29 ALE/P 30 TXD 11 RXD 10 VCC 40 VSS 20 U0

42、87C51 VCC XTAL1C2 0.03uF C1 0.03uF R1 10K VCC OC 1 C 11 1D 3 1Q 2 2D 4 2Q 5 3D 7 3Q 6 4D 8 4Q 9 5D 13 5Q 12 6D 14 6Q 15 7D 17 7Q 16 8D 18 8Q 19 U100 74LS373 AD0 12 PA0 21 AD1 13 PA1 22 AD2 14 PA2 23 AD3 15 PA3 24 AD4 16 PA4 25 AD5 17 PA5 26 AD6 18 PA6 27 AD7 19 PA7 28 PB0 29 CE 8 PB1 30 RD 9 PB2 31

43、WR 10 PB3 32 IO/M 7 PB4 33 ALE 11 PB5 34 PB6 35 PB7 36 TMROUT 6 PC0 37 PC1 38 TMRIN 3 PC2 39 PC3 1 PC4 2 RESET 4 PC5 5 U101 8155H D0 8 OUT0 10 D1 7 GATE0 11 D2 6 CLK0 9 D3 5 D4 4 D5 3 D6 2 OUT1 13 D7 1 GATE1 14 CLK1 15 CS 21 RD 22 WR 23 OUT2 17 A0 19 GATE2 16 A1 20 CLK2 18 U105 8253 D0 8 OUT0 10 D1

44、7 GATE0 11 D2 6 CLK0 9 D3 5 D4 4 D5 3 D6 2 OUT1 13 D7 1 GATE1 14 CLK1 15 CS 21 RD 22 WR 23 OUT2 17 A0 19 GATE2 16 A1 20 CLK2 18 U103 8253 A1 A2 A3 A4 A5 A6 A7 A8 A1 A2 A3 A4 A5 A6 A7 A8 A1 A2 A3 A4 A5 A6 A7 A8 D0 8 OUT0 10 D1 7 GATE0 11 D2 6 CLK0 9 D3 5 D4 4 D5 3 D6 2 OUT1 13 D7 1 GATE1 14 CLK1 15 C

45、S 21 RD 22 WR 23 OUT2 17 A0 19 GATE2 16 A1 20 CLK2 18 U104 8253 AD0 12 PA0 21 AD1 13 PA1 22 AD2 14 PA2 23 AD3 15 PA3 24 AD4 16 PA4 25 AD5 17 PA5 26 AD6 18 PA6 27 AD7 19 PA7 28 PB0 29 CE 8 PB1 30 RD 9 PB2 31 WR 10 PB3 32 IO/M 7 PB4 33 ALE 11 PB5 34 PB6 35 PB7 36 TMROUT 6 PC0 37 PC1 38 TMRIN 3 PC2 39 PC3 1 PC4 2 RESET 4 PC5 5 U102 8155H 56 U25C 74LS04 34 U25B 74LS04 12 U25A 74LS04 VCCVCC Y3 CRYSTAL C35 0.05uF C30 0.05uF R2 1K R3 1K VCC 89 U25D 74LS04 2A 2B 2B 2A 2B 2A 2B 2A A8 A7 A

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論