懸掛運(yùn)動(dòng)控制系統(tǒng)(共61頁(yè))_第1頁(yè)
懸掛運(yùn)動(dòng)控制系統(tǒng)(共61頁(yè))_第2頁(yè)
懸掛運(yùn)動(dòng)控制系統(tǒng)(共61頁(yè))_第3頁(yè)
懸掛運(yùn)動(dòng)控制系統(tǒng)(共61頁(yè))_第4頁(yè)
懸掛運(yùn)動(dòng)控制系統(tǒng)(共61頁(yè))_第5頁(yè)
已閱讀5頁(yè),還剩56頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上懸掛運(yùn)動(dòng)控制系統(tǒng)(E題)設(shè)計(jì)報(bào)告摘要:本懸掛控制系統(tǒng)是一個(gè)電機(jī)控制系統(tǒng),控制物體在80cm×100cm的范圍內(nèi)作直線、圓、尋跡等運(yùn)動(dòng),并且在運(yùn)動(dòng)時(shí)能顯示運(yùn)動(dòng)物體的坐標(biāo)。設(shè)計(jì)采用AT89S52單片機(jī)作為核心控制器件,采用57BYG007-4型步進(jìn)電機(jī)和高細(xì)分步進(jìn)電機(jī)驅(qū)動(dòng)器SM-60作為動(dòng)力裝置,采用紅外反射式光電傳感器實(shí)現(xiàn)畫(huà)板上黑色線尋跡檢測(cè),顯示部分用液晶顯示模塊LCD1602實(shí)現(xiàn)。關(guān)鍵詞:懸掛控制、單片機(jī)、 步進(jìn)電機(jī)、 紅外反射式光電傳感器一、設(shè)計(jì)要求1、任務(wù)設(shè)計(jì)一電機(jī)控制系統(tǒng),控制物體在傾斜(仰角100度)的板上運(yùn)動(dòng)。在一白色底板上固定兩個(gè)滑輪,兩只電機(jī)

2、(固定在板上)通過(guò)穿過(guò)滑輪的吊繩控制一物體在板上運(yùn)動(dòng),運(yùn)動(dòng)范圍為80cm×100cm。物體的形狀不限,質(zhì)量大于100克。物體上固定有淺色畫(huà)筆,以便運(yùn)動(dòng)時(shí)能在板上畫(huà)出運(yùn)動(dòng)軌跡。板上標(biāo)有間距為1cm的淺色坐標(biāo)線(不同于畫(huà)筆顏色),左下角為直角坐標(biāo)原點(diǎn), 示意圖如下。 2、基本要求:(1)控制系統(tǒng)能夠通過(guò)鍵盤(pán)或其他方式任意設(shè)定坐標(biāo)點(diǎn)參數(shù);(2)控制物體在80cm×100cm的范圍內(nèi)作自行設(shè)定的運(yùn)動(dòng),運(yùn)動(dòng)軌跡長(zhǎng)度不小于100cm,物體在運(yùn)動(dòng)時(shí)能夠在板上畫(huà)出運(yùn)動(dòng)軌跡,限300秒內(nèi)完成;(3)控制物體作圓心可任意設(shè)定、直徑為50cm的圓周運(yùn)動(dòng),限300秒內(nèi)完成;(4)物體從左下角坐標(biāo)原

3、點(diǎn)出發(fā),在150秒內(nèi)到達(dá)設(shè)定的一個(gè)坐標(biāo)點(diǎn)(兩點(diǎn)間直線距離不小于40cm)。3、發(fā)揮部分(1)能夠顯示物體中畫(huà)筆所在位置的坐標(biāo);(2)控制物體沿板上標(biāo)出的任意曲線運(yùn)動(dòng)(見(jiàn)示意圖),曲線在測(cè)試時(shí)現(xiàn)場(chǎng)標(biāo)出,線寬1.5cm1.8cm,總長(zhǎng)度約50cm,顏色為黑色;曲線的前一部分是連續(xù)的,長(zhǎng)約30cm;后一部分是兩段總長(zhǎng)約20cm的間斷線段,間斷距離不大于1cm;沿連續(xù)曲線運(yùn)動(dòng)限定在200秒內(nèi)完成,沿間斷曲線運(yùn)動(dòng)限定在300秒內(nèi)完成;(3)其他。4、評(píng)分標(biāo)準(zhǔn)項(xiàng)目滿分基本要求設(shè)計(jì)與總結(jié)報(bào)告:方案比較、設(shè)計(jì)與論證,理論分析與計(jì)算,電路圖及有關(guān)設(shè)計(jì)文件,測(cè)試方法與儀器,測(cè)試數(shù)據(jù)及測(cè)試結(jié)果分析。50實(shí)際制作完成

