課程設計---基于單片機的步進電機控制器設計_第1頁
已閱讀1頁,還剩24頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  設計題目:基于MCS-51單片機的反應式步進電機控制器設計,要求能夠控制其轉速、正反轉和運行步數(shù)。</p><p>  摘要:在中國這個發(fā)展中大國,單片機的出現(xiàn)意味著計算機分為通用計算機系統(tǒng)和嵌入式計算機系統(tǒng)。單片機單芯片因它的體積微小和成本低廉的優(yōu)點而廣泛的應用到家電、儀表、汽車電子、工業(yè)控制單元、辦公自動化設備、通信設備等這些產品中去,是現(xiàn)代電子系統(tǒng)中極其重要的智能化工具。在未來,單片機

2、將會進一步的走向低功耗、小體積、大容量、高性能、低價位和混合信號集成化。本設計基于AT89S51單片機,利用反應式步進電機控原理,對其控制進行硬件和軟件的設計。以實現(xiàn)對反應式電機的控制器可對36BF003型步進電機進行正反轉、啟停、速度和步數(shù)控制。</p><p>  關鍵字:步進電機;單片機;拍數(shù);控制器;反應式</p><p><b>  一、控制原理分析</b>

3、</p><p>  1.1 三相步反應式進電機工作原理</p><p>  反應式步進電機又稱可變磁阻式步進電機,它和普通的電機一樣,也是有定子和轉子組成,它利用磁阻轉矩使轉子轉動。三相反應式步進電機定機定子上有六個極,每個極上裝有控制繞組,每相對的兩極組成一相。轉子上有數(shù)個均勻分布的齒,其上沒有繞組,當A相通電時,轉子在磁場力的作用下與定子齒對齊,若切斷A相電源,同時接通B相電源,在磁

4、場力的作用下轉子轉過一個步距角(步距角由轉子齒數(shù)、控制繞組相數(shù)和通電方式決定),如再使B相斷電,同時使C相控制繞組通電,轉子又轉過一個步距角。如此循環(huán)通電,并按A→B→C→A順序通電,步進電機便按一定的方向轉動。電機的轉速取決于控制繞組接通的斷開的變化頻率。若改變通電順序,即按A→C→B→A方式通電,則電機反向轉動。上述通電方式稱為三相單三拍通電方式;這里的“拍”是指定子控制繞組每改變一次通電方式,為一拍;“單”是指每次只有一相控制繞組

5、通電;“三拍”是指經過三次切換控制繞組的通電狀態(tài)為一個循環(huán)。</p><p>  三相步反應式進電機除上述通電方式外,還有三相雙三拍和三相單雙六拍通電方式,三相雙三拍通電順序為AB→BC→CA→AB或AB→CA→BC→AB,三相單雙六拍通電順序為A→AB→B→BC→C→CA→A或A→AC→C→CB→B→BA→A,這里“AB”表示A、B兩相同時通電,依此類推。</p><p>  三相反應式

6、步進電機的步距角θs的大小是由轉子的齒數(shù)、控制繞組的相數(shù)和通電方式所決定的,其關系為</p><p>  θs=360o/(mZrC)</p><p>  式中C為通電狀態(tài)系數(shù),當采用單拍方式時,C=1;而采用單雙拍方式時,C=2;m為步進電機相數(shù),當Zr為步進電機轉子數(shù)。</p><p>  若步進電機能電的脈沖頻率為f(每秒的拍數(shù)),則步進電機的速度為</

7、p><p>  n=60f/(mZrC)</p><p>  式中:f為頻率,單位為Hz;n為轉速,單位為r/min。</p><p>  1.2 基于單片機的步進電機驅動器控制原理</p><p>  步進電機驅動器控制系統(tǒng)的硬件設備由單片機、功率放大器、鍵盤輸入設備和顯示設備幾個部分組成,其示意圖如圖1-1所示:</p><

8、;p>  1、鍵盤:鍵盤由0~9號數(shù)字健、正轉啟動鍵、反轉啟動鍵、停止鍵、轉速+、轉速-等15個按鍵組成,通過鍵盤可以設置電機運行步數(shù)(電機轉動角度)、轉速、正/反轉啟動和停止。</p><p>  2、單片機:單片機是系統(tǒng)的控制單元,它通過對輸入設置運算產生和分配控制電機的脈沖信號,同時也要產生步數(shù)和速度的顯示信號。</p><p>  3、功率放大器:單片機輸出的脈沖信號功率很小

9、,不足以驅動電機轉動,故需要功率放大器將信號放大以驅動電機轉動。</p><p><b>  二、硬件設計</b></p><p>  2.1 電機的選用及其電路</p><p>  2.1.1 確定步進電機型號及其參數(shù)</p><p>  本設計選擇型號為36BF003反應式步進電機,其參數(shù)如表2-1所示:<

10、/p><p>  表2-1 36BF003反應式步進電機技術數(shù)據(jù)</p><p>  2.1.2電機驅動電路原理</p><p>  由表2-1可知電機的額定電壓是27V,本設計采用單電源功率放大電路驅動步進電機,電路原理圖如圖2-1所示。電路中由單片機AT89S51分配的控制脈沖從P0口的P0.0~P0.7輸出,經74LS125反相后控制光電開關,光電隔離后,由功率

