微型計算機步進電機遠程控制系統(tǒng)設計_第1頁
微型計算機步進電機遠程控制系統(tǒng)設計_第2頁
微型計算機步進電機遠程控制系統(tǒng)設計_第3頁
微型計算機步進電機遠程控制系統(tǒng)設計_第4頁
微型計算機步進電機遠程控制系統(tǒng)設計_第5頁
已閱讀5頁,還剩16頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、步進電機遠程控制系統(tǒng)設計報告書1.前言1.1 設計背景課程設計是完成教學計劃達到本科生培養(yǎng)目標的重要環(huán)節(jié),是教學計劃中進行綜合訓練的重要實踐環(huán)節(jié),是有助于培養(yǎng)應用性人才的一種教學形式,它將使我們在綜合運用所學知識,解決計算機本專業(yè)方向的實際問題方面得到系統(tǒng)性的訓練。 而且微機接口技術是一門實踐性很強的課程,必須加強實驗教學。本課程設計是在學習微機接口技術課程之后,運用先前所學的計算機組成原理、電子技術、接口技術以及程序設計方法,分析與設計一個實際的計算機應用系統(tǒng)的接口電路。因此,微機接口技術課程設計是繼微機接口技術之后加強實踐教學的重要專業(yè)課程。微處理器經(jīng)過幾十年的發(fā)展,已形成種類繁多、性能與

2、功能各異的局面,高性能計算機的實現(xiàn)使能技術包括計算數(shù)學、計算機體系結構與部件構成技術三部分。以計算機性能為主線,介紹高性能計算機研制的歷史、現(xiàn)狀與未來展望。1.2 設計目的通過本課程的實踐環(huán)節(jié)訓練,深化和鞏固我們?nèi)晁鶎W的軟硬件理論知識,使我們能夠充分的認識計算機接口設計的全局過程,以加強軟硬件設計水平和開發(fā)技能,更在很大程度上培養(yǎng)我們綜合應用接口技術分析和解決實際問題的能力。課程設計的目標是使我們可以在以下幾個方面得到訓練:(1) 培養(yǎng)正確的設計思想,理論聯(lián)系實際的工作作風,嚴肅認真、實事求是的科學態(tài)度和勇于探索的創(chuàng)新精神。(2) 培養(yǎng)綜合運用所學知識與生產(chǎn)實踐經(jīng)驗,分析和解決工程技術問題的

3、能力。(3) 通過課程設計實踐,訓練并提高在校大學生在理論計算、結構設計、工程繪圖、查閱設計資料、運用標準與規(guī)范和應用計算機等方面的能力。(4) 利用所學過的知識,初步分析計算機原理及接口技術的能力; (5) 計算機定時/計數(shù)系統(tǒng)(包括管理軟件及控制應用軟件) 的設計、編程與調(diào)試的能力; (6) 計算機中斷系統(tǒng)的應用設計、調(diào)試的能力; (7) 計算機并行、串行通信的設計和調(diào)試的能力1.3 設計方法和步驟(1) 設計方法對于硬件電路,我們小組主要通過微機實驗指導書里面的步進電機原理圖來構建電路。然后結合軟件設計中各個端口的使用情況來調(diào)整端口的使用問題。在硬件連接的過程中,我們對于有些集成芯片的引

4、腳接入接出情況不是很了解,借助學校為我們提供的網(wǎng)絡條件,搜索有用的信息來幫助我們正確的連接硬件。軟件的編寫,主要利用MFID 實驗平臺上的步進電機控制C語言、匯編程序和查詢方式全雙工串行通信接口程序來修改,并且進一步的編寫。其中,在編寫程序的過程中,我們的隨時的考慮到硬件芯片上端口的高低電位的控制,否則會嚴重影響步進電機的遠程和本地的通信、控制。(2)研究步驟 硬件的連接步驟:根據(jù)原理圖來選定所需的硬件元器件,以及足夠的連接導線。 熟悉各個元器件的電氣特性和內(nèi)部結構特征 對我們所使用的面包板的接線原理有一個清晰的認識,為我們 硬件的接線起一個必要的鋪墊。 接線并合理的布局,使得我們所接的線路清

