基于單片機(jī)的步進(jìn)電機(jī)控制器設(shè)計(jì)_第1頁
基于單片機(jī)的步進(jìn)電機(jī)控制器設(shè)計(jì)_第2頁
基于單片機(jī)的步進(jìn)電機(jī)控制器設(shè)計(jì)_第3頁
基于單片機(jī)的步進(jìn)電機(jī)控制器設(shè)計(jì)_第4頁
基于單片機(jī)的步進(jìn)電機(jī)控制器設(shè)計(jì)_第5頁
免費(fèi)預(yù)覽已結(jié)束,剩余26頁可下載查看

下載本文檔

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

文檔簡介

設(shè)計(jì)題目:基于MCS-51單片機(jī)的反應(yīng)式步進(jìn)電機(jī)控制器設(shè)計(jì),要求能夠控制其轉(zhuǎn)速、正反轉(zhuǎn)和運(yùn)行步數(shù)。摘要:在中國這個發(fā)展中大國,單片機(jī)的出現(xiàn)意味著計(jì)算機(jī)分為通用計(jì)算機(jī)系統(tǒng)和嵌入式計(jì)算機(jī)系統(tǒng)。單片機(jī)單芯片因它的體積微小和成本低廉的優(yōu)點(diǎn)而廣泛的應(yīng)用到家電、儀表、汽車電子、工業(yè)控制單元、辦公自動化設(shè)備、通信設(shè)備等這些產(chǎn)品中去,是現(xiàn)代電子系統(tǒng)中極其重要的智能化工具。在未來,單片機(jī)將會進(jìn)一步的走向低功耗、小體積、大容量、高性能、低價位和混合信號集成化。本設(shè)計(jì)基于AT89S51單片機(jī),利用反應(yīng)式步進(jìn)電機(jī)控原理,對其控制進(jìn)行硬件和軟件的設(shè)計(jì)。以實(shí)現(xiàn)對反應(yīng)式電機(jī)的控制器可對36BF003型步進(jìn)電機(jī)進(jìn)行正反轉(zhuǎn)、啟停、速度和步數(shù)控制。關(guān)鍵字:步進(jìn)電機(jī);單片機(jī);拍數(shù);控制器;反應(yīng)式一、控制原理分析1.1三相步反應(yīng)式進(jìn)電機(jī)工作原理反應(yīng)式步進(jìn)電機(jī)乂稱可變磁阻式步進(jìn)電機(jī),它和普通的電機(jī)一樣,也是有定子和轉(zhuǎn)子組成,它利用磁阻轉(zhuǎn)矩使轉(zhuǎn)子轉(zhuǎn)動。三相反應(yīng)式步進(jìn)電機(jī)定機(jī)定子上有六個極,每個極上裝有控制繞組,每相對的兩極組成一相。轉(zhuǎn)子上有數(shù)個均勻分布的齒,其上沒有繞組,當(dāng)A相通電時,轉(zhuǎn)子在磁場力的作用下與定子齒對齊,若切斷A相電源,同時接通B相電源,在磁場力的作用下轉(zhuǎn)子轉(zhuǎn)過一個步距角(步距角由轉(zhuǎn)子齒數(shù)、控制繞組相數(shù)和通電方式?jīng)Q定),如再使B相斷電,同時使C相控制繞組通電,轉(zhuǎn)子乂轉(zhuǎn)過一個步距角。如此循環(huán)通電,并按AtBTCtA順序通電,步進(jìn)電機(jī)便按一定的方向轉(zhuǎn)動。電機(jī)的轉(zhuǎn)速取決于控制繞組接通的斷開的變化頻率。若改變通電順序,即按ATCtBTA方式通電,則電機(jī)反向轉(zhuǎn)動。上述通電方式稱為三相單三拍通電方式;這里的“拍”是指定子控制繞組每改變一次通電方式,為一拍;“單”是指每次只有一相控制繞組通電;“三拍”是指經(jīng)過三次切換控制繞組的通電狀態(tài)為一個循環(huán)。三相步反應(yīng)式進(jìn)電機(jī)除上述通電方式外,還有三相雙三拍和三相單雙六拍通電方式,三相雙三拍通電順序?yàn)锳BTBCTCATAB或AB—CA—BCtAB,三相單雙六拍通電順序?yàn)锳tABtBtBCtCtCAtA或AtACtCtCBtBtBAtA,這里“AB”表小A、B兩相同時通電,依此類推。三相反應(yīng)式步進(jìn)電機(jī)的步距角9S的大小是由轉(zhuǎn)子的齒數(shù)、控制繞組的相數(shù)和通電方式所決定的,其關(guān)系為0s=360/(mZrC)式中C為通電狀態(tài)系數(shù),當(dāng)采用單拍方式時,C=1;而采用單雙拍方式時,C=2;m為步進(jìn)電機(jī)相數(shù),當(dāng)Zr為步進(jìn)電機(jī)轉(zhuǎn)子數(shù)。若步進(jìn)電機(jī)能電的脈沖頻率為f(每秒的拍數(shù)),則步進(jìn)電機(jī)的速度為n=60f/(mZrC)式中:f為頻率,單位為Hz;n為轉(zhuǎn)速,單位為r/min。1.2基于單片機(jī)的步進(jìn)電機(jī)驅(qū)動器控制原理步進(jìn)電機(jī)驅(qū)動器控制系統(tǒng)的硬件設(shè)備由單片機(jī)、功率放大器、鍵盤輸入設(shè)備和顯示設(shè)備幾個部分組成,其示意圖如圖1-1所示:1、鍵盤:鍵盤由0~9號數(shù)字健、正轉(zhuǎn)啟動鍵、反轉(zhuǎn)啟動鍵、停止鍵、轉(zhuǎn)速+、轉(zhuǎn)速-等15個按鍵組成,通過鍵盤可以設(shè)置電機(jī)運(yùn)行步數(shù)(電機(jī)轉(zhuǎn)動角度)、轉(zhuǎn)速、正/反轉(zhuǎn)啟動和停止。2、單片機(jī):單片機(jī)是系統(tǒng)的控制單元,它通過對輸入設(shè)置運(yùn)算產(chǎn)生和分配控制電機(jī)的脈沖信號,同時也要產(chǎn)生步數(shù)和速度的顯示信號。3、功率放大器:單片機(jī)輸出的脈沖信號功率很小,不足以驅(qū)動電機(jī)轉(zhuǎn)動,故需要功率放大器將信號放大以驅(qū)動電機(jī)轉(zhuǎn)動。二、硬件設(shè)計(jì)2.1電機(jī)的選用及其電路2.1.1確定步進(jìn)電機(jī)型號及其參數(shù)本設(shè)計(jì)選擇型號為36BF003反應(yīng)式步進(jìn)電機(jī),其參數(shù)如表2-1所示:表2-136BF003反應(yīng)式步進(jìn)電機(jī)技術(shù)數(shù)據(jù)型號相數(shù)步距角/(度)電壓/V相電流/A最大靜轉(zhuǎn)矩(N.m)空載起動頻率/(步/s)繞組電阻/Q分配力式外形尺寸/mm重量/Kg外徑長度軸徑36BF00331.5/3271.50.07831001.6三相六拍36434).222.1.2電機(jī)驅(qū)動電路原理由表2-1可知電機(jī)的額定電壓是27V,本設(shè)計(jì)采用單電源功率放大電路驅(qū)動步進(jìn)電機(jī),電路原理圖如圖2-1所示。電路中由單片機(jī)AT89S51分配的控制脈沖從P0口的P0.0~P0.7輸出,經(jīng)74LS125反相后控制光電開關(guān),光電隔離后,由功率管TIP122將脈沖信號進(jìn)行電壓和電流放大,驅(qū)動步進(jìn)電機(jī)的各相繞組。使步進(jìn)電機(jī)隨著不同的脈沖信號分別作正轉(zhuǎn)、反轉(zhuǎn)、加速、減速和停止等動作。W1、W2、W3分別為電機(jī)三相繞阻,RL為繞組內(nèi)阻,阻值為1.6Q,100Q電阻(R1、R2、R3)是一外接電阻,起限流作用,也是一個改善回路時間常數(shù)的元件。VD1、VD2、VD3為續(xù)流二極管,使電機(jī)繞組產(chǎn)生的反電動勢通過續(xù)流二極管(VD1、VD2、VD3)而衰減掉,從而保護(hù)了功率管TIP122不受損壞。在100Q外接電阻(R1、R2、R3)上并聯(lián)一個200F電容,可以改善注入步進(jìn)電機(jī)繞組的電流脈沖前沿,提高了步進(jìn)電機(jī)的高頻性能。與續(xù)流二極管申聯(lián)的200Q電阻(R10、R11、R12)可減小回路的放電時間常數(shù),使繞組中電流脈沖的后沿變陡,電流下降時間變小,也起到提高高頻工作性能的作用。

