风筝
发表于: 2018-4-26 21:39:24 | 显示全部楼层

使用Arduino开发板控制一台或两台伺服电机非常容易实现,但是如果我们想要控制多台伺服电机时,那该怎么做呢?


在本篇文章中,我们将向您介绍如何使用Arduino开发板控制多台伺服电机。将多台伺服电机连接到Arduino开发板看上去似乎很容易,但是如果我们将所有舵机连接到Arduino的电源引脚,那么就会因为缺乏足够的电流来驱动所有电机,从而导致它们无法正常工作。所以你必须采用独立的电源向电机供电,可以是电源适配器(5V/2A),也可以是优质的9V电池。


所需的材料

●    Arduino UNO开发板

●    伺服电机

●    电源

●    面包板

●    连接导线


电路原理图

Circuit-diagram-for-Controlling-Multiple-Servo-Motors-with-Arduino.png

使用Arduino控制多台伺服电机的电路图


什么是伺服电机?

在详细讨论之前,首先我们应该了解伺服电机。


伺服电机有不同的形状和尺寸。伺服电机主要有三根导线,一根是电源线,另一根是地线,最后一根是位置。 红线连接到电源,黑线连接到地,黄线连接到信号。

Servo-Motor.jpg


servo-motor-3kg-torque.jpg


一个伺服电机包含直流电机、位置控制系统以及齿轮。根据信号引脚的PWM信号占空比,直流电机轴的位置由伺服电机的控制电路进行调整。


简单地说,控制电路通过控制直流电机来调整轴位置。轴位置相关的数据通过信号引脚发送。控制的位置数据应通过伺服电机的信号引脚以PWM信号的形式发送。

PWM(脉宽调制)信号的频率因伺服电机的类型而略有变化。这里重要的参数是PWM信号的占空比(DUTY RATIO)。根据占空比,控制电路调整轴的位置。

如下图所示,要想将轴移动到9点钟方向,开启的占空比必须是1 / 18,也就是18ms信号中1ms的ON时间和17ms的OFF时间。

PWM-Pulses-for-Servo_0.gif


要想将轴移动到12点钟方向,信号的ON时间必须为1.5ms,OFF时间应为16.5ms。伺服电机里面的控制系统解码该占空比,并根据此比例调整位置。这里的PWM是通过使用ARDUINO UNO生成的。


Arduino代码说明

在本文的末尾给出了用于控制多台伺服电机的完整Arduino代码。


Arduino IDE自带伺服电机库,它处理所有PWM相关的事情来旋转伺服电机,你只需要输入想旋转的角度,然后使用函数servo1.write(angle);将使伺服电机旋转到所需的角度。


因此,我们首先定义伺服电机库。

  1. #include <Servo.h>
复制代码

在下面的代码中,我们分别将四台伺服电机初始化为Servo1、Servo2、Servo3Servo4

  1. Servo servo1;
  2. Servo servo2;
  3. Servo servo3;
  4. Servo servo4;
复制代码

然后,我们设置Arduino中所有伺服电机的输入引脚。如下面的代码所示,Servo1连接到Arduino的第3个引脚。您可以根据实际情况更改引脚编号,但请记住它应该是一个PWM引脚。使用Arduino的数字引脚控制伺服电机是不可靠的。

  1. void setup() {
  2.   servo1.attach(3);
  3.   servo2.attach(5);
  4.   servo3.attach(6);
  5.   servo4.attach(9);
  6. }
复制代码

现在,在void loop()函数中,我们将所有伺服电机从0度旋转到180度,然后从180度旋转到0度。下面代码中使用的延迟用于增大或降低伺服电机的旋转速度,因为它会影响变量'i'的增加或减少的速度。

  1. void loop() {
  2.   for (int i = 0; i < 180; i++) {
  3.     servo1.write(i);            
  4.     servo2.write(i);   
  5.     servo3.write(i);
  6.     servo4.write(i);        
  7.     delay(10);                     
  8.   }
  9.   for (i = 180; i > 0; i--) {
  10.     servo1.write(i);               
  11.     servo2.write(i);   
  12.     servo3.write(i);
  13.     servo4.write(i);         
  14.     delay(10);                     
  15.   }
  16. }
复制代码

工作过程

在使用一个Arduino开发板控制两台以上的伺服电机时,我们都面临着电流不足的问题。唯一的解决办法是连接一个外部电源,可以提供适量的电流额定值(本文中,我采用的是9V/2A电源)。您可以使用适配器、RPS(稳压电源设备)或优质的9V电池作为外部电源,甚至在某些情况下,您可以使用笔记本电脑的USB端口为小型伺服电机供电。要使用外部电源,您只需将Arduino的地与外部电源的地连在一起。

Controlling-Multiple-Servo-Motors-with-Arduino.jpg


使用下面给出的Arduino代码对Arduino开发板进行编程,并按照电路图所示连接所有的伺服电机,并为电机提供适当的电源。这样,所有舵机都可以同时工作,没有任何中断。


代码

本文所使用的完整代码如下: main.txt (610 Bytes, 下载次数: 98)

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 705 | 回复: 1492



手机版|

GMT+8, 2024-11-19 12:36 , Processed in 0.044529 second(s), 6 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表