?伺服電機(Servo Motor)?:
?舵機:
?步進電機(Stepping Motor)?:
# 型號:28BYJ-48 # 驅動:ULN2003 # 減速比:1/64(即內部馬達轉64圈,經過減速齒輪后外部的連接桿轉一圈) # 步進角度:0.088°(內部轉64圈外部轉一圈,那么內部轉一圈外部轉360/64=5.625°,而內部轉1圈需要64個步進,則一步進就是5.625/64=0.088° # 5線四相8拍(即內部馬達,8個脈沖一個循環) # 速度:1000步/s(極限每運動一步需要0.001s) # 參考:https://blog.csdn.net/qq_41328470/article/details/125171300 import RPi.GPIO as GPIO import time import random # 設置GPIO模式 GPIO.setmode(GPIO.BCM) GPIO.setwarnings(False) # 定義步進電機連接的BCM引腳 IN1 = 25 IN2 = 8 IN3 = 7 IN4 = 1 # 設置引腳為輸出 GPIO.setup(IN1, GPIO.OUT) GPIO.setup(IN2, GPIO.OUT) GPIO.setup(IN3, GPIO.OUT) GPIO.setup(IN4, GPIO.OUT) # 定義步進電機的8個控制順序(1拍為一個步進,一個步進角為電機運動的最小單位,8個拍為一個循環,內機轉一圈需要8個循環,即64拍) # 此序列為逆時針,順時針的話數組倒序 sequence = [ # [IN1,IN2,IN3,IN4] [1, 0, 0, 0], [1, 1, 0, 0], [0, 1, 0, 0], [0, 1, 1, 0], [0, 0, 1, 0], [0, 0, 1, 1], [0, 0, 0, 1], [1, 0, 0, 1] ] sequenceRV = list(reversed(sequence)) def rotate(angle): seq = sequence if angle >= 0 else sequenceRV # 因傳動比是1/64,所以外機轉一圈,需要內機轉64圈,而內機轉一圈需要64個步進,所以外機轉一圈內機需要64*64=4096步 stepNum = (int)(abs(angle) / 360 * 4096) for i in range(stepNum): # 8步一個序列循環 step = seq[i % 8] GPIO.output(IN1, step[0]) GPIO.output(IN2, step[1]) GPIO.output(IN3, step[2]) GPIO.output(IN4, step[3]) # 調整步進電機的速度 time.sleep(0.001) return i = 20 while(i > 0): angle = random.randint(10, 90) rotate(angle) #time.sleep(1) rotate(-angle) i = i - 1 # 清理GPIO引腳,全部置零,防止電機一直有輸入導致發燙 GPIO.cleanup()
天津市津南區咸水沽鎮海棠眾創大街C區智創工坊-S-1119