找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2935|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

MicroPython TPYBoard v102 驅(qū)動(dòng)28BYJ-48步進(jìn)電機(jī)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
    實(shí)驗(yàn)?zāi)康?br />
    了解步進(jìn)電機(jī)的工作原理
    學(xué)習(xí)步進(jìn)電機(jī)的驅(qū)動(dòng)方法

    實(shí)驗(yàn)器材

    TPYBoard v102 1塊
    微型步進(jìn)電機(jī)(28BYJ-48) 1個(gè)
    步進(jìn)電機(jī)驅(qū)動(dòng)板(ULN2003APG) 1塊
    micro USB數(shù)據(jù)線 1條
    杜邦線 若干
    步進(jìn)電機(jī)的介紹
    本次實(shí)驗(yàn)采用的是28BYJ-48 四相八拍電機(jī),電壓DC5V~12V。

    24BYJ48名稱的含義:
    24:電機(jī)外徑24mm
    B:步進(jìn)電機(jī)中步字的拼音首字母
    Y:永磁中永字的拼音首字母
    J:減速的減字拼音首字母
    48:四相8步

    實(shí)物圖



    工作原理

    步進(jìn)電機(jī)是將電脈沖信號(hào)轉(zhuǎn)變?yōu)榻俏灰苹蚓位移的開環(huán)控制電機(jī),是現(xiàn)代數(shù)字程序控制系統(tǒng)中的主要執(zhí)行元件,應(yīng)用極為廣泛。在非超載的情況下,電機(jī)的轉(zhuǎn)速、停止的位置只取決于脈沖信號(hào)的頻率和脈沖數(shù),而不受負(fù)載變化的影響,當(dāng)步進(jìn)驅(qū)動(dòng)器接收到一個(gè)脈沖信號(hào),它就驅(qū)動(dòng)步進(jìn)電機(jī)按設(shè)定的方向轉(zhuǎn)動(dòng)一個(gè)固定的角度,稱為“步距角”,它的旋轉(zhuǎn)是以固定的角度一步一步運(yùn)行的?梢酝ㄟ^(guò)控制脈沖個(gè)數(shù)來(lái)控制角位移量,從而達(dá)到準(zhǔn)確定位的目的;同時(shí)可以通過(guò)控制脈沖頻率來(lái)控制電機(jī)轉(zhuǎn)動(dòng)的速度和加速度,從而達(dá)到調(diào)速的目的。

    28BYJ-48 步進(jìn)電機(jī)參數(shù)表



    上表中啟動(dòng)頻率≥550 P.P.S(每秒脈沖數(shù)),意思是要想正常啟動(dòng),需要單片機(jī)每秒至少給出550個(gè)步進(jìn)脈沖。那么每一節(jié)拍需要持續(xù)的時(shí)間就是1S/550≈1.8ms,所以控制節(jié)拍刷新的速率應(yīng)大約1.8ms。
    驅(qū)動(dòng)原理
    當(dāng)連續(xù)不斷的給電機(jī)發(fā)送控制脈沖時(shí),電機(jī)就會(huì)不斷的轉(zhuǎn)動(dòng)。每一個(gè)脈沖信號(hào)對(duì)應(yīng)步進(jìn)電機(jī)的某一相或兩相繞組的通電狀態(tài)改變一次,對(duì)應(yīng)轉(zhuǎn)子就會(huì)轉(zhuǎn)過(guò)一定的角度(步距角)。當(dāng)通電狀態(tài)的改變完成一個(gè)循環(huán)時(shí),轉(zhuǎn)子轉(zhuǎn)過(guò)一個(gè)齒距。
    四相步進(jìn)電機(jī)可以在不同的通電方式下運(yùn)行,常見的通電方式:
    四拍(單相繞組通電):A-B-C-D-A…
    雙四拍(雙相繞組通電):AB-BC-CD-DA-AB-...
    八拍: A-AB-B-BC-C-CD-D-DA-A…

    模擬效果圖



    硬件連接

    將步進(jìn)電機(jī)白色接頭插到驅(qū)動(dòng)板對(duì)應(yīng)的座子上即可。
    TPYBoard v102驅(qū)動(dòng)板與驅(qū)動(dòng)板的接線圖,如下:




    程序源碼如下:
  1. # main.py -- put your code here!
  2. import pyb
  3. from pyb import Pin

  4. Pin_All=[Pin(p,Pin.OUT_PP) for p in ['X1','X2','X3','X4']]

  5. #轉(zhuǎn)速(ms) 數(shù)值越大轉(zhuǎn)速越慢 最小值1.8ms
  6. speed=2

  7. STEPER_ROUND=512 #轉(zhuǎn)動(dòng)一圈(360度)的周期
  8. ANGLE_PER_ROUND=STEPER_ROUND/360 #轉(zhuǎn)動(dòng)1度的周期
  9. print('ANGLE_PER_ROUND:',ANGLE_PER_ROUND)

  10. def SteperWriteData(data):
  11.     count=0
  12.     for i in data:
  13.         Pin_All[count].value(i)
  14.         count+=1
  15. def SteperFrontTurn():
  16.     global speed
  17.      
  18.     SteperWriteData([1,1,0,0])
  19.     pyb.delay(speed)

  20.     SteperWriteData([0,1,1,0])
  21.     pyb.delay(speed)

  22.     SteperWriteData([0,0,1,1])
  23.     pyb.delay(speed)
  24.      
  25.     SteperWriteData([1,0,0,1])   
  26.     pyb.delay(speed)
  27.      
  28. def SteperBackTurn():
  29.     global speed
  30.      
  31.     SteperWriteData([1,1,0,0])
  32.     pyb.delay(speed)
  33.      
  34.     SteperWriteData([1,0,0,1])   
  35.     pyb.delay(speed)
  36.      
  37.     SteperWriteData([0,0,1,1])
  38.     pyb.delay(speed)

  39.     SteperWriteData([0,1,1,0])
  40.     pyb.delay(speed)


  41. def SteperStop():
  42.     SteperWriteData([0,0,0,0])
  43.      
  44. def SteperRun(angle):
  45.     global ANGLE_PER_ROUND
  46.      
  47.     val=ANGLE_PER_ROUND*abs(angle)
  48.     if(angle>0):
  49.         for i in range(0,val):
  50.             SteperFrontTurn()
  51.     else:
  52.         for i in range(0,val):
  53.             SteperBackTurn()
  54.     angle = 0
  55.     SteperStop()

  56. if __name__=='__main__':
  57.     SteperRun(180)
  58.     SteperRun(-180)
復(fù)制代碼




分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表