作为一个新手,我正在测试我的Pi2B,附带Micro Servo SG90。我正在运行下面的代码。 它的工作原理很好,但它不能稳定地保持左右位置,有小的振动。我的Pi有一个蓝牙鼠标,当我使用它时,伺服开始大量震动。我该如何防止这种行为?
我使用外部电源供电用于伺服,但将其移除并由Pi供电伺服并不能解决问题。也没有为Pi使用另一个USB充电器。从Pi上移除蓝牙适配器不会阻止小的振动。
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setup(17, GPIO.OUT)
p = GPIO.PWM(17, 50)
p.start(6.55)
for i in range(1000):
p.ChangeDutyCycle(6.55)
time.sleep(3)
p.ChangeDutyCycle(6.85)
time.sleep(3)
p.stop()
GPIO.cleanup()
答案 0 :(得分:0)
您需要使用硬件定时PWM进行伺服。
尝试使用PiGPIO
从以下位置复制和修改的示例: https://raspberrypiwonderland.wordpress.com/2014/02/19/servo-test/
import time
import pigpio
servos = 4 #GPIO number
pigpio.start()
#pulsewidth can only set between 500-2500
try:
while True:
pigpio.set_servo_pulsewidth(servos, 500) #0 degree
print("Servo {} {} micro pulses".format(servos, 1000))
time.sleep(1)
pigpio.set_servo_pulsewidth(servos, 1500) #90 degree
print("Servo {} {} micro pulses".format(servos, 1500))
time.sleep(1)
pigpio.set_servo_pulsewidth(servos, 2500) #180 degree
print("Servo {} {} micro pulses".format(servos, 2000))
time.sleep(1)
pigpio.set_servo_pulsewidth(servos, 1500)
print("Servo {} {} micro pulses".format(servos, 1500))
time.sleep(1)
# switch all servos off
except KeyboardInterrupt:
pigpio.set_servo_pulsewidth(servos, 0);
pigpio.stop()
这是该图书馆的指南 http://abyz.co.uk/rpi/pigpio/python.html#set_servo_pulsewidth
您可能需要根据您的设置移动伺服信号连接或更改GPIO引脚设置。