4、情況50發(fā)揮部分完成第(1)項(xiàng)10完成第(2)項(xiàng)中連續(xù)線段運(yùn)動(dòng)14完成第(2)項(xiàng)中斷續(xù)線段運(yùn)動(dòng)16其他105、說(shuō)明1、物體的運(yùn)動(dòng)軌跡以畫(huà)筆畫(huà)出的痕跡為準(zhǔn),應(yīng)盡量使物體運(yùn)動(dòng)軌跡與預(yù)期軌跡吻合,同時(shí)盡量縮短運(yùn)動(dòng)時(shí)間;2、若在某項(xiàng)測(cè)試中運(yùn)動(dòng)超過(guò)限定的時(shí)間,該項(xiàng)目不得分;3、運(yùn)動(dòng)軌跡與預(yù)期軌跡之間的偏差超過(guò)4cm時(shí),該項(xiàng)目不得分;4、在基本要求(3)、(4)和發(fā)揮部分(2)中,物體開(kāi)始運(yùn)動(dòng)前,允許手動(dòng)將物體定位;開(kāi)始運(yùn)動(dòng)后,不能再人為干預(yù)物體運(yùn)動(dòng);5、競(jìng)賽結(jié)束時(shí),控制系統(tǒng)封存上交賽區(qū)組委會(huì),測(cè)試用板(板上含空白坐標(biāo)紙) 測(cè)試時(shí)自帶。二、方案論證與選擇1.核心控制模塊的選擇方案一:FPGA/CPLD方式

5、。即用FPGA/CPLD完成鍵盤(pán)定義與識(shí)別、電機(jī)工作狀態(tài)選擇與切換、液晶電路的驅(qū)動(dòng)與控制等功能。這種方案的優(yōu)點(diǎn)在于系統(tǒng)結(jié)構(gòu)緊湊、操作方便,而且可以使用的I/O口線很多;缺點(diǎn)是調(diào)試時(shí)需要接很多接線,過(guò)程繁瑣,而且使用CPLD時(shí),由于其內(nèi)部沒(méi)有ROM,對(duì)功能的實(shí)現(xiàn)有所限制。方案二:?jiǎn)纹瑱C(jī)方式。即由單片機(jī)、電機(jī)驅(qū)動(dòng)電路及電機(jī)等組成系統(tǒng)。使用單片機(jī)也可以完成鍵盤(pán)定義與識(shí)別、電機(jī)工作狀選擇與切換等功能,組成的系統(tǒng)規(guī)模較小,有一定靈活性,而且可以使用我們比較熟悉的單片機(jī)最小系統(tǒng)電路板,減少了工作量。該控制方式需要單片機(jī)具有較大的程序存儲(chǔ)量,所以可選擇存儲(chǔ)量為8K的AT89S52單片機(jī)?;谝陨戏治?,擬選用

6、方案二。2.電機(jī)及其驅(qū)動(dòng)模塊的選擇    電機(jī)驅(qū)動(dòng)模塊是本系統(tǒng)的執(zhí)行機(jī)構(gòu),用于控制懸掛物體的運(yùn)動(dòng)。    方案1:采用普通小型直流電機(jī)。普通直流電機(jī)由于其自身結(jié)構(gòu)的限制,控制精度很低,無(wú)法達(dá)到系統(tǒng)要求的指標(biāo),這里不予采用。    方案2:采用專用步進(jìn)電機(jī)驅(qū)動(dòng)器及與其配套的步進(jìn)電機(jī)。用這種方案的控制精度、效率和可靠性都很高。根據(jù)精度要求選擇方案二。3.黑線探測(cè)模塊方案一:采用多路陣列式光敏電阻組成的光電探測(cè)器。因?yàn)楣饷綦娮杼綔y(cè)到黑線時(shí),黑線上方的電阻值發(fā)生變化,經(jīng)過(guò)電壓比較器比較將信號(hào)送給單片機(jī)處理,從而控

7、制物體做相應(yīng)的動(dòng)作。但由于光敏電阻對(duì)環(huán)境光的識(shí)別,容易受到外界環(huán)境光的影響。,方案二:采用紅外反射式探測(cè),即用已調(diào)的紅外線垂直射到板面,經(jīng)反射后轉(zhuǎn)換為電信號(hào)送入單片機(jī)處理。由于使用的是紅外線,不受外界自然光的影響,循跡效果好?;谏厦娴挠懻?,選用了抗干擾能力強(qiáng)的方案二。4.顯示方案的選擇方案一:采用LED數(shù)碼管顯示器。LED 數(shù)碼管亮度高,醒目,但是其電路復(fù)雜,顯示信息量較小,且動(dòng)態(tài)掃描需要占用大量單片機(jī)時(shí)間,無(wú)法做到實(shí)時(shí)顯示。方案二:采用漢字LCD液晶顯示器。LCD有明顯的優(yōu)點(diǎn):微功耗、尺寸小,超薄輕巧、顯示信息量大、字跡清晰、美觀、視覺(jué)舒適。本設(shè)計(jì)中采用1602字符型LCM。1602字符型

8、LCM克服了LED數(shù)碼管的缺點(diǎn),具有顯示容量大、占用單片機(jī)口線少、節(jié)省單片機(jī)時(shí)間、功耗低等優(yōu)點(diǎn),完全符合本系統(tǒng)要求。5.位置傳感模塊  位置傳感模塊用于實(shí)現(xiàn)"顯示畫(huà)筆位置"的功能。對(duì)于這個(gè)模塊可以有硬件和軟件兩類解決方案。  方案1:在物體上安裝水平和垂直方向的兩只激光筆,在板邊緣每條坐標(biāo)線旁邊安裝一光電傳感器,物體坐標(biāo)所在處的傳感器接收到激光筆,即可確定物體位置??梢?jiàn)本方案共需要180個(gè)光電傳感器,造成此方案幾乎不可實(shí)現(xiàn)。  方案2:采用軟件的方法確定物體位置。單片機(jī)控制物體從某個(gè)已知的坐標(biāo)位置出發(fā),并且記錄步進(jìn)電機(jī)的每一

