




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、單片機系統(tǒng)課程設(shè)計摘 要隨著時代的進步和發(fā)展,單片機技術(shù)已經(jīng)普及到我們生活、工作、科研、各個領(lǐng)域,成為了一種比較成熟的技術(shù), 本文主要介紹了一個基于89c51單片機的遠程步進電機控制系統(tǒng),詳細描述了利用主-從雙單片機開發(fā)遠程步進電機控制系統(tǒng)的過程,重點對步進電機在單片機下的硬件連接與驅(qū)動,主-從單片機通過串行口通信的軟件編程以及各模塊系統(tǒng)設(shè)計進行了詳盡分析,對各部分的電路也一一進行了介紹,該系統(tǒng)可以方便的實現(xiàn)遠程步進電機控制和顯示,并可根據(jù)需要連續(xù)控制或單步控制步進電機,它使用起來相當方便,主從單片機僅通過rs-232串行電纜連接,具有遠程控制、遠程監(jiān)控、連接簡便、安全性高、功耗低等優(yōu)點,適合
2、于工廠及辦公場所的遠程閥門控制,也可以當作遠程控制模塊嵌入其它系統(tǒng)中,作為其他主系統(tǒng)的輔助擴展。步進電機與at89c51結(jié)合實現(xiàn)遠程閥門控制系統(tǒng),該系統(tǒng)結(jié)構(gòu)簡單,抗干擾能力強,適合于惡劣環(huán)境下進行遠程閥門控制,有廣泛的應用前景。關(guān)鍵詞:步進電機;遠程控制;at89c51目錄摘 要i引言11設(shè)計背景21.1課題背景21.2設(shè)計內(nèi)容22遠程步進電機控制方案32.1系統(tǒng)結(jié)構(gòu)框圖32.2設(shè)計思路與方案32.2.1步進電機正反轉(zhuǎn)的控制32.2.2鍵盤檢測42.2.3串行口通信42.2.4動態(tài)顯示43系統(tǒng)硬件設(shè)計53.1時鐘及復位模塊53.2按鍵模塊63.3驅(qū)動模塊73.4通信模塊83.5顯示模塊94系統(tǒng)
3、軟件設(shè)計104.1主機程序設(shè)計104.1.1顯示子程序114.1.2按鍵掃描處理子程序134.1.3中斷與計算子程序144.2從機程序設(shè)計164.2.1判斷指令子程序174.2.2中斷響應子程序194.2.3步進電機控制子程序205proteus仿真236總結(jié)26參考文獻27附錄1 主機源程序代碼28附錄2 從機源程序代碼34附錄3 電路原理圖4041引言步進電機作為執(zhí)行元件,是機電一體化的關(guān)鍵產(chǎn)品之一,廣泛應用在各種自動化系統(tǒng)中,與其他類型的電機相比具有易于精確控制,無累積誤差等優(yōu)點。步進電機是一種將電脈沖轉(zhuǎn)化為角位移的執(zhí)行機構(gòu)。當步進驅(qū)動器接收到一個脈沖信號,就驅(qū)動步進電機按設(shè)定的方向轉(zhuǎn)一
4、個固定的角度,它的旋轉(zhuǎn)是以固定的角度一步一步運行的,可以通過控制脈沖個數(shù)來控制角位移量,從而達到準確定位的目的。步進電機可以作為一種控制用的特種電機,利用其沒有累積誤差的特點,廣泛應用于各種開環(huán)控制。單片機又稱單片微控制器,它不是完成某一個邏輯功能的芯片,而是把一個計算機系統(tǒng)集成到一個芯片上,用它來做一些控制電器等不是很復雜的工作。單片機內(nèi)部也擁有和電腦功能類似的模塊,比如alu,內(nèi)存,總線,還有和硬盤作用相同的存儲器件,以及通信使用的串行口。本文設(shè)計一種用雙89c51作為核心部件進行遠程控制的步進電機控制系統(tǒng)。為使步進電機系統(tǒng)的可靠性、通用性、可維護性以及性價比最優(yōu),根據(jù)系統(tǒng)的功能要求,通過
5、單片i/o口、串行口通訊、中斷、鍵盤、四位八段數(shù)碼管的擴展來實現(xiàn)遠程控制步進電機的啟停、正反轉(zhuǎn)、單步運行、限位保護及監(jiān)控等功能。1設(shè)計背景1.1課題背景步進電機作為執(zhí)行元件,是機電一體化的關(guān)鍵產(chǎn)品之一, 廣泛應用在各種自動化控制系統(tǒng)中。隨著微電子和計算機技術(shù)的發(fā)展,步進電機的需求量與日俱增,在各個國民經(jīng)濟領(lǐng)域都有應用。步進電機是一種感應電機,它的工作原理是利用電子電路,將直流電變成分時供電的,多相時序控制電流,用這種電流為步進電機供電,步進電機才能正常工作,驅(qū)動器就是為步進電機分時供電的、多相時序控制器。步進電機的發(fā)展,依賴于新型材料的應用、設(shè)計手段,以及與驅(qū)動技術(shù)的最佳匹配。隨著自動控制技術(shù)
6、、計算機網(wǎng)絡通信技術(shù)在眾多領(lǐng)域中的快速發(fā)展,以及進一步數(shù)字化、智能化,步進電機將會在更深入廣泛的領(lǐng)域中得到應用。在主從分布式控制系統(tǒng)中,從機主要完成遠端實時控制與數(shù)據(jù)采集,被采集數(shù)據(jù)經(jīng)初步處理后通過串行口傳送給主機。主機將從機發(fā)送來的數(shù)據(jù)進行處理后即時向用戶提供各種控制過程的具體數(shù)據(jù),與此同時進行人機交互。主機根據(jù)從輸入電路輸入的數(shù)據(jù)進行判斷處理并給從機發(fā)送各種控制命令。它既利用了單片機的價格低,功能強,抗干擾能力強,溫限寬等優(yōu)點,又利用串行口進行遠程通信,使操作者遠在數(shù)十米之外也能控制具體參數(shù)。單片機集成的資源越來越多,內(nèi)部存儲資源也日益豐富,用戶不需要擴充就可以完成項目開發(fā),而且單片機抗干
7、擾能力也越來越強,使它更加適合工業(yè)控制領(lǐng)域。1.2設(shè)計內(nèi)容本設(shè)計主要是介紹了基于單片機遠程控制下的步進電機控制系統(tǒng),詳細介紹了其硬件和軟件設(shè)計,并對其各功能模塊做了詳細介紹,其主要功能和指標如下:(1)主機利用獨立鍵盤檢測用戶輸入數(shù)據(jù)并通過串行口發(fā)送至從機,共有六種指令:停止、正轉(zhuǎn)、反轉(zhuǎn)、單步正轉(zhuǎn)、單步反轉(zhuǎn)、回到機械零點;(2)從機接收數(shù)據(jù)后進行判斷,并控制步進電機運動,同時將當前位置發(fā)送至主機,位置范圍從-128到+127;(3)主機接收當前步進電機位置信息后通過四位八段數(shù)碼管以有符號十進制形式顯示出來;2遠程步進電機控制方案2.1系統(tǒng)結(jié)構(gòu)框圖主機89c51電源、時鐘及復位電路電源、時鐘及復
8、位電路從機89c51uln2003a數(shù)碼管顯示電路串行口通信步進電機獨立按鍵圖2-1 89c51單片機總體設(shè)計結(jié)構(gòu)框圖2.2設(shè)計思路與方案對步進電動機的控制接口采用軟件控制步進電動機的旋轉(zhuǎn)。步進電動機的驅(qū)動脈沖由89c51單片機的編程來實現(xiàn),由從機89c51芯片的p3.4、p3.5、p3.6、p3.7發(fā)出,驅(qū)動步進電動機的a、b、c、d相。由于步進電機的正常工作電壓是12v,故需要用達林頓晶體管驅(qū)動芯片驅(qū)動。通過主機89c51芯片的p3口來讀取鍵盤輸入的停止、正轉(zhuǎn)、反轉(zhuǎn)、單步正轉(zhuǎn)、單步反轉(zhuǎn)、回到機械零點控制信號,并通過89c51的串行口將控制狀態(tài)發(fā)送至從機,從機接收信號后按照指令控制電動機工作
9、,同時實時將當前位置狀態(tài)送回主機,主機接收當前位置信號并顯示。2.2.1步進電機正反轉(zhuǎn)的控制步進電機有四相繞組a、b、c、d以及公共端,當其中某一相繞組通電時在電動機內(nèi)部形成ns極,產(chǎn)生磁場,當通電的相發(fā)生變化,磁場發(fā)生旋轉(zhuǎn),在磁場的作用下,轉(zhuǎn)子將轉(zhuǎn)動,若步進電機按單雙八拍的方式來工作,則在、b、c、d相繞組上輸入脈沖的順序為aabbbcccdddaa:此時步進電機沿順時針方向轉(zhuǎn)動,即正轉(zhuǎn),若在、b、c、d各相繞組上依次輸入脈沖aadddcccbbbaa:此時步進電機將沿逆時針方向旋轉(zhuǎn),因此只要控制脈沖輸出順序,就可以控制電機的正、反轉(zhuǎn)。同時加入了限位值保護,當電機到達限位值時,自動停止運行,
10、確保人身及機械設(shè)備的安全。2.2.2鍵盤檢測p3口內(nèi)部集成了上拉電阻,所以只需將每根接口線通過開關(guān)接地,檢測p3口的電平數(shù)據(jù),即可判斷出是哪個鍵被按下,同時執(zhí)行相對應的操作。2.2.3串行口通信單片機的串行口由兩個數(shù)據(jù)緩沖寄存器sbuf和一個輸入移位寄存器組成,內(nèi)部還有一個串行控制寄存器scon和一個波特率發(fā)生器。接收與發(fā)送緩沖寄存器占用同一個地址99h,其名稱同樣為sbuf。cpu寫sbuf操作,一方面修改發(fā)送寄存器,同時啟動串行數(shù)據(jù)發(fā)送;讀sbuf操作,就是讀接收寄存器,完成數(shù)據(jù)的接收。特殊功能寄存器scon用以存放串行口的控制和狀態(tài)信息。根據(jù)對其寫的控制字決定工作方式,從而決定波特率發(fā)生
11、器的時鐘源是來自系統(tǒng)時鐘還是來自定時器t1。特殊功能寄存器pcon的最高位smod為串行口波特率的倍增控制位。表2-1串行口的控制寄存器sconsm0sm1sm2rentb8rb8tiri方式選擇多機控制串行接收允許/禁止欲發(fā)的第9位收到的第9位發(fā)送中斷有/無接收中斷有/無sm0,sm1:為串行口工作方式控制位。共對應四種工作方式,在本設(shè)計中選用方式2:波特率固定11位異步通信方式,txd為串行數(shù)據(jù)的發(fā)送端,rxd為串行數(shù)據(jù)的接收端。每幀數(shù)據(jù)為11位:1個起始位“0”,9個數(shù)據(jù)位和1個停止位“1”。發(fā)送時,第9個數(shù)據(jù)位由scon寄存器的tb8位提供,接收到的第9位數(shù)據(jù)存放在scon寄存器的rb
12、8位。波特率固定為: 波特率=(2smod * fosc)/642.2.4動態(tài)顯示步進電機當前位置通過串行口發(fā)送至主機后,主機處理當前位置信息,并通過四位八段共陽極數(shù)碼管顯示出來,為了節(jié)約系統(tǒng)輸入輸出口資源,輸出使用動態(tài)顯示過程,通過段選和位選達到一次僅使一位數(shù)碼管亮起,但因為單片機速度極快以及人眼的視覺暫留原理,使人看上去像是四位數(shù)碼管在同時亮起。3系統(tǒng)硬件設(shè)計單片機最小系統(tǒng)或者成為最小應用系統(tǒng),是指用最少的元件組成的單片機可以工作的系統(tǒng),對51系列單片機來說,最小系統(tǒng)一般包括:單片機、復位電路、晶振電路。本控制系統(tǒng)中包含六個部分:復位及時鐘模塊、主控模塊、按鍵模塊、通信模塊、驅(qū)動模塊、顯示
13、模塊。用按鍵模塊來輸入要執(zhí)行的命令,即正反停,單步運行及復位;通過主機主控模塊及所對應的匯編程序,通過通信模塊將命令傳送給從機,從機通過驅(qū)動模塊控制步進電機按照命令運轉(zhuǎn),并將當前位置通過通信模塊傳遞至主機,主機通過顯示模塊顯示當前位置。3.1時鐘及復位模塊引腳18和19接上一個12mhz的晶振及兩個22pf的瓷介電容為單片機提供時鐘信號。單片機rst通過10uf電容接至vcc,實現(xiàn)上電自復位,同時通過按鍵開關(guān)接至vcc,實現(xiàn)運行中手動復位,增加系統(tǒng)可靠性。圖3-1 時鐘及復位模塊電路圖3.2按鍵模塊按鍵模塊有六個按鈕:停止按鈕(stop)、正轉(zhuǎn)按鈕(pos)、反轉(zhuǎn)按鈕(neg)、單步正轉(zhuǎn)(po
14、s_one)、單步反轉(zhuǎn)(neg_one),復位(reset)分別控制電機的停止、正轉(zhuǎn)、反轉(zhuǎn)、單步正轉(zhuǎn)、單步反轉(zhuǎn)、返回機械零點。分別與at89c51的p3.2(引腳12)、p3.3(引腳13)、p3.4(引腳14)、p3.5(引腳15)、p3.6(引腳16)、p3.7(引腳17)相連接,另一端都接地。當按下一個鍵時,使對應的引腳處產(chǎn)生低電平。 圖3-2 按鍵模塊電路圖按下不同的按鍵,從p3口可以得到不同的數(shù)值,不同的數(shù)值對應不同的鍵被按下,被按下的鍵對應位為“0”,未被按下的鍵對應位為“1”,通過比對數(shù)值,可以判斷出輸入了哪種指令,從而進行相應的處理。不同按鍵對應數(shù)值如下表表3-1 按鍵對應數(shù)值
15、按鍵stopposnegpos_oneneg_oneresetp口數(shù)據(jù)fbf7efdfbf7f3.3驅(qū)動模塊單片機的驅(qū)動電路主要是用uln2003a芯片來驅(qū)動。uln2003a芯片是一個7路反相器,即第1到7引腳輸入端為低電平時,對應輸出端第16到10引腳輸出為高電平,反之亦然。第9引腳com提供工作電壓,本設(shè)計中引腳1、2、3、4分別與at89c51芯片的p3.7、p3.6、p3.5、p3.4口相連接,電動機中間引腳直接與12v電壓相接,目的是驅(qū)動電動機,使其正常工作。圖3-3 步進電機驅(qū)動模塊電路圖四相八拍式勵磁法可以使步進電機運行更加平穩(wěn),步進角進一步減小,提高精確度,本設(shè)計中使用單極四
16、相電機,采用四相八拍工作方式,勵磁表如下表3-2 四相八拍勵磁表勵磁順序:aabbbcccdddaa順序12345678a11000001b01110000c00011100d000001113.4通信模塊串行通信是cpu與外界交換信息的一種基本方式。單片機應用與工業(yè)控制時,往往作為前端機安裝在工業(yè)現(xiàn)場,遠離主機,現(xiàn)場數(shù)據(jù)采用串行通信方式發(fā)往主機進行處理,以降低通信成本,提高通信可靠性。rs-232c采用的是eia電平,在txd和rxd數(shù)據(jù)線上,邏輯1(mark)=-3-15v;邏輯0(space)=+3+15v。很明顯,rs-232c的eia標準是以正負電壓來表示邏輯狀態(tài)的,與ttl以高低電
17、平表示邏輯狀態(tài)的規(guī)定不同,因此,為了能夠使主從單片機通過rs-232c串行口通信,并延長通信距離,必須在eia電平與ttl電平之間進行電平變換。美國maxim公司的max232芯片可完成ttl和eia之間的雙向電平轉(zhuǎn)換,max232內(nèi)部有電壓倍增電路和轉(zhuǎn)換電路,并可同時進行兩路雙向轉(zhuǎn)化,功能強大,且只需要單一+5v電源,因此獲得廣泛應用。轉(zhuǎn)換后的信號通過rs-232的d型9針連接口輸出,最少僅需3根通信線即可進行串行通信,也可購買雙絞通訊線進行兩機直連,使連接更加方便,并增加通信可靠性。圖3-4 max232通信模塊電路圖3.5顯示模塊每個八位數(shù)碼管需占用8根數(shù)據(jù)線,為了節(jié)約系統(tǒng)資源,本設(shè)計選
18、用段選+位選的方式控制一個四位八段共陽極數(shù)碼管。共陽極數(shù)碼管的1、2、3、4位選信號由p1.0p1.3信號經(jīng)pnp三極管放大反相后送至位選輸入口。因單片機p0口內(nèi)部無上拉電阻,故將p0口經(jīng)過10k的排阻上拉至vcc,p0作為段選數(shù)據(jù)的輸入,送至數(shù)碼管的段選接口,通過位選選擇顯示位,通過段選選擇顯示的數(shù)據(jù),可以完成步進電機當前位置的顯示。采用動態(tài)顯示時需要注意以下3點:由于每一位八段數(shù)碼管的點亮時間很短,掃描過程中要確保每一位數(shù)碼管得到足夠的工作電流,從而確保亮度,故位選信號經(jīng)三極管放大并反相后送入數(shù)碼管。在切換下一位的八段數(shù)碼管時,應把上一位熄滅,再將下一位顯示數(shù)據(jù)送出,防止顯示數(shù)據(jù)出現(xiàn)殘影。
19、點亮一遍所有數(shù)碼管的時間應盡量小于0.1s,以保證足夠短的時間,使眼睛產(chǎn)生各位數(shù)碼管同時顯示的錯覺。圖3-5 四位八段數(shù)碼管顯示模塊電路圖4系統(tǒng)軟件設(shè)計根據(jù)實際需要和設(shè)計要求,系統(tǒng)軟件部分設(shè)計主要可分為:主機:鍵盤掃描程序,顯示程序,發(fā)送程序,接收程序。從機:接收程序,步進電機控制程序,發(fā)送程序。4.1主機程序設(shè)計主機,作為人機交互的設(shè)備,承擔著接收命令,將命令發(fā)送給從機,接收從機返回的數(shù)據(jù),顯示數(shù)據(jù),任務繁重。為了確保數(shù)碼管顯示的連續(xù)性,主機上電初始化后循環(huán)調(diào)用顯示子程序和鍵盤掃描程序,一旦檢測到有鍵被按下,即進行判斷與存儲鍵值,并將此值發(fā)送至從機,隨后返回主程序,重復顯示與檢測鍵盤。接收程
20、序選擇中斷的形式進行,一旦有數(shù)據(jù)被接收,即觸發(fā)串行通信中斷,將從機發(fā)來的數(shù)據(jù)進行處理,將8位二進制數(shù)轉(zhuǎn)化為有符號十進制數(shù)據(jù),并刷新顯示內(nèi)存,在下一個顯示周期中即被顯示出來,此法僅需處理一次數(shù)據(jù),不需要在每次顯示時進行運算,加快了處理速度,節(jié)約了系統(tǒng)資源。主機運行流程圖如下所示:中斷開始清中斷y發(fā)送中斷?上電初始化n顯示子程序n接收中斷?n有鍵按下?y處理數(shù)據(jù)y處理并發(fā)送中斷返回圖4-1 主機程序流程圖4.1.1顯示子程序因為采用掃描顯示,主程序需要逐個將顯示內(nèi)存的數(shù)據(jù)輸送至p0口,配合p1的位選,進行掃描顯示movdptr,#table;將dptr指向顯示表首地址display: ;顯示子程序
21、jb0d5h,two;如果0d5h為1,即正數(shù),則直接顯示第二位,不顯示符號one: ;第一位(符號位)mova,#0ah;將a賦值為0af,即指向表中的負號位movc a,a+dptr ;變址尋址,將顯示數(shù)據(jù)存入amovp0, a ;將顯示數(shù)據(jù)送至p0口clr90h;90h清零,即第一位送低電平,經(jīng)pnp三極管反相后,即選中第一位數(shù)碼管call delay ;調(diào)用延時,保留顯示1mssetb 90h ;90h置1,關(guān)閉顯示movp0,#0ffh ;p0口送0ffh,保證數(shù)碼管全滅two:mova,21h;將21h中的數(shù)據(jù)存入acc,即百位movca,a+dptr;變址尋址,將顯示數(shù)據(jù)存入am
22、ovp0,a;將顯示數(shù)據(jù)送至p0口clr 91h ;91h清零,即第二位送低電平,經(jīng)pnp三極管反相后,即選中第二位數(shù)碼管calldelay;調(diào)用延時,保留顯示1mssetb91h;91h置1,關(guān)閉顯示movp0,#0ffh;p0口送0ffh,保證數(shù)碼管全滅three:mova,22h;將22h中的數(shù)據(jù)存入acc,即十位movca,a+dptr;變址尋址,將顯示數(shù)據(jù)存入amovp0,a;將顯示數(shù)據(jù)送至p0口clr92h;92h清零,即第三位送低電平,經(jīng)pnp三極管反相后,即選中第三位數(shù)碼管calldelay;調(diào)用延時,保留顯示1mssetb92h;92h置1,關(guān)閉顯示movp0,#0ffh;p
23、0口送0ffh,保證數(shù)碼管全滅four:mova,23h;將23h中的數(shù)據(jù)存入acc,即個位movca,a+dptr;變址尋址,將顯示數(shù)據(jù)存入amovp0,a;將顯示數(shù)據(jù)送至p0口clr93h;93h清零,即第三位送低電平,經(jīng)pnp三極管反相后,即選中第三位數(shù)碼管calldelay;調(diào)用延時,保留顯示1mssetb93h;93h置1,關(guān)閉顯示movp0,#0ffh;p0口送0ffh,保證數(shù)碼管全滅retdelay:movr6,#2;12m晶振延時1msd1:movr7,#248djnzr7,$djnzr6,d1rettable:;數(shù)據(jù)表分別為共陽極數(shù)碼管顯示09和負號的數(shù)據(jù)db0c0h,0f9
24、h,0a4h,0b0h,099hdb092h,082h,0f8h,080h,090h,0bfh4.1.2按鍵掃描處理子程序單片機讀取按鍵并與上一個發(fā)送的鍵值比對,如果一致則不發(fā)送,保證了按一次鍵僅發(fā)送一次,避免了重復發(fā)送造成單片機進入死循環(huán)。cal:;轉(zhuǎn)化并判斷是否有鍵被按下,如果有,則發(fā)送數(shù)據(jù),如果沒有繼續(xù)初始化mova,p3;讀取按鍵anla,#0fch;保存高六位數(shù)據(jù)compare:cjnea,30h,save;與上一個按鍵比對,如果不一致,跳轉(zhuǎn)至save子程序sjmpstart;如果與上一個按鍵一致,返回startsave:mov30h,a;將a中的數(shù)據(jù)存入30hcjnea,#0fch
25、, send;如果a中數(shù)據(jù)不為0fch,即有鍵被按下,跳轉(zhuǎn)至發(fā)送子程序sjmpstart;如果a中數(shù)據(jù)為0fch,即無鍵被按下,返回主程序send:;發(fā)送數(shù)據(jù)(沒有通信協(xié)議)callsend_delay;調(diào)用延時子程序mova,30h;將當前鍵值送入amovsbuf,a;將當前鍵值送入sbuf,單片機自動發(fā)送jmpstart;返回至主程序send_delay: ;12m晶振時延時0.1msmovr5,#19hdl1:nopnopdjnzr5,dl1ret4.1.3中斷與計算子程序當單片機收到串行口中斷時,自動尋找中斷程序入口地址0023h,隨后跳轉(zhuǎn)至analy子程序,進行中斷的判斷,如果是發(fā)送
26、中斷,則清ti并返回到斷點,如果是接收中斷,則響應中斷,清ri并將sbuf中的數(shù)據(jù)保存,同時將8位二進制數(shù)據(jù)轉(zhuǎn)換為3位有符號十進制數(shù)據(jù),刷新顯示內(nèi)存,刷新后的數(shù)據(jù)將在下一個顯示周期被顯示出來。org0023h;串行口中斷程序入口跳轉(zhuǎn)jmpanalyanaly:;中斷分析程序jbti,clrti;如果是發(fā)送中斷,跳轉(zhuǎn)至clrtijbri,receive;如果是接收中斷,跳至receivereti;中斷返回clrti:clrti;發(fā)送中斷,清tijmpanaly;返回中斷分析程序receive:clrri;接收中斷,清ri,處理中斷請求mova,sbuf;將sbuf中的數(shù)據(jù)讀取至accmov20h
27、,a;將返回的當前位置存至20hcpla;將a中的值取反,在八位led上顯示movp2,a;將取反后的當前位置值顯示在八位led上jb07h,pos;若當前位置首位為1,即正數(shù),跳至possjmpneg;否則當前位置首位為0,即負數(shù),跳至negpos:setb0d5h;將標志位0d5h置1,表明數(shù)據(jù)為正數(shù)callcalculation;調(diào)用計算子程序jmpanaly;跳回中斷分析程序neg:clr0d5h;將標志位0d5h清0,表明數(shù)據(jù)為負數(shù)mova,20h;將當前位置值放入aclrcy;清cy,為計算減法做準備subba,#1;當前位置減1jbcy,neg_over;判斷是否溢出,如果溢出,
28、說明當前位置為下限,即-128cpla;如果未溢出,說明數(shù)據(jù)正常,對a取反,得到其絕對值mov20h,a;將當前位置的絕對值存入20h,符號位在0d5hcallcalculation;調(diào)用計算子程序,將8位二進制數(shù)轉(zhuǎn)化為3位二進制數(shù)jmpanaly;跳回中斷分析程序neg_over:;當前位置-1溢出,說明為00h,即-128,將128分別放入對應的顯示內(nèi)存mov21h,#1mov22h,#2mov23h,#8jmpanalycalculation:;計算子程序,將8位二進制轉(zhuǎn)化為3位十進制mova,20h;將當前位置放入accanla,#7fh;去除符號位,準備進行運算mov20h,a;存回
29、20hmov a, #100;將#100放入b中,作為除數(shù)mov b, amov a, 20h;將20h放入a中,作為被除數(shù)div ab;進行除法運算mov 21h, a;將商放入21h即百位mov a, b;將余數(shù)放入22h暫時存儲,準備下次運算mov 22h, amov a, #10;將#10放入b中,作為除數(shù)mov b, amov a, 22h;將上次運算的商放入acc,作為被除數(shù)div ab;進行除法運算mov 22h, a;將商放入22h即十位mov a, bmov 23h, a;將余數(shù)放入23h即個位ret4.2從機程序設(shè)計從機遠離主機,雙單片機通過串行通信方式進行通信,以提高通信
30、可靠性,降低通信成本。因此從機需要通過串行口獲取指令,控制步進電機,并將當前位置實時傳遞至主機。從機上電初始化后重復檢測是否有指令被送入內(nèi)存,如果有,則通過調(diào)用相關(guān)子程序控制步進電機運動,每運行一步都會將當前位置送回主機。從機還提供限位保護,當步進電機到達極限位置時,自動停止運行,此時僅接收stop和reset指令,確保機械設(shè)備的安全,并且可以響應reset指令,當收到reset指令時,先判斷當前位置正負值,同時自動控制步進電機回到機械零點,隨后自動停止。為了確保從機的實時響應性,從機選擇中斷接收方式,實時更新主機送來的指令。中斷返回處理數(shù)據(jù)清中斷接收中斷?發(fā)送中斷?中斷上電初始化開始yny判
31、斷當前/目標值nny轉(zhuǎn)動發(fā)送圖4-1 從機程序流程圖4.2.1判斷指令子程序從機上電初始化后,重復判斷當前狀態(tài)與目標狀態(tài)值,一旦不一致,就判斷該如何控制使得步進電機按照目標狀態(tài)運行??刂浦噶畎N,停止,正轉(zhuǎn),反轉(zhuǎn),單步正轉(zhuǎn),單步反轉(zhuǎn),復位。通過判斷每位的狀態(tài),決定如何轉(zhuǎn)動。start:mova,21h;21h存放當前狀態(tài)值cjnea,20h,pos_or_neg;20h存放目標狀態(tài)值,判斷當前狀態(tài)與目標狀態(tài),如不等,則判斷正反轉(zhuǎn)sjmpstart;有數(shù)據(jù)接收,自動跳轉(zhuǎn)至中斷,如果沒有,重復判斷狀態(tài)值并等待。pos_or_neg:;21h存放當前狀態(tài)值,20h存放目標狀態(tài)值jnb02h,st
32、op;如果3.2被按下,跳至stopjnb07h,reset;如果3.7被按下,跳至resetjb0d5h,stop;如果0d5h標志位被置1,說明到達限位值,強制停止jnb03h,pos;如果3.3被按下,正轉(zhuǎn)jnb04h,neg;如果3.4被按下,反轉(zhuǎn)jnb05h,pos_one;如果3.5被按下,pos_onejnb06h,neg_one;如果3.6被按下,neg_onejnb07h,reset;如果3.7被按下,跳至resetsjmpstart;如果檢測不到,返回startstop:mov20h,#0ffh;停止,將當前值和目標值置ffhmov21h,#0ffhsjmpstartpos
33、_one:mov20h,#0ffh;將當前值和目標值置ffhmov21h,#0ffhpos:;正轉(zhuǎn)(一步)callpositive;調(diào)用正轉(zhuǎn)一步子程序callsend;調(diào)用發(fā)送子程序sjmpstart;返回主程序neg_one:mov20h,#0ffh;將當前值和目標值置ffhmov21h,#0ffhneg:callnegative;調(diào)用反轉(zhuǎn)一步子程序callsend;調(diào)用發(fā)送子程序sjmpstart;返回主程序reset:clr0d5hmova,r0cjner0,#80h,judge;判斷當前acc的值,如不為7fh,轉(zhuǎn)至judge判斷正負mov20h,#0ffh;如當前acc為0,將目標狀
34、態(tài)值至ff,即復位完成sjmpstart;返回主程序judge:jb0e7h,neg;若acc首位為1,即acc為正,即當前位置值為正,反走jnb0e7h,pos;若acc首位為0,即acc為負,即當前位置值為負,正走sjmpstart;返回主程序4.2.2中斷響應子程序為了保證通信數(shù)據(jù)的迅速處理,從機采用串行口中斷通信模式,工作模式1,波特率固定11位異步通信模式,當有指令送來時,從機響應串行口中斷,將指令存入目標狀態(tài)值,在下一次的主程序比較中判斷指令。analy:jbti,clrti;如果是發(fā)送中斷,跳轉(zhuǎn)至clrtijbri,receive;如果是接收中斷,跳轉(zhuǎn)至receive執(zhí)行reti
35、clrti:clrti;發(fā)送中斷,清標志并返回sjmpanalyreceive:clrri;接收中斷,清中斷mova,sbuf;讀取數(shù)據(jù)orla,#03h;屏蔽后兩位(txd,rxd)mov20h,a;20h存放目標狀態(tài)值movp1,20h;數(shù)據(jù)送p1口輸出sjmpanaly;接受完畢,返回4.2.3步進電機控制子程序指令經(jīng)過判斷后,根據(jù)需求調(diào)用正轉(zhuǎn)、反轉(zhuǎn)、單步正轉(zhuǎn)、單步反轉(zhuǎn)子程序。每執(zhí)行一步,單片機就會將r0(即當前位置值)通過串行口送至主機,主機接受后即顯示在數(shù)碼管上,同時每執(zhí)行一步之前,單片機都會判斷本次動作是否會到達限位值,如果會達到限位值,則自動停止本次動作,將標志位置1,表明已經(jīng)到
36、達限位值。positive:;正走子程序clrc;清cy,為加法做準備mova,r0;當前位置放入acc,判斷本次運動是否會超過限位值incr4;r4數(shù)據(jù)表增一incr0;r0當前位置值增一adda,#1h;a增一,判斷是否有進位標志jbcy,pos_over;如果有進位標志,說明本次動作會導致溢出,跳至pos_overcjner4,#08h,pos_move;如果本次動作不會溢出,判斷r4是否超過勵磁表上限movr4,#00h;如果r4超過上限,則將r4指向勵磁表首位,進行下一個循環(huán)pos_move:mova,r4;將r4的值放入a,準備間址尋址movca,a+dptr;進行取表操作,獲得勵
37、磁數(shù)據(jù)movr3,a;將勵磁數(shù)據(jù)暫存r3mova,p3;讀p3口數(shù)據(jù),避免修改txd,rxdanla,#3h;保留低兩位的值orla,r3;將勵磁數(shù)據(jù)加入movp3,a;輸出勵磁數(shù)據(jù),同時不改變通訊口的電平clrti;清ti,準備發(fā)送數(shù)據(jù)movsbuf,r0;將當前位置放入sbuf,發(fā)送至主機calldelay;調(diào)用延時,避免轉(zhuǎn)動頻率過快,造成電機失步retpos_over:;正轉(zhuǎn)溢出處理movr0,#0ffh;將當前位置為0ffh即+127decr4;r4減一,回到上個勵磁數(shù)據(jù)setb0d5h;標志位置1,表明到達限位值,不得再繼續(xù)動作sjmpstop;跳至stop,停止指令negative
38、:;反走子程序clrc;清cy,為減法做準備mova,r0;當前位置放入acc,判斷本次運動是否會超過限位值decr4;r4數(shù)據(jù)表減一decr0;r0當前位置值減一subba,#1h;a減一,判斷是否有借位標志jbcy,neg_over;如果有借位標志,說明本次動作會導致溢出,跳至neg_overcjner4,#0ffh,neg_move;如果本次動作不會溢出,判斷r4是否超過勵磁表下限movr4,#07h;如果r4超過下限,則將r4指向勵磁表末位,進行下一個循環(huán)neg_move:mova,r4;將r4的值放入a,準備間址尋址movca,a+dptr;進行取表操作,獲得勵磁數(shù)據(jù)movr3,a;
39、將勵磁數(shù)據(jù)暫存r3mova,p3;讀p3口數(shù)據(jù),避免修改txd,rxdanla,#3h;保留低兩位的值orla,r3;將勵磁數(shù)據(jù)加入movp3,a;輸出勵磁數(shù)據(jù),同時不改變通訊口的電平clrti;清ti,準備發(fā)送數(shù)據(jù)movsbuf,r0;將當前位置放入sbuf,發(fā)送至主機calldelay;調(diào)用延時,避免轉(zhuǎn)動頻率過快,造成電機失步retneg_over:movr0,#00h;反轉(zhuǎn)溢出處理incr4;r4增一,回到上個勵磁數(shù)據(jù)setb0d5h;標志位置1,表明到達限位值,不得再繼續(xù)動作sjmpstop;跳至stop,停止指令delay:;延時子程序 12m時延時65ms,即步進電機頻率約為15h
40、zmovr6,#1d1:movr5,#80hd2:movr7,#0hd3:djnzr7,d3djnzr5,d2djnzr6,d1retruntable:;勵磁數(shù)據(jù)表db030h,020h,060h,040hdb0c0h,080h,090h,010h5proteus仿真將以上設(shè)計的各模塊在proteus中連接,并進行調(diào)試,隨后測試系統(tǒng)性能。圖5-1 系統(tǒng)初始狀態(tài)圖5-2 neg_one單步運行狀態(tài)圖5-3 pos_one單步運行狀態(tài)圖5-4 pos運行至正向限位狀態(tài)圖5-5 neg運行至反向限位狀態(tài)圖5-6 reset運行至機械零點狀態(tài)經(jīng)過測試,通過串行口通信的遠程步進電機控制系統(tǒng)達到了預期目標
41、,經(jīng)過些許的調(diào)試,系統(tǒng)性能良好,各種保護措施有效,圓滿完成了此次設(shè)計的任務。6總結(jié)通過此次課程設(shè)計,使我更加扎實的掌握了有關(guān)單片機及匯編語言方面的知識,以及proteus軟件的使用和keil軟件的使用。在設(shè)計過程中雖然遇到了一些問題,但經(jīng)過一次又一次的思考,一遍又一遍的檢查終于找出了原因所在,也暴露出了前期我在這方面的知識欠缺和經(jīng)驗不足。實踐出真知,通過親自動手制作,使我們掌握的知識不再是紙上談兵。通過本次課設(shè),我學會了遇到問題多查多問,綜合運用所學的一些基本理論、基本知識、基本技能,培養(yǎng)自己獨立分析和解決實際問題的能力,通過試驗推斷結(jié)論;培養(yǎng)嚴肅、認真、科學的工作作風;注重團隊合作精神,學會
42、虛心聽取他人的意見。參考文獻1李群芳等.單片微型計算機與接口技術(shù)(第4版). 北京:電子工業(yè)出版社.20122楊欣.電子設(shè)計從零開始(第2版). 北京:清華大學出版社.20103楊欣.51單片機應用叢零開始. 北京:清華大學出版社.2008 4楊欣.51單片機應用實例詳解. 北京:清華大學出版社.20105高吉祥.數(shù)字系統(tǒng)與自動控制系統(tǒng)設(shè)計.北京:電子工業(yè)出版社.2007附錄1 主機源程序代碼org0000h;上電初始化jmponceorg0023h;串行口中斷程序入口跳轉(zhuǎn)jmpanalyorg0030honce:movdptr,#table;將dptr指向顯示表首地址setbea;開總中斷s
43、etbes;開串行口中斷movscon,#90h;設(shè)置為模式2,允許接收數(shù)據(jù)movp1,#0ffh;位選p1口清零,全不顯示mov20h,#80h;當前位置值設(shè)置為有符號+0setb0d5h;0d5h置1,為+0mov21h,#00hmov22h,#00hmov23h,#00hmovp2,#7fh;p2口為有字符二進制數(shù),初值設(shè)置為+0start:calldisplay;調(diào)用顯示子程序cal:;轉(zhuǎn)化并判斷是否有鍵被按下,如果有,則發(fā)送數(shù)據(jù),如果沒有繼續(xù)初始化mova,p3;讀取按鍵anla,#0fch;保存高六位數(shù)據(jù)compare:cjnea,30h,save;與上一個按鍵比對,如果不一致,跳
44、轉(zhuǎn)至save子程序sjmpstart;如果與上一個按鍵一致,返回startsave:mov30h,a;將a中的數(shù)據(jù)存入30hcjnea,#0fch, send;如果a中數(shù)據(jù)不為0fch,即有鍵被按下,跳轉(zhuǎn)至發(fā)送子程序sjmpstart;如果a中數(shù)據(jù)為0fch,即無鍵被按下,返回主程序send:;發(fā)送數(shù)據(jù)(沒有通信協(xié)議)callsend_delay;調(diào)用延時子程序mova,30h;將當前鍵值送入amovsbuf,a;將當前鍵值送入sbuf,單片機自動發(fā)送jmpstart;返回至主程序send_delay: ;12m晶振時延時0.1msmovr5,#19hdl1:nopnopdjnzr5,dl1r
45、etanaly:;中斷分析程序jbti,clrti;如果是發(fā)送中斷,跳轉(zhuǎn)至clrtijbri,receive;如果是接收中斷,跳至receivereti;中斷返回clrti:clrti;發(fā)送中斷,清tijmpanaly;返回中斷分析程序receive:clrri;接收中斷,清ri,處理中斷請求mova,sbuf;將sbuf中的數(shù)據(jù)讀取至accmov20h,a;將返回的當前位置存至20hcpla;將a中的值取反,在八位led上顯示movp2,a;將取反后的當前位置值顯示在八位led上jb07h,pos;若當前位置首位為1,即正數(shù),跳至possjmpneg;否則當前位置首位為0,即負數(shù),跳至negpos:setb0d5h;將標志位0d5h置1,表明數(shù)據(jù)為正數(shù)callcalculation;調(diào)用計算子程序jmpanaly;跳回中斷分析程序neg:clr0d5h;將標志位0d5h清0,表明數(shù)據(jù)為負數(shù)mova,20h;將當前位置值放入aclrcy;清cy,為計算減法做準備subba,#1;當前位置減1jbcy,neg_over;判斷是否溢出,如果溢出,說明當前位置為下限,即-128cpla;如果未溢出,說明數(shù)據(jù)正常,對a取反得到其絕對值mov20h,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 抵押合同六8篇
- 伸縮門采購合同合同
- 新零售模式下智慧物流配送優(yōu)化策略
- 灑水車合同5篇
- 商業(yè)保密協(xié)議書十
- 公司員工保底協(xié)議
- 2025年貴港貨運資格證培訓考試題
- 2025年寧夏貨車從業(yè)資格證答題軟件
- 陶瓷插芯市場分析及競爭策略分析報告
- 珠光材料市場分析及競爭策略分析報告
- 2024年安徽中醫(yī)藥高等專科學校單招職業(yè)適應性測試題庫附答案
- 天津在津居住情況承諾書
- 2022年中考數(shù)學二輪專題復習:二次函數(shù)性質(zhì)綜合題
- 最大攝氧量的測定
- 國網(wǎng)充電站運維安全管理
- 青海2024年01月青海省省直機關(guān)遴選公務員69人^2024年國家公務員考試考試大綱歷年真題筆試歷年高頻考點難、易錯點薈萃附答案帶詳解
- 無產(chǎn)權(quán)房屋買賣合同模板
- 一年級美術(shù)課后輔導教案-1
- 六年級上冊數(shù)學200道口算題
- 能斷金剛:超凡的經(jīng)營智慧
- 甲狀旁腺疾病匯報演示課件
評論
0/150
提交評論