如何使用Arduino和继电器控制直流电机的方向和速度

控制/MCU

1818人已加入

描述

在这个项目中,我们使用Arduino和两个继电器控制24v大电流电机的方向和速度。该电路不需要电源开关,只需两个按钮和电位计即可控制直流电机的方向和速度。一个按钮将顺时针旋转电机,另一个按钮将逆时针旋转电机。需要一个n沟道MOSFET来控制电机的速度。继电器用于切换电机的方向。

所需组件:

Arduino Uno

两个12v继电器(也可以使用5v继电器)

两个晶体管;公元前547年

两个按钮

红外热镀膜仪540N

10k 电阻器

24 伏电源

10K电位器

三个二极管 1N4007

连接线

电路图及说明:

该双向电机控制项目的电路图如下图所示。根据它进行连接:

继电器

将两个继电器的常闭端子连接到电池的正极端子。

将两个继电器的常开端子连接到MOSFET的漏极。

将MOSFET的源连接到电池的负极端子和Arduino UNO的接地引脚。

Arduino的PWM引脚6的栅极端子。

从栅极到源极连接 10k 电阻,从源极到漏极连接 1N4007 二极管。

将电机连接到继电器的中间端子之间。

在剩下的两个端子中,一个连接到Arduino Uno的Vin引脚,另一个连接到晶体管的集电极端子(用于每个继电器)。

将两个晶体管的发射极端子连接到Arduino的GND引脚。

Arduino的数字引脚2和3,每个都与按钮串联,进入晶体管的底部。

如图所示在继电器上连接二极管。

将电位计的终端端子分别连接到 Arduino 的 5v 引脚和 Gnd 引脚。和游标端子到A0引脚。

** 如果您有两节独立的 12 V 电池,请将一个电池的正极端子连接到另一个电池的负极,并将其余两个端子用作正极和负极。

继电器

继电器

晶体管的用途:
Arduino的数字引脚无法提供打开普通5v继电器所需的电流量。此外,我们在此项目中使用12v继电器。Arduino的Vin引脚不能轻易地为两个继电器提供如此大的电流。因此,晶体管用于将电流从Arduino的Vin引脚传导到继电器,继电器使用从数字引脚连接到晶体管基端子的按钮进行控制。

Arduino的目的:

提供打开继电器所需的电流量。

打开晶体管。

使用编程控制带电位计的直流电机的速度。在最后检查完整的Arduino代码。

MOSFET的用途:
MOSFET是控制电机速度所必需的。MOSFET在高频电压下接通和关闭,由于电机与MOSFET的漏极串联,因此电压的PWM值决定了电机的速度。

当前计算:

继电器线圈的电阻是使用万用表测量的,结果是 = 400 欧姆

Arduino 的 VIN 引脚给出 = 12v

所以电流需要打开继电器 = 12/400 安培 = 30 mA

如果两个继电器都通电,电流= 30*2=60 mA

**Arduino的Vin引脚可以提供最大电流= 200mA。

因此,Arduino中不存在过流问题。

Arduino控制双向电机的工作:

这种2路电机控制电路的操作很简单。Arduino的两个引脚(2,3)将始终保持高电平。

继电器

未按下按钮时:

在这种情况下,没有电流流向晶体管的基极,因此晶体管保持关闭状态(就像一个开路开关),因此没有电流从Arduino的Vin引脚流向继电器线圈。

按下一个按钮时:

在这种情况下,一些电流通过按下的按钮流向晶体管的基极,将其打开。现在,电流很容易通过该晶体管从Vin引脚流向继电器线圈,该晶体管打开该继电器(继电器A),并且该继电器的开关被抛出到NO位置。而其他继电器(继电器 B)仍处于常闭位置。因此,电流通过电机从电池的正极端子流向负极端子,即电流从继电器A流向继电器B。这会导致电机顺时针旋转。

按下其他按钮时:

这次另一个继电器打开。现在,电流很容易通过晶体管从Vin引脚流向继电器线圈,晶体管打开该继电器(继电器B),并将该继电器的开关抛至NO位置。而另一个继电器(继电器 A)仍处于常闭位置。因此,电流通过电机从电池的正极端子流向电池的负极。但这次电流从继电器B流向继电器A。这导致电机逆时针旋转

.

当同时按下两个按钮时:

在这种情况下,电流流向两个晶体管的基极,因此两个晶体管都打开(就像一个闭合开关)。因此,两个继电器现在都处于 NO 位置。因此,电流不会通过电机从电池的正极端子流向负极,因此不会旋转。

控制直流电机的速度:

MOSFET的栅极连接到Arduino UNO的PWM引脚6。MOSFET在高PWM频率电压下接通和关闭,并且由于电机与MOSFET的漏极串联,因此PWM电压值决定了电机的速度。现在,电位计的游标端子和Gnd之间的电压决定了引脚6上的PWM电压,当游标端子旋转时,模拟引脚A0上的电压发生变化,导致电机速度的变化。

int x;

int y;

void setup() 

{

pinMode(2,OUTPUT);

pinMode(3,OUTPUT);

pinMode(6,OUTPUT);

pinMode(A0,INPUT);

}


void loop()

{

x=analogRead(A0);

y=map(x,0,1023,0,255);

analogWrite(6,y);

digitalWrite(2,HIGH);

digitalWrite(3,HIGH);

}


 

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

全部0条评论

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

×
20
完善资料,
赚取积分