控制/MCU
在这个项目中,我们使用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);
}
全部0条评论
快来发表一下你的评论吧 !