基于51單片機的步進電機控制_第1頁
基于51單片機的步進電機控制_第2頁
基于51單片機的步進電機控制_第3頁
基于51單片機的步進電機控制_第4頁
基于51單片機的步進電機控制_第5頁
已閱讀5頁,還剩32頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

本科畢業(yè)設計(論文)基于51單片機的步進電機控制TheControlOfSteppingMotorBasedOn51SingleChipMicrocomputer基于51單片機的步進電機控制摘要:進電動機是一種將電脈沖信號轉換線位移或成角位移的精密執(zhí)行元件,具有快速停止和起動的特點。其指令脈沖和驅動速度能嚴格同步,具有較高的重復定位精度,并能實現(xiàn)平滑速度調節(jié)和正反轉。它的步距和運行速度不受電源電壓波動及負載的影響,因而被廣泛應用于速度控制、數(shù)模轉換和位置控制系統(tǒng)。本文在分析了斬波恒流細分驅動原理、步進電機的驅動特性和混合式步進電機驅動芯片ULN2003AN的性能、結構的基礎上,結合AT89C52單片機,設計出了混合式步進電機驅動電路。關鍵詞:步進電機;AT89C52單片機;ULN2003AN驅動.中圖分類號:TP271TheControlOfSteppingMotorBasedOn51SingleChipMicrocomputerAbstract:Steppingmotorsisakindofwillconvertangulardisplacementorelectricalimpulsessignallinedisplacementofprecisionactuator,havefaststopandstartcharacteristics.Thedrivingspeedandinstructionspulsecanstrictlysynchronization,whichhashighrepositioningprecision,andcanrealizethepositive&negativeandsmoothadjustablespeed.Itsoperationspeedandstepdistancefromsupplyvoltagefluctuationandloadeffect,whichhavebeenwidelyappliedinanalog-to-digitalconversion,speedcontrolandthepositioncontrolsystem.Basedontheanalysisofthesteppermotordrivingcharacteristics,achopperconstant-currentsubdivideddrivingprincipleandhybridsteppingmotordrivechipULN2003ANtheperformance,structureinthefoundation,theunionAT89C52singlechipcomputer,designedahybridsteppingmotordrivercircuit.Keywords:Steppingmotor;AT89C52singlechipcomputer;ULN2003ANdriver.Classification:TP271 目次摘要 I目次 Ⅲ1緒論 11.1課題研究的目的和意義 11.2國內外研究概況 11.3課題主要研究內容 22步進電機原理介紹 32.3步進電機的概述 32.1步進電機的工作原理 32.2步進電機24BYJ48的相關電氣參數(shù) 43總體設計思路 53.1方案與設計思路 53.2總框圖 54硬件選型與硬件電路的設計 74.1步進電機的驅動 74.2單片機的選取 74.3轉速信號采集方案 84.4測速模塊 84.5液晶LCD1602顯示模塊 94.6按鍵電路設計 104.7時鐘電路 115程序設計 125.1主程序 125.2LCD及檔位顯示程序 135.3正反轉流程圖 145.4啟動與停止流程圖 156調試與故障分析 166.1軟件編寫及調試 166.2調試過程及相關顯示結果 166.3故障分析及解決方法 187總結 19參考文獻 20附件A 21附件B 22附件C 23附件D 24學位論文數(shù)據(jù)集 331緒論1.1課題研究的目的和意義1.1.1研究的目的在現(xiàn)代工業(yè)和經(jīng)濟生活中,隨著工業(yè)自動化的發(fā)展,電機的應用也越來越廣泛,日益成為我們日常生活中不可缺少的一部分,無論是交通工具,還是家用電器都離不開電機的運轉[1]。步進電機作為電機的一種,可以靠開路控制做精確的定位,在一些重要的領域有著普通電機不可替代的作用[1]。普遍應用于電腦的外設及工業(yè)生產(chǎn)的自動化機具設備中,如NC車床、切割機,此外機器人的各個關節(jié)控制也大量的使用步進電機[1]。