7US125POOP0.1P0.2R4RS33KR6WKh/r眼獺QVT1,常牛f網(wǎng)oVQ2C?JV27US125POOP0.1P0.2R4RS33KR6WKh/r眼獺QVT1,常牛f網(wǎng)oVQ2C?JV2該靠Q¥

viaRL2W3RL3g初Qr?2(?"VT3RW楠□_M)國2"電機(jī)瞬電融破2.3單片機(jī)選擇及其電路設(shè)計(jì)2.3.1單片機(jī)的選用本設(shè)計(jì)采用AT89S51,它是低功耗、高性能的單片機(jī),其特性如下:4KB可編程的Flas協(xié)儲器(可經(jīng)受100必的擦除/寫入);全靜態(tài)工作:0Hz?24Hz;128-8字節(jié)的內(nèi)存RAM;32可編程I/O線;2個16位的定時/計(jì)數(shù)器;編程申行通道;片內(nèi)振蕩器。2.3.2單片機(jī)工作電路設(shè)計(jì)電壓選擇單片機(jī)的工作電壓范圍為2.7~5.5V,在本設(shè)計(jì)中的單片機(jī)的工作電壓是5V。復(fù)位電路AT89S52單片機(jī)的RESET引腳為復(fù)位信號輸入端,高電平■有效,,當(dāng)振蕩器工作時,在此引腳上出現(xiàn)兩個機(jī)器周期以上的高電平,就可以使單片機(jī)復(fù)位。本設(shè)計(jì)采用TPS3824處理器監(jiān)控電路復(fù)位,電路原理圖如圖2-2所示。RESETGND^2-2單片幗餅戴理囹TPS3824是一個帶有看門狗功能的監(jiān)控器,在上電期間,監(jiān)控器REST端向單片機(jī)復(fù)位引腳(RESET)發(fā)出一個復(fù)位信號,然后,其內(nèi)部定時器每延時時間td向單片機(jī)發(fā)出一個復(fù)位信號,因此,在單片機(jī)正常工作期間,單片機(jī)P0.3口需要在時間t<td時定期向監(jiān)控器WDI引腳發(fā)出一個正跳變或負(fù)跳變以觸發(fā)監(jiān)控器定時器復(fù)位,以防止單片機(jī)被誤復(fù)位。當(dāng)單片機(jī)死機(jī)無法正常工作時,P0.3無法輸出觸發(fā)監(jiān)控器定時器復(fù)位信號,監(jiān)控器則向單片機(jī)發(fā)出復(fù)位信號使系統(tǒng)復(fù)位,所以,使用TPS3824監(jiān)控器復(fù)位電路具有系統(tǒng)死機(jī)自動復(fù)位功能。時鐘電路本系統(tǒng)運(yùn)行程序不多,速度要求不高,采用外部時鐘脈沖,選用ZPA(穩(wěn)定度為1~9x10-4普通石英晶體振蕩器)型12MHz石英晶體振蕩器。其電路原理圖如圖2-3所示。XTAL2XTAL2XTAL1GND時銷電斑如圖2-3,時鐘電路連接單片機(jī)引腳XTAL1和XTAL2向單片機(jī)提供時鐘脈沖,電路中的電容C1和C2稱為負(fù)載電容,也可以理解為諧振電容的一部分,兩電容并申在電路中取值相同,一般為數(shù)pF至數(shù)十pF,這里選擇30pF。鍵盤輸入電路鍵盤是一組按鍵的集合,它是最常用的單片機(jī)輸入設(shè)備.操作人員可以通過鍵盤輸入數(shù)據(jù)或者命令,實(shí)現(xiàn)簡單的人機(jī)通信。單片機(jī)的鍵盤設(shè)計(jì)方式有獨(dú)立式和矩陣式兩種,由丁本系統(tǒng)鍵盤由0~9號數(shù)字鍵、正轉(zhuǎn)控制鍵、反轉(zhuǎn)控制鍵、停止控制鍵、加速鍵和減速鍵15個按鍵組成,通過鍵盤可以輸入電機(jī)運(yùn)行步數(shù)、控制電機(jī)正轉(zhuǎn)/反轉(zhuǎn)/停止和速度。系統(tǒng)按鍵數(shù)量較多,為節(jié)省I/O口,簡化電路,降低成本,本設(shè)計(jì)采用標(biāo)準(zhǔn)的4*4矩陣式由P1號接入單片機(jī)。電路原理如圖2-4所示。電路中四個電阻起上拉電阻作用。

顯示電路本設(shè)計(jì)采用七個八段數(shù)碼管顯示電機(jī)步數(shù),顯示步數(shù)范圍是0~9999999步,由步進(jìn)電機(jī)原理可知,步數(shù)x步距角為電機(jī)轉(zhuǎn)角。一個八段數(shù)碼管顯示速度,編程設(shè)定顯示范圍是1~9,倍率是100,即實(shí)際轉(zhuǎn)速為顯示數(shù)x100,例如,速度顯示1,則電機(jī)轉(zhuǎn)速為100r/min。為簡化電路,降低成本,八個八段顯示數(shù)碼管的陽極位段選線并聯(lián)在一起,由一個8位的P2口控制,形成段選線多路復(fù)用。而各位的共陰極分別8位的P3口控制,實(shí)現(xiàn)各位的分時選通,構(gòu)成一個動態(tài)顯示器,如圖2-5所示。圖中右七個數(shù)碼管顯示步數(shù),左一個數(shù)碼管顯示轉(zhuǎn)速,74LS125為集成四個非門的芯片。蜃示掀JQ例蜃示掀JQ例三、軟件設(shè)計(jì)3.1控制地址分配為方便程序檢查和修改,在設(shè)計(jì)程序之前應(yīng)對所用到或使用較多數(shù)據(jù)存儲地單元命名標(biāo)號,本程序數(shù)據(jù)儲存地址命名如表3-1所示。

表3-1數(shù)據(jù)儲存地址命名標(biāo)號表名稱標(biāo)號地址單元名稱標(biāo)號地址單元步數(shù)個位儲存地址GB40H步數(shù)白力位儲存地址BWB46H步數(shù)十位儲存地址SB41H電機(jī)轉(zhuǎn)速查詢表偏移量SD47H步數(shù)百位儲存地址BB42H電機(jī)啟/??刂艼K48H步數(shù)千位儲存地址QB43H電機(jī)控制偏移量輸出脈沖KZ49H步數(shù)萬位儲存地址WB44H鍵按下狀態(tài)KONZ4AH步數(shù)十萬位儲存地址SWB45H鍵按下狀態(tài)中間變量KBL4BH3.2主程序設(shè)計(jì)為節(jié)省單片機(jī)程序掃描時間,使用定時器T0中斷方式轉(zhuǎn)入控制電機(jī)運(yùn)行,定時器T0定時時間為電機(jī)運(yùn)轉(zhuǎn)“拍數(shù)”切換時間,即控制電機(jī)的脈沖切換時間,根據(jù)步進(jìn)電機(jī)控制原理,改變此定時器定時時間可改變電機(jī)轉(zhuǎn)速。由此定時器定時時間未到時不斷進(jìn)行鍵盤掃描的輸出顯示。時間初值查詢表SD_TAB見程序所用到的查詢表及其說明部分表4-1;主程序流程圖如圖3-1所示。主程序活單如下:MAIN:GBEQU40HMAIN:GBEQU40H;主程序;定義步數(shù)十位存儲單元ORG0000HLJMPMAINORG000BHLJMPDJKZORG0050H

SBEQU40H;定義步數(shù)白位存儲單元BBEQU40H;定義步數(shù)千位存儲單元QBEQU40H;定義步數(shù)萬位存儲單元WBEQU40H;定義步數(shù)十萬位存儲單元SWBEQU40H;定義步數(shù)白力位存儲單兀BWBEQU40H;定義步數(shù)個位存儲單元SDEQU40H;定義電機(jī)轉(zhuǎn)速表查詢偏移量存儲單兀JKEQU40H;定義電機(jī)控制表偏移量存儲單元KONZEQU40H;定義輸入口按鍵按下狀態(tài)暫存單元KBLEQU40H;定義輸入口按鍵按下狀態(tài)中間變量存儲單元MOVP0,#00H;I/O口初始化MOVP1,#0FFH;MOVP2,#0FFH;MOVP3,#0FFH;MOVGB,#00H;步數(shù)個位初始化MOVSB,#00H;步數(shù)十位初始化MOVBB,#00H;步數(shù)白位初始化MOVQB,#00H;步數(shù)千位初始化MOVWB,#00H;步數(shù)萬位初始化MOVSWB,#00H;步數(shù)十萬位初始化MOVBWB,#00H;步數(shù)白力位初始化MOVSD,#1;電機(jī)轉(zhuǎn)速開機(jī)默認(rèn)為200r/minMOVJK,#0;電機(jī)控制狀態(tài)開機(jī)為停止MOVKZ,#0;速度查詢表偏移初始化0MOVTMOD,#01H;T0控制模式為1MOVDPTR,#SD_TAB;DPRT指向轉(zhuǎn)速查詢表百地址MOVA,SD;取轉(zhuǎn)速查詢表偏移量MOVCA,@A+DPTR;取定時器低位初值MOVTL0,A;裝入定時器低位初值MOVA,SD;取轉(zhuǎn)速查詢表偏移量ADDA,#10;調(diào)整轉(zhuǎn)頊詢表偏移量,為取T0高位做準(zhǔn)備DAA;十進(jìn)制數(shù)調(diào)整MOVCA,@A+DPTR;取定時器高位初值MOVTH0,A;裝入定時器高位初值MOVIE,#82H;T0開中斷;啟動T0SETBTR0LOOP:LCALLLCALLLJMPLOOP:LCALLLCALLLJMPSD_TAB:DBDB;調(diào)用鍵盤掃描錄入程序;調(diào)用顯示程序;返回LOOPDISP_SUBLOOP72H,54H,05H,C5H,42H,95H,CEH,FDH,20H,3CHF6H,FBH,FCH,FDH,FEH,FEH,FEH,FEH,FFH,FFH3.2鍵盤錄入子程序?qū)崿F(xiàn)功能:通過掃描鍵盤,判斷是否有鍵按下,若有鍵按下則改變相應(yīng)控制地址單元的內(nèi)容,為后面的顯示和電機(jī)控制做準(zhǔn)備。鍵盤數(shù)據(jù)錄入子程序流程圖如圖3-2所示;輸入鍵鍵號查詢表IN_TAB見程序所用到的查詢表及其說明部分表4-2;電機(jī)啟/??刂坪惋@示段選

碼表SRDS_TAB見程序所用到的查詢表及其說明部分表4-3;鍵盤掃描子程序流程圖如圖3-2所示。鍵盤掃描方法:由硬件設(shè)計(jì)可知,鍵盤是4*4的行、列結(jié)構(gòu)設(shè)計(jì),行由P1.0~P1.3口輸入,列由P1.4~P1.7H輸入,其中行線通過上拉電阻接+5V,平■時無按鍵動作時,行線處丁高電平'狀態(tài),而當(dāng)有按鍵按下時,則對應(yīng)的行線和歹0線短接,行線電平■狀態(tài)將由與此行線相連的歹0線電平?jīng)Q定。因此,其掃描方法是:先令P1.4列線為低電平,其余三根列線為高電平,讀行線狀態(tài)。如果行線都為高電平,貝U這一列線上沒有鍵閉合,接著使下一列線P1.5為低電平,其余列線為高電平,用同樣方法檢查P1.5列上沒無鍵閉合,依次類推,直到最后一列掃描完成。鞭號AT7DPTMSRDSJAB4-酷+DPTRJK+A(子程后返回]3-2曜盤錄入程序流程3-3鍵盤掃描程序流程鍵盤錄入程序代碼如下:KEY_SUB:LCALLKNUM_SUBMOVA,KONZORLA,#0FHMOVKBL,ACJNEA,#0FFH,KE_NEXT1LJMPKE_NEXTKE_NEXT1:MOVR7,#10LCALLDEL_SUBDJNZR7,KE_NEXT1LCALLKNUM_SUBCJNEA,KONZ,KE_NEXT;鍵盤錄入程序;調(diào)用鍵盤掃描程序;保存初次掃描輸入狀態(tài);輸入狀態(tài)高四位置1;保存;(A)冬0FFH,有按鍵輸入,轉(zhuǎn)去抖動;否則轉(zhuǎn)子程序返回;延時10ms去抖動;調(diào)用延時1ms程序再次調(diào)用鍵盤掃描程序;若(A)=(KONZ),確認(rèn)有鍵按下,等待按鍵;釋放否則轉(zhuǎn)子程序返回KE_LOOP1:LCALLKUNM_SUBORLA,#0FHLCALLKUNM_SUBORLA,#0FHCJNEA,#0FFH,KE_LOOP1MOVR7,#10LCALLDEL_SUBDJNZR7,KE_NEXT1MOVDPTR,#IN_TABMOVR7,#0KE_LOOP2:MOVA,R7MOVCA,@A+DPTRCJNEA,KONZ,KE_NEXT2LJMPKE_NEXT3KE_NEXT2:INCR7LJMPKE_LOOP2KE_NEXT3:MOVA,R7CJNEA,#9,KE_NEXT4LJMPB_SETKE_NEXT4:JCB_SETCJNEA,#12,KE_NEXT5LJMPDJ_SETKE_NEXT5:JCDJ_SETCJNEA,#13,KE_NEXT7MOVA,SDCJNEA,#7,KE_NEXT6LJMPKE_NEXTKE_NEXT6:INCSDLJMPKE_NEXTKE_NEXT7:MOVA,SDCJNEA,#0,KE_NEXT8LJMPKE_NEXTKE_NEXT8:DECSDLJMPKE_NEXTB_SET:MOVBWB,SWBMOVSWB,WBMOVWB,QBMOVQB,BBMOVBB,SB;再次調(diào)用鍵盤掃描程序1;若(A)=0FFH,鍵已釋放,執(zhí)行去抖動,否;則轉(zhuǎn)KE_LOOP1再次判斷;延時10ms去抖動;調(diào)用延時1ms程序?;DPTR指向鍵號查詢表首地址;從0號鍵開始掃描;取鍵號;查表取出相應(yīng)鍵號狀態(tài)碼;與輸入狀態(tài)相比較,若;相等,則為該號鍵按下,轉(zhuǎn)取鍵號;否則取下一鍵號;轉(zhuǎn)再次掃描;取按下鍵鍵號;若鍵號=9,轉(zhuǎn)設(shè)置步數(shù)9;若鍵號<9,轉(zhuǎn)設(shè)置步數(shù),否則順序判斷;若鍵號冬12,;否則轉(zhuǎn)電機(jī)控制設(shè)置;若鍵號<12,轉(zhuǎn)電機(jī)控制設(shè)置,否則繼續(xù)判斷;若鍵號冬13,轉(zhuǎn)減速設(shè)置,;則順序設(shè)置加速;取當(dāng)前速度;若當(dāng)前速度冬7,轉(zhuǎn)速度加1檔;否則當(dāng)前速度為最大值,轉(zhuǎn)子程序返回1檔;轉(zhuǎn)子程序返回;取當(dāng)前速度;若當(dāng)前速度冬0,轉(zhuǎn)速度減1檔;否則當(dāng)前速度為最小值,轉(zhuǎn)子程序返回1檔;轉(zhuǎn)子程序返回;步數(shù)十萬位移至白萬位;步數(shù)萬位移至十萬位;步數(shù)千位移至萬位;步數(shù)白位移至千位;步數(shù)十位移至白位

MOVSB,GB;步數(shù)個位移至十位MOVGB,A;步數(shù)新數(shù)移至個位LJMPKE_NEXT;轉(zhuǎn)子程序返回DJ_SET:MOVDPTR,#SRDS_TAB;DPTP指向控制與顯示表首地址MOVCA,@A+DPTR;取控制狀態(tài)MOVJK,A;控制狀態(tài)存入控制單元KE_NEXT:RET;子程序返回IN_TAB:DB77H,B7H,D7H,E7H,7BH,BBH,DBH,EBH;輸入鍵鍵號查詢表DB7DH,BDH,DDH,EDH,7EH,BEH,DEHSRDS_TAB:DBC0H,F9H,A4H,B0H,99H,92HDB82H,F8H,80H,90H,1,2,3;電機(jī)啟/??刂坪惋@示段選碼表鍵盤掃描程序代碼:KUNM_SUB:MOVP1,#0FFH;鍵盤輸入口置1CLRP1.4;掃描第一歹0MOVA,P1;讀入輸入狀態(tài)SETBP1.4;關(guān)閉掃描第一歹UCLRP1.5;掃描第二列MOVA,P1;讀入輸入狀態(tài)SETBP1.5;關(guān)閉掃描第二列CLRP1.6;掃描第三列MOVA,P1;讀入輸入狀態(tài)SETBP1.6;關(guān)閉掃描第二列CLRP1.6;掃描第四列MOVA,P1;讀入輸入狀態(tài)SETBP1.6RET;關(guān)閉掃描第四列;子程序返回3.3顯小程序?qū)崿F(xiàn)功能:根據(jù)轉(zhuǎn)速控制單元SD和步數(shù)控制單元GB(個位)、SB(十位)、BB(白位)、QB(千位)、WB(萬位)、SWB(十萬位)、BWB(白萬位)的內(nèi)容查詢SRKS_TAB取相應(yīng)顯示段碼送相應(yīng)顯示位顯示。電機(jī)啟/??刂坪惋@示段選碼表SRDS_TAB見程*所用到的查詢表及其說明部分表4-3;程序流程圖如圖3-4所示;8位八段數(shù)碼管顯示方法:由硬件結(jié)構(gòu)可知,步數(shù)顯示7位八段數(shù)碼管和速度顯示1位數(shù)碼管的段選線并聯(lián)在一起由單片機(jī)P2口控制,而各位的共陰極點(diǎn)分別由相應(yīng)的P3口控制,實(shí)現(xiàn)各位的分時選通,構(gòu)成8位的動態(tài)顯示。根據(jù)實(shí)際情況,每位顯示的字符不同,因此軟件設(shè)計(jì)必須采用掃描顯示方式,即在每一個瞬間只使某一位顯示相應(yīng)字符。在此瞬間,段選碼由控制P2口輸出需顯示的段碼,位選P3口輸出位選碼選通該位顯示相應(yīng)字符。如此輪流,使每一位顯示該應(yīng)顯示的字符,并延時一段時間,這里延時3ms,以造成視覺暫留效果。@3-4顯示程序流程圈顯示代碼如下:DISP_SUB:MOVP2,#0FFHMOVP3,#00HMOVR7,#8MOVR0,GBMOVDPTR,#SRDS_TABMOVA,#01HPUSHACCMOVA,@R0MOVCA,@A+DPTRMOVP2,APOPACCMOVP3,ADLOOP2:MOVR6,#3;顯示子程序;關(guān)顯示;設(shè)置顯示位數(shù);取步數(shù)個位顯示數(shù)字;DPTR指向控制與顯示段碼表首地址;取步數(shù)位顯示控制字;保護(hù)步數(shù)位顯小控制字;取步數(shù)顯示數(shù)字;取顯示段碼;送顯示;取出位顯示控制字;打開位顯示;延時3msLCALLDEL_TAB;調(diào)用延時1ms程序DJNZR6,DLOOP2;判斷時是否到,未到剛返回延時,否則往下執(zhí)行RLA;取卜一位顯小控制字INCR0;R0;指IW下一位顯小數(shù)字存儲地址DJNZR7,DLOOP1;若(R7)-1=0,八位顯示完成,往下執(zhí)行,否則轉(zhuǎn)顯示下一位MOVP2,#0FFH;MOVP3,#00H;關(guān)顯示RET;子程序返回SRDS_TAB:DBC0H,F9H,A4H,B0H,99H,92HDB82H,F8H,80H,90H,1,2,3;電機(jī)啟/停控制和顯示段選碼表3.4電機(jī)控制程序?qū)崿F(xiàn)功能:根據(jù)地址單元JK的內(nèi)容控制電機(jī)的正轉(zhuǎn)、反轉(zhuǎn)和停止。時間初值查詢表SD_TAB見程序所用到的查詢表及其說明部分表4-1;單片機(jī)輸出控制字查詢表MQ_TAB見程倉所用到的查詢表及其說明部分表4-4;程序流程圖如圖3-5所示:取控制諦篇星

取控制諦篇星03-5電機(jī)控制程序流程圖MOVDPTR,#SD_TABMOV03-5電機(jī)控制程序流程圖MOVDPTR,#SD_TABMOVA,SDMOVCA,@A+DPTRMOVTL0,AMOVA,SDADDA,#10DAAMOVCA,@A+DPTRMOVTH0,AMOVR7,#7MOVR0,#GBKLOOP1:MOVA,@R0CJNEA,#0,KNEXT1INCR0DJNZR7,KLOOP1LJMPKNEXTKNEXT1:MOVA,JKCJNEA,#1,KNEXT2電機(jī)控制程序代碼如下:KT0_INT:;DPRT指向轉(zhuǎn)速查詢表首地址;取轉(zhuǎn)速查詢表偏移量;取定時器低位初值;裝入定時器低位初值;取轉(zhuǎn)速查詢表偏移量;調(diào)整轉(zhuǎn)速查詢表偏移量,為取T0高位做準(zhǔn)備;十進(jìn)制數(shù)調(diào)整;取定時器高位初值;裝入定時器高位初值;循環(huán)7次,分別判斷7位步數(shù)是否為0;R0指向步數(shù)個位;取位步數(shù);若位步數(shù)=0,判斷下一位,否則轉(zhuǎn)判斷電機(jī)控制狀態(tài);R0指向步數(shù)下一位地址;若(R7)-1=0,則步數(shù)每一位均為0,轉(zhuǎn);程序返回;取電機(jī)控制狀態(tài);若電機(jī)控制狀態(tài)=1,電機(jī)正轉(zhuǎn),否則判斷是否反轉(zhuǎn)

LJMPZZKZ;轉(zhuǎn)電機(jī)正轉(zhuǎn)控制;若電機(jī)控制狀態(tài)丈2,電機(jī)處于停止?fàn)顟B(tài),;轉(zhuǎn)返回,否則電機(jī)KNEXT2:CJNEA,#2,KNEXTMOVA,KZ;取上一次電機(jī)控制表偏移里;右上一次電機(jī)控制表偏移里為不;則電機(jī)控制表偏移量取50,轉(zhuǎn)減1,若為0,CJNEA,#0,KNEXT3MOVA,#5LJMPKNEXT6;KNEXT3:DECALJMPDNEXT5ZZKZ:MOVA,KZ;電機(jī)控制表偏移量減1;轉(zhuǎn)取脈沖輸出;取上一次電機(jī)控制表偏移里CJNEA,#5,KNEXT4MOVA,#0LJMPKNEXT5KNEXT4:INCAKNEXT5:MOVKZ,AMOVDPTR,#MQ_TABMOVCA,@A+DPTRMOVP0,AMOVR7,#6MOVR0,#GBKLOOP2:MOVA,@R0CJNEA,#0,KNEXT6MOV@R0,#9INCR0;若上一次電機(jī)控制表偏移量為不5,轉(zhuǎn)加1,若為5,;則電機(jī)控制表偏移量取0;轉(zhuǎn)取脈沖輸出;電機(jī)控制表偏移量加1;保存當(dāng)前電機(jī)控制表偏移量;DPTR指向電機(jī)控制表百地址;取輸出脈沖;輸出脈沖;步數(shù)減1循環(huán)6次;R0指向步數(shù)個位儲存單元;取位步數(shù);若位步數(shù)圭0,轉(zhuǎn)位步數(shù)-1,否則;往該位步數(shù)存9;R0指向下一位DJNZR7,DLOOP2DECBWBLJMPKNEXTKNEXT6:DECAMOV@R0,AKNEXT:RET;若(R7)-1=0,六位判斷完成,;續(xù)判斷;白力位減1;轉(zhuǎn)程序返回;位步數(shù)-1;存回該單元;程序返回白力位減1,否則繼SD_TAB:DB72H,54H,05H,C5H,42H,95H,CEH,FDH,20H,3CHDBF6H,FBH,FCH,FDH,FEH,FEH,FEH,FEH,FFH,FFH;定時器初值查詢MQ_TAB:DB01H,03H,02H,06H,04H,05H;單片機(jī)輸出控制字查詢表3.5延時1ms程序?qū)崿F(xiàn)功能:利用軟件循環(huán)運(yùn)行延時約1msDEL_SUB:MOVR7,#2DLE1:MOVR6,#248DEL2:DJNZR6,DEL2DJNZR7,DEL1RET查指令表可知執(zhí)行MOV指令需要用1個機(jī)器周期,DJNZ指令需要用2個機(jī)器用期,本系統(tǒng)使用12MHz晶振,一個機(jī)器周期時間長度為1us,所以該段程序執(zhí)行時間為:[1+(1+2X248+2)X2+2]*1us=999us1ms3.6程序所用到的查詢表及其說明3.6.1時間初值查詢表SD_TAB根據(jù)步進(jìn)電機(jī)原理,步進(jìn)電機(jī)的轉(zhuǎn)速為n=60f/(mZrC)式中:式中C為通電狀態(tài)系數(shù),當(dāng)采用單拍方式時,C=1;而采用單雙拍方式時,C=2;m為步進(jìn)電機(jī)相數(shù),當(dāng)Zr為步進(jìn)電機(jī)轉(zhuǎn)子數(shù),,f為頻率,單位為Hz,n為轉(zhuǎn)速,單位為r/min。因此,當(dāng)步進(jìn)電機(jī)轉(zhuǎn)速為n時,步進(jìn)電機(jī)的拍數(shù)切換時間與轉(zhuǎn)速的關(guān)系為t=1/f=60/(nmZrC)式中:t為電機(jī)拍數(shù)切換時間,單位為秒。由此可以算出程序中定時器T0所需定時時間To根據(jù)程序查指令表可知定時器定時到開始到脈沖輸出需要運(yùn)行約648個晶振周期數(shù)的程序,系統(tǒng)用的是12MHz晶振,即運(yùn)行此段程序需要648/12=54us的時間,故定時器T0所需定時時間T與轉(zhuǎn)速的關(guān)系為T=t-(54X10-3)=60/(nmZrC)—(54X10-3)式中:定時器T0所需定時時問T的單位為秒。由選用電機(jī)的參數(shù)可知:步進(jìn)電機(jī)相數(shù)E3,因運(yùn)行采用單雙拍方式,C=2,步進(jìn)電機(jī)轉(zhuǎn)子數(shù)Zr=40。而定時器工作在模式1下初值X與定時時間T的關(guān)系為X=216-TX106因此,由公式可算得電機(jī)轉(zhuǎn)速與定時器初值關(guān)系表如表4-1所??;電機(jī)轉(zhuǎn)速與定時器初值關(guān)系表表4-1轉(zhuǎn)速(r/min)1002003004005006007008009001000TL0初值72H54H05HC5H42H95HCEHFDH20H3CHTL1初值F6HFBHFCHFDHFEHFEHFEHFEHFFHFFH表地址偏移量0123456789定時器初值查詢表SD_TAB如下:SD_TAB:DB72H,54H,05H,C5H,42H,95H,CEH,FDH,20H,3CHDBF6H,FBH,FCH,FDH,FEH,FEH,FEH,FEH,FFH,FFH3.6.2輸入鍵鍵號查詢表IN_TAB輸入鍵鍵號與P1口狀態(tài)又系如下表4-2所示:

輸入鍵鍵號與P1口狀態(tài)關(guān)系表表4-2鍵名P1口狀態(tài)鍵名P1口狀態(tài)077H87DH1B7H9BDH2D7H正轉(zhuǎn)啟動DDH3E7H反轉(zhuǎn)啟動EDH47BH停止7EH5BBH加速BEH6DBH減速DEH7EBH輸入鍵鍵號查詢表IN_TAB如下:IN_TAB:DB77H,B7H,D7H,E7H,7BH,BBH,DBH,EBHDB7DH,BDH,DDH,EDH,7EH,BEH,DEH3.6.3電機(jī)啟/停控制和顯示段選碼表SRDS_TAB電機(jī)啟/??刂婆c其狀態(tài)、顯示數(shù)與顯示段;i碼關(guān)系表如下表4-3:電機(jī)啟/??刂婆c其狀態(tài)、顯示數(shù)與顯示段選碼關(guān)系表顯示數(shù)字顯示段碼顯示數(shù)字顯示段碼0C0H880H1F9H990H2A4H正轉(zhuǎn)啟動13B0H反轉(zhuǎn)啟動2499H停止0592H682H7F8H電機(jī)啟/停控制和顯示段選碼查詢表SRDS_TAB如下:SRDS_TAB:DBC0H,F9H,A4H,B0H,99H,92H,82H,F8HDB80H,90H,1,2,33.6.4單片機(jī)輸出控制字查詢表MQ_TAB步進(jìn)電機(jī)采用單雙六拍方式輸出,電機(jī)繞組通電與單片機(jī)輸出控制字關(guān)系如下表4-4:電機(jī)繞組通電與單片機(jī)輸出控制字關(guān)系表表4-4通電繞組A相AB相B相BC相C相CA相控制字01H03H02H06H04H05H單片機(jī)輸出控制字查詢表MQ_TAB如下:MQ_TAB:DB01H,03H,02H,06H,04H,05HXA—P3.67^LS125c1P3.2pqP3.77^LS125川』jjj”jjjjjj川JUWJrrnjrmtjJJJJJJJJrai舄dMdWdRds嘉ds安二妄mixia?附錄一:系統(tǒng)電路原理Ei.2gg3dsdEg£sTcTL?7£

