【问题标题】:Servo motor keeps trying to reach beneath 134°, what is wrong?伺服电机一直试图达到 134° 以下,这是怎么回事?
【发布时间】:2019-06-22 16:24:26
【问题描述】:

我正在尝试让 Arduino Uno 板控制由伺服电机驱动的夹具。伺服器试图低于 134°,这在机械上是不可能的。我能做些什么来解决这个问题?

我试图将电机限制在 180°,当它不是所需按钮的读数时,它会保持主位置(关闭,180)

#include <Servo.h>

Servo myservo;

char reading;
int pos;

void setup() {
  // put your setup code here, to run once:
  myservo.attach(9);
  Serial.begin(9600);
}

void loop() {

  if (Serial.available() > 0) {

    reading = Serial.read();
    Serial.print(reading);
    if (reading == 'W' || reading == 'w') {
      pos = 134;
      myservo.write(pos);
      Serial.println("Open");
    }
    else if (reading == 'C' || reading == 'c') {
      pos = 180;
      myservo.write(pos);
      Serial.println("Close");
    }
    else if (reading != 'W' || reading != 'C') {
      myservo.write(180);
    }
  }
}

【问题讨论】:

    标签: c++ arduino arduino-uno arduino-c++


    【解决方案1】:

    在您的代码中,您只需调用 attach() 并传入密码。

    servo library 要求您在调用attach() 时指定伺服轴的最小和最大位置。如果不这样做,您最终可能会遇到调用有效位置的情况,但伺服系统要么走得不够远,要么试图走得比机械上所能走得更远。

    库需要知道最小和最大信号脉冲宽度,以便当您调用Servo.write() 传入轴角时,它可以计算出相应的占空比。

    【讨论】:

    • 哦,所以我在附件中设置了最小值和最大值?像这样: myservo.attach(9, 1700,2400);我找不到不同程度的确切值。数字代表什么?对不起,我对此有点陌生:)
    • @Herman 是的;您传递的实际脉冲宽度需要与最小和最大位置相对应,对于您的特定伺服而言,这可能是也可能不是(0° - 180°)。
    • @Herman Servos 就像您通过脉宽调制进行操作一样。看看this
    • 谢谢,但这似乎并没有解决问题。即使我尝试了不同的值但没有运气,伺服器仍然试图达到“错误”的角度
    • @Herman 根据您使用的数字,它可能仍然无法正常工作。您需要知道要使用的确切数字。您必须计算出什么信号脉冲宽度为您提供了最小/最大轴位置。该信息通常在数据表中。
    猜你喜欢
    • 1970-01-01
    • 2022-08-07
    • 1970-01-01
    • 1970-01-01
    • 2013-04-27
    • 2011-07-06
    • 2017-10-06
    • 1970-01-01
    • 2016-09-12
    相关资源
    最近更新 更多