9、次移動(dòng)情況,就可以通過(guò)一定的算法計(jì)算出物體的位置。這種方案沒(méi)有位置傳感器,精度較低,但是系統(tǒng)簡(jiǎn)單。避免了硬件方案過(guò)于復(fù)雜的缺點(diǎn)。本設(shè)計(jì)使用方案2。6.鍵盤(pán)模塊  本模塊采用即插型按鍵,接在最小系統(tǒng)的P2.0P2.7,采用了4×4的16點(diǎn)陣鍵盤(pán)??梢枣I入19的數(shù)字,即可以輸入點(diǎn)的坐標(biāo)值(X,Y),以及清除,確定,等功能按鍵。三、系統(tǒng)具體設(shè)計(jì)實(shí)現(xiàn)1、硬件電路的設(shè)計(jì)(1)系統(tǒng)的總體設(shè)計(jì)方案如圖3-1所示采用AT89S52單片機(jī)作為運(yùn)動(dòng)物體的控制中心,進(jìn)行數(shù)學(xué)計(jì)算、對(duì)光電傳感器送來(lái)的信號(hào)進(jìn)行處理來(lái)控制運(yùn)動(dòng)物體的運(yùn)行方向、計(jì)算運(yùn)行物體的坐標(biāo)位置、LCD數(shù)據(jù)顯示、鍵盤(pán)控制等。

10、圖3-1 系統(tǒng)方框圖(2)黑線檢測(cè)模塊電路黑線檢測(cè)模塊電路圖3-2所示。當(dāng)紅外線反射式光電傳感器ST178位于黑線之上時(shí),光電開(kāi)關(guān)輸出高電平;反之,輸出低電平。光電傳感器輸出電平后接反相器74LS04以穩(wěn)定電平和增大驅(qū)動(dòng)能力。 本設(shè)計(jì)采用8個(gè)紅外傳感器實(shí)現(xiàn)對(duì)黑線的檢測(cè),通過(guò)并口轉(zhuǎn)串口芯片74LS165將數(shù)據(jù)串行傳送到單片機(jī)。圖3-2 黑線檢測(cè)模塊電路(3)鍵盤(pán)電路本設(shè)計(jì)采用4x4矩陣鍵盤(pán)實(shí)現(xiàn)數(shù)字的輸入和功能的選擇,鍵盤(pán)接到AT89S52單片機(jī)的P2口,通過(guò)單片機(jī)對(duì)鍵盤(pán)的行列掃描實(shí)現(xiàn)按鍵的識(shí)別。鍵盤(pán)電路如圖3-3所示:圖3-3 4x4鍵盤(pán)電路對(duì)應(yīng)的按鍵碼如下:789/456/123/清除0確認(rèn)/

11、(4)單片機(jī)電源電路單片機(jī)控制電路、紅外傳感器模塊電路和液晶顯示模塊均采用+5V供電,采用集成穩(wěn)壓芯片7805來(lái)實(shí)現(xiàn),電路圖如圖3-4所示。圖3-4單片機(jī)電源電路(5)步進(jìn)電機(jī)驅(qū)動(dòng)電路本設(shè)計(jì)采用57BYG007-4型步進(jìn)電機(jī)和專用高細(xì)分步進(jìn)電機(jī)驅(qū)動(dòng)器SM-60作為動(dòng)力裝置。57BYG007-4型步進(jìn)電機(jī)為四相混合式步進(jìn)電機(jī),由于實(shí)驗(yàn)室現(xiàn)有電機(jī)驅(qū)動(dòng)器為兩相的,固步進(jìn)電機(jī)作兩相使用,步距腳為1.8度,通過(guò)步進(jìn)電機(jī)驅(qū)動(dòng)器SM-60細(xì)分實(shí)現(xiàn)步距腳0.9度。電機(jī)驅(qū)動(dòng)器SM-60接口如下 : GND端為外接直流電源,直流電壓為12v A+,A-端為電機(jī)A相,B+,B-端為電機(jī)B相。&#

12、160;+COM端為光電隔離電源公共端,接單片機(jī)供電電源為+5V, CP端為脈沖信號(hào),下降沿有效。 DIR端為方向控制信號(hào),電平高低決定電機(jī)運(yùn)行方向。 FREE端為驅(qū)動(dòng)器使能,高電平或懸空電機(jī)可運(yùn)行。低電平驅(qū)動(dòng)器無(wú)電流輸出,電機(jī)處于自由狀態(tài)。2、軟件及算法設(shè)計(jì)(1)物體位置的計(jì)算圖 3-5 物體位置示意圖坐標(biāo)點(diǎn)參數(shù)的計(jì)算將畫(huà)筆所在的位置設(shè)定為整個(gè)物體的位置。如圖3-5設(shè)定物體位置的初值坐標(biāo)為(X,Y)L1= L2= 設(shè)電機(jī)A  的步進(jìn)為a cm, 電機(jī)B的步進(jìn)為b cm,物體高度為h cm。如圖8為物體在畫(huà)板某一位置,則有: 解得X軸點(diǎn)位置和h

