我是一个使用 GPIO 进行编程的初学者,我正在尝试了解伺服系统。现在有一个代码可以将舵机以 2 为步长移动 180 度。这是在 while 循环中。但是,当我使用相同的命令但在 while 循环之外时,它不执行任何操作,例如servo.ChangDutyCycle(6) 不执行任何操作。在 while 循环中,如果使用常数(例如 4、6、8 等)伺服器不移动,我还需要使用占空比。有人可以解释一下吗?
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setup(11,GPIO.OUT)
servo = GPIO.PWM(11,50)
servo.start(0)
time.sleep(1)
servo.ChangeDutyCycle(2)
# give no movement
duty = 2
while duty <=12:
servo.ChangeDutyCycle(duty)
# using a constant instead of duty result is no movement
time.sleep(1)
# time.sleep(0.3)
# # servo1.ChangeDutyCycle(0)
# # time.sleep(0.7)
duty = duty + 2
我发现有人使用 gpiozero 但想使用 GPIO。我无法让我的舵机按照命令反转。认为这与它有关;如果我在 ChangeDutyCycle(常量)中有一个常量,则不会做出反应
在调用
servo.ChangeDutyCycle(2)
后,如果您想看到效果,您需要在程序中实际延迟一段时间,以便在再次调用 ChangeDutyCycle
之前给舵机时间移动到该位置。舵机不能瞬时移动,因为它们受物理定律控制。