5、晰、明了,調(diào)試硬件電路,檢查錯誤并分析解決。 軟件的設計步驟 分析整個課程設計的實驗要求,即需求分析。 把步進電機的遠程控制分為兩個模塊:電機的本地控制和遠程控制,分別來編寫。 依據(jù)具體的需求和實際的芯片特征,合適的調(diào)用8255和8251的A、B、C口的端口地址,以及其他的系統(tǒng)函數(shù)和自己編寫的函數(shù)。 編寫本地的電機控制程序,并與接好的硬件一起 。 編寫遠程的控制程序。主要通過全雙工查詢方式串行通信程序的基本原理來具體地編寫,這是這個程序設計的一個難點和重點。 組合兩個模塊的程序,設置適當?shù)姆栃畔磉h程控制電機的運行。并結合硬件電路調(diào)試和修改。 調(diào)試成功后,為所編寫的代碼書寫適當?shù)淖⑨?,以便?/p>

6、序的修改和易懂性。 驗收,書寫實驗報告和文檔。2. 需求分析2.1 系統(tǒng)設計目標 通過步進電機遠程控制系統(tǒng)設與制作,深入了解與掌握利用RS-232或RS-485串行通信標準進行遠程傳送的原理和方法。2.2 系統(tǒng)設計要求 甲機通過RS-232或RS-485接口遠距離控制乙機一側步進電機的起/停。 甲機通過RS-232或RS-485接口遠距離控制乙機一側步進電機的方向。 甲機通過RS-232或RS-485接口遠距離控制乙機一側步進電機的起/位、方向,并采用對話框選擇控制項目。2.3 系統(tǒng)設計內(nèi)容 進行步進電機遠程控制系統(tǒng)電路硬件設計,畫出電路原理圖,PCB圖或元器件布線圖; 安裝或焊接元器件; 進

7、行步進電機遠程控制程序設計; 系統(tǒng)聯(lián)調(diào),提交一個符合控制程序上述2種要求的通信程序作品3.設計環(huán)境3.1 課程設計平臺 PC兼容機 Windows 2000 MFID多功能微機實驗平臺 MF2KI集成開發(fā)環(huán)境 面包板 硬件元器件3.2 系統(tǒng)平臺配置 電源:機內(nèi)供電。 I/O端口地址:8255的4個端口地址為300H303H。其中A口300H,B口301H,C口302H,命令口303H。DIP4開關的4位開關全部向上置為ON; 電纜線與插座:采用26芯扁平電纜與J5;元器件:包括接口的對象永磁式四相步進電機,驅(qū)動電路達林頓管TIP122,保護電路74LS373,相序指示燈以及開關SW1和SW2等

8、; 步進電機模塊上的開關SW1和SW2的功能:配置為用來控制步進電機的運行方向、速度和啟動/停止; 軟件資源:MF軟件提供的用戶應用程序集成開發(fā)環(huán)境和工具,有Windows2000和98兩個版本,兩個版本都包含了豐富的匯編語言和C語言程序軟件開發(fā)包。4. 概要設計 4.1 硬件設計4.1.1 步進電機控制電路(1)依據(jù)原理圖,連接硬件電路(2)將MFID平臺用26針接口把步進電機硬件電路連接。4.1.2 遠程控制電路的連接(1)8255A芯片與8251A芯片連接。(2)利用RS-232標準串行通信接口連接硬件平臺,實現(xiàn)并口與串口的轉(zhuǎn)換。4.2 軟件設計4.2.1 步進電機本地控制設計(1)能夠

