百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

用Arduino控制大电流设备的几种方法

liuian 2024-12-08 16:25 73 浏览

Arduino是广受欢迎的简单易学的单片机控制器,但它们只能直接控制小电流设备。有几种方法可以扩展Arduino的功能,使其能够驱动更大的电流负载。今天,我们一起来探讨一下。

本文翻译自科普大神DroneBotWorkshop.com文章,浅显易懂适合新手入门
译者:DIY百事

目录

1 引言

2 晶体管和MOSFET

2.1双极结型晶体管(BJT)

2.2 MOSFET

2.3 BJT与MOSFET

3 我用到的BJT和MOSFET

3.1 TIP120达灵顿晶体管

3.2 IRF520 MOSFET

3.3流行的MOSFET模块

4 Arduino上用到的晶体管

4.1基本的Arduino晶体管开关

4.2开关感性负载

5 Arduino上用到的MOSFET

5.1 Arduino +MOSFET 控制 RGB 彩色 LED灯条

6 结论


介绍

Arduino是一个微控制器,您可能已经知道。“微控制器”这个名字恰恰告诉我们,该设备的主要用途是控制事物。“微型”部分仅表示它是非常小的设备。

Arduino或任何微控制器的体积都非常小。它还具有相当小的电流功能,将其使用范围限制为仅直接控制诸如单个LED,OLED和LCD显示器之类的小型设备。

当然,这并没有阻止我们控制更大的设备,例如齿轮马达和大型步进马达。我们通过使用驱动板来获取低电流Arduino控制信号并驱动高电流电机来实现这一点。在这些情况下,驱动板为我们完成了所有繁重的工作。

我们一直在使用的驱动器板使用晶体管和MOSFET之类的器件来实现其魔力。这些是在众多应用中使用的基本电子组件,实际上,Arduino本身是单个芯片上的晶体管的集合。

今天,我们将学习如何使用这些组件来扩展Arduino设计的电流驱动能力。

晶体管和MOSFET

1947年,美国物理学家John Bardeen和Walter Brattain在新泽西州Murray Hill的Bell Labs的物理学家William Shockley的指导下工作,发明了第一个点接触晶体管。一年后,肖克利发明了第一个双极晶体管并申请了专利。

这项工作使这三个人因其对半导体的研究和对晶体管效应的发现而获得了1956年的诺贝尔物理学奖。他们的发明改变了世界。

晶体管实际上是当今创建的每个电子设备的基础。我们知道和喜爱的功能强大的台式计算机和紧凑型智能手机的存在,要归功于蚀刻在硅芯片上的微型晶体管。没有晶体管,医学,太空研究甚至互联网本身的进步都不会实现。

晶体管取代了真空管,它们可以用作放大器或电子开关。我们将利用后者的功能。

双极结型晶体管(BJT)

“标准”晶体管是双极结型晶体管或BJT。这些有时称为双极晶体管。

BJT有以下三个极:

  • 基极
  • 发射极
  • 集电极

BJT有两种类型-NPN和PNP。

BJT是电流驱动的,也就是说,当电流在基极和发射极之间流动时,它会导通。

足够的电流流入基极将导通晶体管,并使电流在发射极和集电极之间流动。

当BJT接通时,其行为非常类似于二极管。从某种意义上讲,您可以将其视为可开关二极管。

场效应管

金属氧化物半导体场效应晶体管(MOSFET)在许多方面都是对BJT的改进。这是一种使用低电压实现开关功能的高阻抗设备。

与BJT一样,MOSFET具有三个极:

  • Gate栅极
  • Drain漏极
  • Source源极

MOSFET有两种类型,N沟道和P沟道。

该图说明了电路中的MOSFET,其中低压源连接到栅极。

当向栅极施加足够的电压时,MOSFET导通。

这允许电流在漏极和源极之间流动。MOSFET导通时,其作用就像一个非常低值的电阻。

由于MOSFET的导通电阻非常低,因此它们不会消耗太多功率,因此即使没有散热片,它们也可以避免高温。

BJT与MOSFET

那么,两种类型的晶体管中哪一种最适合您的设计?

答案并不总是那么简单,因为双极结型晶体管(BJT)和MOSFET都有各自的优缺点。

此图表概述了其中一些差异:

如您所见,在大多数应用中,MOSFET与BJT相比具有一些明显的优势。但是在某些情况下,例如在放大器的设计中,或者需要节约成本时,双极结型晶体管可能是更好的选择。