11、管TIP122將脈沖信號進行電壓和電流放大,驅動步進電機的各相繞組。使步進電機隨著不同的脈沖信號分別作正轉、反轉、加速、減速和停止等動作。W1、W2、W3分別為電機三相繞阻,RL為繞組內阻,阻值為1.6Ω,100Ω電阻(R1、R2、R3)是一外接電阻,起限流作用,也是一個改善回路時間常數(shù)的元件。VD1、VD2、VD3為續(xù)流二極管,使電機繞組產生的反電動勢通過續(xù)流二極管(VD1、VD2、VD3)而衰減掉,從而保護了功率管TIP122不受損

12、壞。</p><p>  在100Ω外接電阻(R1、R2、R3)上并聯(lián)一個200μF電容,可以改善注入步進電機繞組的電流脈沖前沿,提高了步進電機的高頻性能。與續(xù)流二極管串聯(lián)的200Ω電阻(R10、R11、R12)可減小回路的放電時間常數(shù),使繞組中電流脈沖的后沿變陡,電流下降時間變小,也起到提高高頻工作性能的作用。</p><p>  2.3 單片機選擇及其電路設計</p>&

13、lt;p>  2.3.1 單片機的選用</p><p> ?。?)本設計采用AT89S51,它是低功耗、高性能的單片機,其特性如下: </p><p>  (2)4KB可編程的Flash存儲器(可經受1000次的擦除/寫入);

14、 </p><p> ?。?)全靜態(tài)工作:0Hz~24Hz; </p><p> ?。?)1288字節(jié)的內存RAM;

15、 </p><p> ?。?)32可編程I/O線; </p><p> ?。?)2個16位的定時/計數(shù)器; </p>

16、;<p> ?。?)編程串行通道; </p><p><b> ?。?)片內振蕩器。</b></p><p>  2.3.2 單片機工作電路設計</p><p><b> ?。?

17、)電壓選擇</b></p><p>  單片機的工作電壓范圍為2.7~5.5,在本設計中的單片機的工作電壓是5。</p><p><b> ?。?)復位電路</b></p><p>  AT89S52單片機的引腳為復位信號輸入端,高電平有效,,當振蕩器工作時,在此引腳上出現(xiàn)兩個機器周期以上的高電平,就可以使單片機復位。本設計采用TP

18、S3824處理器監(jiān)控電路復位,電路原理圖如圖2-2所示。</p><p>  TPS3824是一個帶有看門狗功能的監(jiān)控器,在上電期間,監(jiān)控器REST端向單片機復位引腳(RESET)發(fā)出一個復位信號,然后,其內部定時器每延時時間td向單片機發(fā)出一個復位信號,因此,在單片機正常工作期間,單片機P0.3口需要在時間t≤td時定期向監(jiān)控器WDI引腳發(fā)出一個正跳變或負跳變以觸發(fā)監(jiān)控器定時器復位,以防止單片機被誤復位。當單片

19、機死機無法正常工作時,P0.3無法輸出觸發(fā)監(jiān)控器定時器復位信號,監(jiān)控器則向單片機發(fā)出復位信號使系統(tǒng)復位,所以,使用TPS3824監(jiān)控器復位電路具有系統(tǒng)死機自動復位功能。</p><p><b> ?。?)時鐘電路</b></p><p>  本系統(tǒng)運行程序不多,速度要求不高,采用外部時鐘脈沖,選用ZPA(穩(wěn)定度為1~9x10-4 普通石英晶體振蕩器)型12MHz石英晶

20、體振蕩器。其電路原理圖如圖2-3所示。</p><p>  如圖2-3,時鐘電路連接單片機引腳XTAL1和XTAL2向單片機提供時鐘脈沖,電路中的電容C1和C2稱為負載電容,也可以理解為諧振電容的一部分,兩電容并串在電路中取值相同,一般為數(shù)pF至數(shù)十pF,這里選擇30pF。</p><p><b>  (4)鍵盤輸入電路</b></p><p>

21、;  鍵盤是一組按鍵的集合,它是最常用的單片機輸入設備.操作人員可以通過鍵盤輸入數(shù)據(jù)或者命令,實現(xiàn)簡單的人機通信。單片機的鍵盤設計方式有獨立式和矩陣式兩種,由于本系統(tǒng)鍵盤由0~9號數(shù)字鍵、正轉控制鍵、反轉控制鍵、停止控制鍵、加速鍵和減速鍵15個按鍵組成,通過鍵盤可以輸入電機運行步數(shù)、控制電機正轉/反轉/停止和速度。系統(tǒng)按鍵數(shù)量較多,為節(jié)省I/O口,簡化電路,降低成本,本設計采用標準的4*4矩陣式由P1號接入單片機。電路原理如圖2-4所示

22、。電路中四個電阻起上拉電阻作用。</p><p><b>  (5)顯示電路</b></p><p>  本設計采用七個八段數(shù)碼管顯示電機步數(shù),顯示步數(shù)范圍是0~9999999步,由步進電機原理可知,步數(shù)x步距角為電機轉角。一個八段數(shù)碼管顯示速度,編程設定顯示范圍是1~9,倍率是100,即實際轉速為顯示數(shù)x100,例如,速度顯示1,則電機轉速為100r/min。為簡化

23、電路,降低成本,八個八段顯示數(shù)碼管的陽極位段選線并聯(lián)在一起,由一個8位的P2口控制,形成段選線多路復用。而各位的共陰極分別8位的P3口控制,實現(xiàn)各位的分時選通,構成一個動態(tài)顯示器,如圖2-5所示。圖中右七個數(shù)碼管顯示步數(shù),左一個數(shù)碼管顯示轉速,74LS125為集成四個非門的芯片。</p><p><b>  三、軟件設計</b></p><p><b>  

