Arduino控制伺服电机及供电电路详解
Arduino控制伺服电机及供电电路详解
伺服电机Arduino控制及供电电路
伺服电机简介:
伺服电机Arduino教程 - 在本教程中,您将学习如何使用Arduino控制伺服电机。伺服电机是可以转动到指定位置的出色设备。本教程主要介绍如何通过为伺服电机制作外部电源来实现平滑移动和精确定位。本教程包括:
- 什么是伺服电机?
- 伺服电机的优势
- 伺服电机的应用
- 如何为伺服电机制作外部电源
- 伺服电机与Arduino的接口
- 伺服电机编程
- 测试
伺服电机:
伺服电机是一种旋转执行器或线性执行器,可对角度或线性位置、速度和加速度进行精确控制。它由一个合适的电机和一个用于位置反馈的传感器组成。伺服电机有不同的尺寸和形状,但所有伺服电机的基本工作原理都完全相同。
这是我在本教程中使用的高扭矩MG996R伺服电机。MG996R是MG995伺服电机的升级版,具有升级的防震功能,并重新设计了PCB和IC控制系统,使其比上一代产品更加精确。齿轮和电机也进行了升级,以改善死区带宽和居中性。
MG996R规格:
- 重量:55克
- 尺寸:约40.7 x 19.7 x 42.9毫米
- 堵转扭矩:9.4公斤力·厘米(4.8V),11公斤力·厘米(6V)
- 工作速度:0.17秒/60度(4.8V),0.14秒/60度(6V)
- 工作电压:4.8V至7.2V
- 运行电流:500毫安
- 堵转电流:2.5安(6V)
- 死区带宽:5微秒
- 稳定且防震的双球轴承设计
- 温度范围:0°C至55°C
伺服电机引脚:
伺服电机的优势:
- 低成本
- 低速平稳旋转
- 静止时不耗电
- 由于电机上没有静态负载,因此不需要电流来保持位置
- 种类繁多
伺服电机的应用:
- 伺服电机最常用于机器人的精确定位,如机械手、拾取和放置机构、机器人手臂关节等。
- 伺服电机还可用于贴标和包装等行业,如相机自动对焦、太阳能跟踪系统、天线定位、数控机床、自动开门机等。
伺服电机旋转问题及解决方案:
您的伺服电机可能会表现不稳定,而且您可能会发现只有当Arduino插入某些USB端口时才会出现这种情况。这是因为伺服电机需要消耗大量电能,尤其是在电机启动时,这种突然的高需求足以降低Arduino板上的电压,从而使其自我复位。同样的情况也发生在我身上,我的Arduino正在重置,我无法实现平滑移动和精确定位。我为伺服电机制作了一个外部电源,从而解决了这个问题。让我们来看看电路图。
伺服电机供电电路图:
本原理图使用cadsoft eagle 9.1.0版本设计。如果您想学习如何制作原理图和印刷电路板,请观看我的教程。J1是直流母电源插孔,用于连接12伏适配器或电池。该电压应大于6伏,小于7805稳压器的最大输入电压;建议电压为9至18伏。我的情况是使用12伏。输出和接地引脚之间连接了一个25伏470UF电容器。稳压器的输出端与伺服电机的电源线相连。伺服电机的地线与稳压器的地线以及Arduino的地线相连。信号线与Arduino的3号引脚相连。
这是最终电路;各元件已按电路图焊接完毕。伺服电机的电源线(即红线)与7805稳压器的输出端相连,棕色线(即地线)与7805稳压器的中间端相连,输出端和地线之间连接了一个470UF的电容器。
这是接地线,应与Arduino的地线相连。黄线是信号线,可与Arduino的任何PWM引脚连接,在我的例子中,我将把它与Arduino的3号引脚连接。现在,这个伺服电机已经准备就绪,可以与Arduino、Mega或任何其他控制板一起使用。
伺服电机与Arduino的接口:
- 将黄线连接到3号引脚。
- 将电源地线连接到Arduino的地线。
- 接口工作完成。这个伺服电机可以使用12伏适配器供电。
伺服电机Arduino代码/编程:
#include <Servo.h>
Servo myservo;
void setup()
{
Serial.begin(9600); // 初始化串行通信
myservo.attach(3); // 伺服电机连接在这里
}
void loop()
{
myservo.write(0);
delay(1000);
myservo.write(45);
delay(1000);
myservo.write(90);
delay(1000);
myservo.write(180);
delay(1000);
myservo.write(0);
delay(1000);
for (int i = 0; i <= 180; i++)
{
myservo.write(i);
delay(20);
}
myservo.write(0);
delay(1000);
for (int i = 0; i <= 180; i++)
{
myservo.write(i);
delay(5);
}
}