常用的晶体管和MOSFET

这是我们将在实验中使用的元件。它们都是电子商店里常见的元件。您可以用其他类似规格的元件代替。

TIP120达灵顿晶体管

TIP120是NPN达林顿功率晶体管。它可以以8安培的峰值电流和5安培的常态工作电流驱动高达60伏的负载。

达林顿晶体管由同一封装中的一对晶体管组成。第一晶体管的发射极与第二晶体管的基极连接,并且两个晶体管的集电极连接在一起以形成达林顿对。

这种布置提高了晶体管的电流增益和额定电流。

以下是TIP120的主要规格:

  • NPN中功率达林顿晶体管
  • 高直流电流增益(hFE),通常为1000
  • 集电极连续电流(IC)为5A
  • 集电极-发射极电压(VCE)为60V
  • 集电极-基极电压(VCB)为60V
  • 发射极-基极电压(VBE)为5V
  • 静态电流(IB)为120mA
  • 峰值负载电流为8A
  • 采用To-220封装

IRF520 MOSFET

IRF520是功率MOSFET, 具有9.2A集电极电流和100V的击穿电压。该MOSFET的栅极阈值电压低至4伏,因此通常与Arduino等微控制器一起使用,以控制大电流负载。

以下是IRF520的主要规格:

  • N沟道功率MOSFET
  • 常态工作漏极电流(ID):9.2A
  • 漏极至源极击穿电压:100V
  • 漏源电阻(RDS)为0.27欧姆
  • 栅极阈值电压(VGS-th)为4V(最大)
  • 上升时间和下降时间分别为30nS和20nS
  • 由于其低阈值电压,它通常与Arduino一起使用。
  • 采用To-220封装

流行的MOSFET模块

我选择将IRF520用于MOSFET实验的原因之一是它可以作为低成本模块使用。该模块具有一些支持组件,以及用于控制电源和负载的螺钉端子。它还具有一个3针连接器,用于连接Arduino或其他微控制器。

我将在MOSFET示例中使用这些模块,但您也可以选择使用分立的IRF520。我将在接线图中向您展示两种方式。

晶体管在Arduino中的应用

在前几个实验中,我们将使用TIP120功率达灵顿BJT。如果没有TIP120,则可以用类似规格的BJT代替。

我将在实验中使用6V电池和负载,但您可以使用任何直流电源并负载40V以下的电压。不要尝试使用您将这些方法来控制交流电压,因为这些都是严格的直流电路。

基本的Arduino晶体管开关

第一个实验是基本的开关。这是一个简单的连接和代码,它说明了用晶体管和Arduino控制负载的简单性。

对于大电流负载,我使用的是6伏白炽灯泡。如果愿意,可以选择其他阻性负载。

下面是接线图:

请注意,除了Arduino,TIP120,灯泡和电池外,您还需要一个按钮开关和几个电阻。2.2k电阻限制流入晶体管基极的电流,而10k电阻器则是开关的上拉电阻。

以下是Arduino代码:

 /*
  Transistor Switch Demonstration
  transistor-switch-demo.ino
  Demonstrates use of BJT to switch 6-volt incandescent lamp
  Uses pushbutton for input
 
  DroneBot Workshop 2019
  https://dronebotworkshop.com
*/
 
// Output pin to transistor base
int outPin = 9;
 
// Input pin from pushbutton
int buttonPin = 3;
 
// Pushbutton value
int buttonVal;
 
void setup()
{
    // Setup transistor pin as output
    pinMode(outPin, OUTPUT);
    
    // Setup pushbutton pin as input
    pinMode(buttonPin, INPUT);
    
    // Make sure transistor is off
    digitalWrite(outPin, LOW);
 
}
 
void loop()
{
 
  //Read pushbutton input
  buttonVal = digitalRead(buttonPin);
  
  //Check button position
  
  if (buttonVal == HIGH) {
    // Button is not pressed, turn off lamp
    digitalWrite(outPin, LOW);
    delay(20);
  } else {
    // Button is pressed, turn on lamp for 5 seconds
    digitalWrite(outPin, HIGH);
    delay(5000);
    digitalWrite(outPin, LOW);
    }
     
}

我们的控制实验的代码非常简单。其目的是在按下按钮时点亮灯泡5秒钟。

我们首先定义变量来表示晶体管的输出引脚和开关的输入引脚。我们还定义了一个变量来保存按钮值。

