全國熱線電話:

0519-8918 1758
產(chǎn)品中心PRODUCT SHOW
聯(lián)系我們CONTACT US

    聯(lián)系人:聶經(jīng)理

    手機(jī):18605199068  18602586200

    電話:0519-89181758  83700750  

    Q Q:710285815

    郵箱:18605199068@126.com

    地址:江蘇省常州市武進(jìn)區(qū)大通西路200號。

直流無刷電機(jī)和無刷直流電機(jī)信息智能網(wǎng)

基于單片機(jī)的步進(jìn)電機(jī)轉(zhuǎn)速控制設(shè)計詳解(附程序)
2022-06-20

  步進(jìn)電機(jī)是將電脈沖信號轉(zhuǎn)變?yōu)榻俏灰苹蚓€位移的開環(huán)控制元件。在非超載的情況下,電機(jī)的轉(zhuǎn)速、停止的位置只取決于脈沖信號的頻率和脈沖數(shù),而不受負(fù)載變化的影響,即給電機(jī)加一個脈沖信號,電機(jī)則轉(zhuǎn)過一個步距角。這一線性關(guān)系的存在,加上步進(jìn)電機(jī)只有周期性的誤差而無累積誤差等特點。使得在速度、位置等控制領(lǐng)域用步進(jìn)電機(jī)來控制變的非常的簡單。   步進(jìn)電機(jī)的調(diào)速一般是改變輸入步進(jìn)電機(jī)的脈沖的頻率來實現(xiàn)步進(jìn)電機(jī)的調(diào)速,因為步進(jìn)電機(jī)每給一個脈沖就轉(zhuǎn)動一個固定的角度,這樣就可以通過控制步進(jìn)電機(jī)的一個脈沖到下一個脈沖的時間間隔來改變脈沖的頻率,延時的長短來具體控制步進(jìn)角來改變電機(jī)的轉(zhuǎn)速,從而實現(xiàn)步進(jìn)電機(jī)的調(diào)速,本文主要介紹基于單片機(jī)的步進(jìn)電機(jī)轉(zhuǎn)速控制設(shè)計詳解,文章最后附上程序。      基于單片機(jī)的步進(jìn)電機(jī)轉(zhuǎn)速控制設(shè)計詳解   本次設(shè)計以CPU選用89C5l作為步進(jìn)電機(jī)的控制芯片.89C51的結(jié)構(gòu)簡單并可以在編程器上實現(xiàn)閃爍式的電擦寫達(dá)幾萬次以上.使用方便等優(yōu)點,而且完全兼容MCS5l系列單片機(jī)的所有功能。AT89C51是一種帶4K字節(jié)閃爍可編程可擦除只讀存儲器(FPEROM—FAlsh ProgrAmmABle And ErAsABle ReAd Only Memory)的低電壓,高性能CMOS8位微處理器,俗稱單片機(jī)。該器件采用ATMEL高密度非易失存儲器制造技術(shù)制造,與工業(yè)標(biāo)準(zhǔn)的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲器組合在單個芯片中,ATMEL的AT89C51是一種高效微控制器,為很多嵌入式控制系統(tǒng)提供了一種靈活性高且價廉的方案。   顯示電路的用8279芯片來驅(qū)動,8279芯片分別接兩排顯示器,每排為4位顯示,分別用來顯示步進(jìn)電機(jī)的實際轉(zhuǎn)速與給定轉(zhuǎn)速。   8279與CPU的連接框圖如4-11所示:      8279芯片的具體介紹如下;   1) DB0~DB7:雙向數(shù)據(jù)總線。在CPU于827數(shù) 據(jù)與命令的傳送。   2) CLK:8279的系統(tǒng)時鐘,100KHZ為最佳選擇。   3) RESET:復(fù)位輸入線,高電平有效。當(dāng) RESET 輸入端出現(xiàn)高電平時,8279被初始復(fù)位。   4) /CS:片選信號。低電平使能,使能時可將命令寫入8279或讀取8279的數(shù)據(jù)。   5) A0:用于區(qū)分信息的特性。當(dāng)A0=1時,CPU向8279寫入命令或讀取8279的狀態(tài);當(dāng)A0為0時,讀寫一數(shù)據(jù)。   6) /RD:讀取控制線。/RD=0,8279會送數(shù)據(jù)至外部總線。   7) /WR:寫入控制線。/WR=0,8279會從外部總線捕捉數(shù)據(jù)。   8) IRQ:中斷請求輸出線,高電平有效。當(dāng)FIFO RAM 緩沖器中存有鍵盤上閉合鍵的鍵碼時,IRQ線升高,向CPU請求中斷,當(dāng)CPU將緩沖器中的輸入鍵數(shù)的數(shù)據(jù)全部讀取時,中斷請求線下降為低電平。   9) L0~SL3:掃描輸出線,用于對鍵盤顯示器掃 描??梢允蔷幋a模式(16對1)或譯碼模式(4對1)。   10) ~RL7:反饋輸入線,由內(nèi)部拉高電阻拉成高電平,也可由鍵盤上按鍵拉成低電平。   11) FT、CNTL/STB :控制鍵輸入線,由內(nèi)部拉高電 阻拉成高電平,也可由外部控制按鍵拉成低電平。   12) TB0~3、OUTA0~3:顯示段數(shù)據(jù)輸出線,可分別作為兩個半字節(jié)輸出,也可作為8位段數(shù)據(jù)輸出口,此時OUTB0為最低位, OUTA3位最高位。   13) 消隱輸出線,低電平有效。當(dāng)顯示器切換時或使用消隱命令時,將顯示消隱。      8279的初始化程序如下:   INIT:MOV DPTR,#7FFFH ;置8279命令/狀態(tài)口地址   MOV A,#0D1H ;置清顯示命令字   MOVX @DPTR,A ;送清顯示命令   WEIT:MOVX A,@DPTR ;讀狀態(tài)   JB ACC.7,WEIT ;等待清顯示RAM結(jié)束   MOV A,#34H ;置分頻系數(shù),晶振12MHz   MOVX @DPTR,A ;送分頻系數(shù)   MOV A,#00H ;置鍵盤/顯示命令   MOVX @DPTR,A ;送鍵盤/顯示命令   MOV IE,#84H ;允許8279中斷   RET   顯示子程序如下:   DIS:MOV DPTR,#7FFFH ;置8279命令/狀態(tài)口地址   MOV R0,#30H ;字段碼首地址   MOV R7,#08H ;8位顯示   MOV A,#90H ;置顯示命令字   MOVX @DPTR,A ;送顯示命令   MOV DPTR,#7FFEH ;置數(shù)據(jù)口地址   LP:MOV A,@R0 ;取顯示數(shù)據(jù)   ADD A,#6 ;加偏移量   MOVC A,@A+PC ;查表,取得數(shù)據(jù)的段碼   MOVX @DPTR,A ;送段碼顯示   INC R0 ;調(diào)整數(shù)據(jù)指針   DJNZ R7,LP ;   RET   SEG:DB 3FH,06H,5BH,4FH,66H,6DH  ?。蛔址?、1、2、3、4、5段碼   DB 7DH,07H,7EH,6FH,77H,7CH  ??;字符6、7、8、9、A、B段碼   DB 39H,5EH,79H,71H,73H,3EH   ;字符C、d、E、F、P、U段碼   DB 76H,38H,40H,6EH,F(xiàn)FH,00H  ??;字符H、L、-、Y、“空”段碼   鍵盤中斷子程序如下:   KEY:PUSH PSW   PUSH DPL   PUSH DPH   PUSH ACC   PUSH B   SETB PSW.3   MOV DPTR,#7FFFH ;置狀態(tài)口地址   MOVX A,@DPTR ;讀FIFO狀態(tài)   ANL A,#0FH ;   JZ PKYR ;   MOV A,#40H ;置讀FIFO命令   MOVX @DPTR,A ;送讀FIFO命令   MOV DPTR,#7FFEH ;置數(shù)據(jù)口地址   MOVX A,@DPTR ;讀數(shù)據(jù)   LJMP KEY1 ;轉(zhuǎn)鍵值處理程序   PKYR: POP B   POP ACC   POP DPH   POP DPL   POP PSW   RETI ;   KEY1: … … ;鍵值處理程序   鍵盤程序清單:   KEY1: ACALL KS1 ; 有無鍵按下子程序   JNZ LK1 ;有鍵按下,轉(zhuǎn)去抖延時   AJMP KEY1 ;無鍵按下,繼續(xù)掃描   LK1: ACALL DELA12 ;12ms延時程序調(diào)用   ACALL KS1 ;判斷鍵是否真正按下   JNZ LK2 ;有鍵按下,轉(zhuǎn)逐列掃描   AJMP KEY1 ;無鍵按下,繼續(xù)掃描   LK2: MOV R2,#0FEH ;設(shè)置首列掃描字   MOV R4,#00H ;保存首列號   LK4: MOV DPTR,#7F01H;列掃描字送至PA口   MOV A,R2   MOVX @DPTR,A   INC DPTR ;指向PC口   INC DPTR   MOVX A,@DPTR ;讀入行狀態(tài)   JB ACC.0,LONE ;第0行無鍵按下,轉(zhuǎn)LONE   MOV A,#00H ;有鍵按下,設(shè)置行首鍵號   AJMP LKP ;轉(zhuǎn)求鍵號   LONE: JB ACC.1,LTWO ;第1行無鍵按下,轉(zhuǎn)LTWO   MOV A,#08H ;有鍵按下,設(shè)置行首鍵號   AJMP LKP ;轉(zhuǎn)求鍵號   LTWO: JB ACC.2,LTHR ;第2行無鍵按下,轉(zhuǎn)LTHR   MOV A,#10H ;有鍵按下,設(shè)置行首鍵?   AJMP LKP ;轉(zhuǎn)求鍵號   LTHR: JB ACC.3,NEXT ;第3行無鍵按下,查下一列   MOV A,#18H ;有鍵按下,設(shè)置行首鍵   LKP: ADD A,R4 ;求鍵號,鍵號=行首鍵號+列號   PUSH ACC ;保護(hù)鍵號   LK3: ACALL KS1 ;等待鍵釋放   JNZ LK3 ;鍵未釋放,繼續(xù)等待   POP ACC ;鍵釋放,鍵號送A   AJMP OVER ;鍵掃描結(jié)束   NEXT: INC R4 ;列號加1,指向下一列   MOV A,R2 ;判斷8列掃描完否   JNB ACC.7,KND ;8列掃描完,繼續(xù)   RL A ;掃描字左移一位   MOV R2,A ;送掃描字   AJMP LK4 ;轉(zhuǎn)下一列掃描   KND: AJMP KEY1   OVER: RET ;鍵掃描結(jié)束   KS1: MOV DPTR,#7F01H ;指向PA口   MOV A,#00H ;設(shè)置掃描字   MOVX @DPTR,A ;掃描字送PA口   INC DPTR ;指向PC口   INC DPTR   MOVX A,@DPTR ;讀入PC口狀態(tài)   CPL ;以高電平表示有鍵按下   ANL A,#0FH ;屏蔽高4位   RET   初始化程序如下:   INIT:MOV DPTR,#7FFFH ;置8279命令/狀態(tài)口地址   MOV A,#0D1H ;置清顯示命令字   MOVX @DPTR,A ;送清顯示命令   WEIT:MOVX A,@DPTR ;讀狀態(tài)   JB ACC.7,WEIT ;等待清顯示RAM結(jié)束   MOV A,#34H ;置分頻系數(shù),晶振12MHz   MOVX @DPTR,A ;送分頻系數(shù)   MOV A,#00H ;置鍵盤/顯示命令   MOVX @DPTR,A ;送鍵盤/顯示命令   MOV IE,#84H ;允許8279中斷   RET   顯示子程序如下:   DIS:MOV DPTR,#7FFFH ;置8279命令/狀態(tài)口地址   MOV R0,#30H ;字段碼首地址   MOV R7,#08H ;8位顯示   MOV A,#90H ;置顯示命令字   MOVX @DPTR,A ;送顯示命令   MOV DPTR,#7FFEH ;置數(shù)據(jù)口地址   LP:MOV A,@R0 ;取顯示數(shù)據(jù)   ADD A,#6 ;加偏移量   MOVC A,@A+PC ;查表,取得數(shù)據(jù)的段碼   MOVX @DPTR,A ;送段碼顯示   INC R0 ;調(diào)整數(shù)據(jù)指針   DJNZ R7,LP ;   RET   鍵盤中斷子程序如下:   KEY:PUSH PSW   PUSH DPL   PUSH DPH   PUSH ACC   PUSH B   SETB PSW.3   MOV DPTR,#7FFFH ;置狀態(tài)口地址   MOVX A,@DPTR ;讀FIFO狀態(tài)   ANL A,#0FH ;   JZ PKYR ;   MOV A,#40H ;置讀FIFO命令   MOVX @DPTR,A ;送讀FIFO命令   MOV DPTR,#7FFEH ;置數(shù)據(jù)口地址   MOVX A,@DPTR ;讀數(shù)據(jù)   LJMP KEY1 ;轉(zhuǎn)鍵值處理程序   PKYR: POP B   POP ACC   POP DPH   POP DPL   POP PSW   RETI ;   驅(qū)動電路子程序的設(shè)計   PUSH:MOV R3 , # NUM   PUSH A   PUSH PSW   LOOP: SETB P1.0   ACALL DELAY1   CLR P1.0   ACALL DELAY2   DJNZ R3,LOOP   POP PSW   POP A   RET   延時子程序的設(shè)計   MOV R2,#18H   LCALL 7FEBH   RET   ORG 7FEBH ;通用延時子程序  ?。?7EBH & 0FEBH & 。。。)   L7FEB: PUSH 02H ;R2(復(fù)位后R2即為02H)存放時間常數(shù),進(jìn)棧保護(hù)   L7FED: PUSH 02H ; R2進(jìn)棧保護(hù)   L7FEF: PUSH 02H ; 進(jìn)棧   L7FF1: DJNZ R2,$ ;R2不為零等待   POP 02H ;出棧   DJNZ R2,L7FEF ; R2不為零轉(zhuǎn)   POP 02H ; 出棧   DJNZ R2,L7FED ; R2不為零轉(zhuǎn)   POP 02H ; 出棧   DJNZ R2,L7FEB ; R2不為零轉(zhuǎn)   RET ;子程序返回   END   圖6-4-1 主程序流程圖   主程序如下:   CON: MOV R3, # N   MOV TMOD , # 10H   MOV TL1 , # LOW   MOV TH1 , # H IGH   JNB FLAG ,LEFT   MOV R0 , RM   AJMP TIME - S   LEFT: MOV R0 , LM   TIME: SETB EA   SETB ET1   SETB TR1   步進(jìn)電機(jī)控制程序p3.2正轉(zhuǎn),p3.3反轉(zhuǎn),p3.4停止 步進(jìn)電機(jī)接p1.0p1.1p1.2p1.3   org 00h   stop: orl p1,#0ffh ; 步進(jìn)電機(jī)停止   loop:jnB p3.2,for2 ; 如果p3.2按下正轉(zhuǎn)   jnB p3.3,rev2 ; 如果p3.3按下反轉(zhuǎn)   jnB p3.4,stop1 ; 如果p3.4按下停止   jmp loop ;反復(fù)監(jiān)測鍵盤   for: mov r0,#00h ;正轉(zhuǎn)到tAB取碼指針初值   for1:mov A,r0 ;取碼   mov dptr,#tABle ;   movC A,@A+dptr   jz for ;是否到了結(jié)束碼00h   Cpl A ;把ACC反向   mov p1,A ;輸出到p1開始正轉(zhuǎn)   jnB p3.4,stop1 ; 如果p3.4按下停止   jnB p3.3,rev2 ; 如果p3.3按下反轉(zhuǎn)   CAll delAy ;轉(zhuǎn)動的速度   inC r0 ;取下一個碼   jmp for1 ;繼續(xù)正轉(zhuǎn)   rev:mov r0,#05h ;反轉(zhuǎn)到tAB取碼指針初值   rev1:mov A,r0   mov dptr,#tABle ;取碼   movC A,@A+tABle   jz rev ;是否到了結(jié)束碼00h   Cpl A ;把ACC反向   mov p1,A ;輸出到p1開始反轉(zhuǎn)   jnB p3.4,stop1 ; 如果p3.4按下停止   jnB p3.3,rev2 ; 如果p3.3按下反轉(zhuǎn)   CAll delAy ;轉(zhuǎn)動的速度   inC r0 ;取下一個碼   jmp rev1 ;繼續(xù)反轉(zhuǎn)   stop1:CAll delAy ; 按p3.4的消除抖動   jnB p3.4,$ ; p3.4放開否?   CAll delAy ;放開消除抖動   jmp stop   for2:CAll delAy ; 按p3.2的消除抖動   jnB p3.2,$ ; p3.2放開否?   CAll delAy ;放開消除抖動   jmp for   rev2:CAll delAy ; 按p3.3的消除抖動   jnB p3.3,$ ; p3.3放開否?   CAll delAy ;放開消除抖動   jmp rev   delAy:mov r1,#40 ;步進(jìn)電機(jī)的轉(zhuǎn)速20ms   d1:mov r2,#248   djnz r2,$   djnz r1,d1   ret   tABle:   dB 03h,09h,0Ch,06h ;正轉(zhuǎn)表   dB 00 ;正轉(zhuǎn)結(jié)束   dB 03h,06h,0Ch,09h ;反轉(zhuǎn)   dB 00 ;反轉(zhuǎn)結(jié)束   end   步進(jìn)電機(jī)正反快慢程序   org 00h   x1:mov r3,#48 ;一圈48步   stArt:mov r0,#00h ;正轉(zhuǎn)取碼初值   stArt1:   mov p1,#0ffh ;先停止   mov A,r0   mov dptr,#tABle   movC A,@A+dptr   jz stArt ;是否到了結(jié)束碼00?   Cpl A   mov p1,A ;輸出運轉(zhuǎn)   CAll delAy ;調(diào)用慢速的延時轉(zhuǎn)動   inC r0 ;取碼指針加1取下一個碼   djnz r3,stArt1 ;是否走了48步?   mov r3,#48 ;是則重新設(shè)定48步   stArt2:   mov p1,#0ffh   mov r0,#05 ;逆轉(zhuǎn)的取碼初值   stArt3:mov A,r0   mov dptr,#tABle   movC A,@A+dptr   jz stArt2   Cpl A   mov p1,A   CAll delAy2   inC r0   djnz r3,stArt3   jmp x1 ; 重復(fù)開始   DELAY: ; 延時程序 (慢速)   MOV R7,#255   D1:MOV R6,#50   D2: DJNZ R6,D2   DJNZ R7,D1   RET   DELAY2: ; 延時程序 (快速)   MOV R5,#255   D3:MOV R2,#25   D4: DJNZ R2,D4   DJNZ R5,D3   RET   tABle:   dB 03h,09h,0Ch,06h ;正轉(zhuǎn)表   dB 00   dB 06h,0Ch,09h,03h ;反轉(zhuǎn)表   dB 00   end   中斷服務(wù)程序如下:   INTTO: PUSH  A   PUSH PSW   MOV A , @R0   MOV P1 ,A   INC R0   MOV A , # 00H   XRL A , @R0   JNZ NEXT   MOV A , R0   CLR C   SUBB A , # 03H   MOV R0 , A   NEXT: DJNZ R3 , RETU   CLR ET1   CLR EA   RETU: POP PSW   POP A   RETI   利用軟件形成脈沖序列的程序清單:   PULSE_S: MOV R7,#NUM ;設(shè)定脈沖個數(shù)   PUSH A ;保護(hù)現(xiàn)場   PUSH PSW   LOOP: SETB P1.0 ;輸出高電平   ACALL DELAY1 ;延時   CLR P1.0 ;輸出低電平   ACALL DELAY2 ;延時   DJNZ R7,LOOP ;R7≠0,繼續(xù)輸出脈沖   POP PSW ;恢復(fù)現(xiàn)場   POP A   RET   定時中斷子程序   TIME0: CLR EA ;關(guān)中斷   INC 30H   MOV A,30H   XRL A,#50H ;判斷是否到8秒   JZ S_8 ;8秒定時到,轉(zhuǎn)至S_8   AJMP RECOUN ;未到8秒,繼續(xù)計時   S_8: SETB P3.2 ;觸發(fā)外部中斷0   NOP   CLR P3.2   NOP   RECOUN: MOV TH0,#3CH   MOV TL0,#0B0H ;設(shè)定定時器初值   SETB EA ;開中斷   RETI ;中斷返回   中斷子程序   T_CON: PUSH A ;保護(hù)現(xiàn)場   PUSH PSW   MOV R7,#N ;設(shè)定控制步數(shù)   JNB FLAG,LEFT ;判斷旋轉(zhuǎn)方向   RIGHT: MOV R0,RM ;正轉(zhuǎn)模型起始地址   AJMP ROTATE   LEFT: MOV R0,LM   ROTATE: MOV A,@R0 ;取第一拍控制模型   MOV P1,A ;輸出第一拍控制模型   ACALL DELAY1 ;延時   INC R0   MOV A,@R0 ;取第二拍控制模型   MOV P1,A ;輸出第二拍控制模型   ACALL DELAY1 ;延時   INC R0   MOV A,@R0 ;取第三拍控制模型   MOV P1,A ;輸出第三拍控制模型   ACALL DELAY1 ;延時   DJNZ R7,ROTATE ;未走完要求的步數(shù),繼續(xù)   POP PSW ;恢復(fù)現(xiàn)場   POP A   RET ;返回

0519-8918 1758
聯(lián)系人:聶經(jīng)理 郵箱:niejli@126.com 地址:江蘇省常州市武進(jìn)區(qū)大通西路200號。 電話:0519-8918 1758

版權(quán)所有 ? 常州永沛機(jī)電技術(shù)有限公司 直流無刷電機(jī)|無刷直流電機(jī)|直流防爆電機(jī)|常州永沛機(jī)電技術(shù)有限公司|電動平車電機(jī)|電動船電機(jī)|直流減速電機(jī)


蘇ICP備13004000號