全國熱線電話:

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

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

    手機:18605199068  18602586200

    電話:0519-89181758  83700750  

    Q Q:710285815

    郵箱:18605199068@126.com

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

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

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

  步進電機是將電脈沖信號轉(zhuǎn)變?yōu)榻俏灰苹蚓€位移的開環(huán)控制元件。在非超載的情況下,電機的轉(zhuǎn)速、停止的位置只取決于脈沖信號的頻率和脈沖數(shù),而不受負載變化的影響,即給電機加一個脈沖信號,電機則轉(zhuǎn)過一個步距角。這一線性關(guān)系的存在,加上步進電機只有周期性的誤差而無累積誤差等特點。使得在速度、位置等控制領(lǐng)域用步進電機來控制變的非常的簡單。   步進電機的調(diào)速一般是改變輸入步進電機的脈沖的頻率來實現(xiàn)步進電機的調(diào)速,因為步進電機每給一個脈沖就轉(zhuǎn)動一個固定的角度,這樣就可以通過控制步進電機的一個脈沖到下一個脈沖的時間間隔來改變脈沖的頻率,延時的長短來具體控制步進角來改變電機的轉(zhuǎn)速,從而實現(xiàn)步進電機的調(diào)速,本文主要介紹基于單片機的步進電機轉(zhuǎn)速控制設(shè)計詳解,文章最后附上程序。      基于單片機的步進電機轉(zhuǎn)速控制設(shè)計詳解   本次設(shè)計以CPU選用89C5l作為步進電機的控制芯片.89C51的結(jié)構(gòu)簡單并可以在編程器上實現(xiàn)閃爍式的電擦寫達幾萬次以上.使用方便等優(yōu)點,而且完全兼容MCS5l系列單片機的所有功能。AT89C51是一種帶4K字節(jié)閃爍可編程可擦除只讀存儲器(FPEROM—FAlsh ProgrAmmABle And ErAsABle ReAd Only Memory)的低電壓,高性能CMOS8位微處理器,俗稱單片機。該器件采用ATMEL高密度非易失存儲器制造技術(shù)制造,與工業(yè)標準的MCS-51指令集和輸出管腳相兼容。由于將多功能8位CPU和閃爍存儲器組合在單個芯片中,ATMEL的AT89C51是一種高效微控制器,為很多嵌入式控制系統(tǒng)提供了一種靈活性高且價廉的方案。   顯示電路的用8279芯片來驅(qū)動,8279芯片分別接兩排顯示器,每排為4位顯示,分別用來顯示步進電機的實際轉(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ù)位輸入線,高電平有效。當 RESET 輸入端出現(xiàn)高電平時,8279被初始復(fù)位。   4) /CS:片選信號。低電平使能,使能時可將命令寫入8279或讀取8279的數(shù)據(jù)。   5) A0:用于區(qū)分信息的特性。當A0=1時,CPU向8279寫入命令或讀取8279的狀態(tài);當A0為0時,讀寫一數(shù)據(jù)。   6) /RD:讀取控制線。/RD=0,8279會送數(shù)據(jù)至外部總線。   7) /WR:寫入控制線。/WR=0,8279會從外部總線捕捉數(shù)據(jù)。   8) IRQ:中斷請求輸出線,高電平有效。當FIFO RAM 緩沖器中存有鍵盤上閉合鍵的鍵碼時,IRQ線升高,向CPU請求中斷,當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) 消隱輸出線,低電平有效。當顯示器切換時或使用消隱命令時,將顯示消隱。      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 ;保護鍵號   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 ;通用延時子程序   (07EBH & 0FEBH & 。。。)   L7FEB: PUSH 02H ;R2(復(fù)位后R2即為02H)存放時間常數(shù),進棧保護   L7FED: PUSH 02H ; R2進棧保護   L7FEF: PUSH 02H ; 進棧   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   步進電機控制程序p3.2正轉(zhuǎn),p3.3反轉(zhuǎn),p3.4停止 步進電機接p1.0p1.1p1.2p1.3   org 00h   stop: orl p1,#0ffh ; 步進電機停止   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 ;步進電機的轉(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   步進電機正反快慢程序   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 ;保護現(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 ;保護現(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 ;返回

相關(guān)行業(yè)新聞

微電機堵轉(zhuǎn)對電機影響會有多大 直流電機可控硅調(diào)速原理及常見故障檢修 高速有刷雙向直流電機簡介 直流無刷電機用位置傳感器的原因 無刷電機結(jié)構(gòu)解析 盤式永磁直流電機的結(jié)構(gòu)詳解 基于LIN總線的車用無刷直流電機LIN總線設(shè)計 盤式永磁直流電機的結(jié)構(gòu) 決定直流無刷電機反電動勢的主要因素 直流調(diào)速器就是調(diào)節(jié)直流電動機速度的設(shè)備, 由于直流電動機具有低轉(zhuǎn)速大力矩的特點,是交流電動機無 法取代的, 因此調(diào)節(jié)直流電動機速度的設(shè)備—直流調(diào)速器,具有廣闊的應(yīng)用天地。 直流調(diào)速器的工作原理: 直流調(diào)速器就是調(diào)節(jié)直流電動機速度的設(shè)備,上端和交流電源連接,下端和直流電動機連接。直流調(diào)速器將交流電轉(zhuǎn)化成兩路輸出直流電源,一路輸入給直流電機礪磁(定子),一路輸入給直流電機電樞(轉(zhuǎn)子),直流調(diào)速器通過控制電樞直流電壓來調(diào)節(jié)直流電動機轉(zhuǎn)速。 同時直流電動機給調(diào)速器一個反饋電流,調(diào)速器根據(jù)反饋電流 淺談PWM波控制舵機以及舵機控制方法總結(jié) 直流電機更換電刷的方法及注意事項 單路50A直流電機驅(qū)動器介紹 永沛電機永磁無刷直流電機驅(qū)動的無傳感器控制 永磁直流電機設(shè)計方案的詳細說明 無刷電機重要發(fā)展方向 永磁直流電機的原理 電機調(diào)速器的工作原理 低壓直流電機調(diào)速器24v 2kw直流馬達控制器 無刷電機的應(yīng)用、命名規(guī)則及原理
0519-8918 1758
聯(lián)系人:聶經(jīng)理 郵箱:niejli@126.com 地址:江蘇省常州市武進區(qū)大通西路200號。 電話:0519-8918 1758

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


蘇ICP備13004000號