24、3.1控制地址分配</b></p><p>  為方便程序檢查和修改,在設計程序之前應對所用到或使用較多數(shù)據(jù)存儲地單元命名標號,本程序數(shù)據(jù)儲存地址命名如表3-1所示。</p><p>  表3-1 數(shù)據(jù)儲存地址命名標號表</p><p><b>  3.2主程序設計</b></p><p>  為節(jié)省單片機

25、程序掃描時間,使用定時器T0中斷方式轉入控制電機運行,定時器T0定時時間為電機運轉“拍數(shù)”切換時間,即控制電機的脈沖切換時間,根據(jù)步進電機控制原理,改變此定時器定時時間可改變電機轉速。由此定時器定時時間未到時不斷進行鍵盤掃描的輸出顯示。時間初值查詢表SD_TAB見程序所用到的查詢表及其說明部分表4-1;主程序流程圖如圖3-1所示。</p><p><b>  主程序清單如下:</b><

26、/p><p>  ORG 0000H</p><p>  LJMP MAIN</p><p>  ORG 000BH</p><p>  LJMP DJKZ</p><p>  ORG 0050H</p><p>  MAIN: ;主程序</p&g

27、t;<p>  GB EQU 40H ;定義步數(shù)十位存儲單元</p><p>  SB EQU 40H ;定義步數(shù)百位存儲單元</p><p>  BB EQU 40H ;定義步數(shù)千位存儲單元</p><p>  QB EQU 40H ;定義步數(shù)萬位存儲單元</p><p>

28、;  WB EQU 40H ;定義步數(shù)十萬位存儲單元</p><p>  SWB EQU 40H ;定義步數(shù)百萬位存儲單元</p><p>  BWB EQU 40H ;定義步數(shù)個位存儲單元</p><p>  SD EQU 40H ;定義電機轉速表查詢偏移量存儲單元</p><p>  

29、JK EQU 40H ;定義電機控制表偏移量存儲單元</p><p>  KONZ EQU 40H ;定義輸入口按鍵按下狀態(tài)暫存單元</p><p>  KBL EQU 40H ;定義輸入口按鍵按下狀態(tài)中間變量存儲單元</p><p>  MOV P0,#00H ;I/O口初始化</p><p>

30、;  MOV P1,#0FFH ;</p><p>  MOV P2,#0FFH ;</p><p>  MOV P3,#0FFH ;</p><p>  MOV GB,#00H ;步數(shù)個位初始化</p><p>  MOV SB,#00H ;步數(shù)十位初始化</p><p&

31、gt;  MOV BB,#00H ;步數(shù)百位初始化</p><p>  MOV QB,#00H ;步數(shù)千位初始化</p><p>  MOV WB,#00H ;步數(shù)萬位初始化</p><p>  MOV SWB,#00H ;步數(shù)十萬位初始化</p><p>  MOV BWB,#00H ;步數(shù)百萬

32、位初始化</p><p>  MOV SD,#1 ;電機轉速開機默認為200r/min</p><p>  MOV JK,#0;電機控制狀態(tài)開機為停止</p><p>  MOV KZ,#0 ;速度查詢表偏移初始化0</p><p>  MOV TMOD,#01H ;T0控制模式為1</p>

33、<p>  MOV DPTR,#SD_TAB ;DPRT指向轉速查詢表首地址</p><p>  MOV A,SD ;取轉速查詢表偏移量</p><p>  MOVC A,@A+DPTR ;取定時器低位初值</p><p>  MOV TL0,A ;裝入定時器低位初值</p><p>  MO

34、V A,SD;取轉速查詢表偏移量</p><p>  ADD A,#10;調整轉速查詢表偏移量,為取T0高位做準備</p><p>  DA A;十進制數(shù)調整</p><p>  MOVC A,@A+DPTR;取定時器高位初值</p><p>  MOV TH0,A;裝入定時器高位

35、初值</p><p>  MOV IE,#82H ;T0開中斷</p><p>  SETB TR0 ;啟動T0</p><p><b>  LOOP:</b></p><p>  LCALL KEY_SUB ;調用鍵盤掃描錄入程序</p><p>  LCALL

36、DISP_SUB ;調用顯示程序</p><p>  LJMP LOOP ;返回LOOP</p><p>  SD_TAB: DB 72H, 54H, 05H, C5H, 42H, 95H, CEH, FDH, 20H, 3CH</p><p>  DB F6H, FBH, FCH, FDH, FEH, FEH, FEH, FEH, FFH,

37、 FFH</p><p>  3.2鍵盤錄入子程序</p><p>  實現(xiàn)功能:通過掃描鍵盤,判斷是否有鍵按下,若有鍵按下則改變相應控制地址單元的內容,為后面的顯示和電機控制做準備。鍵盤數(shù)據(jù)錄入子程序流程圖如圖3-2所示;輸入鍵鍵號查詢表IN_TAB見程序所用到的查詢表及其說明部分表4-2;電機啟/??刂坪惋@示段選碼表SRDS_TAB見程序所用到的查詢表及其說明部分表4-3;鍵盤掃描子程

38、序流程圖如圖3-2所示。</p><p>  鍵盤掃描方法:由硬件設計可知,鍵盤是4*4的行、列結構設計,行由P1.0~P1.3口輸入,列由P1.4~P1.7口輸入,其中行線通過上拉電阻接+5V,平時無按鍵動作時,行線處于高電平狀態(tài),而當有按鍵按下時,則對應的行線和列線短接,行線電平狀態(tài)將由與此行線相連的列線電平決定。因此,其掃描方法是:先令P1.4列線為低電平,其余三根列線為高電平,讀行線狀態(tài)。如果行線都為高電

