在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

使用單片機控制步進電機的資料和代碼詳細說明

Wildesbeast ? 來源:單片機教程網 ? 作者:單片機教程網 ? 2020-06-27 10:19 ? 次閱讀

步進電機機電控制中一種常用的執行機構,它的用途是將電脈沖轉化為角位移,通俗地說:當步進驅動器接收到一個脈沖信號,它就驅動步進電機按設定的方向轉動一個固定的角度(及步進角)。通過控制脈沖個數即可以控制角位移量,從而達到準確定位的目的;同時通過控制脈沖頻率來控制電機轉動的速度和加速度,從而達到調速的目的。

T89C2051單片機驅動步進電機的電路和源碼

程序

stepper.c

stepper.hex

/*

* STEPPER.C

* sweeping stepper‘’s rotor cw and cww 400 steps

* Copyright (c) 1999 by W.Sirichote

*/

#include c:mc518051io.h /* include i/o header file */

#include c:mc518051reg.h

register unsigned char j,flag1,temp;

register unsigned int cw_n,ccw_n;

unsigned char step[8]={0x80,0xc0,0x40,0x60,0x20,0x30,0x10,0x90}

#define n 400

/* flag1 mask byte

0x01 run cw()

0x02 run ccw()

*/

main()

{

flag1=0;

serinit(9600);

dISAble(); /* no need timer interrupt */

cw_n = n; /* initial step number for cw */

flag1 |=0x01; /* initial enable cw() */

while(1){

{

tick_wait(); /* wait for 10ms elapsed */

energize(); /* round-robin execution the following tasks every 10ms */

cw();

ccw();

}

}

}

cw(){

if((flag1&0x01)!=0)

{

cw_n--; /* decrement cw step number */

if (cw_n !=0)

j++; /* if not zero increment index j */

else

{flag1&=~0x01; /* dISAble cw() execution */

ccw_n = n; /* reload step number to ccw counter */

flag1 |=0x02; /* enable cww() execution */

}

}

}

ccw(){

if((flag1&0x02)!=0)

{

ccw_n--; /* decremnent ccw step number */

if (ccw_n !=0)

j--; /* if not zero decrement index j */

else

{flag1&=~0x02; /* dISAble ccw() execution */

cw_n = n; /* reload step number to cw counter */

flag1 |=0x01; /* enable cw() execution */

}

}

}

tick_wait(){ /* cputick was replaced by simpler ASM code 10ms wait */

asm“ JNB TCON.5,*”; /* wait for TF0 set */

asm“ CLR TCON.5”; /* clear TF0 for further set */

asm“ ORL TH0,#$DC”; /* reload TH0 with $DC, TL0 = 0 */

}

energize(){

P1 = step[(j&0x07)]; /* only step 0-7 needed */

}

一、步進電機常識

常見的步進電機分三種:永磁式(PM),反應式(VR)和混合式(HB),永磁式步進一般為兩相,轉矩和體積較小,步進角一般為7.5度 或15度;反應式步進一般為三相,可實現大轉矩輸出,步進角一般為1.5度,但噪聲和振動都很大。在歐美等發達國家80年代已被淘汰;混合式步進是指混合了永磁式和反應式的優點。它又分為兩相和五相:兩相步進角一般為1.8度而五相步進角一般為 0.72度。這種步進電機的應用最為廣泛。

二、永磁式步進電機的控制

下面以電子愛好者業余制作中常用的永磁式步進電機為例,來介紹如何用單片機控制步進電機。

圖1是35BY型永磁步進電機的外形圖,圖2是該電機的接線圖,從圖中可以看出,電機共有四組線圈,四組線圈的一個端點連在一起引出,這樣一共有5根引出線。要使用步進電機轉動,只要輪流給各引出端通電即可。將COM端標識為C,只要AC、 C、BC、 C,輪流加電就能驅動步進電機運轉,加電的方式可以有多種,如果將COM端接正電源,那么只要用開關元件(如三極管),將A、 、B、 輪流接地。

