我当前的代码在这里:
#include <Servo.h>
Servo myservo; // create servo object to control a servo
// a maximum of eight servo objects can be created
int pos = 0; // variable to store the servo position
void setup()
{
myservo.attach(8); // attaches the servo on pin 8 to the servo object
}
void loop()
{
int maxspeed=100;
int minspeed=0;
int delaytime=5;
int count;
for(count=0; count <1; count+=1) {
for(pos = minspeed; pos < maxspeed; 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(delaytime); // waits 15ms for the servo to reach the position
}
for(pos = maxspeed; pos>=minspeed; pos-=1) // goes from 180 degrees to 0 degrees
{
myservo.write(pos); // tell servo to go to position in variable 'pos'
delay(delaytime); // waits 15ms for the servo to reach the position
}
if(count>1){
break;
}
}
myservo.write(92);
delay(100000);
myservo.write(90);
delay(10000000);
}
#1 楼
Servo.write(angle)函数旨在接受从0到180的角度。(值180明显大于100)。
请告诉我在Servo文档中何处读取“ 100 (电动机处于全功率状态)”,那么我们可以解决该错字吗?
请更改线路
int maxspeed=100; /* wrong */
到
int maxspeed=180;
另外,请定期运行
servo.refresh()
来更新伺服器-也许像这样:,您可以通过
直接设置脉冲宽度(以微秒为单位)来获得更高的精度。 >该技术使以一致的心跳定时读取传感器和更新伺服位置变得更加容易。
#2 楼
您的代码使用典型的servo.attach(pin)
,您可以在其中使用servo.attach(pin, min, max)
的过载来设置脉冲宽度的最小和最大微秒,以与ESC所需的范围相匹配。另外,为了使使用myservo.write(90);
设置角度的位置更加清楚,您可以使用myservo.writeMicroseconds(1500);
直接以微秒为单位设置脉冲的持续时间。
评论
$ \ begingroup $
谢谢,我将研究每个建议。回答您的问题:我没有在任何文档中读到伺服计数100是最大功率,而是通过测试电机(hobbyking.com/hobbyking/store / ...)并找到高于伺服计数100的道具来计算得出的。旋转似乎没有加快,给了我很小的工作范围。
$ \ endgroup $
– Toozinger
13年11月25日在17:55
$ \ begingroup $
如果是这种情况,则是您的电池无法提供足够的电流(检查C值),或者推进器太大(电动机上的负载过大),或者esc无法提供足够的电流(在这种情况下,它可能会变热)。请检查以上所有可能性。
$ \ endgroup $
–哈兹卡兹
16年6月24日在7:07