39、平,則這一列線上沒有鍵閉合,接著使下一列線P1.5為低電平,其余列線為高電平,用同樣方法檢查P1.5列上沒無鍵閉合,依次類推,直到最后一列掃描完成。</p><p>  鍵盤錄入程序代碼如下:</p><p>  KEY_SUB:;鍵盤錄入程序</p><p>  LCALL KNUM_SUB;調用鍵盤掃描程序</p>&

40、lt;p>  MOV A, KONZ;保存初次掃描輸入狀態(tài)</p><p>  ORL A, #0FH ;輸入狀態(tài)高四位置1</p><p>  MOV KBL, A;保存</p><p>  CJNE A, #0FFH, KE_NEXT1;(A)≠0FFH,有按鍵輸入,轉去抖動</p>

41、<p>  LJMP KE_NEXT;否則轉子程序返回</p><p><b>  KE_NEXT1:</b></p><p>  MOV R7, #10 ;延時10ms去抖動</p><p>  LCALL DEL_SUB;調用延時1ms程序</p><p>  DJNZ

42、 R7, KE_NEXT1 ;</p><p>  LCALL KNUM_SUB;再次調用鍵盤掃描程序</p><p>  CJNE A, KONZ, KE_NEXT;若(A)=(KONZ),確認有鍵按下,等待按鍵</p><p> ??;釋放否則轉子程序返回</p><p>  KE_LOOP1: </p>

43、;<p>  LCALL KUNM_SUB;再次調用鍵盤掃描程序</p><p>  ORL A, #0FH;鍵盤輸入狀態(tài)高四位置1</p><p>  CJNE A, #0FFH, KE_LOOP1;若(A)=0FFH,鍵已釋放,執(zhí)行去抖動,否</p><p> ??;則轉KE_LOOP1再次判斷</p>

44、<p>  MOV R7, #10 ;延時10ms去抖動</p><p>  LCALL DEL_SUB;調用延時1ms程序</p><p>  DJNZ R7, KE_NEXT1 ;</p><p>  MOV DPTR, #IN_TAB;DPTR指向鍵號查詢表首地址</p><p>  M

45、OV R7, #0;從0號鍵開始掃描</p><p><b>  KE_LOOP2:</b></p><p>  MOV A, R7;取鍵號</p><p>  MOVC A, @A+DPTR;查表取出相應鍵號狀態(tài)碼</p><p>  CJNE A, KONZ, KE_NEXT2

46、;與輸入狀態(tài)相比較,若</p><p>  LJMP KE_NEXT3;相等,則為該號鍵按下,轉取鍵號</p><p><b>  KE_NEXT2:</b></p><p>  INC R7;否則取下一鍵號</p><p>  LJMP KE_LOOP2;轉再次掃描</p

47、><p><b>  KE_NEXT3:</b></p><p>  MOV A, R7;取按下鍵鍵號</p><p>  CJNE A, #9, KE_NEXT4;若鍵號=9,轉設置步數(shù)</p><p>  LJMP B_SET;否則轉判斷是否<9</p><p>

48、;<b>  KE_NEXT4:</b></p><p>  JC B_SET;若鍵號<9,轉設置步數(shù),否則順序判斷</p><p>  CJNE A, #12, KE_NEXT5;若鍵號≠12,</p><p>  LJMP DJ_SET;否則轉電機控制設置</p><p><b

49、>  KE_NEXT5:</b></p><p>  JC DJ_SET;若鍵號<12,轉電機控制設置,否則繼續(xù)判斷</p><p>  CJNE A, #13, KE_NEXT7;若鍵號≠13,轉減速設置,</p><p><b> ?。粍t順序設置加速</b></p><p> 

50、 MOV A, SD;取當前速度</p><p>  CJNE A, #7, KE_NEXT6;若當前速度≠7,轉速度加1檔</p><p>  LJMP KE_NEXT;否則當前速度為最大值,轉子程序返回</p><p><b>  KE_NEXT6:</b></p><p>  INC

51、 SD;當前速度增加1檔</p><p>  LJMP KE_NEXT;轉子程序返回</p><p><b>  KE_NEXT7:</b></p><p>  MOV A, SD;取當前速度</p><p>  CJNE A, #0, KE_NEXT8;若當前速度≠0

52、,轉速度減1檔</p><p>  LJMP KE_NEXT;否則當前速度為最小值,轉子程序返回</p><p>  KE_NEXT8: </p><p>  DEC SD;當前速度減1檔</p><p>  LJMP KE_NEXT;轉子程序返回</p><p

53、>  B_SET: </p><p>  MOV BWB, SWB;步數(shù)十萬位移至百萬位</p><p>  MOV SWB, WB;步數(shù)萬位移至十萬位</p><p>  MOV WB, QB;步數(shù)千位移至萬位</p><p>  MOV QB, BB;

54、步數(shù)百位移至千位</p><p>  MOV BB, SB;步數(shù)十位移至百位</p><p>  MOV SB, GB;步數(shù)個位移至十位</p><p>  MOV GB, A;步數(shù)新數(shù)移至個位</p><p>  LJMP KE_NEXT;轉子程序返回</p><p&

55、gt;<b>  DJ_SET:</b></p><p>  MOV DPTR, #SRDS_TAB;DPTP指向控制與顯示表首地址</p><p>  MOVC A, @A+DPTR;取控制狀態(tài)</p><p>  MOV JK, A;控制狀態(tài)存入控制單元</p><p><b&g