下表列出了該電機的一些典型參數

表135BY48S03型步機電機參數

型號 步距角 相數 電壓 電流 電阻 最大靜轉距 定位轉距 轉動慣量

35BY48S03 7.5 4 12 0.26 47 180 65 2.5

有了這些參數,不難設計出控制電路,因其工作電壓為12V,最大電流為0.26A,因此用一塊開路輸出達林頓驅動器(ULN2003)來作為驅動,通過 P1.4~P1.7來控制各線圈的接通與切斷,電路如圖3所示。開機時,P1.4~P1.7均為高電平,依次將P1.4~P1.7切換為低電平即可驅動步進電機運行,注意在切換之前將前一個輸出引腳變為高電平。如果要改變電機的轉動速度只要改變兩次接通之間的時間,而要改變電機的轉動方向,只要改變各線圈接通的順序。

圖135BY48S03型步進電機外形圖

圖235BY48S03型步進電機的接線圖

圖3單片機控制35BY48S03型步進電機的電路原理

三、步進電機的驅動實例

要求:控制電路如圖3所示,開機后,電機不轉,按下啟動鍵,電機旋轉,速度為25轉/分,按下加1鍵,速度增加,按下減1鍵,速度降低,最高速度為100轉/分,最低轉帶為25轉/分,按下停止鍵,電機停轉。速度值要求在數碼管上顯示出來。

1.要求分析

按上面的分析,改變轉速,只要改變P1.0~P1.3輪流變低電平的時間即可達到要求,這個時間不應采用延時來實現,因為會影響到其他功能的實現。這里以定時的方式來實現。下面首先計算一下定時時間。

按要求,最低轉速為25轉/分,而上述步進電機的步距角為7.5,即每48個脈沖為1周,即在最低轉速時,要求為1200脈沖/分,相當于50ms/脈沖。而在最高轉速時,要求為100轉/分,即48000脈沖/分,相當于12.5ms/脈沖??梢粤谐鱿卤?/p>

表1步進電機轉速與定時器定時常數關系

速度 單步時間(us) TH1 TL1 實際定時(us)

25 50000 76 0 49996.8

26 48077 82 236 48074.18

27 46296 89 86 46292.61

28 44643 95 73 44640.155

… … … … …

100 12500 211 0 12499.2

表中不僅計算出了TH1和TL1,而且還計算出了在這個定時常數下,真實的定時時間,可以根據這個計算值來估算真實速度與理論速度的誤差值。

表中TH1和TL1是根據定時時間算出來的定時初值,這里用到的晶振是11.0592M。有了上述表格,程序就不難實現了,使用定時/計數器T1為定時器,定時時間到后切換輸出腳即可。

2.程序實現

定義DSB-1A實驗板的S1為啟動鍵,S2為停止鍵,S3為加1鍵,S4為減1鍵,程序如下:

StartEnd bit 01H ;起動及停止標志

MinSpd EQU 25 ;起始轉動速度

MaxSpd EQU 100 ;最高轉動速度

Speed DATA 23H ;流動速度計數

DjCount DATA 24H ;控制電機輸出的一個值,初始為11110 111

Hidden EQU 10H ;消隱碼

Counter DATA 57H ;顯示計數器

DISPBUF DATA 58H ;顯示緩沖區

ORG 0000H

AJMP MAIN

ORG 000BH

JMP DISP

ORG 001BH

JMP DJZD

ORG 30H

MAIN:

MOV SP,#5FH

MOV P1,#0FFH

MOV A,#Hidden

MOV DispBuf,A

MOV DispBuf+1,A

MOV DispBuf+2,A

MOV DjCount,#11110111B

MOV SPEED,#MinSpd ;起始轉動速度送入計數器

CLR StartEnd ;停轉狀態

MOV TMOD,#00010001B ;

