【问题标题】:Servo Issues while using PWM with Raspberry Pi将 PWM 与 Raspberry Pi 一起使用时的伺服问题
【发布时间】:2018-11-16 20:11:22
【问题描述】:

我的设置只是通过 GPIO 库使用树莓派的 PWM 直接激活伺服 JX-PDI-6221MG。伺服是全新的,我遵循this tutorial 并将占空比值设置在 0 到 100 之间。它所形成的角度没有图案,它似乎从 20 到 50 是一种方式,从 60 到 90 是另一种方式。

我决定遍历所有可能的占空比(代码如下),并确认变化并不平滑,而且看起来也不精确。在尝试再次设置固定值后,它突然开始向多个方向旋转,即使我没有改变任何东西。甚至 GPIO.cleanup() 或杀死与 python 相关的进程都没有让它停止。

我的 Raspberry Pi 是否变得抖动并且非常不精确,或者我是伪造的受害者?

代码:

import RPi.GPIO as GPIO
import time

GPIO.setmode(GPIO.BOARD)
GPIO.setup(11,GPIO.OUT)
pwm=GPIO.PWM(11,330) #which is the same as shown in datasheet
pwm.start(0)

for i in range(0,100):
     pwm.ChangeDutyCycle(i)
     time.sleep(0.02)

for i in range(0,100):
     i = 100 - i
     pwm.ChangeDutyCycle(i)
     time.sleep(0.02)`

【问题讨论】:

  • 请注意,您的 Pi 上的软件 PWM 非常糟糕。可用的硬件 PWM 引脚数量有限(1 个或 2 个,具体取决于您的型号),并且有一些解决方法可以实现更好的软件 PWM(例如,RPIO.PWM)。这不是作为答案发布的,因为听起来可能还有更多事情发生,然后只是稍微不稳定的 PWM。你可以考虑在raspberrypi.stackexchange.com 上提问。

标签: python raspberry-pi servo


【解决方案1】:

AFAIK,GPIO 库只能将 GPIO 18 用于硬件 PWM。尝试将 GPIO.OUT 更改为此。

还可以尝试使用允许任何 GPIO 引脚执行硬件定时 PWM 的 pigpio 库。

【讨论】:

  • RPi.GPIO 实际上根本不支持硬件 PWM。并且硬件不支持所有引脚上的 PWM。只能同时激活两个 PWM 通道,并且仅限于选择的几个引脚。
【解决方案2】:

伺服系统通常需要精确的计时,因此在 Raspberry Pi 等非实时设备上,这意味着您需要使用硬件 PWM 引脚。 RPi.GPIO 仅支持软件模拟 PWM,因此您需要使用另一个库,例如猪皮。

【讨论】:

    猜你喜欢
    • 2015-09-12
    • 1970-01-01
    • 2021-12-01
    • 1970-01-01
    • 2021-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多