近些年來,由于步進電機的控制精度不斷提高,越來越多有較高控制精度要求的系統(tǒng)也開始采用步進電機,步進電機的應用范圍進一步擴大。對于小功率步進電機,一般采用單片機與專用步進電機驅動器聯(lián)合工作的方式,單片機產(chǎn)生脈沖,控制停啟、正反轉,變速等,專用步進電機驅動器則進行脈沖環(huán)形分配及功率驅動,這種控制方式降低成本,縮小體積,簡單方便,易于實現(xiàn),隨著微電子和計算機技術的發(fā)展,步進電動機的需求量與日俱增,研制步進電機驅動器及其控制系統(tǒng)具有十分重要的意義[3]。1.1.2研究的意義步進電動機是用電脈沖信號進行控制,將電脈沖信號轉換成相應的角位移或線位移的微電動機,它最突出的優(yōu)點是可以在寬廣的頻率范圍內通過改變脈沖頻率來實現(xiàn)調速,快速起停、正反轉控制及制動等,并且用其組成的開環(huán)系統(tǒng)既簡單、廉價,又非常可行,因此在打印機等辦公自動化設備以及各種控制裝置等眾多領域有著極其廣泛的應用[3]。同時,步進電機在工業(yè)控制生產(chǎn)以及儀器上應用十分廣泛。通常都要對一些機械部件平移和轉動,對移動的位移和角度控制要求較高,一般的電機很難實現(xiàn)對位置和角度的精確控制,在一些智能化要求較高的場合,用模擬芯片控制器及信號發(fā)生器來控制有一定局限性,而用單片機控制步進電機可以改善性能,步進電機能實現(xiàn)精確的角度和轉數(shù),具有良好的步進特性,最適合數(shù)字控制。在工控設備中得到了廣泛的應用。而單片機具有芯片體積小,兼容性強,低電壓地,低功耗等特點,使單片機成為驅動步進電機的最佳空盒子單元。所以單片機控制步進電機系統(tǒng)控制精度高,運行穩(wěn)定,得以廣泛運用。隨著微電子和計算機技術的發(fā)展,步進電動機的需求量與日俱增,研制步進電機驅動器及其控制系統(tǒng)具有十分重要的意義[4]。1.2國內外研究概況步進電機最早是在1920年由英國人發(fā)明的。我國步進電機的研究及制造起始于本世界50年代后期,從50年代后期到60年代后期,主要是高等院校和科研機構為研究一些裝置而使用或開發(fā)少量產(chǎn)品。中國在文化大革命中已經(jīng)生產(chǎn)和應用,例如江蘇、浙江、北京、南京、四川都生產(chǎn),而且都在各行業(yè)使用,驅動電路所有半導體器件都是完全國產(chǎn)化的,當時是全分立元器件構成的邏輯運算電路,還有電容耦合輸入的計數(shù)器,觸發(fā)器,環(huán)形分配器[3]。70年代初期,步進電機的生產(chǎn)和研究都有所突破,除反映在驅動器設計方面的長足進步以外,對反應式步進電機本體的設計研究發(fā)展到一個較高的水平,70年代中期至80年代中期為成品發(fā)展階段,新品種高性能電動機不斷被開發(fā)。至80年代中期以來,由于步進電機精確模型做了大量研究工作,各種混合式步進電機及驅動器作為產(chǎn)品廣泛利用[5]。國外在大功率的工業(yè)設備驅動上,目前基本不使用大扭矩步進電動機,因為從驅動電路的成本,效率,噪音,加速度,絕對速度,系統(tǒng)慣量與最大扭矩比來比較,比較不劃算,還是用直流電動機,加電動機編碼器整體技術和經(jīng)濟指標高[4]。一些少數(shù)高級的應用,就用空心轉杯電機,交流電機。國外在小功率的場合,還使用步進電機,例如一些工業(yè)器材,工業(yè)生產(chǎn)裝備,打印機,復印件,速印機,銀行自動柜員機。國外用許多現(xiàn)代的手段將步進電機排擠出驅動應用,除了前面提到的旋轉編碼器,打印機還使用光電編碼帶或感應編碼帶配合直流電動機,實現(xiàn)閉環(huán)直線位移控制[5]。國內過去是用大力矩步進電動機實現(xiàn)機床數(shù)控,有實力的公司現(xiàn)在也采用交流電動機驅動數(shù)控機床,在驅動設備的主要差距,是國外對交流電動機的控制理論與工程分析和應用能力強,先進的控制理論作為軟件,寫在控制器內部[6]??偟膩碚f,步進電機是一種簡易的開環(huán)控制,對運用者的要求低,不適合在大功率的場合使用。在衛(wèi)星、雷達等應用場合,中國在文化大革命后期,就生產(chǎn)了力矩電機,就生產(chǎn)了環(huán)形力矩電機,在高品質的控制場合,有時還不能使用步進電機[6]。步進電機的細分控制,在改革開放初期,國內就已經(jīng)基本掌握,這與交流電動機的矢量控制相比,難度要低得多[7]。1.3課題主要研究內容本論文所選的步進電機是四相五線步進電機,采用的方法是利用單片機控制步進電機的驅動。步進電機是一種將電脈沖轉化為角位移的執(zhí)行機構。當步進驅動器接受到一個脈沖信號,它就驅動步進電機按設定的方向轉動一個固定的角度,它的旋轉是以固定的角度一步一步運行的[7]。可以通過控制脈沖個數(shù)來控制角位移量,從而達到準確定位的目的;同時可以通過控制脈沖頻率來控制電機轉動的速度和加速度,從而達到調速的目的[8]。本次畢業(yè)設計就是通過改變脈沖頻率來調節(jié)步進電機的速度的,并且通過數(shù)碼管顯示其轉速的級別。另外通過單片機實現(xiàn)它的正反轉、加減速,步進電機可以作為一種控制用的特種電機,利用其沒有積累誤差的特點,廣泛應用于宏開環(huán)控制。2步進電機的原理介紹2.1步進電機的概述2.1.1相數(shù)產(chǎn)生不同對極N、S磁場的激磁線圈對數(shù),常用m表示。2.1.2拍數(shù)完成一個磁場周期性變化所需脈沖數(shù)或導電狀態(tài)用n表示,或指電機轉過一個齒距角所需脈沖數(shù),比如說本次設計中使用的24BYJ48有單(單相繞組通電)四拍(A-B-C-D-A。。。),雙(雙相繞組通電)四拍(AB-BC-CD-DA-AB-。。。),八拍(A-AB-B-BC-C-CD-D-DA-A。。。)。2.1.3步距角對應一個脈沖信號,電機轉子轉過的角位移用θ表示。θ=360度(轉子齒數(shù)J*運行拍數(shù)),以常規(guī)二相,轉子齒為50齒電機為例。四拍運行時步距角為θ=360度/(50*4)=1.8度(俗稱整步),八拍運行時步距角為θ=360度/(50*8)=0.9度(俗稱半步)。2.1.4信號分配四相步進電機按照其通電方式的不同,可以分為單四拍,雙四拍和雙八拍三種工作方式。單四拍與雙四拍的步距角相等,均為11.25度,而八拍的步距角則是單四拍與雙四拍的一半,5.625度。單(單相繞組通電)四拍(A-B-C-D-A。。。),雙(雙相繞組通電)四拍(AB-BC-CD-DA-AB-。。。),八拍(A-AB-B-BC-C-CD-D-DA-A。。。)。這里選取的是雙相八拍的工作方式。2.2步進電機的工作原理步進電機是一種將電脈沖轉化為角位移或線位移的執(zhí)行機構。說的通俗點:當步進驅動芯片接收到一個脈沖信號,它就驅動步進電機按給定方向轉動一個固定的角度(及步進角)[9]。可以通過控制脈沖個來控制角位移量,從而達到準確定位的目的;同時可以通過控制脈沖頻率來控制電機轉動的速度和加速度,從而達到調速的目的。本次設計是采用步進電機28BYJ48型四相八拍步進電機,電壓為DC5V—DC12V。當對電機施加一連串連續(xù)不斷的控制脈沖時,它可以持續(xù)不斷地轉動[9]。每一個脈沖信號對應步進電機的某一相或兩相繞組的通電狀態(tài)改變一次,也就對應轉子轉過一定的角度(一個步距角)[10]。當通電狀態(tài)的改變完成一個循環(huán)時,轉子轉過一個齒距。四相步進電機可以在不同的通電方式下運行,常見的通電方式有單(單相繞組通電)四拍(A-B-C-D-A。。。),雙(雙相繞組通電)四拍(AB-BC-CD-DA-AB-。。。),八拍(A-AB-B-BC-C-CD-D-DA-A。。。)[11]。其相序分配表和接線指示圖分別如圖2-1和圖2-2:圖2-1相序分配表圖2-2接線指示圖2.3步進電機24BYJ48的相關電氣參數(shù)1.額定電壓:12VDC(另有電壓:5V、6V、24V)2.相數(shù):43.減速比:1/64(另有減速比:1/16、1/32)4.步距角:5.625°/645.驅動方式:4相8拍6.直流電阻:200Ω±7%(25℃)(按客戶要求而定:80、130歐姆)7.空載牽入頻率:≥600Hz8.空載牽出頻率:≥1000Hz9.牽入轉矩:≥34.3mN.m(120Hz)10.自定位轉矩:≥34.3mN.m11.絕緣電阻:>10MΩ(500V)12.絕緣介電強度:600VAC/1mA/1S13.絕緣等級:A14.溫升:<50K(120Hz)15.噪音:<40dB(120Hz)16.重量:大約40g17.未注公差按:GB1804-m3總體設計思路3.1方案與設計思路因為步進電機的控制是通過脈沖信號來控制的,將電脈沖信號轉變?yōu)榻俏灰苹蚓€位移的開環(huán)控制元件。所以怎樣產(chǎn)生這個脈沖信號和產(chǎn)生怎樣的信號是電機控制的關鍵。用單片機來產(chǎn)生這個脈沖信號,通過單片機的P1口輸出脈沖信號,因為所選電機是四相的,所以只需要P1口的低四位P1.0~P1.3分別接到電機的四根電線上。定時器定時來調整電機的轉速,通過鍵盤的按鈕,就可以改變定時初值從而改變了電機的轉速,單片機上P3.2~P3.5連的是按鍵,這里鍵盤上的K1鍵為啟動與停止鍵,K2鍵為減速鍵,K3鍵為加速鍵,K4鍵為方向轉換鍵。P0以及P2.0~P2.2口接LCD1602,可以顯示當前的電機轉速、運行狀態(tài)、運行方向和檔位。3.2總框圖本系統(tǒng)主要有控制單元、驅動模塊、顯示模塊、按鍵模塊、復位電路、晶振電路等模塊組成。具體結構見3-1框圖圖3-1總體設計方框圖驅動模塊主要是放大電流以驅動步進電機工作,復位電路采用驅動模塊主要是放大電流以驅動步進電機工作,復位電路采用上電復位的方式,晶振電路為單片機提供時鐘信號,顯示模塊主要顯示文字說明、步進電機的運行狀態(tài)、檔位、正反轉等,按鍵模塊采用的是獨立按鍵。4硬件選型與硬件電路的設計4.1步進電機的驅動驅動模塊我們使用集成驅動芯片ULN2003,該芯片是高耐壓、大電流達林頓管由七個硅NPN達林頓管組成。該電路的特點如下:ULN2003的每一對達林頓都串聯(lián)一個2.7K的基極電阻,在5V的工作電壓下它能與TTL和CMOS電路直接相連,可以直接處理原先需要標準邏輯緩沖器來處理的數(shù)據(jù)[12]。ULN2003工作電壓高,工作電流大,灌電流可達500mA,并且能夠在關鍵時承受50V的電壓,輸出還可以在高負載電流并行運行[13]。其7、6、5、4管腳分別對應接到單片機的P1.0~P1.3,具體如圖4-1:圖4-1步進電機驅動及其接口圖4.2單片機的選取目前市面上的通用型單片機種類很多,且適合不同應用場合的新產(chǎn)品不斷出現(xiàn),但目前的應用狀況,以8位中檔MCS-51系列單片機的應用最為普遍?;谶@次課程設計的要求不高,我們可以選用51系列或52系列單片機,其有可靠性高,易于擴展以及實用性好等特點,完全可以滿足我們的控制要求。其圖如下4-2:圖4-2AT89C52單片機4.3轉速信號采集方案方案一:使用光電碼盤。優(yōu)點測量比較精確。缺點:調試很復雜,程序量大。方案二:采用光電開關。優(yōu)點:調試簡單,只需要MCU在單位時間內計算輸入MCU的脈沖數(shù),就能通過簡便的程序計算出轉速。缺點:誤差較大,碼盤的缺口很難控制寬度。綜上,采用光電開關進行轉速信號采集較為合理。4.4測速模塊本次課程設計通過光電碼盤來對步進電機測速。光電開關是由紅外對管和一個碼盤組成。紅外對管一邊是發(fā)射一邊是接收。模塊工作時發(fā)射管不斷發(fā)出紅外光,當沒有障礙物遮擋紅外發(fā)射管發(fā)送給接收管的紅外光時,接收管接模塊輸出低電平,指示燈不亮;當有障礙物遮住紅外發(fā)射管發(fā)送給接收管的紅外光時,模塊輸出高電平,指示燈亮。在單片機中設定T0定時器和T1計數(shù)器,把光電碼盤輸出端連在P2.6在一定的時間內測出T1采集到的脈沖,然后再推算出電機的速度。圖4-3為電路原理圖圖4-3測速電路原理圖4.5液晶顯示模塊LCD顯示模塊是把LCD顯示屏、背景光源、線路板和驅動集成電路等部件構造成一個整體作為一個獨立部件使用,只留一個接口與外部通信。顯示模塊通過這個接口接收顯示的命令和數(shù)據(jù),并按指令和數(shù)據(jù)的要求進行顯示,外部電路通過這個接口讀出顯示模塊的工作狀態(tài)和顯示數(shù)據(jù)。1602液晶模塊內部的字符發(fā)生存儲器(CGROM)已經(jīng)存儲了160個不同的點陣字符圖形,這些字符有:阿拉伯數(shù)字、英文字母的大

