0

我有一个伺服器,可以从 0 度扫描到 180 度然后回到 0,但是我不能使用 delay() 函数,因为我需要运动传感器来中断扫描。我写了一些代码,但是扫描并不顺畅,伺服有时会跳来跳去。我做错了什么?提前致谢

int x = 0;   

void pivot(){
for (pos = 0; pos <= 180; pos += 5) { // goes from 0 degrees to 180 degrees
// in steps of 1 degree
myservo_2.write(pos);              // tell servo to go to position in variable 'pos'
//delay(15); 
  for (x; x<10; x++)
  {
    delay(1);
    ping();
  }
  x=0;
 }
for (pos = 180; pos >= 0; pos -= 5) { // goes from 180 degrees to 0 degrees
myservo_2.write(pos);              // tell servo to go to position in variable 'pos'
//delay(15);
for (x; x<10; x++)
  {
    delay(1);
    ping();
  }
  x=0;
 }
}
4

1 回答 1

0

我认为问题只是你试图扫得太快。

以 5 为增量的 180 度只有 36 步,所以前后都是 72。以 1 ms 的延迟循环 10 次,您正试图在 0.72 秒内将伺服系统移动到其全范围并返回。这仅比典型的 RC 伺服移动快一点。60 度的 0.24 秒对于基本舵机来说是典型的,所以如果你的全范围约为 120,则大约需要 1 秒。也就是说,据我所知,您可能正在使用 60 度范围内的快速伺服系统。

另一种可能性是,当您说不平滑时,并不是说它在随机跳动,而只是在抖动。我希望每 10 毫秒跳跃 5 度,你会得到一点跳跃,10 赫兹接近哈雷空转的频率,而 5 度的运动太大,在那个速度下看起来很平滑。

您需要伺服在 10 次 ping 期间停止,还是可以连续扫描?如果可以,那么我会减少每次停止的 ping 次数并按比例减小步长。IE step 1 degree 和 ping 2 次。

于 2017-01-26T00:56:32.287 回答