版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
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)畫板上黑色線尋跡檢測,顯示部分用液晶顯示模塊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、(固定在板上)通過穿過滑輪的吊繩控制一物體在板上運(yùn)動(dòng),運(yùn)動(dòng)范圍為80cm×100cm。物體的形狀不限,質(zhì)量大于100克。物體上固定有淺色畫筆,以便運(yùn)動(dòng)時(shí)能在板上畫出運(yùn)動(dòng)軌跡。板上標(biāo)有間距為1cm的淺色坐標(biāo)線(不同于畫筆顏色),左下角為直角坐標(biāo)原點(diǎn), 示意圖如下。 2、基本要求:(1)控制系統(tǒng)能夠通過鍵盤或其他方式任意設(shè)定坐標(biāo)點(diǎn)參數(shù);(2)控制物體在80cm×100cm的范圍內(nèi)作自行設(shè)定的運(yùn)動(dòng),運(yùn)動(dòng)軌跡長度不小于100cm,物體在運(yùn)動(dòng)時(shí)能夠在板上畫出運(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)能夠顯示物體中畫筆所在位置的坐標(biāo);(2)控制物體沿板上標(biāo)出的任意曲線運(yùn)動(dòng)(見示意圖),曲線在測試時(shí)現(xiàn)場標(biāo)出,線寬1.5cm1.8cm,總長度約50cm,顏色為黑色;曲線的前一部分是連續(xù)的,長約30cm;后一部分是兩段總長約20cm的間斷線段,間斷距離不大于1cm;沿連續(xù)曲線運(yùn)動(dòng)限定在200秒內(nèi)完成,沿間斷曲線運(yùn)動(dòng)限定在300秒內(nèi)完成;(3)其他。4、評分標(biāo)準(zhǔn)項(xiàng)目滿分基本要求設(shè)計(jì)與總結(jié)報(bào)告:方案比較、設(shè)計(jì)與論證,理論分析與計(jì)算,電路圖及有關(guān)設(shè)計(jì)文件,測試方法與儀器,測試數(shù)據(jù)及測試結(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、說明1、物體的運(yùn)動(dòng)軌跡以畫筆畫出的痕跡為準(zhǔn),應(yīng)盡量使物體運(yùn)動(dòng)軌跡與預(yù)期軌跡吻合,同時(shí)盡量縮短運(yùn)動(dòng)時(shí)間;2、若在某項(xiàng)測試中運(yùn)動(dòng)超過限定的時(shí)間,該項(xiàng)目不得分;3、運(yùn)動(dòng)軌跡與預(yù)期軌跡之間的偏差超過4cm時(shí),該項(xiàng)目不得分;4、在基本要求(3)、(4)和發(fā)揮部分(2)中,物體開始運(yùn)動(dòng)前,允許手動(dòng)將物體定位;開始運(yùn)動(dòng)后,不能再人為干預(yù)物體運(yùn)動(dòng);5、競賽結(jié)束時(shí),控制系統(tǒng)封存上交賽區(qū)組委會,測試用板(板上含空白坐標(biāo)紙) 測試時(shí)自帶。二、方案論證與選擇1.核心控制模塊的選擇方案一:FPGA/CPLD方式
5、。即用FPGA/CPLD完成鍵盤定義與識別、電機(jī)工作狀態(tài)選擇與切換、液晶電路的驅(qū)動(dòng)與控制等功能。這種方案的優(yōu)點(diǎn)在于系統(tǒng)結(jié)構(gòu)緊湊、操作方便,而且可以使用的I/O口線很多;缺點(diǎn)是調(diào)試時(shí)需要接很多接線,過程繁瑣,而且使用CPLD時(shí),由于其內(nèi)部沒有ROM,對功能的實(shí)現(xiàn)有所限制。方案二:單片機(jī)方式。即由單片機(jī)、電機(jī)驅(qū)動(dòng)電路及電機(jī)等組成系統(tǒng)。使用單片機(jī)也可以完成鍵盤定義與識別、電機(jī)工作狀選擇與切換等功能,組成的系統(tǒng)規(guī)模較小,有一定靈活性,而且可以使用我們比較熟悉的單片機(jī)最小系統(tǒng)電路板,減少了工作量。該控制方式需要單片機(jī)具有較大的程序存儲量,所以可選擇存儲量為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)的限制,控制精度很低,無法達(dá)到系統(tǒng)要求的指標(biāo),這里不予采用。 方案2:采用專用步進(jìn)電機(jī)驅(qū)動(dòng)器及與其配套的步進(jìn)電機(jī)。用這種方案的控制精度、效率和可靠性都很高。根據(jù)精度要求選擇方案二。3.黑線探測模塊方案一:采用多路陣列式光敏電阻組成的光電探測器。因?yàn)楣饷綦娮杼綔y到黑線時(shí),黑線上方的電阻值發(fā)生變化,經(jīng)過電壓比較器比較將信號送給單片機(jī)處理,從而控
7、制物體做相應(yīng)的動(dòng)作。但由于光敏電阻對環(huán)境光的識別,容易受到外界環(huán)境光的影響。,方案二:采用紅外反射式探測,即用已調(diào)的紅外線垂直射到板面,經(jīng)反射后轉(zhuǎn)換為電信號送入單片機(jī)處理。由于使用的是紅外線,不受外界自然光的影響,循跡效果好?;谏厦娴挠懻?,選用了抗干擾能力強(qiáng)的方案二。4.顯示方案的選擇方案一:采用LED數(shù)碼管顯示器。LED 數(shù)碼管亮度高,醒目,但是其電路復(fù)雜,顯示信息量較小,且動(dòng)態(tài)掃描需要占用大量單片機(jī)時(shí)間,無法做到實(shí)時(shí)顯示。方案二:采用漢字LCD液晶顯示器。LCD有明顯的優(yōu)點(diǎn):微功耗、尺寸小,超薄輕巧、顯示信息量大、字跡清晰、美觀、視覺舒適。本設(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)"顯示畫筆位置"的功能。對于這個(gè)模塊可以有硬件和軟件兩類解決方案。 方案1:在物體上安裝水平和垂直方向的兩只激光筆,在板邊緣每條坐標(biāo)線旁邊安裝一光電傳感器,物體坐標(biāo)所在處的傳感器接收到激光筆,即可確定物體位置??梢姳痉桨腹残枰?80個(gè)光電傳感器,造成此方案幾乎不可實(shí)現(xiàn)。 方案2:采用軟件的方法確定物體位置。單片機(jī)控制物體從某個(gè)已知的坐標(biāo)位置出發(fā),并且記錄步進(jìn)電機(jī)的每一
9、次移動(dòng)情況,就可以通過一定的算法計(jì)算出物體的位置。這種方案沒有位置傳感器,精度較低,但是系統(tǒng)簡單。避免了硬件方案過于復(fù)雜的缺點(diǎn)。本設(shè)計(jì)使用方案2。6.鍵盤模塊 本模塊采用即插型按鍵,接在最小系統(tǒng)的P2.0P2.7,采用了4×4的16點(diǎ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ì)算、對光電傳感器送來的信號進(jìn)行處理來控制運(yùn)動(dòng)物體的運(yùn)行方向、計(jì)算運(yùn)行物體的坐標(biāo)位置、LCD數(shù)據(jù)顯示、鍵盤控制等。
10、圖3-1 系統(tǒng)方框圖(2)黑線檢測模塊電路黑線檢測模塊電路圖3-2所示。當(dāng)紅外線反射式光電傳感器ST178位于黑線之上時(shí),光電開關(guān)輸出高電平;反之,輸出低電平。光電傳感器輸出電平后接反相器74LS04以穩(wěn)定電平和增大驅(qū)動(dòng)能力。 本設(shè)計(jì)采用8個(gè)紅外傳感器實(shí)現(xiàn)對黑線的檢測,通過并口轉(zhuǎn)串口芯片74LS165將數(shù)據(jù)串行傳送到單片機(jī)。圖3-2 黑線檢測模塊電路(3)鍵盤電路本設(shè)計(jì)采用4x4矩陣鍵盤實(shí)現(xiàn)數(shù)字的輸入和功能的選擇,鍵盤接到AT89S52單片機(jī)的P2口,通過單片機(jī)對鍵盤的行列掃描實(shí)現(xiàn)按鍵的識別。鍵盤電路如圖3-3所示:圖3-3 4x4鍵盤電路對應(yīng)的按鍵碼如下:789/456/123/清除0確認(rèn)/
11、(4)單片機(jī)電源電路單片機(jī)控制電路、紅外傳感器模塊電路和液晶顯示模塊均采用+5V供電,采用集成穩(wěn)壓芯片7805來實(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度,通過步進(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端為脈沖信號,下降沿有效。 DIR端為方向控制信號,電平高低決定電機(jī)運(yùn)行方向。 FREE端為驅(qū)動(dòng)器使能,高電平或懸空電機(jī)可運(yùn)行。低電平驅(qū)動(dòng)器無電流輸出,電機(jī)處于自由狀態(tài)。2、軟件及算法設(shè)計(jì)(1)物體位置的計(jì)算圖 3-5 物體位置示意圖坐標(biāo)點(diǎn)參數(shù)的計(jì)算將畫筆所在的位置設(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為物體在畫板某一位置,則有: 解得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)過程。由圖8 解得: 解得 (cm) (cm)由此,利用軟件實(shí)現(xiàn)以上算法來分別控制兩個(gè)步進(jìn)電機(jī)的步進(jìn)a,b,這樣就可以向控制系統(tǒng)輸入起點(diǎn)坐標(biāo)和終點(diǎn)坐標(biāo)讓物體在畫板置任意行走。(2)直線算法: 目前畫直線的算法也算是有很多,比如:逐點(diǎn)比較直線插補(bǔ),脈沖增量插補(bǔ)和數(shù)據(jù)采集插補(bǔ),本設(shè)計(jì)根據(jù)實(shí)際所學(xué)知識,選擇了逐點(diǎn)比較直線插補(bǔ)法,具體如下:逐點(diǎn)比較法的基本原理是,在刀具按要求軌跡運(yùn)動(dòng)加工零件輪廓的過程中,不斷比較刀具與被加工零件輪廓之間的相對位置,并根據(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)到信號,停止插補(bǔ)??梢詫⑸厦嫠x的偏差公式進(jìn)一步簡化,推導(dǎo)出偏差的遞推公式。 當(dāng)0時(shí),沿+x軸方向進(jìn)
15、給一步, (1)當(dāng)<0時(shí),沿+y軸方向進(jìn)給一步, (2)式(1)和式(2)是簡化后偏差的計(jì)算公式,在公式中只有一次加法或減法運(yùn)算,新加工點(diǎn)的偏差都可由前一點(diǎn)偏差和終點(diǎn)坐標(biāo)相加或相減得到。本體設(shè)計(jì)中采用以上原理,不過對于非原點(diǎn)開始的直線,采用起點(diǎn)坐標(biāo)歸零思想,結(jié)果也證明了改思路的可行性。(3)畫圓算法:畫圓算法采用圓弧插補(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)循跡黑線的探測及循跡算法在以畫筆為中心,半徑20毫米的圓周上安裝了8個(gè)反射式紅外對管作為軌跡探測傳感器,安裝方式如圖3所示。 07654321-1+1圖3-7 軌跡探測傳感器安裝方式 圖3-8 方向調(diào)整示意圖根據(jù)圖3-7安裝方式及安裝半徑,只要系統(tǒng)的采樣頻率足夠高,軌跡是無法脫離探測范圍的。但由于使用了8個(gè)傳感器,不同傳感器信號間的組合太多,使用一般窮舉辦法難以實(shí)現(xiàn)循跡控制,因此自己設(shè)計(jì)了一套循跡算法。如圖3-8,定義了物體循跡時(shí)運(yùn)動(dòng)的8個(gè)方向,圖中黑箭頭(1號方向上)表示
17、物體當(dāng)前的循跡方向。循跡時(shí),使用變量Direct表示當(dāng)前物體運(yùn)動(dòng)方向,物體每次運(yùn)動(dòng)時(shí)先按當(dāng)前方向向前步進(jìn)一段固定的距離,然后檢測采樣傳感器信號并調(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)方向,所以對Direct的運(yùn)算需在模8的范圍內(nèi)(07)進(jìn)行?,F(xiàn)在考慮如何決定左偏或右偏的問題,使用上述調(diào)整辦法只需要根據(jù)Direct的前后方向及左右方向的四個(gè)信號對Direct調(diào)整即可。如圖4中僅需根據(jù)1、3、5、7方向的信號對Dir
18、ect調(diào)整。由于每個(gè)方向上±1和保持不變的傳感器信號是一定的,故對8個(gè)方向上的調(diào)整策略用一個(gè)靜態(tài)數(shù)組的形式保存起來,調(diào)整時(shí)直接查表即可,方便編程。這種循跡算法大大地減少了循跡運(yùn)動(dòng)的調(diào)試時(shí)間,為整個(gè)作品成功的完成打下了基礎(chǔ)。當(dāng)每次步進(jìn)的距離較小時(shí),若在Direct方向的前、左、右三處的傳感器同時(shí)發(fā)現(xiàn)是白紙,則表明傳感器探測到了曲線的間斷部分或盡頭,此時(shí)應(yīng)根據(jù)前幾次(23次)Direct的平均值作為探索方向,再向前步進(jìn)23步,保證循跡的正確停止。在取平均值時(shí),需對7à0和0à7的轉(zhuǎn)變作特殊處理,否則可能出錯(cuò)。實(shí)踐證明,按照上面的辦法循跡迅速穩(wěn)定,并且不會受交叉線的影響
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)入對應(yīng)程序圖3-9系統(tǒng)主程序流程框圖四、系統(tǒng)測試1測試儀器DT9205A型數(shù)字萬用表;秒表、卷尺;+12V直流穩(wěn)壓電源。2測量結(jié)果(1) 直線測試次數(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) 畫圓測試次數(shù)圓心坐標(biāo)半徑最大誤差用時(shí)1(25,25)251cm130s2(3) 循跡測試連續(xù)線段線長間斷線段長度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),沒有考慮其半徑。本作品以減小其半徑的辦法降低誤差。同時(shí),進(jìn)行坐標(biāo)變換時(shí),單片機(jī)在計(jì)算精度上也會引進(jìn)誤差,由于使用浮點(diǎn)運(yùn)算,該誤差不大。(2)筆尖和懸掛點(diǎn)不在同一平面引入誤差,應(yīng)盡量使三點(diǎn)處于與地板平行的平面以減小誤差。(3)步進(jìn)電機(jī)的步進(jìn)脈沖
21、個(gè)數(shù)和步進(jìn)線距離之間的折算誤差。作品使用了直接測量一段距離和步進(jìn)個(gè)數(shù)再求平均值的辦法降低誤差。(4)牽引線引入的誤差,包括拉伸誤差和由松弛產(chǎn)生的誤差。改進(jìn)措施是使用變形系數(shù)小的牽引線和增加懸掛物體的重量。(5)繞線產(chǎn)生的誤差。解決辦法是根據(jù)力學(xué)分析采用機(jī)械的辦法保證繞線不重疊,并且使用半徑小的牽引線使繞線在橫向延伸的距離減少,從而減少誤差。(6)讀數(shù)誤差。初始定位時(shí)需提供物體坐標(biāo),測量結(jié)果需人為讀數(shù),這會引入誤差。五、結(jié)論本設(shè)計(jì)以AT89S52單片機(jī)為核心,利用軟件編程,實(shí)現(xiàn)了定點(diǎn)直線運(yùn)動(dòng),圓形軌跡運(yùn)動(dòng),間斷黑線循跡以及坐標(biāo)的實(shí)時(shí)顯示。測試結(jié)果表明,本設(shè)計(jì)很好地完成了題目基本部分和發(fā)揮部分的全
22、部要求,速度快、精度高。整個(gè)系統(tǒng)從軟件到硬件都體現(xiàn)優(yōu)良簡約的風(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、 高吉祥.全國大學(xué)生電子設(shè)計(jì)競賽培訓(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 /無符號字符類型定義#define uint unsigned int /無符號整數(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場地到兩電機(jī)連線的垂直距離(厘米)#define b 15 /80cm x 100cm場地到邊線(頂端滑輪和電機(jī)的連線)的垂直距離(厘米)#define r 0.8276 /滑輪半徑(厘米)#define stepz 0.0122 /左步進(jìn)電機(jī)每步弧長(厘米)#define stepy 0.0122 /右進(jìn)
25、步點(diǎn)擊每步弧長(厘米)#define step 0.0125 /步進(jìn)電機(jī)每步弧長(厘米)#define radius 25 /圓周半徑長度#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的讀/寫選擇端連接到P1.1sbit EN=P33; /1602的使能信號引腳連接到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寫數(shù)據(jù)和寫指令函數(shù)void Write_Byte_Locate(uchar x,uchar y,uchar udata); /把數(shù)據(jù)顯示在LCD1602的指定位置void Init_LCD1602(); /LCD1602初始化函數(shù)uchar Keyboard_Scan(void); /鍵盤掃描函數(shù),返回鍵盤掃描碼uchar Scan_Code_Transform(uchar scancode)
30、; /鍵碼識別函數(shù)/void Motot_ld(int );void Motor_Left_Step(bit Dir); /左電機(jī)轉(zhuǎn)動(dòng)一步,Dir=0時(shí)反轉(zhuǎn)(順時(shí)針),即松開線;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í)針),即松開線void Draw_Circular(int x,int y); / 畫圓函數(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);/畫直線函數(shù)void Draw_line();/void buchang(float,float,float,float);/確定左右電機(jī)移動(dòng)的步數(shù)void Returndata();/讀取對光二極管的值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寫數(shù)據(jù)和寫指令函數(shù)/把寫數(shù)據(jù)和指令二個(gè)合在一起,用一個(gè)變量command來判斷void Write_LCD1602(uchar udata,bit command) LCD1602_B
33、usy_Check(); /忙檢查 RS=command;/command=0時(shí)寫入指令,command=1時(shí)寫入數(shù)據(jù) RW=0; /把LCD設(shè)置成寫狀態(tài) EN=1; /E高脈沖,把數(shù)據(jù)/指令寫入 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存儲區(qū)加40H x+=0x80; /如果沒有加0
34、X40則顯示第一行 Write_LCD1602(x,0); /寫指令 Write_LCD1602(udata,1);/寫顯示數(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);/開顯示/*/*鍵盤掃描和鍵碼識別函數(shù)部分*/鍵盤掃描函數(shù),返回鍵盤掃描碼/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) /還沒有掃描完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ù)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í)針),即松開線;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、針),即松開線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; */*/* 畫直線函數(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. 本站所有資源如無特殊說明,都需要本地電腦安裝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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度酒店特色主題宴會預(yù)訂合同范本
- 2025年度股權(quán)期權(quán)激勵(lì)與公司業(yè)績掛鉤合同
- 二零二五年度港口倉儲停車場租賃合同
- 2025年度液化氣配送站安全應(yīng)急預(yù)案編制合同
- 局部模特培訓(xùn)教程課件
- 2025超市卸貨天棚制安合同
- 2025關(guān)于解除勞動(dòng)合同證明書范本
- 2025購銷合同(標(biāo)準(zhǔn)文本4)
- 2025土地承包經(jīng)營合同模板
- 綠色環(huán)保產(chǎn)業(yè)基金投資合同三篇
- “十四五”期間推進(jìn)智慧水利建設(shè)實(shí)施方案
- EPC項(xiàng)目機(jī)電安裝專業(yè)工程重難點(diǎn)分析及經(jīng)驗(yàn)交流
- 大型活動(dòng)聯(lián)合承辦協(xié)議
- 工程項(xiàng)目采購與供應(yīng)鏈管理研究
- 2024年吉林高考語文試題及答案 (2) - 副本
- 拆除電纜線施工方案
- 搭竹架合同范本
- Neo4j介紹及實(shí)現(xiàn)原理
- 焊接材料-DIN-8555-標(biāo)準(zhǔn)
- 工程索賠真實(shí)案例范本
- 重癥醫(yī)學(xué)科運(yùn)用PDCA循環(huán)降低ICU失禁性皮炎發(fā)生率品管圈QCC持續(xù)質(zhì)量改進(jìn)成果匯報(bào)
評論
0/150
提交評論