13、為  則Y軸點(diǎn)位置Y=115-h控制物體從一點(diǎn)到另一點(diǎn)的實(shí)現(xiàn)就是當(dāng)X、Y已知條件,求電機(jī)的步進(jìn)過(guò)程。由圖8 解得: 解得   (cm) (cm)由此,利用軟件實(shí)現(xiàn)以上算法來(lái)分別控制兩個(gè)步進(jìn)電機(jī)的步進(jìn)a,b,這樣就可以向控制系統(tǒng)輸入起點(diǎn)坐標(biāo)和終點(diǎn)坐標(biāo)讓物體在畫(huà)板置任意行走。(2)直線算法: 目前畫(huà)直線的算法也算是有很多,比如:逐點(diǎn)比較直線插補(bǔ),脈沖增量插補(bǔ)和數(shù)據(jù)采集插補(bǔ),本設(shè)計(jì)根據(jù)實(shí)際所學(xué)知識(shí),選擇了逐點(diǎn)比較直線插補(bǔ)法,具體如下:逐點(diǎn)比較法的基本原理是,在刀具按要求軌跡運(yùn)動(dòng)加工零件輪廓的過(guò)程中,不斷比較刀具與被加工零件輪廓之間的相對(duì)位置,并根據(jù)比

14、較結(jié)果決定下一步的進(jìn)給方向,使刀具向減小偏差的方向進(jìn)給。圖3-6 第一象限直線如圖3-6所示,設(shè)直線的起點(diǎn)為坐標(biāo)原點(diǎn),終點(diǎn)坐標(biāo)為A(,),點(diǎn)m (,)為加工點(diǎn)(動(dòng)點(diǎn))。定義偏差公式為 。若=0,表明點(diǎn)m在OA直線段上;若>0,表明點(diǎn)m在OA直線段上方,即點(diǎn)m 處;若<0, 表明點(diǎn)m在OA直線段下方,即點(diǎn)m處。由此可得第一象限直線逐點(diǎn)比較法插補(bǔ)的原理是:從直線的起點(diǎn)出發(fā),當(dāng)0時(shí),沿+x軸方向走一步;當(dāng)<0時(shí),沿+y軸方向走一步;當(dāng)兩方向所走的步數(shù)與終點(diǎn)坐標(biāo)(,)相等時(shí),發(fā)出終點(diǎn)到信號(hào),停止插補(bǔ)??梢詫⑸厦嫠x的偏差公式進(jìn)一步簡(jiǎn)化,推導(dǎo)出偏差的遞推公式。 當(dāng)0時(shí),沿+x軸方向進(jìn)

15、給一步, (1)當(dāng)<0時(shí),沿+y軸方向進(jìn)給一步, (2)式(1)和式(2)是簡(jiǎn)化后偏差的計(jì)算公式,在公式中只有一次加法或減法運(yùn)算,新加工點(diǎn)的偏差都可由前一點(diǎn)偏差和終點(diǎn)坐標(biāo)相加或相減得到。本體設(shè)計(jì)中采用以上原理,不過(guò)對(duì)于非原點(diǎn)開(kāi)始的直線,采用起點(diǎn)坐標(biāo)歸零思想,結(jié)果也證明了改思路的可行性。(3)畫(huà)圓算法:畫(huà)圓算法采用圓弧插補(bǔ)法。圓弧插補(bǔ)法也是在繪圖系統(tǒng)中常用的一種方法,它和直線插補(bǔ)法原理相同,也是逐點(diǎn)比較算法。若 F=0,表明加工點(diǎn)在圓弧上;F0,表明加工點(diǎn)在圓弧外;F0,表明加工點(diǎn)在圓弧內(nèi)。若 F0,為逼近圓弧,下一步向-X軸進(jìn)給一步,并計(jì)算出新的偏差值;F0,為逼近圓弧,下一步向+Y 軸

16、進(jìn)給一步,并計(jì)算出新的偏差值。各象限插補(bǔ)公式如下在實(shí)際操作中,可以以圓心為假設(shè)的坐標(biāo)原點(diǎn),再根據(jù)上面的原理設(shè)計(jì)算法。(4)循跡黑線的探測(cè)及循跡算法在以畫(huà)筆為中心,半徑20毫米的圓周上安裝了8個(gè)反射式紅外對(duì)管作為軌跡探測(cè)傳感器,安裝方式如圖3所示。 07654321-1+1圖3-7 軌跡探測(cè)傳感器安裝方式 圖3-8 方向調(diào)整示意圖根據(jù)圖3-7安裝方式及安裝半徑,只要系統(tǒng)的采樣頻率足夠高,軌跡是無(wú)法脫離探測(cè)范圍的。但由于使用了8個(gè)傳感器,不同傳感器信號(hào)間的組合太多,使用一般窮舉辦法難以實(shí)現(xiàn)循跡控制,因此自己設(shè)計(jì)了一套循跡算法。如圖3-8,定義了物體循跡時(shí)運(yùn)動(dòng)的8個(gè)方向,圖中黑箭頭(1號(hào)方向上)表示

