如何使用Arduino控制多个伺服电机

描述

使用一个或两个带有Arduino的伺服很容易,但是如果我们想使用多个伺服电机怎么办?

在这里,我们将向您展示如何使用Arduino控制多个伺服电机。将多个伺服电机与Arduino连接似乎很容易,但是如果我们将所有伺服连接到Arduino电源引脚,那么由于没有足够的电流来驱动所有电机,它们将无法正常工作。因此,您必须为电机使用单独的电源,无论是来自某些适配器(5v 2A)还是来自优质 9v 电池。

所需材料

Arduino UNO

伺服电机

电源

面包板

连接线

威廉希尔官方网站 图

伺服电机

什么是伺服电机?

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

伺服电机有不同的形状和尺寸。伺服电机将主要有电线,一个用于正电压,另一个用于接地,最后一个用于位置设置。红线连接到电源,黑线接地,黄线连接到信号。

伺服电机

伺服电机

伺服电机是直流电机、位置控制系统、齿轮的组合。直流电机轴的位置由伺服中的控制电子设备根据PWM信号的占空比SIGNAL引脚进行调整。

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

PWM(脉宽调制)信号的频率可能因伺服电机的类型而异。这里重要的是PWM信号的占空比。根据此负载配给,控制电子设备调整轴。

如下图所示,要使轴移动到 9 点钟,打开口粮必须为 1/18.ie。在 18ms 信号中,1ms 的导通时间和 17ms 的关闭时间。

伺服电机

对于要移动到 12 点时钟的轴,信号的导通时间必须为 1.5ms,关闭时间应为 16.5ms。该比率由控制系统在伺服中解码,并据此调整位置。这里的PWM是使用ARDUINO UNO生成的。

Arduino代码解释

最后给出了用于多伺服控制的完整Arduino代码。

Arduino具有伺服电机库,它处理所有与PWM相关的东西来旋转伺服器,您只需要输入要旋转的角度,并且有功能servo1.write(angle); 它将伺服器旋转到所需的角度。

因此,这里我们从定义伺服电机的库开始。

#include

在下面的代码中,我们将所有四个伺服器初始化为 Servo1、Servo2、Servo3 和 Servo4。

Servo servo1;

Servo servo2;

Servo servo3;

Servo servo4;

然后,我们使用Arduino设置所有伺服器的输入引脚。如下面的代码所示,Servo1连接到Arduino的第3个引脚。您可以根据自己更改引脚,但请记住,它应该是PWM引脚。使用带有Arduino数字引脚的伺服是不可靠的。

void setup() {

servo1.attach(3);

servo2.attach(5);

servo3.attach(6);

servo4.attach(9);

}

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

void loop() {

for (int i = 0; i < 180; i++) {

servo1.write(i);             

servo2.write(i);    

servo3.write(i);

servo4.write(i);        

delay(10);                     

}

for (i = 180; i > 0; i--) {

servo1.write(i);               

servo2.write(i);    

servo3.write(i);

servo4.write(i);         

delay(10);                     

}

}

使用 Arduino 控制多个伺服系统工作:

在将两个以上的伺服系统与一个Arduino一起使用时,我们都面临着当前的问题。唯一的解决方案是连接具有适当额定电流的外部电源(在此项目中,我使用2A和9v电源)。对于外部电源,您可以使用适配器,RPS(稳压电源仪表)或优质的9v伏电池,您可以使用笔记本电脑USB端口为小型伺服供电。要使用外部电源,您只需将 Arduino 接地短接至外部电源接地。

伺服电机

使用下面给出的Arduino代码对Arduino进行编程,并将威廉希尔官方网站 图中所示的所有伺服电机连接到电机,并为电机提供适当的电源。因此,所有伺服器将不间断地协同工作。

#include


Servo servo1; 

Servo servo2;

Servo servo3;

Servo servo4;


int i = 0;


void setup() {

servo1.attach(3);

servo2.attach(5); 

servo3.attach(6); 

servo4.attach(9); 

}


void loop() {

for (i = 0; i < 180; i++) { 

servo1.write(i); 

servo2.write(i); 

servo3.write(i);

servo4.write(i); 

delay(10); 

}

for (i = 180; i > 0; i--) { 

servo1.write(i); 

servo2.write(i); 

servo3.write(i);

servo4.write(i); 

delay(10); 

}


}

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分