在setup中,我们设置输入和输出,然后向输出引脚写入LOW,以确保我们在晶体管关闭的情况下进入循环。

在loop循环中,我们读取输入引脚并将其值用作按钮值。如果它为高电平,则尚未按下按钮,并且10k电阻器将输入拉高至5伏。

如果按下该按钮,则输入将接地,并且该值将为LOW。我们通过将输出设置为高电平来打开灯,该输出将电流通过2.2k电阻器传递到晶体管基极。

我们希望灯光保持一会儿,所以我们增加了5秒的延迟。然后,我们将输出设置为LOW以关闭灯泡,然后返回并完成循环。

加载代码并观察结果。您可以根据需要增加或减少延迟。

开关感性负载

我们刚才在晶体管和Arduino上看到的布置对于阻性负载效果很好,但是对于电感性负载,还有另一个考虑因素。

您可能会问什么是感性负载?

感性负载是指使电流通过线圈的任何负载。例如电动机,继电器和螺线管。

当电流通过线圈时,会产生磁场,并且在相反的方向上会产生小电流。有时称为“反向EMF”或“背压”。

诸如电动机或螺线管之类的设备在运动时可能会产生较大的反电动势。反向电压会损坏晶体管,因此需要对其进行保护。

防止反向EMF损坏的最常见方法是使用以“相反”极性接线的二极管。这吸收了反向电压。

在我们的实验中,我们将使用小型直流电动机形式的感应负载。

注意电机引线两端的二极管,我使用了一个非常常见的设备IN4004整流二极管。

其余的接线非常简单。我再次使用6伏电池为实验的高电流侧供电,并且我们使用2.2k电阻来限制流向晶体管基极的电流。

我们还添加了一个电位计,以便我们可以控制电机速度。

这是我们将用于电机控制的代码:

 /*
  Transistor Inductive Control Demonstration
  transistor-induct-control-demo.ino
  Demonstrates use of BJT to control a 6-volt DC motor
  Uses potentiometer for input
 
  DroneBot Workshop 2019
  https://dronebotworkshop.com
*/
 
// Output pin to transistor base
int outPin = 9;
 
// Input from potentiometer
int potIn = A0;
 
// Variable to hold speed value
int speedVal;
 
void setup()
{
    // Setup transistor pin as output
    pinMode(outPin, OUTPUT);
 }
 
void loop()
{
    // Read values from potentiometer
  speedVal = analogRead(potIn);
  
  // Map value to range of 0-255
  speedVal = map(speedVal, 0, 1023, 0, 255);
  
  // Write PWM to transistor
  analogWrite(outPin, speedVal);
  
  delay(20);
  }

这也是一个简单的代码,其目的是读取电位计的位置并相应地设置电动机速度。

我们首先定义到晶体管的输出以及电位计使用的模拟输入引脚。我们还定义了一个变量t来保存电动机速度,

在setup代码段,我们要做的就是将晶体管连接定义为输出。

在loop中,我们读取电位计的位置,然后使用map命令将其转换为0-255的范围。然后,我们使用analogWrite命令将PWM信号发送到我们的晶体管。这会打开和关闭晶体管,为我们的电机供电。

加载代码并通过控制电动机速度进行实验。因为我们使用的是PWM,所以即使在较慢的速度下,电动机也应具有良好的转矩。

如果您需要控制小型直流电动机的速度并且不需要反转它,那么这实际上是一个实用的电路。请注意,晶体管有0.7V的压降。

MOSFET在Arduino上的应用

与BJT相比,MOSFET具有许多优势。它们的成本更高,但是只要多花一些钱,就可以将它们连接到逻辑电路上,从而获得更好的功耗和简便性。

我们将在实验中使用IRF520 N沟道功率MOSFET。我将使用一种流行的“ MOSFET模块”,该模块可以简化将外部设备连接到微控制器的过程,但是您也可以只使用分立的MOSFET。

Arduino MOSFET RGB LED灯条驱动器

我们的实验将涉及使用Arduino控制5米长的RGB LED灯条。我们将有三个电位器来控制所有三种颜色的强度,使我们能够模拟出彩虹的颜色。

您将需要三个MOSFET或MOSFET模块进行连接,以及一个12伏电源,该电源具有足够的电流来为LED灯带供电,这可能会消耗数安培。

我在设计中使用了MOSFET模块,但是如果要使用分立MOSFET,则可以使用此图将两者等效。

