作为发送数字信号的教育练习,我试图在不使用伺服.h 库的情况下为伺服编码脉冲序列。
舵机是一个 9g 的微型舵机。硬件是正确的,因为许多使用servo.h 的例子工作正常。
我有以下代码。问题是伺服系统会猛烈晃动 3 秒钟,而不是移动并保持静止。
void loop() {
movePulse_1000();
delay(3000);
}
void movePulse_1000(){
Serial.print("Start movePulse_1000()\t\t");
for (int pulseCounter=0; pulseCounter<=150; pulseCounter++){
digitalWrite(pinServo,LOW);
delay(20); // between pulses
digitalWrite(pinServo,HIGH);
delayMicroseconds(1000);
}
Serial.println("End movePulse_1000()");
}
Run Code Online (Sandbox Code Playgroud)
使用模拟伺服系统时,平均脉冲宽度必须间隔 1.5ms,并且占空比根据所需位置而变化。为了让舵机保持在你想要的位置,你必须不断刷新舵机数据。这不是一个超级简单的任务,并且伺服库已经非常优化。没有什么理由不使用它。
它创建硬件计时器并使用它们来刷新伺服系统。这使得您的常规代码看起来会定期继续,即使它被伺服库中断以服务伺服系统。占空比、pwm 频率和刷新率都会发挥作用。您必须查看您所使用的伺服器的数据表才能获得完整的详细信息。但它并不像您想象的那么简单,并且您使用的那些延迟/延迟微函数并不总是足够精确。这就是为什么要使用时间和溢出中断。尽管大多数伺服系统都不太挑剔,但您可以避免大量的溢出。
| 归档时间: |
|
| 查看次数: |
7210 次 |
| 最近记录: |