首页 > 解决方案 > 如何用arduino控制伺服电机

问题描述

我看过很多关于 pwn 和伺服电机编码的视频,但无法理解伺服电机代码在 arduino 中的工作原理。我的主要困惑是以下代码中延迟的确切目的是什么。当我们说servo.write(180); 不是说要180度吗?这里的延迟有什么用?几毫秒会导致伺服器正常工作或抖动或振动不移动或旋转不正确等。

包括

Servo myservo; // create servo object to control a servo
// twelve servo objects can be created on most boards
int pos = 0; // variable to store the servo position
void setup() {
myservo.attach(9); // attaches the servo on pin 9 to the servo object
}
void loop() {
  for (pos = 0; pos <= 180; pos += 1) { // goes from 0 degrees to 180 degrees
  // in steps of 1 degree
 myservo.write(pos);  // tell servo to go to position in variable 'pos'
    delay(10); // waits 15ms for the servo to reach the position
  }

标签: c++arduinoservo

解决方案


该代码试图让伺服系统从0180度数相对缓慢地移动。 10 ms乘以181步数等于1.81 seconds

如果您一次从 0 直接移动到 180,那么大多数(如果不是全部)伺服系统都比这快得多。

这段代码的一个问题是你不知道伺服的初始位置是什么。例如,如果初始位置是 180,它会快速跳到 0,然后慢慢回到 180。

另请注意,大多数伺服系统每 20 毫秒左右使用一个信号进行控制,因此更频繁地更改信号可能会导致问题(如抖动/振动/噪声/...)。


推荐阅读