0

我在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

我可能遗漏了一些东西,但我已经阅读了文档并且找不到任何方法来读取伺服器的当前位置。有没有办法做到这一点?

4

1 回答 1

0

大多数伺服系统不提供任何类型的位置信息。你知道位置是什么,因为你设置了它。您可以编写代码来为您跟踪此值。例如,类似:

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)。

于 2021-08-01T01:12:53.690 回答