改变方向的伺服延迟

时间:2017-08-17 22:21:06

标签: arduino servo

我正在使用SG-90伺服,并在两个值之间左右扫描。 我的问题是方向变化之间存在大约500ms的明显延迟。我希望伺服的位置是可预测的,但是由于这个方向改变它不是。

bool servoDir = true;
int servoCnt = 90;
int servoInc = 1;
int servoMin = servoCnt - 5;
int servoMax = servoCnt + 5;

void loop() {
    if (servoDir) {
      dx = servoInc;
      if (servoCnt > servoMax) {
        servoDir = false;
      }
    } else {
      dx = -servoInc;
      if (servoCnt < servoMin) {
        servoDir = true;
      }
    }
    servoCnt += dx;
    servo.write(servoCnt);
    // delay or other code here (mine is 40ms)
}

我已经尝试过Arduino Servo库和VarspeedServo库。他们都表现出同样的东西。

这是什么原因以及我该怎么办?

更新

所以如果我提高方向的速度,就像这样:

int extra = 5;
void loop() {
    if (servoDir) {
      dx = servoInc;
      if (servoCnt > servoMax) {
        dx -= extra;
        servoDir = false;
      }
    } else {
      dx = -servoInc;
      if (servoCnt < servoMin) {
        dx += extra;
        servoDir = true;
      }
    }
    servoCnt += dx;
    servo.write(servoCnt);
    // delay or other code here (mine is 40ms)
}

延迟消失,但伺服位置确实变得难以预测。

1 个答案:

答案 0 :(得分:0)

如果servoMin和servoMax超出伺服范围,你会遇到这些症状......它们是什么。

更严重的是,这些伺服系统不是很精确。一次增加1可能是个问题。您正在经历某种形式的强烈反对。

您应该检查并钳制计数与递增/递减后的范围。这是嵌入式编程的基本规则之一。在发出超出范围的值时,生命可能受到威胁,或设备被摧毁。

'X-OPENTOK-AUTH': 'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiIxMjMiLCJpc3QiOiJwcm9qZWN0IiwiaWF0IjoxNTAyMzMxNDk3LCJleHAiOjE1MDIzMzE3OTd9.WJ1yJkD6IgXofj85Wyjdl80QEumLVBHIgtj-9vAhOZU'