




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(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)一步的走向低功耗、小體積、大容量、高性能、低價(jià)位和混合信號集成化。本設(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)通電,并按A→B→C→A順序通電,步進(jìn)電機(jī)便按一定的方向轉(zhuǎn)動。電機(jī)的轉(zhuǎn)速取決于控制繞組接通的斷開的變化頻率。若改變通電順序,即按A→C→B→A方式通電,則電機(jī)反向轉(zhuǎn)動。上述通電方式稱為三相單三拍通電方式;這里的“拍”是指定子控制繞組每改變一次通電方式,為一拍;“單”是指每次只有一相控制繞組通電;“三拍”是指經(jīng)過三次切換控制繞組的通電狀態(tài)為一個循環(huán)。三相步反應(yīng)式進(jìn)電機(jī)除上述通電方式外,還有三相雙三拍和三相單雙六拍通電方式,三相雙三拍通電順序?yàn)锳B→BC→CA→AB或AB→CA→BC→AB,三相單雙六拍通電順序?yàn)锳→AB→B→BC→C→CA→A或A→AC→C→CB→B→BA→A,這里“AB”表示A、B兩相同時通電,依此類推。三相反應(yīng)式步進(jìn)電機(jī)的步距角θs的大小是由轉(zhuǎn)子的齒數(shù)、控制繞組的相數(shù)和通電方式所決定的,其關(guān)系為oθs=360/(r)o式中C為通電狀態(tài)系數(shù),當(dāng)采用單拍方式時,C=1;而采用單雙拍方式時,C=2;m為步進(jìn)電機(jī)相數(shù),當(dāng)為步進(jìn)電機(jī)轉(zhuǎn)子數(shù)。若步進(jìn)電機(jī)能電的脈沖頻率為f(每秒的拍數(shù),則步進(jìn)電機(jī)的速度為n=60f/(r)式中:f為頻率,單位為Hz;n為轉(zhuǎn)速,單位為1.2基于單片機(jī)的步進(jìn)電機(jī)驅(qū)動器控制原理步進(jìn)電機(jī)驅(qū)動器控制系統(tǒng)的硬件設(shè)備由單片機(jī)、功率放大器、鍵盤輸入設(shè)備和顯示設(shè)備幾個部分組成,其示意圖如圖1-1所示:1、鍵盤:鍵盤由號數(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ù)步距角/度)電壓相電型號相數(shù)步距角/度)電壓相電流最 大靜 轉(zhuǎn)矩(N.m)空 載起 動頻率/(步繞組電阻分配方式外形尺寸重量g外徑長度軸徑36BF0033271.50.07831001.6三相六拍36430.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)、加速、減速和停止等動作。W3分別為電機(jī)三相繞阻,RL為繞組內(nèi)阻,阻值為1.6?,100Ω電阻(R1、R2、R3)是一外接電阻,起限流作用,也是一個改善回路時間常數(shù)的元件。VD1、VD2、VD3為續(xù)流二極管,使電機(jī)繞組產(chǎn)生的反電動勢通過續(xù)流二極管(VD1、VD2、VD3)而衰減掉,從而保護(hù)了功率管TIP122不受損壞。在100Ω外接電阻(R1、R2、R3)上并聯(lián)一個200μF電容,可以改善注入步進(jìn)電機(jī)繞組的電流脈沖前沿,提高了步進(jìn)電機(jī)的高頻性能。與續(xù)流二極管串聯(lián)的200ΩR12)可減小回路的放電時間常數(shù),使繞組中電流脈沖的后沿變陡,電流下降時間變小,也起到提高高頻工作性能的作用。2.3單片機(jī)選擇及其電路設(shè)計(jì)2.3.1 單片機(jī)的選用(1)本設(shè)計(jì)采用AT89S51,它是低功耗、高性能的單片機(jī),其特性如下:(2)4KB可編程的Flash存儲器(可經(jīng)受1000次的擦除/寫入);(3)全靜態(tài)工作:0Hz~24Hz;(4)1288字節(jié)的內(nèi)存RAM;(5)32可編程I/O線;(6)2個16位的定時/計(jì)數(shù)器;(7)編程串行通道;(8)片內(nèi)振蕩器。2.3.2單片機(jī)工作電路設(shè)計(jì)(1)電壓選擇單片機(jī)的工作電壓范圍為2.7~5.5V,在本設(shè)計(jì)中的單片機(jī)的工作電壓是5V。(2)復(fù)位電路AT89S52單片機(jī)的RESET引腳為復(fù)位信號輸入端,高電平有效,,當(dāng)振蕩器工作時,在此引腳上出現(xiàn)兩個機(jī)器周期以上的高電平,就可以使單片機(jī)復(fù)位。本設(shè)計(jì)采用TPS3824處理器監(jiān)控電路復(fù)位,電路原理圖如圖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)控器引腳發(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ù)位功能。(3)時鐘電路本系統(tǒng)運(yùn)行程序不多,速度要求不高,采用外部時鐘脈沖,選用ZPA(穩(wěn)定度為1~9x10-4普通石英晶體振蕩器)型12MHz石英晶體振蕩器。其電路原理圖如圖2-3所示。如圖2-3,時鐘電路連接單片機(jī)引腳XTAL1和XTAL2向單片機(jī)提供時鐘脈沖,電路中的電容C1和C2稱為負(fù)載電容,也可以理解為諧振電容的一部分,兩電容并串在電路中取值相同,一般為數(shù)pF至數(shù)十pF,這里選擇30pF。(4)鍵盤輸入電路鍵盤是一組按鍵的集合,它是最常用的單片機(jī)輸入設(shè)備.操作人員可以通過鍵盤輸入數(shù)據(jù)或者命令,實(shí)現(xiàn)簡單的人機(jī)通信。單片機(jī)的鍵盤設(shè)計(jì)方式有獨(dú)立式和矩陣式兩種,由于本系統(tǒng)鍵盤由號數(shù)字鍵、正轉(zhuǎn)控制鍵、反轉(zhuǎn)控制鍵、停止控制鍵、加速鍵和減速鍵15個按鍵組成,通過鍵盤可以輸入電機(jī)運(yùn)行步數(shù)、控制電機(jī)正轉(zhuǎn)/反轉(zhuǎn)/停止和速度。系統(tǒng)按鍵數(shù)量較多,為節(jié)省口,簡化電路,降低成本,本設(shè)計(jì)采用標(biāo)準(zhǔn)的4*4矩陣式由P1號接入單片機(jī)。電路原理如圖2-4所示。電路中四個電阻起上拉電阻作用。(5)顯示電路本設(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為集成四個非門的芯片。三、軟件設(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ī)啟控制JK48H步數(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所示。主程序清單如下:ORG0000HLJMPMAINORG000BHLJMPDJKZORG0050HMAIN: ;主程序40H ;定義步數(shù)十位存儲單元SB 40H ;定義步數(shù)百位存儲單元BB 40H ;定義步數(shù)千位存儲單元40H ;定義步數(shù)萬位存儲單元WB 40H ;定義步數(shù)十萬位存儲單元SWB 40H ;定義步數(shù)百萬位存儲單元BWB 40H ;定義步數(shù)個位存儲單元SD 40H ;定義電機(jī)轉(zhuǎn)速表查詢偏移量存儲單元JK 40H ;定義電機(jī)控制表偏移量存儲單元40H ;定義輸入口按鍵按下狀態(tài)暫存單元KBL 40H ;定義輸入口按鍵按下狀態(tài)中間變量存儲單元MOV P0,#00H 口初始化MOV P1,#0FFH ;MOV P2,#0FFH ;MOV P3,#0FFH ;MOV GB,#00H ;步數(shù)個位初始化MOV SB,#00H ;步數(shù)十位初始化MOV BB,#00H ;步數(shù)百位初始化MOV QB,#00H ;步數(shù)千位初始化MOV WB,#00H ;步數(shù)萬位初始化MOV SWB,#00H ;步數(shù)十萬位初始化MOV BWB,#00H ;步數(shù)百萬位初始化MOV SD,#1 ;電機(jī)轉(zhuǎn)速開機(jī)默認(rèn)為200r/minMOV JK,#0 ;電機(jī)控制狀態(tài)開機(jī)為停止MOV ;速度查詢表偏移初始化0MOV TMOD,#01H ;T0控制模式為1MOV DPTR,#SD_TAB ;DPRT指向轉(zhuǎn)速查詢表首地址MOV A,SD ;取轉(zhuǎn)速查詢表偏移量MOVC A,@A+DPTR ;取定時器低位初值MOV TL0,A ;裝入定時器低位初值MOV A,SD ;取轉(zhuǎn)速查詢表偏移量ADD A,#10 ;調(diào)整轉(zhuǎn)速查詢表偏移量,為取T0高位做準(zhǔn)備A ;十進(jìn)制數(shù)調(diào)整MOVC A,@A+DPTR ;取定時器高位初值MOV TH0,A ;裝入定時器高位初值MOV ;T0開中斷SETBTR0 ;啟動T0LOOP:LCALLLCALLKEY_SUBDISP_SUB;調(diào)用鍵盤掃描錄入程序;調(diào)用顯示程序LJMP LOOP ;返回LOOPSD_TAB:DB72H,54H,05H,C5H,42H,95H,CEH,FDH,20H,3CHDBF6H,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.7口輸入,其中行線通過上拉電阻接+5V,平時無按鍵動作時,行線處于高電平狀態(tài),而當(dāng)有按鍵按下時,則對應(yīng)的行線和列線短接,行線電平狀態(tài)將由與此行線相連的列線電平?jīng)Q定。因此,其掃描方法是:先令P1.4列線為低電平,其余三根列線為高電平,讀行線狀態(tài)。如果行線都為高電平,則這一列線上沒有鍵閉合,接著使下一列線P1.5為低電平,其余列線為高電平,用同樣方法檢查P1.5列上沒無鍵閉合,依次類推,直到最后一列掃描完成。鍵盤錄入程序代碼如下:KEY_SUB: ;鍵盤錄入程序LCALL KNUM_SUB ;調(diào)用鍵盤掃描程序MOV A, ;保存初次掃描輸入狀態(tài)ORL A, ;輸入狀態(tài)高四位置1MOV KBL, A ;保存CJNE A,KE_NEXT1 ;(A)≠0FFH,有按鍵輸入,轉(zhuǎn)去抖動LJMP KE_NEXT ;否則轉(zhuǎn)子程序返回KE_NEXT1:MOV R7,;延時10ms去抖動LCALL DEL_SUB ;調(diào)用延時1ms程序DJNZ R7,KE_NEXT1 ;LCALL KNUM_SUB ;再次調(diào)用鍵盤掃描程序CJNE A, KE_NEXT ;若(A)=(KONZ),確認(rèn)有鍵按下,等待按鍵;釋放否則轉(zhuǎn)子程序返回KE_LOOP1:LCALL KUNM_SUB ;再次調(diào)用鍵盤掃描程序ORL A,;鍵盤輸入狀態(tài)高四位置1CJNE A,KE_LOOP1 ;若(A)=0FFH,鍵已釋放,執(zhí)行去抖動,否;則轉(zhuǎn)KE_LOOP1再次判斷MOV R7,;延時10ms去抖動LCALL DEL_SUB ;調(diào)用延時1ms程序DJNZ R7,KE_NEXT1 ;MOV DPTR,B ;DPTR指向鍵號查詢表首地址MOV R7,;從0號鍵開始掃描KE_LOOP2:MOV A,R7 ;取鍵號MOVC A,@A+DPTR ;查表取出相應(yīng)鍵號狀態(tài)碼CJNE A,KE_NEXT2 ;與輸入狀態(tài)相比較,若LJMP KE_NEXT3 ;相等,則為該號鍵按下,轉(zhuǎn)取鍵號KE_NEXT2:R7 ;否則取下一鍵號LJMP KE_LOOP2 ;轉(zhuǎn)再次掃描KE_NEXT3:MOV A,R7 ;取按下鍵鍵號CJNE A,KE_NEXT4 ;若鍵號=9,轉(zhuǎn)設(shè)置步數(shù)LJMP B_SET ;否則轉(zhuǎn)判斷是否<9KE_NEXT4:JC B_SET ;若鍵號<9,轉(zhuǎn)設(shè)置步數(shù),否則順序判斷CJNE A,KE_NEXT5 ;若鍵號≠12,LJMP DJ_SET ;否則轉(zhuǎn)電機(jī)控制設(shè)置KE_NEXT5:JC DJ_SET ;若鍵號<12,轉(zhuǎn)電機(jī)控制設(shè)置,否則繼續(xù)判斷CJNE A,KE_NEXT7 ;若鍵號≠13,轉(zhuǎn)減速設(shè)置,;則順序設(shè)置加速M(fèi)OV A,SD ;取當(dāng)前速度CJNE A,KE_NEXT6 ;若當(dāng)前速度≠7,轉(zhuǎn)速度加1檔LJMP KE_NEXT ;否則當(dāng)前速度為最大值,轉(zhuǎn)子程序返回KE_NEXT6:SD ;當(dāng)前速度增加1檔LJMP KE_NEXT ;轉(zhuǎn)子程序返回KE_NEXT7:MOV A, SD ;取當(dāng)前速度CJNE A,KE_NEXT8 ;若當(dāng)前速度≠0,轉(zhuǎn)速度減1檔LJMP KE_NEXT ;否則當(dāng)前速度為最小值,轉(zhuǎn)子程序返回KE_NEXT8:SD ;當(dāng)前速度減1檔LJMP KE_NEXT ;轉(zhuǎn)子程序返回B_SET:MOVBWB,SWB;步數(shù)十萬位移至百萬位MOVSWB,WB;步數(shù)萬位移至十萬位MOVWB,QB;步數(shù)千位移至萬位MOVQB,BB;步數(shù)百位移至千位MOVBB,SB;步數(shù)十位移至百位DJ_SET:
MOV SB,GB ;步數(shù)個位移至十位MOV GB,A ;步數(shù)新數(shù)移至個位LJMP KE_NEXT ;轉(zhuǎn)子程序返回MOV DPTR,RDS_TAB ;DPTP指向控制與顯示表首地址MOVC A,@A+DPTR ;取控制狀態(tài)MOV JK,A ;控制狀態(tài)存入控制單元KE_NEXT:RET ;子程序返回IN_TAB: 77H,B7H,D7H,E7H,7BH,BBH,DBH,EBH ;輸入鍵鍵號查詢表7DH,BDH,DDH,EDH,7EH,BEH,DEHSRDS_TAB: C0H,F9H,A4H,B0H,99H,92H82H,F8H,80H,90H,1,2,3 ;電機(jī)啟/??刂坪惋@示段選碼表鍵盤掃描程序代碼:KUNM_SUB:MOVP1,;鍵盤輸入口置1CLRP1.4;掃描第一列MOVA,P1;讀入輸入狀態(tài)SETBP1.4;關(guān)閉掃描第一列CLRP1.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;子程序返回3.3顯示程序?qū)崿F(xiàn)功能:根據(jù)轉(zhuǎn)速控制單元SD和步數(shù)控制單元WB(十萬位)、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,以造成視覺暫留效果。顯示代碼如下:DISP_SUB: ;顯示子程序MOV P2,;MOV P3,#00H ;關(guān)顯示MOV R7,;設(shè)置顯示位數(shù)MOV R0,GB ;取步數(shù)個位顯示數(shù)字MOV DPTR,RDS_TAB ;DPTR指向控制與顯示段碼表首地址MOV A,;取步數(shù)位顯示控制字PUSH ACC ;保護(hù)步數(shù)位顯示控制字MOV A,@R0 ;取步數(shù)顯示數(shù)字MOVC A,@A+DPTR ;取顯示段碼MOV P2,A ;送顯示ACC ;取出位顯示控制字MOV P3,A ;打開位顯示DLOOP2:MOV R6,;延時3msLCALL DEL_TAB ;調(diào)用延時1ms程序DJNZ R6,DLOOP2 ;判斷時是否到,未到剛返回延時,否則往下執(zhí)行RL A ;取下一位顯示控制字R0;R0 ;指向下一位顯示數(shù)字存儲地址DJNZ R7,DLOOP1;若(R7)-1=0,八位顯示完成,往下執(zhí)行,否則轉(zhuǎn)顯示下一位MOV P2,;MOV P3,#00H ;關(guān)顯示RET ;子程序返回SRDS_TAB: C0H,F9H,A4H,B0H,99H,92H82H,F8H,80H,90H,1,2,3 控制和顯示段選碼表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所示:電機(jī)控制程序代碼如下:KT0_INT: ;電機(jī)控制程序中斷服務(wù)程序MOV DPTR,#SD_TAB ;DPRT指向轉(zhuǎn)速查詢表首地址MOV A,SD ;取轉(zhuǎn)速查詢表偏移量MOVC A,@A+DPTR ;取定時器低位初值MOV TL0,A ;裝入定時器低位初值MOV A,SD ;取轉(zhuǎn)速查詢表偏移量ADD A,#10 ;調(diào)整轉(zhuǎn)速查詢表偏移量,為取T0高位做準(zhǔn)備A ;十進(jìn)制數(shù)調(diào)整MOVC A,@A+DPTR ;取定時器高位初值MOV TH0,A ;裝入定時器高位初值MOV R7,;循環(huán)7次,分別判斷7位步數(shù)是否為0MOV R0,;R0指向步數(shù)個位KLOOP1:MOV A, @R0 ;取位步數(shù)CJNE A,KNEXT1 ;若位步數(shù)=0,判斷下一位,否則轉(zhuǎn)判斷電機(jī)控制狀態(tài)R0 ;R0指向步數(shù)下一位地址DJNZ R7,KLOOP1 ;若(R7)-1=0,則步數(shù)每一位均為0,轉(zhuǎn)LJMP KNEXT ;程序返回KNEXT1:MOVA, JK;取電機(jī)控制狀態(tài)CJNEA,KNEXT2;若電機(jī)控制狀態(tài)=1,電機(jī)正轉(zhuǎn),否則判斷是否反轉(zhuǎn)LJMP ;轉(zhuǎn)電機(jī)正轉(zhuǎn)控制KNEXT2:CJNEA,KNEXT;若電機(jī)控制狀態(tài)≠2,電機(jī)處于停止?fàn)顟B(tài),;轉(zhuǎn)返回,否則電機(jī)MOVA,KZ;取上一次電機(jī)控制表偏移量CJNEA,KNEXT3;若上一次電機(jī)控制表偏移量為不0,轉(zhuǎn)減1,若為0,MOVA,;則電機(jī)控制表偏移量取5LJMPKNEXT6;KNEXT3:A ;電機(jī)控制表偏移量減1LJMP DNEXT5 ;轉(zhuǎn)取脈沖輸出MOVA,KZ;取上一次電機(jī)控制表偏移量CJNEA,#5,KNEXT4;若上一次電機(jī)控制表偏移量為不5,轉(zhuǎn)加1,若為5,MOVA,;則電機(jī)控制表偏移量取0LJMPKNEXT5;轉(zhuǎn)取脈沖輸出KNEXT4:A ;電機(jī)控制表偏移量加1KNEXT5:MOV KZ,A ;保存當(dāng)前電機(jī)控制表偏移量MOV DPTR,#MQ_TAB ;DPTR指向電機(jī)控制表首地址MOVC A,@A+DPTR ;取輸出脈沖MOV P0,A ;輸出脈沖MOV R7,;步數(shù)減1循環(huán)6次MOV R0,;R0指向步數(shù)個位儲存單元KLOOP2:MOV A,@R0 ;取位步數(shù)CJNE A,KNEXT6 ;若位步數(shù)≠0,轉(zhuǎn)位步數(shù)-1,否則MOV @R0,;往該位步數(shù)存9R0 ;R0指向下一位DJNZ R7,DLOOP2 ;若(R7)-1=0,六位判斷完成,百萬位減1,否則繼;續(xù)判斷BWB ;百萬位減1LJMP KNEXT ;轉(zhuǎn)程序返回KNEXT6:A;位步數(shù)-1MOV@R0,A;存回該單元KNEXT:RET ;程序返回SD_TAB: 72H,54H,05H,C5H,42H,95H,CEH,FDH,20H,3CH ;定時器初值查詢F6H,FBH,FCH,FDH,FEH,FFH,FFHMQ_TAB: 01H,03H,02H,06H,04H,05H;單片機(jī)輸出控制字查詢表3.5延時1ms程序?qū)崿F(xiàn)功能:利用軟件循環(huán)運(yùn)行延時約1ms。DEL_SUB:MOV R7, DLE1: MOV R6,#248DEL2: DJNZ R6,DEL2DJNZ R7,DEL1RET查指令表可知執(zhí)行MOV指令需要用1個機(jī)器周期,DJNZ指令需要用2個機(jī)器用期,本系統(tǒng)使用12MHz晶振,一個機(jī)器周期時間長度為1us,所以該段程序執(zhí)行時間為:[1+(1+2×248+2)×2+2]*1us=999us3.6程序所用到的查詢表及其說明3.6.1 時間初值查詢表SD_TAB根據(jù)步進(jìn)電機(jī)原理,步進(jìn)電機(jī)的轉(zhuǎn)速為n=60f/(r)式中:式中C為通電狀態(tài)系數(shù),當(dāng)采用單拍方式時,C=1;而采用單雙拍方式時,C=2;m為步進(jìn)電機(jī)轉(zhuǎn)子數(shù),,f因此,當(dāng)步進(jìn)電機(jī)轉(zhuǎn)速為n時,步進(jìn)電機(jī)的拍數(shù)切換時間與轉(zhuǎn)速的關(guān)系為t=1/f=60/(nr)式中:t為電機(jī)拍數(shù)切換時間,單位為秒。由此可以算出程序中定時器所需定時時間根據(jù)程序查指令表可知定時器定時到開始到脈沖輸出需要運(yùn)行約648個晶振周期數(shù)的程序,系統(tǒng)用的是12MHz晶振,即運(yùn)行此段程序需要648/12=54us的時間,故定時器T0所需定時時間T與轉(zhuǎn)速的關(guān)系為-3-3T=t-(54×10)=60/(nr) -(54×1-3-3式中:定時器T0所需定時時間T的單位為秒。由選用電機(jī)的參數(shù)可知:步進(jìn)電機(jī)相數(shù)m=3,因運(yùn)行采用單雙拍方式,C=2,步進(jìn)電機(jī)轉(zhuǎn)子數(shù)=40。而定時器工作在模式1下初值X與定時時間T的關(guān)系為166166因此,由公式可算得電機(jī)轉(zhuǎn)速與定時器初值關(guān)系表如表4-1所示;電機(jī)轉(zhuǎn)速與定時器初值關(guān)系表 表4-1轉(zhuǎn)速(rin)1002003004005006007008009001000TL0初值72H54H05HC5H42H95HCEHFDH20H3CHTL1初值F6HFBHFCHFDHFEHFEHFEHFEHFFHFFH表地址偏移量0123456789定時器初值查詢表SD_TAB如下:SD_TAB: 72H,54H,05H,C5H,42H,95H,CEH,FDH,20H,3CHF6H,FBH,FCH,FDH,FEH,FFH,FFH3.6.2 輸入鍵鍵號查詢表IN_TAB輸入鍵鍵號與P1口狀態(tài)關(guān)系如下表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: 77H,B7H,D7H,E7H,7BH,BBH,DBH,EBH7DH,BDH,DDH,EDH,7EH,BEH,DEH3.6.3 電機(jī)啟/??刂坪惋@示段選碼表SRDS_TAB電機(jī)啟/??刂婆c其狀態(tài)、顯示數(shù)與顯示段選碼關(guān)系表如下表4-3:電機(jī)啟控制與其狀態(tài)、顯示數(shù)與顯示段選碼關(guān)系表顯示數(shù)字顯示段碼顯示數(shù)字顯示段碼0C0H880H1F9H990H2A4H正轉(zhuǎn)啟動13B0H反轉(zhuǎn)啟動2499H停止0592H682H7F8H電機(jī)啟/??刂坪惋@示段選碼查詢表SRDS_TAB如下:SRDS_TAB: C0H,F9H,A4H,B0H,99H,92H,82H,F8H80H,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: 01H,03H,02H,06H,04H,05H附錄一:系統(tǒng)電路原理附錄二:系統(tǒng)軟件程序清單ORG 0000HLJMPMAIAORG000BHLJMPDJKZORG0050HMAIN: ;主程序40H ;定義步數(shù)十位存儲單元SB 40H ;定義步數(shù)百位存儲單元BB 40H ;定義步數(shù)千位存儲單元40H ;定義步數(shù)萬位存儲單元WB 40H ;定義步數(shù)十萬位存儲單元SWB 40H ;定義步數(shù)百萬位存儲單元BWB 40H ;定義步數(shù)個位存儲單元SD 40H ;定義電機(jī)轉(zhuǎn)速表查詢偏移量存儲單元JK 40H ;定義電機(jī)控制表偏移量存儲單元40H ;定義輸入口按鍵按下狀態(tài)暫存單元KBL 40H ;定義輸入口按鍵按下狀態(tài)中間變量存儲單元MOV P0,#00H 口初始化MOV P1,#0FFH ;MOV P2,#0FFH ;MOV P3,#0FFH ;MOV GB,#00H ;步數(shù)個位初始化MOV SB,#00H ;步數(shù)十位初始化MOV BB,#00H ;步數(shù)百位初始化MOV QB,#00H ;步數(shù)千位初始化MOV WB,#00H ;步數(shù)萬位初始化MOV SWB,#00H ;步數(shù)十萬位初始化MOV BWB,#00H ;步數(shù)百萬位初始化MOV SD,#1 ;電機(jī)轉(zhuǎn)速開機(jī)默認(rèn)為200r/minMOV JK,#0 ;電機(jī)控制狀態(tài)開機(jī)為停止MOV ;速度查詢表偏移初始化0MOV TMOD,#01H ;T0控制模式為1MOV DPTR,#SD_TAB ;DPRT指向轉(zhuǎn)速查詢表首地址MOV A,SD ;取轉(zhuǎn)速查詢表偏移量MOVC A,@A+DPTR ;取定時器低位初值MOV TL0,A ;裝入定時器低位初值MOV A,SD ;取轉(zhuǎn)速查詢表偏移量ADD A,#10 ;調(diào)整轉(zhuǎn)速查詢表偏移量,為取T0高位做準(zhǔn)備A ;十進(jìn)制數(shù)調(diào)整MOVC A,@A+DPTR ;取定時器高位初值MOV TH0,A ;裝入定時器高位初值MOV ;T0開中斷SETBTR0 ;啟動T0LOOP:LCALLKEY_SUB;調(diào)用鍵盤掃描錄入程序LCALLDISP_SUB;調(diào)用顯示程序LJMP LOOP ;返回LOOPKEY_SUB: ;鍵盤錄入子程序LCALL KNUM_SUB ;調(diào)用鍵盤掃描程序MOV A, ;保存初次掃描輸入狀態(tài)ORL A, ;輸入狀態(tài)高四位置1MOV KBL, A ;保存CJNE A,KE_NEXT1 ;(A)≠0FFH,有按鍵輸入,轉(zhuǎn)去抖動LJMP KE_NEXT ;否則轉(zhuǎn)子程序返回KE_NEXT1:MOV R7,;延時10ms去抖動LCALL DEL_SUB ;調(diào)用延時1ms程序DJNZ R7,KE_NEXT1 ;LCALL KNUM_SUB ;再次調(diào)用鍵盤掃描程序CJNE A, KE_NEXT ;若(A)=(KONZ),確認(rèn)有鍵按下,等待按鍵;釋放否則轉(zhuǎn)子程序返回K
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024高中政治第三單元中華文化與民族精神第六課第1課時源遠(yuǎn)流長的中華文化作業(yè)含解析新人教版必修3
- 山東省2024年高考生物一輪復(fù)習(xí)考點(diǎn)掃描專題10細(xì)胞呼吸含解析
- 2025版高考英語大二輪復(fù)習(xí)語言知識運(yùn)用練一
- 教學(xué)設(shè)計(jì)《威尼斯的小艇》
- 加工承攬安全合同范例
- 中介房屋托管合同范例
- 加工粉料合同范例
- 辦公家具定制合同范例
- 辦公區(qū)清潔合同范例
- 2025年半自動精密印刷機(jī)合作協(xié)議書
- 2025年哈爾濱鐵道職業(yè)技術(shù)學(xué)院高職單招語文2018-2024歷年參考題庫頻考點(diǎn)含答案解析
- 國外銀發(fā)經(jīng)濟(jì)發(fā)展
- 2025年高考作文素材積累之《人民日報(bào)》時評觀點(diǎn)摘抄(標(biāo)題、開頭、分論點(diǎn)、結(jié)尾)
- 2024年07月上海興業(yè)銀行上海分行招考筆試歷年參考題庫附帶答案詳解
- 中藥玫瑰花培訓(xùn)
- 廣東省佛山市(2024年-2025年小學(xué)六年級語文)統(tǒng)編版小升初真題((上下)學(xué)期)試卷及答案
- 2025年吉林通化梅河新區(qū)(梅河口市)專項(xiàng)引進(jìn)高層次教育人才40人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 湖北日報(bào)傳媒集團(tuán)(湖北日報(bào)社)招聘筆試沖刺題2025
- 危險(xiǎn)性較大工程培訓(xùn)課件
- 建筑施工安全員述職
- 開封市第二屆職業(yè)技能大賽無人機(jī)裝調(diào)檢修項(xiàng)目技術(shù)文件(國賽項(xiàng)目)
評論
0/150
提交評論