我试图在不使用Arduino库的情况下实现伺服驱动程序。但我实现的是奇怪的行为伺服,它向右,但不想回到0度。这是我的代码(它既快又脏):
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);
}我漏掉了点什么?有人能告诉我一些如何实施的建议吗?
发布于 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。编写适当的伺服代码需要付出很大的努力,并且必须使用低级定时器和中断服务例程来完成。
https://stackoverflow.com/questions/28887163
复制相似问题