Pybricks-MicroPython中的stalled()函数如何工作

时间:2019-08-29 12:13:29

标签: micropython mindstorms ev3 pybricks-micropython

MicroPython 2.0 beta 5

试图了解电动机上的stalled()功能如何工作。我以dc为100运行电动机,并握住车轮,使其不会移动。

但是stalled函数不会触发,实际上无论我做什么我似乎都无法使它返回True?

我尝试使用的功能更少,但仍然无法从该功能中获得任何好处。

#!/usr/bin/env pybricks-micropython
from pybricks import ev3brick as brick
from pybricks.ev3devices import Motor
from pybricks.parameters import Port, Stop

left_motor = Motor(Port.B) 

speed = 800

# option 1
left_motor.dc(100)

# option 2
#left_motor.run_until_stalled(speed, Stop.HOLD, 100)

while True:
    if left_motor.stalled():
        print("stalled")

如果使用选项1:电动机运转,则将其按住直到停止,没有任何报告。我放开手,然后放开。

如果使用选项2:电动机运转,则按住它,它会停止。但是我从没有看到报告说它停滞了。

1 个答案:

答案 0 :(得分:1)

尽管应用了最大占空比,但仍无法达到目标速度或角度时,电动机仍会失速。

您的示例可以像这样修改:

#!/usr/bin/env pybricks-micropython
from pybricks.ev3devices import Motor
from pybricks.parameters import Port
from pybricks.tools import wait

# Initialize the motor
left_motor = Motor(Port.B)

# Start running the motor at 500 deg/s
left_motor.run(500)

# Do nothing until we are stalled
while not left_motor.stalled():
    wait(10)

# Stop the motor
left_motor.stop()

此示例等效于单线left_motor.run_until_stalled(500)。如果要将其扩展到多个电机,则手动方法会很有用。

问题中的dc()方法未设置目标速度或角度;它直接设置占空比,因此没有停顿信息。

注意:从Pybricks版本Pybricks 2.0开始,可以通过left_motor.stalled()访问left_motor.control.stalled()方法。它仅在2020年3月才处于公开Beta版,因此我不确定2019年8月原始帖子中报告的版本是否正确。