c++ - 如何用arduino控制伺服电机
问题描述
我看过很多关于 pwn 和伺服电机编码的视频,但无法理解伺服电机代码在 arduino 中的工作原理。我的主要困惑是以下代码中延迟的确切目的是什么。当我们说servo.write(180); 不是说要180度吗?这里的延迟有什么用?几毫秒会导致伺服器正常工作或抖动或振动不移动或旋转不正确等。
包括
Servo myservo; // create servo object to control a servo
// twelve servo objects can be created on most boards
int pos = 0; // variable to store the servo position
void setup() {
myservo.attach(9); // attaches the servo on pin 9 to the servo object
}
void loop() {
for (pos = 0; pos <= 180; 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(10); // waits 15ms for the servo to reach the position
}
解决方案
该代码试图让伺服系统从0
到180
度数相对缓慢地移动。 10 ms
乘以181
步数等于1.81 seconds
。
如果您一次从 0 直接移动到 180,那么大多数(如果不是全部)伺服系统都比这快得多。
这段代码的一个问题是你不知道伺服的初始位置是什么。例如,如果初始位置是 180,它会快速跳到 0,然后慢慢回到 180。
另请注意,大多数伺服系统每 20 毫秒左右使用一个信号进行控制,因此更频繁地更改信号可能会导致问题(如抖动/振动/噪声/...)。
推荐阅读
- node.js - 通过 nginx 上传 1 GB 文件的问题
- regex - 在 Unix 中删除模式后的所有内容
- python - Pytest中如何控制增量测试用例
- reactjs - 如何从反应中的多个字段中获取相同输入类型的值?
- ruby-on-rails-3 - 如何将文件的二进制文件发送到参数并使用回形针数据库将其保存在数据库中
- python - 如何从 upcdatabase.org API (Python) 中获取特定数据
- javascript - 如何在 vue-tables-2 服务器端添加范围过滤器
- ios - 在 CocoaPod post_install 上获取 App-Target(s) 或 Appname
- android - 尝试重新打开一个已经关闭的对象 sqlite
- ios - 防止处理 PublishSubject (RxSwift)