请注意,模块上的VCC引脚未连接任何东西。另外,Vin和V +引脚只是连在一起。

该图未显示额外的1k电阻和模块用来在MOSFET栅极输入上显示活动的LED。

这是接线图。

回想起来,您不需要从电源正极到模块V +的连接,它们实际上并没有连接到任何地方。仅需要与LED灯带正极公共端的连接。

连接非常简单,本质上我们将三个电位计连接到三个模拟输入,将三个MOSFET模块连接到能够进行PWM的输出引脚。LED灯条通过MOSFET输出连接到电源。

这是我们将用来完成所有工作的代码:

/*
  MOSFET RGB LED Strip Demonstration
  mosfet-rgb-led-demo.ino
  Demonstrates use of MOSFETs to drive RGB LED Strip
  Uses three potentiometers for input
 
  DroneBot Workshop 2019
  https://dronebotworkshop.com
*/
 
// Output pins to MOSFETs
 
int redPin = 3;
int greenPin = 5;
int bluePin = 6;
 
// Define Potentiometer Inputs
 
int redControl = A0;
int greenControl = A1;
int blueControl = A2;
 
// Variables for Values
 
int redVal;
int greenVal;
int blueVal;
 
void setup()
{
  // Setup MOSFET pins as outputs
  pinMode(redPin, OUTPUT);
  pinMode(greenPin, OUTPUT);
  pinMode(bluePin, OUTPUT);
 
  // Setup Serial Monitor
  Serial.begin(9600);
}
 
void loop() {
 
  // Read values from potentiometers
  redVal = analogRead(redControl);
  greenVal = analogRead(greenControl);
  blueVal = analogRead(blueControl);
 
  // Map values to range of 0-255
  redVal = map(redVal, 0, 1023, 0, 255);
  greenVal = map(greenVal, 0, 1023, 0, 255);
  blueVal = map(blueVal, 0, 1023, 0, 255);
 
  // Write PWM to pins
  analogWrite(redPin, redVal);
  analogWrite(greenPin, greenVal);
  analogWrite(bluePin, blueVal);
 
  // Write Color values to Serial Monitor
  Serial.print("Red: ");
  Serial.print(redVal);
  Serial.print(" - Green: ");
  Serial.print(greenVal);
  Serial.print(" - Blue: ");
  Serial.println(blueVal);
 
  // Add a slight delay
  delay(20);
 
}

另一个简单的代码,实际上与我们用BJT控制电机的代码非常相似。

我们定义了将用于MOSFET输出的引脚,以及三个电位计使用的模拟引脚。我们还定义了三个变量来保存三个颜色值。

在设置中,我们将连接到MOSFET的引脚设置为输出。我们还设置了串行监视器,这是可选的,仅用于故障排除。

在循环中,我们读取三个电位器,将它们的值转换为0-255的范围,然后将PWM发送到三个MOSFET开关以控制我们的LED。这很简单。

一旦一切都准备就绪,请尝试一下。如果您无法正常工作,请查看串行监视器,以查看从电位计获得的值。

这是一个丰富多彩的实验!

结论

通过使用BJT和MOSFET,我们可以扩展Arduino项目的控制能力。我们不再局限于40ma以下的设备。

我在这里向您展示的技术可用于各种直流负载,包括感性和非感性。但是它们不能用于控制交流设备,因此不要尝试。还有其他控制交流设备的方法,我们将在以后的文章和视频中介绍它们。

祝大家玩得开心!

相关推荐

驱动网卡(怎么从新驱动网卡)
驱动网卡(怎么从新驱动网卡)

网卡一般是指为电脑主机提供有线无线网络功能的适配器。而网卡驱动指的就是电脑连接识别这些网卡型号的桥梁。网卡只有打上了网卡驱动才能正常使用。并不是说所有的网卡一插到电脑上面就能进行数据传输了,他都需要里面芯片组的驱动文件才能支持他进行数据传输...

2026-01-30 00:37 liuian

win10更新助手装系统(微软win10更新助手)

1、点击首页“系统升级”的按钮,给出弹框,告诉用户需要上传IMEI码才能使用升级服务。同时给出同意和取消按钮。华为手机助手2、点击同意,则进入到“系统升级”功能华为手机助手华为手机助手3、在检测界面,...

windows11专业版密钥最新(windows11专业版激活码永久)

 Windows11专业版的正版密钥,我们是对windows的激活所必备的工具。该密钥我们可以通过微软商城或者通过计算机的硬件供应商去购买获得。获得了windows11专业版的正版密钥后,我...

