0

作为一个新手,我正在使用附加的 Micro Servo SG90 测试我的 Pi2B。我运行下面的代码。它工作得很好,但它不能稳定地保持左右位置,有小振动。我的 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()
4

1 回答 1

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 引脚设置。

于 2017-02-01T01:44:32.307 回答