56、t;  KE_NEXT:</b></p><p>  RET ;子程序返回</p><p>  IN_TAB:DB 77H, B7H ,D7H, E7H,7BH ,BBH ,DBH ,EBH;輸入鍵鍵號查詢表</p><p>  DB 7DH, BDH ,DDH ,EDH,7EH ,BEH ,DEH</p>&l

57、t;p>  SRDS_TAB:DB C0H, F9H ,A4H, B0H,99H ,92H </p><p>  DB 82H ,F8H, 80H, 90H ,1, 2,3 ;電機啟/停控制和顯示段選碼表</p><p><b>  鍵盤掃描程序代碼:</b></p><p><b>  KUNM_SUB:</b

58、></p><p>  MOV P1, #0FFH;鍵盤輸入口置1</p><p>  CLR P1.4;掃描第一列</p><p>  MOV A, P1;讀入輸入狀態(tài)</p><p>  SETB P1.4;關閉掃描第一列</p><p>  CLR

59、P1.5;掃描第二列</p><p>  MOV A, P1;讀入輸入狀態(tài)</p><p>  SETB P1.5;關閉掃描第二列</p><p>  CLR P1.6;掃描第三列</p><p>  MOV A, P1;讀入輸入狀態(tài)</p><p&g

60、t;  SETB P1.6;關閉掃描第三列</p><p>  CLR P1.6;掃描第四列</p><p>  MOV A, P1;讀入輸入狀態(tài)</p><p>  SETB P1.6;關閉掃描第四列</p><p>  RET ;子程序返回</p>

61、<p><b>  3.3顯示程序</b></p><p>  實現(xiàn)功能:根據(jù)轉速控制單元SD和步數(shù)控制單元GB(個位)、SB(十位)、BB(百位)、QB(千位)、WB(萬位)、SWB(十萬位)、BWB(百萬位)的內容查詢SRKS_TAB取相應顯示段碼送相應顯示位顯示。電機啟/??刂坪惋@示段選碼表SRDS_TAB見程序所用到的查詢表及其說明部分表4-3;程序流程圖如圖3-4所示;&

62、lt;/p><p>  8位八段數(shù)碼管顯示方法:由硬件結構可知,步數(shù)顯示7位八段數(shù)碼管和速度顯示1位數(shù)碼管的段選線并聯(lián)在一起由單片機P2口控制,而各位的共陰極點分別由相應的P3口控制,實現(xiàn)各位的分時選通,構成8位的動態(tài)顯示。根據(jù)實際情況,每位顯示的字符不同,因此軟件設計必須采用掃描顯示方式,即在每一個瞬間只使某一位顯示相應字符。在此瞬間,段選碼由控制P2口輸出需顯示的段碼,位選P3口輸出位選碼選通該位顯示相應字符。如

63、此輪流,使每一位顯示該應顯示的字符,并延時一段時間,這里延時3ms,以造成視覺暫留效果。</p><p><b>  顯示代碼如下:</b></p><p>  DISP_SUB:;顯示子程序</p><p>  MOV P2, #0FFH;</p><p>  MOV P3, #00H

64、;關顯示</p><p>  MOV R7, #8;設置顯示位數(shù)</p><p>  MOV R0, GB;取步數(shù)個位顯示數(shù)字</p><p>  MOV DPTR, #SRDS_TAB;DPTR指向控制與顯示段碼表首地址</p><p>  MOV A, #01H;取步數(shù)位顯示控制字</p&g

65、t;<p>  PUSH ACC;保護步數(shù)位顯示控制字</p><p>  MOV A, @R0;取步數(shù)顯示數(shù)字</p><p>  MOVC A, @A+DPTR;取顯示段碼</p><p>  MOV P2, A;送顯示</p><p>  POP ACC;取出位顯示

66、控制字</p><p>  MOV P3, A;打開位顯示</p><p><b>  DLOOP2:</b></p><p>  MOV R6, #3 ;延時3ms</p><p>  LCALL DEL_TAB;調用延時1ms程序</p><p>  DJNZ

67、 R6, DLOOP2;判斷時是否到,未到剛返回延時,否則往下執(zhí)行</p><p>  RL A;取下一位顯示控制字</p><p>  INC R0;R0;指向下一位顯示數(shù)字存儲地址</p><p>  DJNZ R7, DLOOP1;若(R7)-1=0,八位顯示完成,往下執(zhí)行,否則轉顯示下一位</p><

68、p>  MOV P2, #0FFH;</p><p>  MOV P3, #00H;關顯示</p><p>  RET ;子程序返回</p><p>  SRDS_TAB:DB C0H, F9H ,A4H, B0H,99H ,92H </p><p>  DB 82H ,F8H, 80H, 9

69、0H ,1, 2,3 ;電機啟/??刂坪惋@示段選碼表</p><p><b>  電機控制程序</b></p><p>  實現(xiàn)功能:根據(jù)地址單元JK的內容控制電機的正轉、反轉和停止。時間初值查詢表SD_TAB見程序所用到的查詢表及其說明部分表4-1;單片機輸出控制字查詢表MQ_TAB見程序所用到的查詢表及其說明部分表4-4;程序流程圖如圖3-5所示:</p&

70、gt;<p>  電機控制程序代碼如下:</p><p>  KT0_INT: ;電機控制程序中斷服務程序</p><p>  MOV DPTR,#SD_TAB ;DPRT指向轉速查詢表首地址</p><p>  MOV A,SD ;取轉速查詢表偏移量</p><p>  MOVC A,@A+D

71、PTR ;取定時器低位初值</p><p>  MOV TL0,A ;裝入定時器低位初值</p><p>  MOV A,SD ;取轉速查詢表偏移量</p><p>  ADD A,#10 ;調整轉速查詢表偏移量,為取T0高位做準備</p><p>  DA A ;十進制數(shù)調整</p&