9、在本地通過SW1/SW2控制步進電機的啟動/停止;(2)當接收到遠程發(fā)送來的控制信息,控制電機的不同方式的運轉(zhuǎn)。4.2.2 步進電機遠程設計(1)當本地按下SW1/SW2時,依舊可以能夠識別并控制電機;(2)發(fā)送控制信息,以串行通信的方式控制電機。4.2.3 硬件電路原理圖步進電機本地控制原理圖,如圖4-1所示:圖4-1步進電機本地控制原理圖 步進電機遠程控制系統(tǒng)原理圖,如圖4-2所示。圖4-2步進電機遠程控制系統(tǒng)原理圖5. 詳細設計5.1 步進電機的控制原理步進電機是將脈沖信號轉(zhuǎn)換成角位移的一種機電式數(shù)模轉(zhuǎn)換器。步進電機旋轉(zhuǎn)的角位移與輸入脈沖的個數(shù)成正比;步進電機的轉(zhuǎn)速與輸入脈沖的頻率成正比

10、;步進電機的轉(zhuǎn)動方向與輸入脈沖對繞組加電的順序有關。因此,步進電機旋轉(zhuǎn)的角位移、轉(zhuǎn)速以及方向均受輸入脈沖的控制。5.2 硬件設計5.2.1步進電機控制電路設計步進電機接口的硬件部分主要是提供輸送相序代碼的并行接口數(shù)據(jù)線(8根),以及保護電機繞組的器件,所以接口電路以8255A為主芯片(8255A的介紹詳見前面音樂發(fā)生器中的介紹),將PA口作為數(shù)據(jù)口,傳送加電代碼,再加上鎖存器74LS373作繞組保護,74LS73芯片的引腳分配如圖5-1所示,TIP122+12VA圖5-2 TIP122原理圖功能對應表如表5-1所示,功能表中當G為高時,Q輸出將隨數(shù)據(jù)D輸入而變;當G為低時,Q輸出將鎖存已建立的

11、數(shù)據(jù)電平。另外,還有功率驅(qū)動管TIP122(如圖5-2),以及二極管(用作保護TIP驅(qū)動管)、按鍵開關SW等。很明顯,這里并沒有什么聯(lián)絡線。這是因為此處的被控對象步進電機總是處于準備好接收8255A傳來的數(shù)據(jù)(相序加電代碼)的,不需要查詢是否準備好,即無條件傳送。表5-174LS373功能表5.2.2 步進電機的控制與串行通信原理步進電機是將脈沖信號轉(zhuǎn)換成角位移的一種機電式數(shù)模轉(zhuǎn)換器。步進電機旋轉(zhuǎn)的角位移與輸入脈沖的個數(shù)成正比;步進電機的轉(zhuǎn)速與輸入脈沖的頻率成正比;步進電機的轉(zhuǎn)動方向與輸入脈沖對繞組加電的順序有關。因此,步進電機旋轉(zhuǎn)的角位移、轉(zhuǎn)速以及方向均受輸入脈沖的控制。RS-232標準串行

12、通信接口電路以8251為核心,8253提供發(fā)/收時鐘,8255控制8253的Gate門。另外,還有MAX232作電平轉(zhuǎn)換,MAX491作RS-232 與RS-485的轉(zhuǎn)換,JP31作中斷申請開關等。因此,該接口電路可實現(xiàn)兩種借口標準和查詢/中斷兩種方式的串行通信。5.2.3 步進電機的啟/停以及速度控制設置開關為了控制步進電機的啟/停和運行方向,通常采用設置硬件開關或軟件開關的方法。所謂硬開關方法,一般是在外部設置按鍵開關SW,并且約定當某個開關SW按下時啟動運行或停止運行,而另外一個SW開關的開啟可用來控制步進電機的運行速度。為此,需要在程序中將開關SW的狀態(tài)讀入,以便檢測SW是否按下。所謂