手机删过的软件恢复(手机删除过的软件怎么恢复)
手机删过的软件恢复(手机删除过的软件怎么恢复)

操作步骤:1、首先,我们需要先打开手机。然后在许多图标中找到带有[文件管理]文本的图标,然后单击“文件管理”进入页面。2、进入页面后,我们将在顶部看到一行文本:手机,最新信息,文档,视频,图片,音乐,收藏,最后是我们正在寻找的[更多],单击...

2026-01-29 23:55 liuian

一键ghost手动备份系统步骤(一键ghost 备份)

  步骤1、首先把装有一键GHOST装系统的U盘插在电脑上,然后打开电脑马上按F2或DEL键入BIOS界面,然后就选择BOOT打USDHDD模式选择好,然后按F10键保存,电脑就会马上重启。  步骤...

怎么创建局域网(怎么创建局域网打游戏)

  1、购买路由器一台。进入路由器把dhcp功能打开  2、购买一台交换机。从路由器lan端口拉出一条网线查到交换机的任意一个端口上。  3、两台以上电脑。从交换机任意端口拉出网线插到电脑上(电脑设置...

精灵驱动器官方下载(精灵驱动手机版下载)

是的。驱动精灵是一款集驱动管理和硬件检测于一体的、专业级的驱动管理和维护工具。驱动精灵为用户提供驱动备份、恢复、安装、删除、在线更新等实用功能。1、全新驱动精灵2012引擎,大幅提升硬件和驱动辨识能力...

一键还原系统步骤(一键还原系统有哪些)

1、首先需要下载安装一下Windows一键还原程序,在安装程序窗口中,点击“下一步”,弹出“用户许可协议”窗口,选择“我同意该许可协议的条款”,并点击“下一步”。  2、在弹出的“准备安装”窗口中,可...

电脑加速器哪个好(电脑加速器哪款好)

我认为pp加速器最好用,飞速土豆太懒,急速酷六根本不工作。pp加速器什么网页都加速,太任劳任怨了!以上是个人观点,具体性能请自己试。ps:我家电脑性能很好。迅游加速盒子是可以加速电脑的。因为有过之...

任何u盘都可以做启动盘吗(u盘必须做成启动盘才能装系统吗)

是的,需要注意,U盘的大小要在4G以上,最好是8G以上,因为启动盘里面需要装系统,内存小的话,不能用来安装系统。内存卡或者U盘或者移动硬盘都可以用来做启动盘安装系统。普通的U盘就可以,不过最好U盘...

u盘怎么恢复文件(u盘文件恢复的方法)

开360安全卫士,点击上面的“功能大全”。点击文件恢复然后点击“数据”下的“文件恢复”功能。选择驱动接着选择需要恢复的驱动,选择接入的U盘。点击开始扫描选好就点击中间的“开始扫描”,开始扫描U盘数据。...

系统虚拟内存太低怎么办(系统虚拟内存占用过高什么原因)

1.检查系统虚拟内存使用情况,如果发现有大量的空闲内存,可以尝试释放一些不必要的进程,以释放内存空间。2.如果系统虚拟内存使用率较高,可以尝试增加系统虚拟内存的大小,以便更多的应用程序可以使用更多...

剪贴板权限设置方法(剪贴板访问权限)
剪贴板权限设置方法(剪贴板访问权限)

1、首先打开iphone手机,触碰并按住单词或图像直到显示选择选项。2、其次,然后选取“拷贝”或“剪贴板”。3、勾选需要的“权限”,最后选择开启,即可完成苹果剪贴板权限设置。仅参考1.打开苹果手机设置按钮,点击【通用】。2.点击【键盘】,再...

2026-01-29 21:37 liuian

平板系统重装大师(平板重装win系统)

如果你的平板开不了机,但可以连接上电脑,那就能好办,楼主下载安装个平板刷机王到你的个人电脑上,然后连接你的平板,平板刷机王会自动识别你的平板,平板刷机王上有你平板的我刷机包,楼主点击下载一个,下载完成...

联想官网售后服务网点(联想官网售后服务热线)

联想3c服务中心是联想旗下的官方售后,是基于互联网O2O模式开发的全新服务平台。可以为终端用户提供多品牌手机、电脑以及其他3C类产品的维修、保养和保险服务。根据客户需求层次,联想服务针对个人及家庭客户...