我在Raspberry Pi Pico上运行MicroPython。我可以通过改变占空比来设置伺服的位置:
from machine import Pin, PWM
servo = PWM(Pin(0))
servo.freq(50)
servo.duty_u16(1350) # sets position to 0 degrees
我可能遗漏了一些东西,但我已经阅读了文档并且找不到任何方法来读取伺服器的当前位置。有没有办法做到这一点?
我在Raspberry Pi Pico上运行MicroPython。我可以通过改变占空比来设置伺服的位置:
from machine import Pin, PWM
servo = PWM(Pin(0))
servo.freq(50)
servo.duty_u16(1350) # sets position to 0 degrees
我可能遗漏了一些东西,但我已经阅读了文档并且找不到任何方法来读取伺服器的当前位置。有没有办法做到这一点?
大多数伺服系统不提供任何类型的位置信息。你知道位置是什么,因为你设置了它。您可以编写代码来为您跟踪此值。例如,类似:
from machine import Pin, PWM
class Servo:
min_duty = 40
max_duty = 1115
def __init__(self, pin):
servo = PWM(Pin(pin))
servo.freq(50)
self.servo = servo
self.setpos(90)
def setpos(self, pos):
'''Scale the angular position to a value between self.min_duty
and self.max_duty.'''
if pos < 0 or pos > 180:
raise ValueError(pos)
self.pos = pos
duty = int((pos/180) * (self.max_duty - self.min_duty) + self.min_duty)
self.servo.duty(duty)
你会Servo
像这样使用这个类:
>>> s = Servo(18)
>>> s.pos
90
>>> s.setpos(180)
>>> s.pos
180
>>> s.setpos(0)
>>> s.pos
0
>>>
在您的问题中,您有:
servo.duty_u16(1350)
我对这个值持怀疑态度:在 50Hz 时,占空比通常在 40 到 115 之间(任一端都有少量 +/1),对应于 ≈ 1ms(duty=40)到 2ms(duty=115)。