72、gt;<p>  MOVC A,@A+DPTR ;取定時器高位初值</p><p>  MOV TH0,A ;裝入定時器高位初值</p><p>  MOV R7, #7 ;循環(huán)7次,分別判斷7位步數(shù)是否為0</p><p>  MOV R0, #GB ;R0指向步數(shù)個位</p><p>&

73、lt;b>  KLOOP1:</b></p><p>  MOV A, @R0 ;取位步數(shù)</p><p>  CJNE A, #0, KNEXT1 ;若位步數(shù)=0,判斷下一位,否則轉判斷電機控制狀態(tài)</p><p>  INC R0 ;R0指向步數(shù)下一位地址</p><p>  DJNZ R

74、7, KLOOP1 ;若(R7)-1=0,則步數(shù)每一位均為0,轉</p><p>  LJMP KNEXT ;程序返回</p><p><b>  KNEXT1:</b></p><p>  MOV A, JK ;取電機控制狀態(tài)</p><p>  CJNE A, #1, KNEXT2

75、 ;若電機控制狀態(tài)=1,電機正轉,否則判斷是否反轉</p><p>  LJMP ZZKZ ;轉電機正轉控制</p><p><b>  KNEXT2:</b></p><p>  CJNE A, #2, KNEXT ;若電機控制狀態(tài)≠2,電機處于停止狀態(tài),</p><p> ??;轉返回,否則電機

76、 </p><p>  MOV A, KZ ;取上一次電機控制表偏移量</p><p>  CJNE A, #0, KNEXT3 ;若上一次電機控制表偏移量為不0,轉減1,若為0,</p><p>  MOV A, #5 ;則電機控制表偏移量取5</p><p>  LJMP KN

77、EXT6;</p><p><b>  KNEXT3:</b></p><p>  DEC A ;電機控制表偏移量減1</p><p>  LJMP DNEXT5 ;轉取脈沖輸出</p><p><b>  ZZKZ:</b></p><p>  MOV

78、 A, KZ ;取上一次電機控制表偏移量</p><p>  CJNE A, #5,KNEXT4 ;若上一次電機控制表偏移量為不5,轉加1,若為5,</p><p>  MOV A, #0 ;則電機控制表偏移量取0</p><p>  LJMP KNEXT5 ;轉取脈沖輸出</p><p><b&

79、gt;  KNEXT4:</b></p><p>  INC A ;電機控制表偏移量加1</p><p><b>  KNEXT5:</b></p><p>  MOV KZ, A ;保存當前電機控制表偏移量</p><p>  MOV DPTR,#MQ_TAB ;DPTR指向電機

80、控制表首地址</p><p>  MOVC A, @A+DPTR ;取輸出脈沖</p><p>  MOV P0, A ;輸出脈沖</p><p>  MOV R7, #6 ;步數(shù)減1循環(huán)6次</p><p>  MOV R0, #GB ;R0指向步數(shù)個位儲存單元</p><p>

81、<b>  KLOOP2:</b></p><p>  MOV A ,@R0 ;取位步數(shù)</p><p>  CJNE A, #0, KNEXT6 ;若位步數(shù)≠0,轉位步數(shù)-1,否則</p><p>  MOV @R0, #9 ;往該位步數(shù)存9</p><p>  INC R0 ;R

82、0指向下一位</p><p>  DJNZ R7, DLOOP2;若(R7)-1=0,六位判斷完成,百萬位減1,否則繼</p><p><b>  ;續(xù)判斷</b></p><p>  DEC BWB ;百萬位減1</p><p>  LJMP KNEXT ;轉程序返回</p>&l

83、t;p><b>  KNEXT6:</b></p><p>  DEC A ;位步數(shù)-1</p><p>  MOV @R0, A ;存回該單元</p><p><b>  KNEXT:</b></p><p>  RET ;程序返回</p>

84、<p>  SD_TAB: DB 72H, 54H, 05H, C5H, 42H, 95H, CEH, FDH, 20H, 3CH;定時器初值查詢</p><p>  DB F6H, FBH, FCH, FDH, FEH, FEH, FEH, FEH, FFH, FFH</p><p>  MQ_TAB:DB 01H, 03H ,02H, 06H,04H ,05H

85、;單片機輸出控制字查詢表</p><p><b>  延時1ms程序</b></p><p>  實現(xiàn)功能:利用軟件循環(huán)運行延時約1ms。</p><p>  DEL_SUB:MOV R7, #2</p><p>  DLE1: MOV R6 ,#248</p><p>  DEL2:

86、 DJNZ R6, DEL2</p><p>  DJNZ R7, DEL1</p><p><b>  RET</b></p><p>  查指令表可知執(zhí)行MOV指令需要用1個機器周期,DJNZ指令需要用2個機器用期,本系統(tǒng)使用12MHz晶振,一個機器周期時間長度為1us,所以該段程序執(zhí)行時間為:</p><p&g

87、t;  [1+(1+2×248+2)×2+2]*1us=999us≈1ms</p><p>  程序所用到的查詢表及其說明</p><p>  時間初值查詢表SD_TAB</p><p>  根據(jù)步進電機原理,步進電機的轉速為</p><p>  n=60f/(mZrC)</p><p>  式中:

88、式中C為通電狀態(tài)系數(shù),當采用單拍方式時,C=1;而采用單雙拍方式時,C=2;m為步進電機相數(shù),當Zr為步進電機轉子數(shù),,f為頻率,單位為Hz ,n為轉速,單位為r/min。</p><p>  因此,當步進電機轉速為n時,步進電機的拍數(shù)切換時間與轉速的關系為</p><p>  t=1/f=60/(nmZrC)</p><p>  式中:t為電機拍數(shù)切換時間,單位為

89、秒。由此可以算出程序中定時器T0所需定時時間T。</p><p>  根據(jù)程序查指令表可知定時器定時到開始到脈沖輸出需要運行約648個晶振周期數(shù)的程序,系統(tǒng)用的是12MHz晶振,即運行此段程序需要648/12=54us的時間,故定時器T0所需定時時間T與轉速的關系為</p><p>  T=t-(54×10-3)=60/(nmZrC) -(54×10-3)</p&

90、gt;<p>  式中:定時器T0所需定時時間T的單位為秒。</p><p>  由選用電機的參數(shù)可知:步進電機相數(shù)m=3,因運行采用單雙拍方式,C=2,步進電機轉子數(shù)Zr=40。而定時器工作在模式1下初值X與定時時間T的關系為</p><p>  X=216-T×106</p><p>  因此,由公式可算得電機轉速與定時器初值關系表如表4

91、-1所示;</p><p>  電機轉速與定時器初值關系表 表4-1</p><p>  定時器初值查詢表SD_TAB如下:</p><p>  SD_TAB: DB 72H, 54H, 05H, C5H, 42H, 95H, CEH, FDH, 20H, 3CH</p><p>  DB F6H, FBH, FCH, FDH, FE

92、H, FEH, FEH, FEH, FFH, FFH</p><p>  輸入鍵鍵號查詢表IN_TAB</p><p>  輸入鍵鍵號與P1口狀態(tài)關系如下表4-2所示:</p><p>  輸入鍵鍵號與P1口狀態(tài)關系表 表4-2</p><p>  輸入鍵鍵號查詢表IN_TAB如下:</p><p>  IN_TA

93、B:DB 77H, B7H ,D7H, E7H,7BH ,BBH ,DBH ,EBH</p><p>  DB 7DH, BDH ,DDH ,EDH,7EH ,BEH ,DEH</p><p>  電機啟/??刂坪惋@示段選碼表SRDS_TAB</p><p>  電機啟/停控制與其狀態(tài)、顯示數(shù)與顯示段選碼關系表如下表4-3:</p><p&

94、gt;  電機啟/停控制與其狀態(tài)、顯示數(shù)與顯示段選碼關系表</p><p>  電機啟/??刂坪惋@示段選碼查詢表SRDS_TAB如下:</p><p>  SRDS_TAB:DB C0H, F9H ,A4H, B0H,99H ,92H ,82H ,F8H</p><p>  DB 80H, 90H ,1, 2,3 </p><p> 

95、 單片機輸出控制字查詢表MQ_TAB</p><p>  步進電機采用單雙六拍方式輸出,電機繞組通電與單片機輸出控制字關系如下表4-4:</p><p>  電機繞組通電與單片機輸出控制字關系表 表4-4</p><p>  單片機輸出控制字查詢表MQ_TAB如下:</p><p>  MQ_TAB:DB 01H, 03H ,02H

96、, 06H,04H ,05H </p><p>  附錄一:系統(tǒng)電路原理</p><p>  附錄二:系統(tǒng)軟件程序清單</p><p>  ORG 0000H</p><p>  LJMP MAIA</p><p>  ORG 000BH</p><p>  LJMP DJKZ</

97、p><p>  ORG 0050H</p><p>  MAIN:;主程序</p><p>  GB EQU 40H ;定義步數(shù)十位存儲單元</p><p>  SB EQU 40H ;定義步數(shù)百位存儲單元</p><p>  BB EQU 40H ;定義步數(shù)千位

98、存儲單元</p><p>  QB EQU 40H ;定義步數(shù)萬位存儲單元</p><p>  WB EQU 40H ;定義步數(shù)十萬位存儲單元</p><p>  SWB EQU 40H ;定義步數(shù)百萬位存儲單元</p><p>  BWB EQU 40H ;定義步數(shù)個位存儲單元</p

99、><p>  SD EQU 40H ;定義電機轉速表查詢偏移量存儲單元</p><p>  JK EQU 40H ;定義電機控制表偏移量存儲單元</p><p>  KONZ EQU 40H ;定義輸入口按鍵按下狀態(tài)暫存單元</p><p>  KBL EQU 40H ;定義輸入口按鍵按下狀態(tài)

100、中間變量存儲單元</p><p>  MOV P0,#00H ;I/O口初始化</p><p>  MOV P1,#0FFH ;</p><p>  MOV P2,#0FFH ;</p><p>  MOV P3,#0FFH ;</p><p>  MOV GB,#00H

101、;步數(shù)個位初始化</p><p>  MOV SB,#00H ;步數(shù)十位初始化</p><p>  MOV BB,#00H ;步數(shù)百位初始化</p><p>  MOV QB,#00H ;步數(shù)千位初始化</p><p>  MOV WB,#00H ;步數(shù)萬位初始化</p><p&

102、gt;  MOV SWB,#00H ;步數(shù)十萬位初始化</p><p>  MOV BWB,#00H ;步數(shù)百萬位初始化</p><p>  MOV SD,#1 ;電機轉速開機默認為200r/min</p><p>  MOV JK,#0;電機控制狀態(tài)開機為停止</p><p>  MOV KZ,#0