17、物體當(dāng)前的循跡方向。循跡時(shí),使用變量Direct表示當(dāng)前物體運(yùn)動(dòng)方向,物體每次運(yùn)動(dòng)時(shí)先按當(dāng)前方向向前步進(jìn)一段固定的距離,然后檢測(cè)采樣傳感器信號(hào)并調(diào)整Direct,再沿新的Direct方向步進(jìn)。由于所給的曲線是連續(xù)的,所以每次調(diào)整Direct只能是1或1。如圖3-8所示,Direct在需向左偏時(shí)則Direct加1,需向右偏則減1,繼續(xù)前進(jìn)則保持不變。由于只有8個(gè)運(yùn)動(dòng)方向,所以對(duì)Direct的運(yùn)算需在模8的范圍內(nèi)(07)進(jìn)行?,F(xiàn)在考慮如何決定左偏或右偏的問(wèn)題,使用上述調(diào)整辦法只需要根據(jù)Direct的前后方向及左右方向的四個(gè)信號(hào)對(duì)Direct調(diào)整即可。如圖4中僅需根據(jù)1、3、5、7方向的信號(hào)對(duì)Dir

18、ect調(diào)整。由于每個(gè)方向上±1和保持不變的傳感器信號(hào)是一定的,故對(duì)8個(gè)方向上的調(diào)整策略用一個(gè)靜態(tài)數(shù)組的形式保存起來(lái),調(diào)整時(shí)直接查表即可,方便編程。這種循跡算法大大地減少了循跡運(yùn)動(dòng)的調(diào)試時(shí)間,為整個(gè)作品成功的完成打下了基礎(chǔ)。當(dāng)每次步進(jìn)的距離較小時(shí),若在Direct方向的前、左、右三處的傳感器同時(shí)發(fā)現(xiàn)是白紙,則表明傳感器探測(cè)到了曲線的間斷部分或盡頭,此時(shí)應(yīng)根據(jù)前幾次(23次)Direct的平均值作為探索方向,再向前步進(jìn)23步,保證循跡的正確停止。在取平均值時(shí),需對(duì)7à0和0à7的轉(zhuǎn)變作特殊處理,否則可能出錯(cuò)。實(shí)踐證明,按照上面的辦法循跡迅速穩(wěn)定,并且不會(huì)受交叉線的影響

19、。由于軌跡線有一定寬度,實(shí)際的軌跡不可能轉(zhuǎn)折得十分迅速,當(dāng)步進(jìn)距離較小時(shí),甚至可以完成銳角的循跡。本系統(tǒng)使用的步進(jìn)距離是5毫米,效果很好。(5)系統(tǒng)主程序流程框圖上電,初始化液晶顯示等待按鍵,選擇所需的功能1直線2正方形 3圓 4循跡輸入起 點(diǎn)終點(diǎn)坐 標(biāo)按照事先設(shè)定運(yùn) 行設(shè)定圓心手動(dòng)到 點(diǎn)手動(dòng)到循跡起始 點(diǎn)執(zhí) 行 部 件返回顯示程序按鍵確認(rèn),進(jìn)入對(duì)應(yīng)程序圖3-9系統(tǒng)主程序流程框圖四、系統(tǒng)測(cè)試1測(cè)試儀器DT9205A型數(shù)字萬(wàn)用表;秒表、卷尺;+12V直流穩(wěn)壓電源。2測(cè)量結(jié)果(1) 直線測(cè)試次數(shù)設(shè)定起點(diǎn)坐標(biāo)設(shè)定終點(diǎn)坐標(biāo)實(shí)際坐標(biāo)誤差用時(shí)1(0,0)(50,50)(50.2,51.3)2cm75s2(

20、0,0)(80,99)(80.1,100.5)1.5cm134s(2) 畫(huà)圓測(cè)試次數(shù)圓心坐標(biāo)半徑最大誤差用時(shí)1(25,25)251cm130s2(3) 循跡測(cè)試連續(xù)線段線長(zhǎng)間斷線段長(zhǎng)度60cm46cm用時(shí)28.1s24.3s3誤差分析及改進(jìn)措施(1)坐標(biāo)轉(zhuǎn)換的誤差。(X,Y)坐標(biāo)向(L,R)坐標(biāo)轉(zhuǎn)換時(shí)使用幾何分析的方法,但為了處理方便,將懸掛滑輪視為一點(diǎn),沒(méi)有考慮其半徑。本作品以減小其半徑的辦法降低誤差。同時(shí),進(jìn)行坐標(biāo)變換時(shí),單片機(jī)在計(jì)算精度上也會(huì)引進(jìn)誤差,由于使用浮點(diǎn)運(yùn)算,該誤差不大。(2)筆尖和懸掛點(diǎn)不在同一平面引入誤差,應(yīng)盡量使三點(diǎn)處于與地板平行的平面以減小誤差。(3)步進(jìn)電機(jī)的步進(jìn)脈沖