MOV TH0,#HIGH(65536-3000)

MOV TL0,#LOW(65536-3000)

MOV TH1,#0FFH;

MOV TL1,#0FFH

SETB TR0

SETB EA

SETB ET0

SETB ET1

LOOP: ACALL KEY ;鍵盤程序

JNB F0,m_NEXT1 ;無鍵繼續

ACALL KEYPROC ;否則調用鍵盤處理程序

m_NEXT1:

MOV A,Speed

MOV B,#10

DIV AB

MOV DispBuf+5,B ;最低位

MOV B,#10

DIV AB

MOV DispBuf+4,B

MOV DispBuf+3,A

JB StartEnd,m_Next2

CLR TR1 ;關閉電機

JMP LOOP

ORL P1,#11110000B

m_Next2:

SETB TR1 ;啟動電機

AJMP LOOP ;主程序結束

;---------------------------------------

D10ms:

……

;---------延時程序,鍵盤處理中調用

KEYPROC:

MOV A,B ;獲取鍵值

JB ACC.2,StartStop ;分析鍵的代碼,某位被按下,則該位為1

JB ACC.3,KeySty

JB ACC.4,UpSpd

JB ACC.5,DowSpd

AJMP KEY_RET

StartStop:

SETB StartEnd ;啟動

AJMP KEY_RET

KeySty:

CLR StartEnd; ;停止

AJMP KEY_RET

UpSpd:

INC SPEED;

MOV A,SPEED

CJNE A,#MaxSpd,K1 ;到了最多的次數?

DEC SPEED ;是則減去1,保證下次仍為該值

K1:

AJMP KEY_RET

DowSpd:

DEC SPEED

MOV A,SPEED

CJNE A,#MAXSPD,KEY_RET ;不等(未到最大值),返回

MOV SPEED,#MinSpd;

KEY_RET:

RET

KEY:

……獲取鍵值的程序

RET

DjZd: ;定時器T1用于電機轉速控制

PUSH ACC

PUSH PSW

MOV A,Speed

SUBB A,#MinSpd ;減基準數

MOV DPTR,#DjH

MOVC A,@A+DPTR

MOV TH1,A

MOV A,Speed

SUBB A,#MinSpd

MOV DPTR,#DjL

MOVC A,@A+DPTR

MOV TL1,A

MOV A,DjCount

CPL A

ORL P1,A

MOV A,DjCount

JNB ACC.7,d_Next1

JMP d_Next2

d_Next1:

MOV DjCount,#11110111B

d_Next2:

MOV A,DjCount

RL A

MOV DjCount,A ;回存

ANL P1,A

POP PSW

POP ACC

RETI

DjH: DB 76,82,89,95,100,106,110,115,119,123,12……

DjL: DB 0,236,86,73,212,0,214,96,163,165

……

DISP: ;顯示程序

POP PSW

POP ACC

……

RETI

BitTab: DB 7Fh,0BFH,0DFH,0EFH,0F7H,0FBH

DISPTAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH,0FFH

END

3.程序分析

本程序主要由鍵盤程序、顯示器程序、步進電機驅動程序三部份組成,主程序首先初始化各變量,將顯示器的高3位消隱,步進電機驅動的各引腳均輸出高電平,然后調用鍵盤程序,并作判斷,如果有鍵按下,則調用鍵盤處理程序,否則直接轉下一步。下一步是將當前的轉速值轉換為BCD碼,送入顯示緩沖區;接著判斷 StartEnd這個位變量,是“1”還是“0”,如果是“1”,則開啟定時器T1,否則關閉定時器T1,為防止關閉時某一相線圈長期通電,因此,在關閉定時器T1時,將P1.0~P1.3均置高。至此,主程序的工作即結束。這里為簡便起見,這里沒有做高位“0”消隱的工作,即如果速度為10轉/分,則顯示值“010”,讀者可以自行加入相關的代碼來處理這一工作。