13、軟開關方法,就是利用系統(tǒng)的鍵盤,定義某一個鍵,當該鍵按下時,啟動或停止運行。為此,在程序中要利用DOS系統(tǒng)功能調(diào)用來檢測鍵盤輸入。本次畢業(yè)設計中使用的使硬開關的方法。設置了SW1和SW2兩個硬開關,分別連接到8255A的PC0和PC1,分別用以控制步進電機的啟/停和方向控制。設計完成的具體步進電機完整遠程控制功能原理圖,如圖5-3所示。圖5-3步進電機遠程控制功能原理圖5.2.4 實驗電路的搭建實驗原理圖設計好了以后,在面包板上搭建步進電機驅(qū)動模塊的電路,并使用26芯的扁平電纜線,將面包板與平臺上的并行接口插座J5連接起來。搭建步驟參照前面音樂發(fā)生器電路模塊的步驟。5.2.5 步進電機的控制程

14、序設計控制程序的設計思想實現(xiàn)步進電機運行方式、方向和速度以及啟/停的控制,是接口軟件設計的主要任務。為此,在編寫程序之前,要建立一個相序表。相序表的建立應根據(jù)步進電機運行方式的要求。 運行方式與方向的控制循環(huán)查表法繞組與數(shù)據(jù)線的連接 運行方式 相序表 方 向加電代碼地址單元正向反向 雙八拍 表5-2 相序表D C B AD7 D6D5D4D3D2D1D00 0 0 0 0 1 0 10 0 0 1 0 1 0 10 0 0 1 0 1 0 00 1 0 1 0 1 0 00 1 0 1 0 0 0 00 1 0 1 0 0 0 10 1 0 0 0 0 0 10 1 0 0 0 1 0 1AB

15、ABCBCBCDCDCDADADAB05H 400H15H 401H14H 402H54H 403H50H 404H51H 405H41H 406H45H 407H步進電機的運行方式是指各相繞組循環(huán)輪流通電的方式。如四相步進電機有單四拍、雙四拍、單雙八拍和雙八拍幾種方式。為了實現(xiàn)對各繞組按一定方式輪流加電,需要一個脈沖循環(huán)分配器。循環(huán)分配器可用硬件電路來實現(xiàn),也可用軟件來實現(xiàn)。采用軟件來設計脈沖循環(huán)分配器,又有兩種方法:控制字法和循環(huán)查表法。下面僅對普遍使用的循環(huán)查表法作一介紹。循環(huán)查表法是將各相繞組加電順序的控制代碼制成一張表步進電機相序表,存放在內(nèi)存區(qū),再設置一個地址指針。當?shù)刂分羔樢来渭?/p>

16、1(或減1)時,即可從表中取出加電的代碼,然后輸出到步進電機,產(chǎn)生按一定運行方式的走步操作。若改變相序表內(nèi)的加電代碼和地址指針的指向,則可改變步進電機的運行方式和方向。相序表的建立,要考慮兩個因素:一是應根據(jù)步進電機運行方式的要求;二是步進電機的各項繞組與數(shù)據(jù)線連接的對應關系。這意味著相序表中的加電代碼,與步進電機的運行方式及繞組與數(shù)據(jù)線的連接有關。因此,實現(xiàn)同一種運行方式,而由于繞組與數(shù)據(jù)線的連接不同,可以有多種相序加電代碼。表5-2列出了四相雙八拍運行方式的一種相序加電代碼。當然,運行方式發(fā)生改變,加電代碼也會改變。步進電機的運行方向是采用設置相序表的指針進行控制的。如表5-2所示,如果把