21、個(gè)數(shù)和步進(jìn)線距離之間的折算誤差。作品使用了直接測(cè)量一段距離和步進(jìn)個(gè)數(shù)再求平均值的辦法降低誤差。(4)牽引線引入的誤差,包括拉伸誤差和由松弛產(chǎn)生的誤差。改進(jìn)措施是使用變形系數(shù)小的牽引線和增加懸掛物體的重量。(5)繞線產(chǎn)生的誤差。解決辦法是根據(jù)力學(xué)分析采用機(jī)械的辦法保證繞線不重疊,并且使用半徑小的牽引線使繞線在橫向延伸的距離減少,從而減少誤差。(6)讀數(shù)誤差。初始定位時(shí)需提供物體坐標(biāo),測(cè)量結(jié)果需人為讀數(shù),這會(huì)引入誤差。五、結(jié)論本設(shè)計(jì)以AT89S52單片機(jī)為核心,利用軟件編程,實(shí)現(xiàn)了定點(diǎn)直線運(yùn)動(dòng),圓形軌跡運(yùn)動(dòng),間斷黑線循跡以及坐標(biāo)的實(shí)時(shí)顯示。測(cè)試結(jié)果表明,本設(shè)計(jì)很好地完成了題目基本部分和發(fā)揮部分的全

22、部要求,速度快、精度高。整個(gè)系統(tǒng)從軟件到硬件都體現(xiàn)優(yōu)良簡(jiǎn)約的風(fēng)格。主要有以下幾個(gè)優(yōu)點(diǎn):(1) 采用步進(jìn)電機(jī)及專用細(xì)分驅(qū)動(dòng)器,懸繩收放控制較精確;(2) 程序算法優(yōu)良,易于誤差處理和提高精確度;(3) LCD液晶顯示,界面友好。 六、參考文獻(xiàn)1、王瓊.單片機(jī)原理及應(yīng)用.合肥工業(yè)大學(xué)出版社2、求是科技.單片機(jī)典型模塊設(shè)計(jì)實(shí)例導(dǎo)航.人民郵電出版社3、 高吉祥.全國(guó)大學(xué)生電子設(shè)計(jì)競(jìng)賽培訓(xùn)教程 - 數(shù)字系統(tǒng)與自動(dòng)控制系統(tǒng)設(shè)計(jì).電子工業(yè)出版社附錄一 電路原理圖1、控制部分電路圖:2、循跡模塊電路圖:附錄二 源代碼/*/#include <reg52.h>#include <intrins

23、.h>#include <string.h>#include <math.h>#define uchar unsigned char /無(wú)符號(hào)字符類型定義#define uint unsigned int /無(wú)符號(hào)整數(shù)類型定義/*/步進(jìn)電機(jī)驅(qū)動(dòng)器引腳連接定義sbit Motor_Left_CP =P10; /左步進(jìn)電機(jī)脈沖sbit Motor_Left_DIR=P11; /左步進(jìn)電機(jī)方向控制端sbit Motor_Right_CP =P12; /右步進(jìn)電機(jī)脈沖sbit Motor_Right_DIR=P13; /右步進(jìn)電機(jī)方向控制端sbit Motor_FREE

24、=P14; /電機(jī)使能端(高電平有效,低電平是電機(jī)處于自由狀態(tài))sbit SHLD = P15;sbit S_clk = P16;sbit S_data = P17;sbit jiesu=P36;/*/#define pai 3. /圓周率#define a 15 /80cm x 100cm場(chǎng)地到兩電機(jī)連線的垂直距離(厘米)#define b 15 /80cm x 100cm場(chǎng)地到邊線(頂端滑輪和電機(jī)的連線)的垂直距離(厘米)#define r 0.8276 /滑輪半徑(厘米)#define stepz 0.0122 /左步進(jìn)電機(jī)每步弧長(zhǎng)(厘米)#define stepy 0.0122 /右進(jìn)

25、步點(diǎn)擊每步弧長(zhǎng)(厘米)#define step 0.0125 /步進(jìn)電機(jī)每步弧長(zhǎng)(厘米)#define radius 25 /圓周半徑長(zhǎng)度#define Motor_FREE 1/*/LCD1602液晶模塊引腳連接定義#define LCD_Data P0 /1602的8位數(shù)據(jù)線連接到P0口sbit RS=P35; /1602的數(shù)據(jù)/命令選擇端RS連接到P1.0sbit RW=P34; /1602的讀/寫(xiě)選擇端連接到P1.1sbit EN=P33; /1602的使能信號(hào)引腳連接到P1.2/*/uchar code kaiji016=">>> WELCOME! <

26、;<<"uchar code kaiji116="LOADDOWNING."uchar code table016="1.Line 2 Rectan"uchar code table116="3.Circu 4.Follow" uchar code table316=" Draw a Line "uchar code table416="Draw Circularity"uchar code table516="Follow the Line "ucha

27、r code table616="( , );( , ) "uchar code table716="( , ); r= cm " uchar code table816="( cm, cm) "uchar code table916=" ENTER to Begin "uchar code table1016="Executing . x"uchar code table1116="Rectan perform. "uchar code table1216="(2

28、5,25)-(50,25) "uchar code table1316="(50,50)-(25,50) "uchar code table1416="have completed!"uchar code wrong16="Wrong Coordinate"uchar code agian16="Input Agian ? "uchar code number10="" /*/int x0,y0,x1,y1;/*/函數(shù)聲明void Delay_1ms(int time); /延時(shí)1ms

29、*timevoid LCD1602_Busy_Check(void); /LCD1602忙檢查函數(shù)void Write_LCD1602(uchar udata,bit command); /LCD1602寫(xiě)數(shù)據(jù)和寫(xiě)指令函數(shù)void Write_Byte_Locate(uchar x,uchar y,uchar udata); /把數(shù)據(jù)顯示在LCD1602的指定位置void Init_LCD1602(); /LCD1602初始化函數(shù)uchar Keyboard_Scan(void); /鍵盤(pán)掃描函數(shù),返回鍵盤(pán)掃描碼uchar Scan_Code_Transform(uchar scancode)

