SG90一共三根線,紅線接5V電源,棕線GND。黃線爲數據控制線,該線接到GPIO上,這裏我們是BCM模式的pin 21.
SG90 脈衝週期爲20毫秒(millisecond) 不是20微秒(Microsecond),兩者差1000倍呢!也就是說最多1秒鐘內可以轉動50次,但是考慮到每次轉動還要耗時,所以實際達不到50次。PWM控制信號週期20ms,脈寬0.5ms-2.5ms對應的角度-90到+90度,範圍180度(3度左右偏差),當脈寬1.5ms時舵機在中立點(0度),我們直接用python的GPIO提供的PWM控制。脈寬0.5ms-2.5ms
對應的佔空比爲2.5% - 12.5% . 理論上,10%的空間可以提供180度的線性分割。
下面的代碼可以看到舵機不停的從0度轉到180度,再轉回來到0度。
#!/usr/bin/env python
import RPi.GPIO as GPIO
import time
import signal
import atexit
atexit.register(GPIO.cleanup)
servopin = 21
GPIO.setmode(GPIO.BCM)
GPIO.setup(servopin, GPIO.OUT, initial=False)
p = GPIO.PWM(servopin,50) #50HZ
p.start(0)
time.sleep(2)
while(True):
for i in range(0,181,10):
p.ChangeDutyCycle(2.5 + 10 * i / 180) #設置轉動角度
time.sleep(0.02) #等該20ms週期結束
p.ChangeDutyCycle(0) #歸零信號
time.sleep(0.2)
for i in range(181,0,-10):
p.ChangeDutyCycle(2.5 + 10 * i / 180)
time.sleep(0.02)
p.ChangeDutyCycle(0)
time.sleep(0.2)