步進電機的驅動工作是在定時器T1的中斷服務程序中實現的,由前述分析,每次的定時時間到達以后,需要將P1.0~P1.3依次接通,程度中用了一個變量DjCntr來實現這一功能,在主程序初始化時,該變量被賦予初值 11110111B,進入到定時中斷以后,將該變量取出送ACC累加器,并在累加器中進行左移,這樣,該數值就變為1110 1111,然后將該數與P1 相“與”,此時,P1.4即輸出低電平,第二次進入中斷時,先將該數取反,成為 00010000,然后將該數與P1相“或”,這樣,P1.4即輸出高電平,關斷了相應的線圈,然后將該數重新取出,并作左移,即1110,1111右移成為11011111,將該數與P1相“與”,這樣P1.5即輸出低電平,依次類推,P1.7~P1.4即循環輸出低電平。當這一數據變為0111 1111后,需要作適當的改動,將數據重新變回11110111,進行第二次循環,相關代碼,請讀者自行分析。

定時時間又是如何確定的呢?這里用的是查表的方法,首先用Excel計算得出在每一種轉速下的TH值和TL值,然后,分別放入DjH和DjL表中,在進入T1中斷程序之后,將速度值變量Speed送入累加器ACC,然后減去基數25,使其基數從 0開始計數,然后分別查表,送入TH1和TL1,實現重置定時初值的目的。

看完這一部份內容以后,請讀者自行完成以下工作:

1. 更改程序,將S1定義為“啟動/停止”,而S2定義為“方向”,按下S2,切換電機旋轉方向。

2. 更改程序,要求轉速從1到100。

3. 更改程序,實現首位無效零消隱

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 單片機
    +關注

    關注

    6044

    文章

    44632

    瀏覽量

    639181
  • 步進電機
    +關注

    關注

    152

    文章

    3121

    瀏覽量

    147920