17、指針設在指向400H單元開始,依次加1,取出加電代碼去控制步進電機的運行方向叫做正(向前)方向,那么,再把指針改設在指向407H單元開始,依次減1的方向就是反(向后)方向。另外,表5-2中的地址單元是隨便給定的,在程序中是定義一個變量,來指出相序表的首址??傊瑢Σ竭M電機運行方式的控制是采用建立相序表的方法,而運行方向的控制是設置相序表的指針來解決。 步進電機運行速度的控制軟件延時法控制步進電機速度有兩個途徑:一是硬件改變輸入脈沖的頻率,通過對定時器(如:8253)定時常數(shù)的設定,使其升頻、降頻或恒頻。二是軟件延時,或調(diào)用子程序。采用軟件延時方法來改變步進電機速度,雖然簡便易行,但延時受CPU

18、主頻的影響,導致在主頻較低的微機上開發(fā)的步進電機控制程序換到較高的主頻的微機上,就不能正常運行,甚至由于頻率太高,步進電機干脆不動了。應該指出的是,步進電機的速度還受到本身距頻特性的限制,設計時應滿足運行頻率與負載力矩之間的確定關系,否則,就會產(chǎn)生失步或無法工作的現(xiàn)象。5.3 軟件設計5.3.1 步進電機控制程序設計(1) 端口的使用I/O端口地址:8255的4個端口地址為300H303H。其中A口300H,B口 301H,C口302H,命令口303H。8253的四個端口地址為304H307H,其中通道0為304H,通道1為305H,通道2為306H,命令口為307 H。8251的兩個端口為:

19、308 H309 H,其中,308 H為8251數(shù)據(jù)口,309 H為命令/狀態(tài)口。(2) 步進電機的驅(qū)動步進電機在系統(tǒng)中是一種執(zhí)行元件,都要帶負載,因此,需要功率的驅(qū)動。在電子儀器和設備中,一般所需功率較小,常采用達林頓復合管作功率驅(qū)動。驅(qū)動原理圖如5-4所示。圖5-2中2,在TIP122的基極上,加電脈沖為高時,加電代碼1時,達林頓管導通,使繞組A通電;加電代碼0時,繞組斷電。控制輸出 使能 G D 輸出 QL H H HL H L LL L x Q0H x x Z表5-3 74LS373功能對應表步進電機在系統(tǒng)中是一種執(zhí)行元件,都要帶負載,因此,需要功率的驅(qū)動。在電子儀器和設備中,一般所需

20、功率較小,常采用達林頓復合管作功率驅(qū)動。在TIP122的基極上,加電脈沖為高時,加電代碼1時,達林頓管導通,使繞組A通電;加電代碼0時,繞組斷電。5.3.2 程序流程圖 本地接收程序流程圖如圖5-4所示。圖5-4本地接收程序流程圖 遠程控制程序流程圖,如圖5-6 所示。圖5-6遠程控制程序流程圖5.3.3 代碼生成步進電機本地控制的程序見附錄AI;步進電機遠程控制的程序見附錄AII。6 系統(tǒng)調(diào)試與操作說明6.1 系統(tǒng)調(diào)試6.1.1 檢測實驗平臺及配套設備在關機狀態(tài)下將PCI總線驅(qū)動板插入電腦主板上PCI總線插槽中,并用50芯扁平電纜線將總線信息接入到MFID多功能微機實驗平臺的50芯擴展總線插

21、座J1。然后開機,進入MF多功能微機實驗集成開發(fā)環(huán)境,利用平臺板上的資源,運行程序,檢測系統(tǒng)的硬件環(huán)境是否正常。如果正常,則繼續(xù)下一步的操作;如果不正常,則開啟MF中的故障檢測軟件,對運行平臺上的芯片進行針對性檢測,直到平臺的硬件系統(tǒng)正常為止。6.1.2 調(diào)試自己設計的軟件控制程序?qū)嶒炂脚_硬件完好的情況下,利用平臺板上的硬件資源來調(diào)試根據(jù)實驗要求自己編寫的程序。其調(diào)試方法是:采用MF集成開發(fā)環(huán)境提供的軟件工具,點擊編譯菜單項,對自編的程序進行編譯、連接和運行,觀察控制程序運行結果是否達到設計要求。如果達到要求,則繼續(xù)下一步的操作,否則,對自編的程序進行調(diào)試,直至運行結果符合要求為止。6.1.3