Hd

s附錄二:系統(tǒng)軟件程序活單ORG0000HLJMPMAIAORG000BHLJMPDJKZORG0050HMAIN:;主程序GBEQU40H;定義步數(shù)十位存儲單元SBEQU40H;定義步數(shù)白位存儲單元BBEQU40H;定義步數(shù)千位存儲單元QBEQU40H;定義步數(shù)萬位存儲單元WBEQU40H;定義步數(shù)十萬位存儲單元SWBEQU40H;定義步數(shù)白力位存儲單兀BWBEQU40H;定義步數(shù)個位存儲單元SDEQU40H;定義電機(jī)轉(zhuǎn)速表查詢偏移量存儲單元JKEQU40H;定義電機(jī)控制表偏移量存儲單元KONZEQU40H;定義輸入口按鍵按下狀態(tài)暫存單元KBLEQU40H;定義輸入口按鍵按下狀態(tài)中間變量存儲單元MOVP0,#00H;I/O口初始化MOVP1,#0FFH;MOVP2,#0FFH;MOVP3,#0FFH;MOVGB,#00H;步數(shù)個位初始化MOVSB,#00H;步數(shù)十位初始化MOVBB,#00H;步數(shù)白位初始化MOVQB,#00H;步數(shù)千位初始化MOVWB,#00H;步數(shù)萬位初始化MOVSWB,#00H;步數(shù)十萬位初始化MOVBWB,#00H;步數(shù)白力位初始化MOVSD,#1;電機(jī)轉(zhuǎn)速開機(jī)默認(rèn)為200r/minMOVJK,#0;電機(jī)控制狀態(tài)開機(jī)為停止MOVKZ,#0;速度查詢表偏移初始化0MOVTMOD,#01H;T0控制模式為1MOVDPTR,#SD_TAB;DPRT指向轉(zhuǎn)速查詢表百地址MOVA,SD;取轉(zhuǎn)速查詢表偏移量MOVCA,@A+DPTR;取定時器低位初值MOVTL0,A;裝入定時器低位初值MOVA,SD;取轉(zhuǎn)速查詢表偏移量ADDA,#10;調(diào)整轉(zhuǎn)頊詢表偏移量,為取T0高位做準(zhǔn)備DAA;十進(jìn)制數(shù)調(diào)整MOVCA,@A+DPTR;取定時器高位初值MOVTH0,A;裝入定時器高位初值MOVIE,#82H;T0開中斷SETBTR0;啟動T0LOOP:LCALLKEY_SUB;調(diào)用鍵盤掃描錄入程序LCALLDISP_SUB;調(diào)用顯示程序LJMPLOOPKEY_SUB:LCALLKNUM_SUBMOVA,KONZORLA,#0FHMOVKBL,ACJNEA,#0FFH,KE_NEXT1LJMPKE_NEXTKE_NEXT1:MOVR7,#10LCALLDEL_SUBDJNZR7,KE_NEXT1LCALLKNUM_SUBCJNEA,KONZ,KE_NEXTKE_LOOP1:LCALLKUNM_SUBORLA,#0FHCJNEA,#0FFH,KE_LOOP1MOVR7,#10LCALLDEL_SUBDJNZR7,KE_NEXT1MOVDPTR,#IN_TABMOVR7,#0KE_LOOP2:MOVA,R7MOVCA,@A+DPTRCJNEA,KONZ,KE_NEXT2LJMPKE_NEXT3KE_NEXT2:INCR7LJMPKE_LOOP2KE_NEXT3:MOVA,R7CJNEA,#9,KE_NEXT4LJMPB_SETKE_NEXT4:JCB_SETCJNEA,#12,KE_NEXT5LJMPDJ_SETKE_NEXT5:JCDJ_SETCJNEA,#13,KE_NEXT7MOVA,SDCJNEA,#7,KE_NEXT6LOOP;鍵盤錄入子程序;調(diào)用鍵盤掃描程序;保存初次掃描輸入狀態(tài)1;保存;(A)冬0FFH,有按鍵輸入,轉(zhuǎn)去抖動;否則轉(zhuǎn)子程序返回;延時10ms去抖動;調(diào)用延時1ms程序;再次調(diào)用鍵盤掃描程序;若(A)=(KONZ),確認(rèn)有鍵按下,等待按鍵;釋放否則轉(zhuǎn)子程序返回;再次調(diào)用鍵盤掃描程序1;若(A)=0FFH,鍵已釋放,執(zhí)行去抖動,否;則轉(zhuǎn)KE_LOOP1再次判斷;延時10ms去抖動;調(diào)用延時1ms程序?;DPTR指向鍵號查詢表首地址;從0號鍵開始掃描;取鍵號;查表取出相應(yīng)鍵號狀態(tài)碼;與輸入狀態(tài)相比較,若;相等,則為該號鍵按下,轉(zhuǎn)取鍵號;否則取下一鍵號;轉(zhuǎn)再次掃描;取按下鍵鍵號;若鍵號=9,轉(zhuǎn)設(shè)置步數(shù)9;若鍵號<9,轉(zhuǎn)設(shè)置步數(shù),否則順序判斷;若鍵號冬12,;否則轉(zhuǎn)電機(jī)控制設(shè)置;若鍵號<12,轉(zhuǎn)電機(jī)控制設(shè)置,否則繼續(xù)判斷;若鍵號冬13,轉(zhuǎn)減速設(shè)置,;則順序設(shè)置加速;取當(dāng)前速度;若當(dāng)前速度冬7,轉(zhuǎn)速度加1檔LJMPKE_NEXT;否則當(dāng)前速度為最大值,轉(zhuǎn)子程序返回KE_NEXT6:INCSD;當(dāng)前速度增加1檔LJMPKE_NEXT;轉(zhuǎn)子程序返回KE_NEXT7:MOVA,SDA,#0,KE_NEXT8KE_NEXT;取當(dāng)前速度;H前速度豐0,轉(zhuǎn)速度減1檔;否則當(dāng)前速度為最小值,轉(zhuǎn)子程序返回CJNELJMPKE_NEXT8:DECSD;當(dāng)前速度減1檔LJMPKE_NEXT;轉(zhuǎn)子程序返回B_SET:MOVBWB,SWB;步數(shù)十力位移全白力位MOVSWB,WB;步數(shù)萬位移至十萬位MOVWB,QB;步數(shù)千位移全力位MOVQB,BB;步數(shù)白位移至千位MOVBB,SB;步數(shù)十位移全白位MOVSB,GB;步數(shù)個位移至十位MOVGB,A;步數(shù)新數(shù)移至個位LJMPKE_NEXT;轉(zhuǎn)子程序返回DJ_SET:MOVDPTR,#SRDS_TAB;DPTP指向控制與顯示表首地址MOVCA,@A+DPTR;取控制狀態(tài)MOVJK,A;控制狀態(tài)存入控制單元KE_NEXT:RET;子程序返回KUNM_SUB:;鍵盤掃描子程序MOVP1,#0FFH;鍵盤輸入口置1CLRP1.4;掃描第一歹0MOVA,P1;讀入輸入狀態(tài)SETBP1.4;關(guān)閉掃描第一歹UCLRP1.5;掃描第二列MOVA,P1;讀入輸入狀態(tài)SETBP1.5;關(guān)閉掃描第二列CLRP1.6;掃描第三列MOVA,P1;讀入輸入狀態(tài)SETBP1.6;關(guān)閉掃描第二列CLRP1.6;掃描第四列MOVA,P1;讀入輸入狀態(tài)SETBP1.6;關(guān)閉掃描第四列RET;子程序返回DISP_SUB:;顯示子程序MOVP2,#0FFH;MOVP3,#00H;關(guān)顯示MOVR7,#8;設(shè)置顯示位數(shù)MOVR0,GB;取步數(shù)個位顯示數(shù)字MOVDPTR,#SRDS_TAB;DPTR指向控制與顯示段碼表首地址

MOVA,#01H;取步數(shù)位顯示控制字PUSHACC,保護(hù)少數(shù)位顯示控制子*MOVA,@R0;取步數(shù)顯示數(shù)字MOVCA,@A+DPTR;取顯示段碼MOVP2,A;送顯示POPACC;取出位顯示控制字MOVP3,A;打開位顯小DLOOP2:MOVR6,#3;延時3msLCALLDEL_TAB;調(diào)用延時1ms程序DJNZR6,DLOOP2;判

溫馨提示

  • 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論