【问题标题】:Get current position of servo with MicroPython on a Raspberry Pi Pico在 Raspberry Pi Pico 上使用 MicroPython 获取伺服的当前位置
【发布时间】:2021-10-06 22:13:50
【问题描述】:

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

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

【问题讨论】:

    标签: micropython pwm servo raspberry-pi-pico


    【解决方案1】:

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

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

    【讨论】:

    • 有什么方法可以根据距离和旋转时间计算当前位置吗?此外,我已经看过一些关于我正在使用的确切硬件的教程,它们都使用相同的代码行。最大范围是 0-65355,所以我猜它以某种方式缩放。不过,它似乎工作正常。
    猜你喜欢
    • 2022-09-25
    • 2021-06-23
    • 2022-08-15
    • 2023-02-17
    • 2023-01-19
    • 2022-12-22
    • 2023-01-03
    • 1970-01-01
    • 2015-09-12
    相关资源
    最近更新 更多