收藏 人收藏

    評論

    相關推薦

    步進電機控制實現方法

    電機能夠實現高精度的位置控制和速度控制。本文將詳細介紹步進電機
    的頭像 發表于 01-21 16:43 ?169次閱讀
    <b class='flag-5'>步進</b><b class='flag-5'>電機</b>的<b class='flag-5'>控制</b>實現方法

    使用單片機實現直流電機的PWM調速控制原理圖

    使用單片機實現直流電機的PWM調速控制
    發表于 12-10 15:29 ?6次下載

    基于MSP430單片機的模糊邏輯電機控制

    電子發燒友網站提供《基于MSP430單片機的模糊邏輯電機控制.pdf》資料免費下載
    發表于 10-23 10:21 ?0次下載
    基于MSP430<b class='flag-5'>單片機</b>的模糊邏輯<b class='flag-5'>電機</b><b class='flag-5'>控制</b>

    步進電機如何自適應控制?步進電機如何細分驅動控制

    步進電機是一種將電脈沖信號轉換為角位移或線位移的電機,廣泛應用于各種自動化控制系統中。為了提高步進電機
    的頭像 發表于 10-23 10:04 ?842次閱讀

    利用MSP430單片機控制步進電機

    電子發燒友網站提供《利用MSP430單片機控制步進電機.pdf》資料免費下載
    發表于 10-09 14:18 ?0次下載
    利用MSP430<b class='flag-5'>單片機</b><b class='flag-5'>控制</b><b class='flag-5'>步進</b><b class='flag-5'>電機</b>

    步進電機型號與步進電機命名規則

    混合式步進電機代碼:SM。 系列代碼:H、高性能二相步進電機;C、三相
    的頭像 發表于 08-26 09:42 ?274次閱讀
    <b class='flag-5'>步進</b><b class='flag-5'>電機</b>型號與<b class='flag-5'>步進</b><b class='flag-5'>電機</b>命名規則

    基于STM32單片機步進電機控制系統設計

    系統內使用按鍵進行步進電機控制,可以控制步進電機的啟動和關閉,使用按鍵進行加速和減速以及進行旋
    的頭像 發表于 06-25 14:14 ?1297次閱讀
    基于STM32<b class='flag-5'>單片機</b>的<b class='flag-5'>步進</b><b class='flag-5'>電機</b><b class='flag-5'>控制</b>系統設計

    基于51單片機步進電機正反轉調速控制電路圖及程序

    本資源內容概要:? ? ? ?這是基于51單片機步進電機正反轉調速控制電路圖及程序設計包含了電路圖源文件(Altiumdesigner軟件打開)、C語言程序源
    發表于 06-20 16:17 ?0次下載

    步進電機控制系統是什么意思

    、高精度定位及良好的重復定位精度,被廣泛應用于各種需要精確控制和定位的設備中。本文將從步進電機的工作原理、控制系統組成、控制策略以及應用領域
    的頭像 發表于 06-18 18:12 ?1217次閱讀

    雙極性步進電機的結構與控制模式

    在現代工業控制領域,步進電機以其獨特的步進特性和精確的位置控制而備受青睞。其中,雙極性步進
    的頭像 發表于 06-12 14:40 ?752次閱讀

    步進電機通過什么控制轉動角度

    步進電機是一種電磁驅動的旋轉電機,它具有精確控制轉動角度的特性。步進電機的工作原理是通過改變線圈
    的頭像 發表于 06-12 09:49 ?1884次閱讀

    第二講:單片機STC89C52+RA8889驅動控制彩屏 代碼移植介紹

    介紹51單片機如何移植RA8889的代碼進行彩屏驅動與控制
    的頭像 發表于 06-04 10:36 ?1119次閱讀
    第二講:<b class='flag-5'>單片機</b>STC89C52+RA8889驅動<b class='flag-5'>控制</b>彩屏 <b class='flag-5'>代碼</b>移植介紹

    串口通信如何控制步進電機轉動?

    在自動化控制系統中,步進電機控制是一項重要的技術任務。通過串口通信控制步進
    的頭像 發表于 04-19 16:23 ?1930次閱讀

    基于52單片機的28BYJ48步進電機運用

    基于52單片機的28BYJ48步進電機運用
    發表于 04-10 08:28

    什么是步進電機的細分控制?步進電機為什么要細分,如何細分?

    什么是步進電機的細分控制步進電機為什么要細分,如何細分? 步進
    的頭像 發表于 02-18 09:39 ?8111次閱讀
    主站蜘蛛池模板: 四虎影视在线影院4hu | 天天干天天做天天射 | 五月婷婷电影 | 黄 色 片免费观看 | 国产午夜在线观看视频 | 在线激情网| 国产日韩精品一区二区三区 | semimi亚洲综合在线观看 | 婷婷激情狠狠综合五月 | 日韩亚洲欧洲在线com91tv | 一级骚片超级骚在线观看 | 卡一卡二卡三国色天香永不失联 | 狠狠操精品视频 | 天天做天天爱天天一爽一毛片 | 在线播放一区二区三区 | 涩久久 | 狠狠色综合久久婷婷 | 三级毛片在线播放 | 美女扒尿口给男人桶到爽 | 樱桃磁力bt天堂 | 亚洲偷图色综合色就色 | 性欧美暴力猛交69hd | 国产牛仔裤系列在线观看 | 日本加勒比视频在线观看 | 国产拳头交一区二区 | 三级视频在线 | 亚洲午夜久久久久国产 | 亚洲网站在线看 | 国产盗摄女厕美女嘘嘘 | 欧美成人观看免费全部完小说 | 国产视频精品久久 | 国产在线精品观看一区 | 天堂中文字幕在线观看 | 天天做天天干 | 中文久草 | 亚洲婷婷国产精品电影人久久 | 午夜影视体验区 | 欧美一区二区三区免费看 | 欧美精品aaa久久久影院 | 九九热最新 | 狠狠涩 |