我有一个TowerPro MG90D伺服器(制造商链接)(ServoDatabase Link)。
它具有180度范围(非连续)。
在测试仪上观察以下7%的占空比(大约90度):
伺服响应良好。
但是,当我servo.write()
与Arduino Mega 2560克隆一起使用时,伺服器不会响应任何角度输出。我还有其他几个伺服器,它们在相同的引脚上使用相同的代码也可以正常工作。
使用以下命令在Arduino上观察以下7%的占空比servo.write(90)
:
没有反应。伺服是“一跳”;它没有担任任何职务。
在写这个问题时,我想到了尝试servo.writeMicroseconds()
。
这里是servo.writeMicroseconds(1450)
:
伺服响应!
这是servo.writeMicroseconds(1472)
(工作中),其时间间隔与prevoius非工作中相同servo.write(90)
!
servo.writeMicroseconds(1550)
(工作中):
有什么区别?
伺服测试仪的工作频率servo.write()
为49.5Hz ,而失败的频率为49.9Hz。我想知道0.4Hz是否会有所不同,但是后来我看到它servo.writeMicroseconds()
也以49.9Hz起作用。
在上面的范围捕获中,可以看出两者servo.write(90)
和servo.writeMicroseconds(1472)
具有相同的时间间隔:
1,474,560ns HIGH
18,544,640ns LOW
信号是如此相似... 是什么原因导致servo.write()
无法工作?
我的代码是尽可能基本的:
#include <Servo.h>
Servo serv1;
void setup() {
serv1.attach(3); // Pin 3
}
void loop() {
serv1.write(90); // No response
delay(3000);
serv1.writeMicroseconds(1472); // Works
delay(3000);
serv1.write(0); // No response
delay(3000);
serv1.writeMicroseconds(1800); // Works
delay(3000);
}
模拟此电路 –使用CircuitLab创建的原理图
write
吗?确实没有理由使伺服器不工作,所以我会质疑您的信号。