22、 調(diào)試自己設計的硬件控制電路將實驗平臺板上的部分電路換成自己搭建的模塊電路,然后運行MF集成開發(fā)環(huán)境提供的實驗演示程序,觀察是否能滿足硬件電路設計的要求。如果能滿足要求,則進行下一步的操作,否則,進行電路調(diào)試,直至滿足要求為止。調(diào)試所用到的工具是萬用表和示波器。6.1.4 硬件控制電路與軟件控制程序聯(lián)調(diào)將自制的模塊電路(在面包板上)連接到系統(tǒng)設計平臺相應接口插座處,構成一個包括CPU、接口和被控對象完整的微機控制系統(tǒng),同時將自己設計的控制程序調(diào)入內(nèi)存,然后點擊MF集成開發(fā)環(huán)境軟件中的編譯,進行編譯、連接和運行該程序,觀察結果是否正確。如果前面幾步是嚴格按照順序走下來的,這時應該得到正確的結果,

23、于是一個實驗就成功了。由于本次實驗開發(fā)所使用的是MFID多功能實驗平臺提供的硬件平臺和集成開發(fā)環(huán)境軟件工具,整個調(diào)試過程比較順利。因此,建議那些對MFID多功能實驗平臺不太熟悉的開發(fā)人員,多花點時間去了解和熟悉這個實驗平臺的使用。6.2操作說明6.2.1 硬件連接與程序運行用RS-485電纜連接兩臺MFID平臺,再用26芯排線連接本地MFID平臺和面包板分別在本地和遠程計算機上安裝并運行LocalControl.cpp 與RemoteControl.cpp程序6.2.2電機轉(zhuǎn)動及發(fā)光二極管發(fā)光情況 (1)啟動 本地控制端,按開關SW1,電機順時針轉(zhuǎn)動,四個發(fā)光二極管順時針輪流正常發(fā)光;遠程控制

24、端,敲擊鍵盤上的“B”鍵,運行情況和本地控制一致。(2)停止本地控制端,按下開關SW2,電機及發(fā)光二極管停止運轉(zhuǎn)和發(fā)光;遠程控制端,敲擊鍵盤上的“P”鍵,運行情況和本地控制一致(3)電機轉(zhuǎn)動及發(fā)光當電機啟動后,本地不能夠用開關同時控制電機的運轉(zhuǎn)方向。遠程控制端,在鍵盤上敲擊“A”鍵,電機順時針轉(zhuǎn)動,四個發(fā)光二極管順時針閃亮;再敲擊“F”鍵,電機轉(zhuǎn)動變快和四個發(fā)光二極管也快速閃亮;如果再敲擊“S”鍵,相反,電機與發(fā)光二極管轉(zhuǎn)動與發(fā)光都邊慢。當敲擊“D”鍵時,電機與發(fā)光二極管都逆時針轉(zhuǎn)動與發(fā)光,同理上述說明,若再敲擊“F”、“S”,情況與順時針時類似,只是轉(zhuǎn)動與閃亮順序相反。(4)退出本地或遠程控

25、制端按下“ESC“鍵,運行程序退出。7. 設計總結和心得體會 通過這次課程設計,我更加深刻的認識到了步進電機遠程控制的基本原理和硬件電路中各個芯片的內(nèi)部結構。由于我們的課程設計是小組完成的,因而協(xié)調(diào)小組中個成員的任務的極其重要的。只有作為小組長的我們細心的分配好具體的任務,并且時時地監(jiān)督檢查小組成員的任務完成情況,我們的設計任務才能夠按計劃的進行。 在軟件編寫的過程中,我遇到了很多平時沒有遇到和了解的問題。首先,就是端口地址的具體調(diào)用,并且在設計中如何去使用。在這一點上,通過張緒輝老師在實驗室里,給大家仔細分析例程的過程中,我基本上理解到端口地址的調(diào)用。 在遠程控制這一塊,我首先通過分析參考例

