Arduino控制MG995/MG996 360舵机连续旋转
参考:
- 调试
- 从线机器人 - PID控制 - 安卓设置 : 12 步骤(附图) - 指导 (instructables.com)
MG995 舵机
技术参数
将了解MG995舵机。MG995舵机电机是一种舵机电机,可以连续移动,没有任何旋转程度的限制。“360”版本是连续旋转的伺服器,无法控制位置。它只是做你描述的事情。它根本不是真正的“伺服器”。它是一个带有自己控制器的减速电机。
MG996R是MG995伺服的升级版。新的PCB和IC控制系统使其更加精确。
其内部齿轮和电机也进行了升级,以改善死带宽和定心。MG996R伺服具有高定位速度,可精确控制和调节您的项目。工作电压范围为 4.8 V – 7.2 V。
如果您曾经使用过塔式Pro SG90和MG996R等舵机电机,该舵机电机是标准舵机类型,可以使用指定的度角进行控制。可以使用命令myservo.write(degrees);
轻松移动舵机电机,然后舵机将移动到该j角度。MG995 舵机在操作方式上有所不同。我尝试多次对Arduino进行编程,以使用Arduino IDE上提供的默认程序控制舵机电机,但它不起作用。
- 重量:55g
- 尺寸:40.7×19.7×42.9毫米
- 失速扭矩:9.4公斤/厘米(4.8伏);11公斤/厘米(6.0伏)
- 运行速度:0.19秒/60度(4.8v);0.15秒/60度(6.0V)
- 工作电压:4.8~ 6.6V
- 齿轮类型:金属齿轮
- 温度范围:0-55?
- 伺服插头:JR(适合JR和双叶)
- 死带宽度:1us
所以,在我研究并寻找如何控制这个连续舵机之后,我找到了驱动这个舵机电机的方法。
正常的闭环定位舵机通过编程来响应脉冲宽度以确定角度:1.0ms 脉冲为位置 0°,1.5ms 脉冲为位置 90°,2.0ms 脉冲为位置 180°。
由于MG995 360是连续旋转的舵机类型,因此必须指定3个条件,即停止位置,左转和右转。在这三个位置中,基本命令是使用“写入微秒”命令。
根据我所做的几个实验,这些条件时的微秒值为:
- 停止位置 – 写入微秒(1500)
- 左转 – 写入微秒(1000)
- 向右转 – 写入微秒(2000)
- 脉冲在1.0和1.5ms或1.5ms和2.0ms之间,将产生成比例的速度。
Adafruit指出,连续旋转的伺服可能需要某种校准才能使停止真正停止。如果伺服器本身没有偏移调整,您可能需要在软件中进行调整,即完全停止可能是“89°”或“91°”而不是“90°”。没有位置检测,它只是以命令的速度运行开环。
但是,当“扫描”测试程序驱动连续旋转伺服时,脉冲命令被解释为速度而不是位置。因此,旋转速度的命令从1.0ms=全速顺时针,到1.5ms=慢速/停止,到2.0ms=全速逆时针,到1.5ms=慢速/停止,到1.0ms=全速顺时针。舵机实际上正在执行----
1.0ms=spin-CW
–1.5ms=stop
–2.0ms=spin-CCW
–1.5ms=stop
–1.0ms=spin-CW
… ----…类似于闭环伺服的行为方式。
布线
为了能够练习上述值,请将舵机连接到您的 Arduino。在其中一个PWM引脚上使用它。PWM 引脚分别为 3、5、6、9、10 和 11。可以在此处查看电路。对于供电,应给MG996R
基本代码
之后,我编写了下面的基本程序代码。请上传以下程序到Arduino Uno。
#include <Servo.h>
Servo servo;
void setup() {
servo.attach(3);
}
void loop() {
// rotate counter-clockwise full-speed
servo.writeMicroseconds(1000);
delay(2000);
// rotation stopped
servo.writeMicroseconds(1500);
delay(1000);
// rotate clockwise full-speed
servo.writeMicroseconds(2000);
delay(2000);
// rotation stopped
servo.writeMicroseconds(1500);
delay(1000);
}
您可以看到结果。
如何放慢速度
如果在某个位置它不起作用,例如您无法平稳地向左转,您可以尝试将微秒的值更改为略大于或小于 1000 的值。
如果要缓慢执行此操作,则必须将.writeMicroseconds(1500)
值更改为较低的值以向左转,更改较高值以向右转。
- value = 1500 将停止舵机
- value**<** 1500 将向左旋转,值越小,向左旋转将变慢。
- value > 1500 将向右旋转,值越大,向右旋转将变慢。
根据我的实验,每个舵机有时的命令与其他舵机略有不同。由此,请为您的舵机校准合适的微秒值。
如何将SG90舵机旋转到特定位置?
技术说明
现在我们将尝试旋转Arduino伺服电机。通常,要驱动伺服电机,最大循环时间为2ms。1°为0ms,1°为5.90ms,2°为180ms。请看下图:
使用串行监视器进行伺服控制,需要将字符转换为int
如果我们发送一个串行监视器值,例如 90,目的是将伺服旋转到 90 度,这将不起作用。因为我们从串行监视器收到的值是 字符 .同时,确定电机位置的值是整数数据类型。
要将数据类型从 char 更改为 int,我们可以使用命令“Serial.parseInt ()”。文章来源:https://www.toymoban.com/news/detail-460596.html
#include <Servo.h>
Servo myServo;
void setup() {
Serial.begin(9600);
myServo.attach(9);
}
void loop() {
while (Serial.available() != 0) {
int val = Serial.parseInt();
Serial.println(val);
myServo.write(val);
delay(5);
}
}
上述程序已被尝试并成功。文章来源地址https://www.toymoban.com/news/detail-460596.html
到了这里,关于Arduino控制MG995/MG996 360舵机连续旋转的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!