小寫、常用的符號和日文假名等,每一個字符都有一個固定的代碼。用戶對模塊寫入適當?shù)目刂泼睿纯赏瓿汕迤?、顯示、地址設置等操作[14]。故本系統(tǒng)采用LCD1602模塊,P0接液晶的數(shù)據(jù)傳送口D0~d7,P2.0~P2.2接液晶的控制端口RS(RS=0時輸入指令,RS=1時輸入數(shù)據(jù))、R/W(R/W=0時向LCD寫入指令和數(shù)據(jù),當R/W=1是向LCD讀取信息)、EN(使能信號,1時讀取信息1→0時執(zhí)行指令)。其接線圖如圖4-3:圖4-3液晶與單片機接口原理圖4.6按鍵電路設計鍵盤接口按不同標準有不同分類方法,按鍵盤排布,可以分為獨立方式(一組相互獨立的鍵盤)和矩陣(一行列組成矩陣)方式。此次設計只用到了四個按鍵,故可采用獨立按鍵,P3.2~P3.5分別接到K1~K4。其原理圖如下圖4-4:圖4-4按鍵與單片機接口原理圖當K1按下時,步進電機開始運行或停止;當K2按下時,步進電機開始加速;當K3按下時,步進電機開始減速;當K4按下時,步進電機開始改變轉向。按鍵抖動的消除采用軟件消抖實現(xiàn)。4.7時鐘電路時鐘電路是微型計算機的心臟,它控制著計算機的工作節(jié)奏。CPU就是通過復雜的時序電路完成不同的指令功能的[15]。51單片機的時鐘信號可以由兩種方式產(chǎn)生:一種是內部方式,利用芯片內部的振蕩電路,產(chǎn)生時鐘信號:另一種為外部方式,時鐘信號由外部引入[16]。本系統(tǒng)采用外部方式,時鐘電路晶振頻率為11.0592MHz,其原理圖如圖4-5:圖4-5時鐘電路原理圖5程序設計5.1主程序進入主程序,首先是對LCD進行初始化,然后依次進行鍵盤掃描,調用步進電機相關數(shù)據(jù)顯示子函數(shù),若檢測到有鍵按下,則進去相應的處理。流程圖如下圖5-1:圖5-1主程序流程圖開始對LCD初始化,接下來通過循環(huán)掃描的方式進行按鍵掃描,當檢測到K1按下時,運行狀態(tài)在啟停之間轉換;當檢測到K2按下時,步進電機減速同時檔位在非十檔的時候加一;當檢測到K3按下時,步進電機加速同時檔位在非零檔的時候減一;當檢測到K4按下時,步進電機轉向變換一次。5.2LCD及檔位顯示程序此次設計使用1602液晶顯示步進電機運行狀態(tài),其效果比用數(shù)碼管顯示要更加明了,也更容易讀取相關狀態(tài)和數(shù)據(jù)。液晶上顯示有電機運行的狀態(tài)(RUNNING或STOP)、當前檔位(DW)、運行方向("<<"或">>")以及其運轉速度(r/min)。其顯示原理如下圖5-2:圖5-2液晶顯示流程圖5.3正反轉流程圖步進電機的正反轉用K4控制,初始化電機為順時針轉,即“》”,每當按下K4鍵,電機轉向改變,具體流程圖如下圖5-3:圖5-3正反轉流程圖5.4啟動與停止流程圖啟動與停止是用K1鍵來控制的,初始化標志位on_off==0,檔按下K1,即將on_off置1,每當按下k1,都將在啟動與停止間切換,具體流程圖如下圖5-4:圖5-4啟動與停止流程圖6調試與故障分析6.1軟件編寫及調試此次編程及調試是用keil軟件進行的,程序的編寫及調試步驟如下:根據(jù)步進電機24BYJ48的相序,編好正反轉相序表,這個是關鍵,不能編錯。2.定義各個變量及相關液晶顯示符:ucharcodecdis0[]={"WELCOMETO"};ucharcodecdis1[]={"STEPPINGMOTOR"};ucharcodecdis2[]={"CONTROLSYSTEM"};ucharcodecdis3[]={"STOP"};ucharcodecdis4[]={"DW:"};ucharcodecdis5[]={"RUNNING"};ucharcodecdis6[]={"r/min"};定義各個按鍵:sbitK1=P3^2;//運行與停止sbitK2=P3^3;//加速sbitK3=P3^4;//減速sbitK4=P3^5;//方向轉換sbitBEEP=P3^6;//蜂鳴器編寫各個子程序。編寫主程序,進入主程序即開始進行鍵盤掃描及調用液晶顯示。定時器T0的中斷服務程序,進入中斷,若滿足條件,即向步進電機送8個脈沖。6.2調試過程及相關顯示結果將程序下載到單片機中,LCD初始化顯示如圖6-1:圖6-1LCD初始化仿真圖之后進入步進電機初始化的畫面顯示,電機運行狀態(tài)顯示為STOP,檔位為5檔,開機轉速為2.66r/min,如圖6-2:圖6-2仿真圖按下啟動鍵K1后,轉向顯示出顯示"》",即電機順時針轉,顯示如下圖6-3:圖6-3仿真圖按K2鍵一次,檔位加一,高位檔為10檔,此時對應電機轉速為最慢,為1.33r/min,如圖6-4:圖6-4仿真圖按下K3鍵一次,檔位減一,低位檔為1檔,也是電機轉速最快的檔,為13.32r/min,顯示效果如圖6-5:圖6-5仿真圖6.3故障分析及解決方法故障一:首先在設計總體方案時,思路上出現(xiàn)了一些問題,我首先是想在中斷里完成許多應在中斷之外完成的事,經(jīng)過老師的指點,后來想清楚了。只在中斷中給電機送相序碼,并設定了一個參數(shù)對電機的轉速進行調控。故障二:由于編寫程序的經(jīng)驗不多,在計算電機轉速,并將其顯示在液晶時,遇到了一些問題,速度轉換公式是找出來了,但怎樣將其小數(shù)點表示出來,困惑了好久,最后還是請教了同學,才搞定。故障三:在仿真時首先液晶沒有接上拉電阻,液晶上顯示不出來,我以為是程序方面出了問題,后來嘗試接了上拉電阻,就能夠正常顯示了。7總結經(jīng)過這么多天的努力,終于完成了畢業(yè)設計基本設計要求,在這段期間中也學到了很多東西,將課堂上學到的理論知識運用于實踐操作中,這也是畢業(yè)前對自己的一次檢驗,使我受益匪淺。經(jīng)過了解這次控制要求不是很高,選用51系列或52系列單片機完全能夠滿足設計需求,最終選用的AT89C52。接下來就是如何去驅動電機硬件和接口分配的問題。對于步進電機之前沒有接觸過,所以我上網(wǎng)查了很多關于步進電機的資料,了解了它基本工作原理以及如何去實現(xiàn)其驅動和控制。接下來的主要問題就是怎么編寫程序去實現(xiàn)控制它。因為以前只編寫過一些幾十行的小程序,對較大的程序我不是很有把握,所以這次程序的編寫和調試對我來說是一個的挑戰(zhàn)。在編寫過程中遇到了很多問題,沒遇到一個問題我就請教同學和老師,還參考了一些別人的編程經(jīng)驗,最終完成了程序的編寫。這次的編程經(jīng)歷讓我積累了一定的經(jīng)驗。在做仿真的時候也遇到了一些困難,首先LCD完全沒有顯示,經(jīng)過反復嘗試后知道是我沒接上拉電阻的緣故,接上之后就好了。之后是電機也不能運行,最后我減小了脈沖頻率,才使得電機正常運轉,這個仿真過程讓我更加熟悉了Proteus軟件。這次畢業(yè)設計我認識到,只學好課本的知識是不夠的,更重要的是我們要能將所學的知識運用到實踐中來,理論與實踐相結合這將是我們有更加深刻的理解,所以在今后的學習生活中,我們應該更加注意將理論與實踐相結合,達到學以致用的目的。通過這次畢業(yè)設計,我也了解到了自己的知識的匱乏,體會到了學海無涯的含義,所以在以后的學習中,要更加全面的,腳踏實地,一步一個腳印地去學習。這次畢業(yè)設計能得以順利完成,還要感謝我的指導老師黃鎮(zhèn)海的幫助,在指導老師和同學的幫助下,很多問題都得到了很好地解決??傊瑢W到了很多,感受很深,是一次很好的經(jīng)驗積累和設計經(jīng)歷。參考文獻[1]錢志良.步進電機控制系統(tǒng)的設計[J].蘇州大學學報.2005,8(3):42-44.[2]李海濱、片春媛、許瑞雪.單片機技術課程設計與項目實例[J].中國電力出版社.2007,22(5):52-54.[3]劉國永、陳杰平.單片機控制步進電機系統(tǒng)設計[J].安徽技術師范學院學報.1993,33(4):62-67.[4]郭宏.步進電動機驅動器的發(fā)展概況及趨勢[J].廈門大學學報,2004,17(4):35-41.[5]王迎旭.單片機原理及及應用[M].北京:機械工業(yè)出版社.2002.152-154.[6]張迎新.單片微型計算機原理、應用及接口技術[M].北京:國防工業(yè)出版社.2005.263-268[7]郭天祥.新概念51單片機C語言教程[M].北京:電子工業(yè)出版社.2001.112-115.[8]蔡明文,馮先成編著.單片機課程設計[M].北京:華中科技大學出版社.1998.214-219.[9]周向紅.51系列單片機應用與實踐教程[M].北京:北京航天航空大學出版社.2003.351-355.[10]張家生.電機原理與拖動基礎[M].北京:北京郵電大學出版社.2006.111-115.[11]馬淑華,王鳳文,張美金.單片機原理與接口技術[M].北京:北京郵電大學出版社.2007.365-369.[12]顧德英,張健,馬淑華.計算機控制技術[M].北京:北京郵電大學出版社.2006.255-258.[13]華成英,童詩白.模擬電子技術基礎[M].北京:高等教育出版社.2008.134-136.[14]張靖武,周靈彬.單片機系統(tǒng)的PROTEUS設計與仿真[M].北京:電子工業(yè)出版社.2007.258-261.[15]王曉明,胡曉柏.電動機的單片機控制[M].北京:航空航天大學出版社.2002.358-362.[16]劉寶延,程樹康.步進電動機及其驅動控制系統(tǒng)[M].北京:北京郵電大學出版社.1997.322-321.[17]胡健.單片機原理實訓教程[M].北京:電子工業(yè)出版社.2004.29-31.附件A系統(tǒng)原理圖附件B開發(fā)板實物圖附件C元器件清單序號名稱標號參數(shù)1電阻R22K2電阻R44.7K3電阻R110K4排阻RES910K5電容C110UF6晶振JT11.0592MHZ7電阻R3208同步電機M28BYJ489電容C330P10電容C230P11電容C4104P12電容C5470UF13三極管Q855014單片機U1AT89C5215電機插件J1CON516電源插孔J2DC_117液晶顯示器LCDLCD160218電機驅動集成電路U2ULN2003A19按鈕K16X6X520按鈕K36X6X521按鈕K46X6X522按鈕K26X6X523蜂鳴器BUZZ5V有源附件D源程序#include<reg51.h>//51芯片管腳定義頭文件#include<intrins.h>//內部包含延時函數(shù)_nop_();#defineucharunsignedchar#defineuintunsignedint#definedelayNOP();{_nop_();_nop_();_nop_();_nop_();};ucharcodeFFW[8]={0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9};//正轉相序編碼表ucharcodeREV[8]={0xf9,0xf8,0xfc,0xf4,0xf6,0xf2,0xf3,0xf1};//反轉相序編碼表sbitK1=P3^2;//運行與停止sbitK2=P3^3;//加速sbitK3=P3^4;//減速sbitK4=P3^5;//方向轉換sbitBEEP=P3^6;//蜂鳴器sbitLCD_RS=P2^0;sbitLCD_RW=P2^1;sbitLCD_EN=P2^2;biton_off=0;//運行與停止標志bitdirection=1;//方向標志ucharcodecdis0[]={"WELCOMETO"};ucharcodecdis1[]={"STEPPINGMOTOR"};ucharcodecdis2[]={"CONTROLSYSTEM"};ucharcodecdis3[]={"STOP"};ucharcodecdis4[]={"DW:"};ucharcodecdis5[]={"RUNNING"};ucharcodecdis6[]={"r/min"};ucharcodecdis7[]={"RATE:"};ucharm,v=0,q=0,j;ucharrate=5;//預設定速度檔uchardata_temP1,data_temp2,data_temp3,data_temp4;uintzs,data_temp;/*****************************************************/voiddelay(uintt)//延時t毫秒函數(shù){uchark;while(t--){for(k=0;k<125;k++){}}}/********************************************************/voiddelayB(ucharx)//x*0.14MS{uchari;while(x--){for(i=0;i<13;i++){}}}/********************************************************/voidbeep() //蜂鳴器{ucharj;for(j=0;j<100;j++){delayB(4);BEEP=!BEEP;//BEEP取反}BEEP=1;//關閉蜂鳴器delay(170);}/********************************************************/bitlcd_busy()//檢查LCD是否為忙狀態(tài),lcd_busy為1時,忙,等待。為0時,閑,可寫指令與數(shù)據(jù)。{bitresult;LCD_RS=0;LCD_RW=1;LCD_EN=1;delayNOP();result=(bit)(P0&0x80);LCD_EN=0;return(result);}/********************************************************/voidlcd_wcmd(ucharcmd)//寫指令數(shù)據(jù)到LCD,*RS=L,RW=L,E=高脈沖,D0-D7=指令碼。{while(lcd_busy());LCD_RS=0;LCD_RW=0;LCD_EN=0;_nop_();_nop_();P0=cmd;delayNOP();LCD_EN=1;delayNOP();LCD_EN=0;}/********************************************************/voidlcd_wdat(uchardat)//寫顯示數(shù)據(jù)到LCD,RS=H,RW=L,E=高脈沖,D0-D7=數(shù)據(jù)。{while(lcd_busy());LCD_RS=1;LCD_RW=0;LCD_EN=0;P0=dat;delayNOP();LCD_EN=1;delayNOP();LCD_EN=0;}/********************************************************/voidlcd_init()//LCD初始化設定{delay(30);lcd_wcmd(0x38);//16*2顯示,5*7點陣,8位數(shù)據(jù)delay(5);lcd_wcmd(0x38);delay(5);lcd_wcmd(0x38);delay(5);lcd_wcmd(0x0c);//顯示開,關光標delay(5);lcd_wcmd(0x06);//移動光標delay(5);lcd_wcmd(0x01);//清除LCD的顯示內容delay(5);}/********************************************************/voidlcd_pos(ucharpos)//設定顯示位置{lcd_wcmd(pos|0x80);//數(shù)據(jù)指針=80+地址變量}/********************************************************/voidLCD_init_DIS()//LCD1602初始顯示子程序{delay(10);//延時lcd_init();//初始化LCD lcd_pos(0);//設置顯示位置為第一行的第1個字符m=0;while(cdis0[m]!='\0'){//顯示字符WELCOMElcd_wdat(cdis0[m]);m++;} delay(2000); lcd_wcmd(0x01); //清屏 delay(5); //清屏以后的這個延時不能少,給LCD一定的緩沖,否則下一條指令不一定被執(zhí)行l(wèi)cd_pos(0x10);//設置顯示位置為第一行的第17個地址m=0;while(cdis1[m]!='\0'){//顯示字符lcd_wdat(cdis1[m]);m++;}lcd_pos(0x50);//設置顯示位置為第二行第1個字符m=0;while(cdis2[m]!='\0'){lcd_wdat(cdis2[m]);//顯示字符m++;} for(j=0;j<16;j++) { lcd_wcmd(0x18); delay(300); }delay(3000);//延時lcd_wcmd(0x01); //清屏 lcd_pos(0x00);//設置顯示位置為第一行的第1個字符m=0;while(cdis3[m]!='\0'){//顯示字符STOPlcd_wdat(cdis3[m]);m++;}lcd_pos(0x08);//設置顯示位置為第一行第9個字符m=0;while(cdis4[m]!='\0'){lcd_wdat(cdis4[m]);//顯示字符DWm++;}for(m=0;m<2;m++){lcd_pos(0x0e+m);//顯示方向符號lcd_wdat(0x2d);} lcd_pos(0x47); //顯示小數(shù)點lcd_wdat(0x2e);m=0; lcd_pos(0x4a); //顯示字符r/minwhile(cdis6[m]!='\0'){lcd_wdat(cdis6[m]);m++;} m=0; lcd_pos(0x40); //顯示字符RATE:while(cdis7[m]!='\0'){lcd_wdat(cdis7[m]);m++;}}/********************************************************/voiddata_conv()//檔位數(shù)據(jù)轉換子程序{data_temP1=data_temp/10;//高位if(data_temP1==0){ data_temP1=0x20; //高位為0不顯示 }else{data_temP1=data_temP1+0x30; }data_temp2=data_temp%10;//低位data_temp2=data_temp2+0x30;}/********************************************************/voiddata_conv1()//轉速數(shù)據(jù)轉換子程序{data_temP1=data_temp/1000; //整數(shù)位第一位 if(data_temP1==0){ data_temP1=0x20; //高位為0不顯示 }else{data_temP1=data_temP1+0x30; }data_temp2=data_temp%1000/100;//整數(shù)位第2位data_temp2=data_temp2+0x30;data_temp3=data_temp%100/10; //小數(shù)位第一位 data_temp3=data_temp3+0x30; data_temp4=data_temp%10; //小數(shù)位第二位 data_temp4=data_temp4+0x30;}/********************************************************/voiddata_dis()//數(shù)據(jù)顯示子程序{data_temp=rate;//顯示檔位data_conv();lcd_pos(0x0b);lcd_wdat(data_temP1);lcd_pos(0x0c);lcd_wdat(data_temp2); zs=1332/rate; //轉速換算公式:zs=13.32/rate; data_temp=zs; //顯示轉速 data_conv1(); lcd_pos(0x45);lcd_wdat(data_temP1); lcd_pos(0x46);lcd_wdat(data_temp2); lcd_pos(0x48);lcd_wdat(data_temp3); lcd_pos(0x49);lcd_wdat(data_temp4);}/********************************************************/voidmotor_DR()//顯示運行方向符號{if(direction==1)//正轉方向標志{for(m=0;m<2;m++){lcd_pos(0x0e+m);//顯示方向符號lcd_wdat(0x3e); //顯示>>號}}else{for(m=0;m<2;m++)//反轉方向標志{lcd_pos(0x0e+m);//顯示方向符號lcd_wdat(0x3c);//顯示<<號}}}/********************************************************/voidmotor_RUN()//顯示運行狀態(tài){if(on_off==1){TR0=1;lcd_pos(0);//設置顯示位置為第一行的第1個字符m=0;while(cdis5[m]!='\0'){lcd_wdat(cdis5[m]);//RUNNINGm++;}motor_DR();}else{TR0=0;P1=0x0f;lcd_pos(0);//設置顯示位置為第一行的第1個字符m=0;while(cdis3[m]!='\0'){ lcd_wdat(cdis3[m]);//STOPm++; }motor_DR(); for(m=0;m<2;m++){lcd_pos(0x0e+m);//顯示--lcd_wdat(0x2d); }}}/*******************************************************main()//主程序{LCD_init_DIS();TMOD=0x01;//T0定時方式1TH0=(65536-1100)/256;//賦初值TL0=(65536-1100)%256;EA=1; //開啟總中斷ET0=1; //開放定時器T0的中斷P1=0x0f;while(1){if(K1==0) //運行與停止{delay(5); //消抖 if(K1==0) {beep();while(K1==0);//等待鍵釋放on_off

溫馨提示

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

最新文檔

評論

0/150

提交評論