26、程,并做相應的修改,依然無法控制電機,后來,通過與我做同一個課程設計,也是我的室友陳冠宏的分析幫助下,我才了解到原來是我在初始化的方式上出現(xiàn)了問題。后來,我們又經(jīng)常在一起討論軟件設計方面的問題,這對我在軟件編寫上收益匪淺,可是我們又遇到了同樣的問題,一旦電機運行后,遠程可以控制啟/停,而本地卻無效。在這塊,我也做了一定的嘗試,但事倍功半。我和陳冠宏在龔老師和李暢老師的指導下,終于解決了這個難題! 在我們小組中,我覺得任務的分配比較合理的。其中,由兩個小組成員負責硬件電路的搭接和資料的搜集,另外讓一個成員負責PCB圖的制作。當然,在協(xié)調(diào)他們的工作上,我由于經(jīng)驗上的不足,還是有些小的細節(jié)不能顧及到

27、,因而出現(xiàn)了一些進度的滯后,是我今后在團隊合作中應注意到的。 總的說來,我還是覺得我們小組的每個人在課程設計期間都是付出了努力,并且都是有很大的收獲的。對于我自己來說,最深刻的體會是:通過課程設計的鍛煉,讓我了解到自己的知識的不足,同時也學到了各種電器件(面包板、萬用表、電烙鐵)的使用。致 謝在這次課程設計期間,有很多的老師和同學給予了我很多的幫助,在這里,我特別要感謝我們的項目指導老師 龔義建老師,張緒輝老師、孫延維老師、陳宇老師、杜發(fā)啟老師,還有特地從公司返回母校指導我們課程設計的李暢學長,以及給予過我無私幫助的同學。正是因為他們的不倦的幫助和指導,才使得我們的課程設計得以順利的完成!并且

28、完全實現(xiàn)了設計要求的功能!在此,我對他們表示深深的感謝!參考文獻1 劉樂善主編 微型計算機接口技術及應用 華中科技大學出版社,2000年第1版2 譚浩強主編 C 程序設計(第二版)清華大學出版社,1999年第2版3 32 位MFID-4微機實驗指導書華中科技大學計算機學院自編21附 錄A步進電機遠程控制程序代碼I 步進電機本地控制程序如下:/-/-步進電機本地控制程序-/-* LocalControl Protram *-#include <conio.h> /kbhit();#include <stdio.h> /printf();#include <dos.h

29、> /delay();#define data51 0x308 /8251A數(shù)據(jù)口#define ctrl51 0x309 /8251A命令/狀態(tài)口#define ctrl55 0x303 /8255命令口#define timer1 0x305 /timer 1 of 8253#define timer2 0x306 /8253的2號計數(shù)器端口#define timctl 0x307 /8253命令口#define factor 16 /波特率因子16#define baudRate 4800 /Set BaudRate/-* 定義函數(shù) *-void ReceiveInit();voi

