Lejos NXT - 我如何检测电机失速?

时间:2011-12-22 21:08:25

标签: lejos-nxj

我尝试用4臂构建一个Rubiks Cube Solver来抓住立方体。 我使用的是lejos固件版本0.9.0。我的问题是如何检测电机是否停转?

例如: Motor.A向前旋转,同时电机将被阻塞/停止, 然后Motor.A应该停止。

我希望有人能帮助我。

3 个答案:

答案 0 :(得分:2)

这可能是您正在寻找的:

<强> isStalled()

NXTRegulatedMotor.isStalled() - 如果电机当前停转,则返回true。 (即移动计数显示的旋转度低于预期) http://www.lejos.org/nxt/nxj/api/lejos/nxt/NXTRegulatedMotor.html#isStalled()

您应该注意的另一种方法是:

<强> setStalledThreshold()

NXTRegulatedMotor.setStallThreshold() - 设置用于检测失速电机的参数。如果运动误差(电机滞后于调节位置的量)大于误差的时间长于时间,则电机将被识别为停止。 http://www.lejos.org/nxt/nxj/api/lejos/nxt/NXTRegulatedMotor.html#setStallThreshold(int, int)

最后,这里有一个如何将它们放在一起的例子:

public static void main(String[] args) 
{
    boolean stalled = false;
    NXTRegulatedMotor motor_arm = Motor.A;
    motor_arm.setStallThreshold(1, 100);

    motor_arm.setSpeed(400);
    motor_arm.backward();

    while (! stalled)
    {
        LCD.drawString("Motor is rotating", 0, 0);
        if(motor_arm.isStalled())
        {
           motor_arm.stop();
           stalled=true;
           LCD.drawString("Motor is stalled", 0, 0);
           Delay.msDelay(3000);
        }

        Delay.msDelay(100);
    }

}

注意: setStalledThreshold()的值可能机械相关,如果您使用齿轮将电机连接到停止机制,则值为正确的失速检测可能会根据机器人的设计而有所不同。

祝你好运! :)

答案 1 :(得分:0)

我认为检查位置是否改变是唯一的方法。发送移动命令,等待,检查位置,看看它是否是你要求的。

答案 2 :(得分:0)

根据文档,motor.getPosition()应该与motor.getTachoCount()相同。如果不是,则可以认为电动机已停止。

  

公共浮动getPosition()

     

返回电机的当前位置   监管机构正在努力维持。通常这是实际的   电动机的位置,并将与的返回值相同   getTachoCount()。但是在某些情况下(   在失速过程中,或被迫退出的activeMotor   位置),这两个值可能会不同。请注意,如果法规有   被暂停调用此方法将重新启动它。

所以您只需要检查两个值是否相等:

public boolean isStealed() {
    motor.getPosition() == motor.getTachoCount();
}