103、 ;速度查詢表偏移初始化0</p><p>  MOV TMOD,#01H ;T0控制模式為1</p><p>  MOV DPTR,#SD_TAB ;DPRT指向轉速查詢表首地址</p><p>  MOV A,SD ;取轉速查詢表偏移量</p><p>  MOVC A,@A+DPTR ;取定時器

104、低位初值</p><p>  MOV TL0,A ;裝入定時器低位初值</p><p>  MOV A,SD;取轉速查詢表偏移量</p><p>  ADD A,#10;調整轉速查詢表偏移量,為取T0高位做準備</p><p>  DA A;十進制數(shù)調整</p><p&

105、gt;  MOVC A,@A+DPTR;取定時器高位初值</p><p>  MOV TH0,A;裝入定時器高位初值</p><p>  MOV IE,#82H ;T0開中斷</p><p>  SETB TR0 ;啟動T0</p><p><b>  LOOP:</b><

106、/p><p>  LCALL KEY_SUB ;調用鍵盤掃描錄入程序</p><p>  LCALL DISP_SUB ;調用顯示程序</p><p>  LJMP LOOP ;返回LOOP</p><p>  KEY_SUB:;鍵盤錄入子程序</p><p>  LCAL

107、L KNUM_SUB;調用鍵盤掃描程序</p><p>  MOV A, KONZ;保存初次掃描輸入狀態(tài)</p><p>  ORL A, #0FH ;輸入狀態(tài)高四位置1</p><p>  MOV KBL, A;保存</p><p>  CJNE A, #0FFH, KE_

108、NEXT1;(A)≠0FFH,有按鍵輸入,轉去抖動</p><p>  LJMP KE_NEXT;否則轉子程序返回</p><p><b>  KE_NEXT1:</b></p><p>  MOV R7, #10 ;延時10ms去抖動</p><p>  LCALL DEL_SUB

109、;調用延時1ms程序</p><p>  DJNZ R7, KE_NEXT1 ;</p><p>  LCALL KNUM_SUB;再次調用鍵盤掃描程序</p><p>  CJNE A, KONZ, KE_NEXT;若(A)=(KONZ),確認有鍵按下,等待按鍵</p><p> ??;釋放否則轉子程序返回<

110、/p><p>  KE_LOOP1: </p><p>  LCALL KUNM_SUB;再次調用鍵盤掃描程序</p><p>  ORL A, #0FH;鍵盤輸入狀態(tài)高四位置1</p><p>  CJNE A, #0FFH, KE_LOOP1;若(A)=0FFH,鍵已釋放,執(zhí)行去抖動,否</p>

111、<p> ?。粍t轉KE_LOOP1再次判斷</p><p>  MOV R7, #10 ;延時10ms去抖動</p><p>  LCALL DEL_SUB;調用延時1ms程序</p><p>  DJNZ R7, KE_NEXT1 ;</p><p>  MOV DPTR, #IN_TAB;

112、DPTR指向鍵號查詢表首地址</p><p>  MOV R7, #0;從0號鍵開始掃描</p><p><b>  KE_LOOP2:</b></p><p>  MOV A, R7;取鍵號</p><p>  MOVC A, @A+DPTR;查表取出相應鍵號狀態(tài)碼</p&g

113、t;<p>  CJNE A, KONZ, KE_NEXT2;與輸入狀態(tài)相比較,若</p><p>  LJMP KE_NEXT3;相等,則為該號鍵按下,轉取鍵號</p><p><b>  KE_NEXT2:</b></p><p>  INC R7;否則取下一鍵號</p><

114、p>  LJMP KE_LOOP2;轉再次掃描</p><p><b>  KE_NEXT3:</b></p><p>  MOV A, R7;取按下鍵鍵號</p><p>  CJNE A, #9, KE_NEXT4;若鍵號=9,轉設置步數(shù)</p><p>  LJMP B_S

115、ET;否則轉判斷是否<9</p><p><b>  KE_NEXT4:</b></p><p>  JC B_SET;若鍵號<9,轉設置步數(shù),否則順序判斷</p><p>  CJNE A, #12, KE_NEXT5;若鍵號≠12,</p><p>  LJMP DJ_SET

116、;否則轉電機控制設置</p><p><b>  KE_NEXT5:</b></p><p>  JC DJ_SET;若鍵號<12,轉電機控制設置,否則繼續(xù)判斷</p><p>  CJNE A, #13, KE_NEXT7;若鍵號≠13,轉減速設置,</p><p><b>  ;則

117、順序設置加速</b></p><p>  MOV A, SD;取當前速度</p><p>  CJNE A, #7, KE_NEXT6;若當前速度≠7,轉速度加1檔</p><p>  LJMP KE_NEXT;否則當前速度為最大值,轉子程序返回</p><p><b>  KE_NEXT

118、6:</b></p><p>  INC SD;當前速度增加1檔</p><p>  LJMP KE_NEXT;轉子程序返回</p><p><b>  KE_NEXT7:</b></p><p>  MOV A, SD;取當前速度</p><p

119、>  CJNE A, #0, KE_NEXT8;若當前速度≠0,轉速度減1檔</p><p>  LJMP KE_NEXT;否則當前速度為最小值,轉子程序返回</p><p>  KE_NEXT8: </p><p>  DEC SD;當前速度減1檔</p><p>  LJMP

120、 KE_NEXT;轉子程序返回</p><p>  B_SET: </p><p>  MOV BWB, SWB;步數(shù)十萬位移至百萬位</p><p>  MOV SWB, WB;步數(shù)萬位移至十萬位</p><p>  MOV WB, QB;步數(shù)千位移至萬位<

溫馨提示

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

評論

0/150

提交評論