30、d Listening();void int51();void set_bps(int bps);void MotorInit();void StartWork();void StopWork();void SetSequenceTable(int t);int* table; / 相序表指針char rcmd; /定義接受遠程命令信息變量int status; /定義狀態(tài)變量void main()printf("-nn");printf("* Remote StepMotor Control System *nn");printf("-n&q

31、uot;);printf("n Receiving remote control command.n");printf("n Press 'Esc' to exit the application!n");ReceiveInit();for(;)if (kbhit()/ 檢查按鍵if(getche()=0x1b)/是ESC?是,則退出,并返回DOSoutport(ctrl55,0x0c);/關閉8253return;if(inportb(0x301) = 0x02)StartWork();rcmd = 0;Listening();if(r

32、cmd ='b')StartWork();rcmd = 0;/ rcmd 置空StopWork();/*/ Serial Communication ModuleStart/*unsigned long int clk = 1193182;/8251輸入時鐘頻率(十六進制表示)void ReceiveInit()set_bps(baudRate);int51();outportb(0x303,0x82); /Initialization 8255outportb(0x303,0x0d); /置PC6=1,打開8253-5的GATE2,開始輸出方波void Listening()

33、status=inportb(ctrl51);/獲取8253 TXRDY 狀態(tài)status=inportb(ctrl51);/已準備好,即有數(shù)據(jù)傳送過來,則接收1個字符if(status&0x02)!=0)rcmd=inportb(data51);printf("%c",rcmd);void int51()outportb(ctrl51,0x00);delay(100);outportb(ctrl51,0x40); /8251復位delay(100);outportb(ctrl51,0x4a); /8251A方式命令delay(100);outportb(ctrl5

34、1,0x27); /8251A工作命令void set_bps(int bps)int i,sendhigh,sendlow;i=clk/bps;i=i/factor; /計算計數(shù)初值sendhigh = (i>>8)&0x00ff;sendlow = i & 0x00ff;outportb(timctl,0xb6);outportb(timer2,sendlow); /裝計數(shù)初值低字節(jié)outportb(timer2,sendhigh); /裝計數(shù)初值高字節(jié)/*/ Serial Communication Module End /*/*/ StepMotor Com

35、mand ModuleBegin/*void MotorInit()/outportb(0x303,0x81); /初始化outportb(0x303,0x09); /置PC4=1關閉74LS373 outportb(0x303,0x08); /置PC4=0,打開74LS373void StartWork()int xu8=0x05,0x15,0x14,0x54,0x50,0x51,0x41,0x45; /相序表int rxu8=0x45,0x41,0x51,0x50,0x54,0x14,0x15,0x05;/反向相序表unsigned int i=0;int delayTime = 20;c

36、har cmd = 0;table = xu; / 默認相序表doMotorInit(); outportb(0x300,tablei);/送相序代碼到PA口 i+; if(i=8) i=0; delay(delayTime);/延時Listening();if(char)cmd != (char)rcmd)cmd = rcmd;elsecmd = 0; switch(cmd)case 'f': delayTime = 20;/printf("StepMotor rotated at high speed!n");break;case 's'

37、:delayTime = 100;/printf("StepMotor rotated at low speed!n");break;case 'a':SetSequenceTable(xu);/printf("StepMotor deasil rotate!n");break;case 'd':SetSequenceTable(rxu);/printf("StepMotor anticlockwise rotate!n");break;default:break; /x=inportb(0x301);

38、while(inportb(0x301)!=0x01)&&!(rcmd='p');/查SW2按下,或p鍵按下 void SetSequenceTable(int t)table = t;void StopWork()outportb(0x303,0x09);/置PC4=1,關閉74LS373/*/ StepMotor Command Module End/*II 遠程控制程序如下:/*-*/* RemoteControl.cpp(查詢方式全雙工串行通信接口實驗) */* 查詢方式全雙工串行通信程序 Source File */* Copyright (c) 20

39、01 by HUST */*-*/#include <conio.h> /kbhit();#include <stdio.h> /printf();#include <dos.h> /delay();#define data51 0x308 /8251A數(shù)據(jù)口#define ctrl51 0x309 /8251A命令/狀態(tài)口#define ctrl55 0x303 /8255命令口#define timer2 0x306 /8253的2號計數(shù)器端口#define timctl 0x307 /8253命令口/#define clk 1193182 #define factor 16 /波特率因子16unsigned long int clk = 1193182;/8251輸入時鐘頻率(十六進制表示)/定時常數(shù)數(shù)組const int boundRate = 4800;void int51(); /初始化8251avoid set_bps(int bps); /8253-5記數(shù)初值計算與裝入void main()int scmd,rcmd,status;set_bps(

溫馨提示

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

評論

0/150

提交評論