首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >伺服驱动程序代码使伺服行为异常。

伺服驱动程序代码使伺服行为异常。
EN

Stack Overflow用户
提问于 2015-03-05 20:31:44
回答 1查看 84关注 0票数 0

我试图在不使用Arduino库的情况下实现伺服驱动程序。但我实现的是奇怪的行为伺服,它向右,但不想回到0度。这是我的代码(它既快又脏):

代码语言:javascript
复制
void setup() {
  // put your setup code here, to run once:
  pinMode(9, OUTPUT);
  Serial.begin(9600);
}
void loop() {
  for(int i = 0; i < 180; i++)
  {
    setServo(i);
  }
  for(int i = 180; i > 0; i--)
  {
    setServo(i);
  }
}

void setServo(float angle)
{

  float out = (angle * 2) / 180;
  Serial.println(out);
  digitalWrite(9, HIGH);
  delay(out);
  digitalWrite(9, LOW);
  delay(20);
}

我漏掉了点什么?有人能告诉我一些如何实施的建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-05 21:44:47

你误解了伺服系统的工作原理。首先,他们必须有一个从700~2300 to的高脉冲。一个1500 is长的高脉冲将使伺服集中。在ms中使用延迟将不起作用。您必须使用delayMicroseconds。此外,即使是最轻微的时间抖动在脉冲将导致伺服抖动。

所以,重新编写你的代码,然后再发一次。您可以让它与delayMicroseconds一起工作(我已经做过了),但是它不能很好地工作。我建议您编写代码,使1000 in的高脉冲在一个方向上“满”,2000 in的“满”在另一个方向开始。一旦你让它工作,你可以调整这些值,看看伺服将真正接受什么作为完整的命令在一个或另一个方向。

另外,如果你想要一个稳定的20毫秒的完整周期,一定要在每个脉冲结束后调整你的等待时间。例:如果你的高脉冲是1000 is,那么你的低时间应该是19000 is,以保持稳定的50 to输出信号,这是标准的。还研究如何使用map()函数。我强烈建议你使用伺服库。你为什么不想用它呢?

PS。编写适当的伺服代码需要付出很大的努力,并且必须使用低级定时器和中断服务例程来完成。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28887163

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档