30、; /鍵碼識(shí)別函數(shù)/void Motot_ld(int );void Motor_Left_Step(bit Dir); /左電機(jī)轉(zhuǎn)動(dòng)一步,Dir=0時(shí)反轉(zhuǎn)(順時(shí)針),即松開(kāi)線;Dir=1時(shí)正轉(zhuǎn)(逆時(shí)針),即收緊線void Motor_Right_Step(bit Dir);/右電機(jī)轉(zhuǎn)動(dòng)一步,Dir=0時(shí)反轉(zhuǎn)(順時(shí)針),即收緊線;Dir=1時(shí)正轉(zhuǎn)(逆時(shí)針),即松開(kāi)線void Draw_Circular(int x,int y); / 畫(huà)圓函數(shù)void currentdisp(int line,int x,int y);/當(dāng)前顯示void linedisp(int,int,int,int,int

31、); /當(dāng)前直線點(diǎn)顯示void display(uchar table16,bit line);/提示顯示void line(int,int,int,int);/畫(huà)直線函數(shù)void Draw_line();/void buchang(float,float,float,float);/確定左右電機(jī)移動(dòng)的步數(shù)void Returndata();/讀取對(duì)光二極管的值void follow();/循跡函數(shù)void zouxiang(int);/循跡電機(jī)驅(qū)動(dòng)函數(shù)/*/延時(shí)函數(shù),延時(shí)時(shí)間=1ms*time(晶振12MHz)void Delay_1ms(int time) uchar i,j; do fo

32、r(i=0;i<15;i+) for(j=0;j<20;j+); while(time-)!=0); /*/*LCD1602液晶操作函數(shù)部分*/LCD1602液晶檢查忙函數(shù)void LCD1602_Busy_Check(void) EN=0; RW=1; RS=0; EN=1; while(LCD_Data&&0x80=1); EN=0; Delay_1ms(1);/*/LCD1602寫(xiě)數(shù)據(jù)和寫(xiě)指令函數(shù)/把寫(xiě)數(shù)據(jù)和指令二個(gè)合在一起,用一個(gè)變量command來(lái)判斷void Write_LCD1602(uchar udata,bit command) LCD1602_B

33、usy_Check(); /忙檢查 RS=command;/command=0時(shí)寫(xiě)入指令,command=1時(shí)寫(xiě)入數(shù)據(jù) RW=0; /把LCD設(shè)置成寫(xiě)狀態(tài) EN=1; /E高脈沖,把數(shù)據(jù)/指令寫(xiě)入 LCD_Data=udata; EN=0;/*/把數(shù)據(jù)顯示在LCD1602的指定位置/x,y是坐標(biāo),udata是需要顯示的數(shù)據(jù)/x不能大于15,每行最多顯示16字符/y不能大于1,最多顯示2行void Write_Byte_Locate(uchar x,uchar y,uchar udata) if(y)x+=0x40;/判斷顯示哪行,顯示第二行LCD存儲(chǔ)區(qū)加40H x+=0x80; /如果沒(méi)有加0

34、X40則顯示第一行 Write_LCD1602(x,0); /寫(xiě)指令 Write_LCD1602(udata,1);/寫(xiě)顯示數(shù)據(jù)/*/LCD1602初始化函數(shù)void Init_LCD1602() Write_LCD1602(0x38,0); /顯示模式設(shè)置 Delay_1ms(20); Write_LCD1602(0x01,0);/清除屏幕 Write_LCD1602(0x06,0);/顯示光標(biāo)移動(dòng)設(shè)置 Write_LCD1602(0x0c,0);/開(kāi)顯示/*/*鍵盤(pán)掃描和鍵碼識(shí)別函數(shù)部分*/鍵盤(pán)掃描函數(shù),返回鍵盤(pán)掃描碼/P2.0P2.3輸出,P2.4P2.7輸入uchar Keyboard

35、_Scan(void) uchar scancode,tmpcode; P2=0xf0; while(P2=0xf0); /等待有鍵按下 Delay_1ms(20); /延時(shí)10ms去抖動(dòng) if(P2!=0xf0) scancode=0xfe; /逐行掃描 while(scancode!=0xef) /還沒(méi)有掃描完4行 P2=scancode; if(P2&0xf0)!=0xf0) /本列有鍵按下 tmpcode=(P2&0xf0)|(scancode&0x0f); while(P2&0xf0)!=0xf0); /等待鍵釋放 return(tmpcode); e

36、lse scancode=(scancode<<1)|0x01; return(0);/*/鍵碼識(shí)別函數(shù)uchar Scan_Code_Transform(uchar scancode) switch (scancode) /*將按鍵碼轉(zhuǎn)換成鍵值*/ case 0xde: return 0; case 0xed: return 1; case 0xdd: return 2; case 0xbd: return 3; case 0xeb: return 4; case 0xdb: return 5; case 0xbb: return 6; case 0xe7: return 7;

37、case 0xd7: return 8; case 0xb7: return 9; case 0xee: return 10; default : return 0xff; /*/*步進(jìn)電機(jī)基本操作部分*/左電機(jī)轉(zhuǎn)動(dòng)一步,Dir=0時(shí)反轉(zhuǎn)(順時(shí)針),即松開(kāi)線;Dir=1時(shí)正轉(zhuǎn)(逆時(shí)針),即收緊線void Motor_Left_Step(bit Dir) Motor_Left_DIR=Dir; Motor_Left_CP=1; Delay_1ms(1); Motor_Left_CP=0; Delay_1ms(1);/*/右電機(jī)轉(zhuǎn)動(dòng)一步,Dir=0時(shí)反轉(zhuǎn)(順時(shí)針),即收緊線;Dir=1時(shí)正轉(zhuǎn)(逆時(shí)

38、針),即松開(kāi)線void Motor_Right_Step(bit Dir) Motor_Right_DIR=Dir; Motor_Right_CP=1; Delay_1ms(1); Motor_Right_CP=0; Delay_1ms(1);/*/* 圓形當(dāng)前坐標(biāo)顯示模塊*/void currentdisp(int line,int x,int y) Write_Byte_Locate(1,line,numberx/10);Write_Byte_Locate(2,line,numberx%10); Write_Byte_Locate(4,line,numbery/10); Write_Byt

39、e_Locate(5,line,numbery%10);/* * 直線當(dāng)前坐標(biāo)實(shí)現(xiàn)模塊* */* “(,);(,)” */void linedisp(int line,int x,int y,int xz,int yz) display(table6,line); Write_Byte_Locate(1,line,numberx/10); Write_Byte_Locate(2,line,numberx%10); Write_Byte_Locate(4,line,numbery/10); Write_Byte_Locate(5,line,numbery%10); Write_Byte_Loca

40、te(9,line,numberxz/10); Write_Byte_Locate(10,line,numberxz%10); Write_Byte_Locate(12,line,numberyz/10); Write_Byte_Locate(13,line,numberyz%10); /*/*功能實(shí)現(xiàn)部分*/* 步數(shù)確定函數(shù) */void buchang(float x,float y,float nextx,float nexty)/,int *znum1,int *ynum1) float zb,yb;int znum,ynum,fhz,fhy; zb=(sqrt(114.3-y)*(1

41、14.3-y)+(14.4+x)*(14.4+x)-sqrt(114.3-nexty)*(114.3-nexty)+(14.4+nextx)*(14.4+nextx)/stepz; yb=(sqrt(114.3-y)*(114.3-y)+(94.4-x)*(94.4-x)-sqrt(114.3-nexty)*(114.3-nexty)+(94.4-nextx)*(94.4-nextx)/stepy; if(zb>0)znum=(int)(zb+0.5);fhz=1;elseznum=abs(int)(zb-0.5); fhz=0;if(yb>0)ynum=(int)(yb+0.5)

42、; fhy=0;elseynum=abs(int)(yb-0.5); fhy=1; while(znum-) Motor_Left_Step(fhz);while(ynum-) Motor_Right_Step(fhy); /return 0; /*float sumz1=0.0;float sumz2=0.0;float sumy1=0.0;float sumy2=0.0;void buchang(float x,float y,float nextx,float nexty)/,int *znum1,int *ynum1) float zb,yb; float d;int znum,ynu

43、m,fhz,fhy; zb=(sqrt(114.7-y)*(114.7-y)+(14.4+x)*(14.4+x)-sqrt(114.7-nexty)*(114.7-nexty)+(14.4+nextx)*(14.4+nextx)/stepz; yb=(sqrt(114.5-y)*(114.5-y)+(94.4-x)*(94.4-x)-sqrt(114.5-nexty)*(114.5-nexty)+(94.4-nextx)*(94.4-nextx)/stepy; if(zb>0) d=zb-(int)(zb); sumz1+=d;fhz=1; if(sumz1>=1) sumz1-=

44、1; znum=(int)(zb)+1; else znum=(int)(zb); elsed=zb-(int)(zb); sumz2+=d;fhz=0; if(sumz2<=-1) sumz2+=1; znum=abs(int)(zb)-1); else znum=abs(int)(zb); if(yb>0)d=yb-(int)(yb); sumy1+=d;fhy=0; if(sumy1>=1) sumy1-=1; ynum=(int)(yb)+1; else ynum=(int)(yb); elsed=yb-(int)(yb); sumy1+=d;fhy=1; if(su

45、my1<=-1) sumy1+=1; ynum=abs(int)(yb)+1; else ynum=abs(int)(yb); while(znum-) Motor_Left_Step(fhz);while(ynum-) Motor_Right_Step(fhy); /return 0; */*/* 畫(huà)直線函數(shù) */void line(int a0,int b0,int a1,int b1) int cnt; float x,y,nextx,nexty; int zx,zy,sx,sy; int fm; int cnt1; cnt=(int)(abs(a1-a0)+abs(b1-b0)/(8*step); x=0.0;y=0.0;fm=0; sx=a1-a0; sy=b1-b0; zx=abs(a1-a0); zy=abs(b1-b0); while(cnt-) if(sx>0)&&(sy>=0) if(fm>=0) if(fm=0) nextx=x+8*step; nexty=y;buchang(x+a0),(y+b0),(nextx+a0+0.003),(nexty+b0);fm=fm-zy;else nextx=x+8*step; nexty=y; buc

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論