本文翻译自科普大神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设计的电流驱动能力。
晶体管和MOSFET1947年,美国物理学家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 MOSFETIRF520是功率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 Demonstrationtransistor-switch-demo.inoDemonstrates use of BJT to switch 6-volt incandescent lampUses pushbutton for inputDroneBot Workshop 2019https://dronebotworkshop.com/// Output pin to transistor baseint outPin = 9;// Input pin from pushbuttonint buttonPin = 3;// Pushbutton valueint buttonVal;void setup(){// Setup transistor pin as outputpinMode(outPin, OUTPUT);// Setup pushbutton pin as inputpinMode(buttonPin, INPUT);// Make sure transistor is offdigitalWrite(outPin, LOW);}void loop(){//Read pushbutton inputbuttonVal = digitalRead(buttonPin);//Check button positionif (buttonVal == HIGH) {// Button is not pressed, turn off lampdigitalWrite(outPin, LOW);delay(20);} else {// Button is pressed, turn on lamp for 5 secondsdigitalWrite(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 Demonstrationtransistor-induct-control-demo.inoDemonstrates use of BJT to control a 6-volt DC motorUses potentiometer for inputDroneBot Workshop 2019https://dronebotworkshop.com/// Output pin to transistor baseint outPin = 9;// Input from potentiometerint potIn = A0;// Variable to hold speed valueint speedVal;void setup(){// Setup transistor pin as outputpinMode(outPin, OUTPUT);}void loop(){// Read values from potentiometerspeedVal = analogRead(potIn);// Map value to range of 0-255speedVal = map(speedVal, 0, 1023, 0, 255);// Write PWM to transistoranalogWrite(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 Demonstrationmosfet-rgb-led-demo.inoDemonstrates use of MOSFETs to drive RGB LED StripUses three potentiometers for inputDroneBot Workshop 2019https://dronebotworkshop.com/// Output pins to MOSFETsint redPin = 3;int greenPin = 5;int bluePin = 6;// Define Potentiometer Inputsint redControl = A0;int greenControl = A1;int blueControl = A2;// Variables for Valuesint redVal;int greenVal;int blueVal;void setup(){// Setup MOSFET pins as outputspinMode(redPin, OUTPUT);pinMode(greenPin, OUTPUT);pinMode(bluePin, OUTPUT);// Setup Serial MonitorSerial.begin(9600);}void loop() {// Read values from potentiometersredVal = analogRead(redControl);greenVal = analogRead(greenControl);blueVal = analogRead(blueControl);// Map values to range of 0-255redVal = map(redVal, 0, 1023, 0, 255);greenVal = map(greenVal, 0, 1023, 0, 255);blueVal = map(blueVal, 0, 1023, 0, 255);// Write PWM to pinsanalogWrite(redPin, redVal);analogWrite(greenPin, greenVal);analogWrite(bluePin, blueVal);// Write Color values to Serial MonitorSerial.print("Red: ");Serial.print(redVal);Serial.print(" - Green: ");Serial.print(greenVal);Serial.print(" - Blue: ");Serial.println(blueVal);// Add a slight delaydelay(20);}
另一个大略的代码,实际上与我们用BJT掌握电机的代码非常相似。
我们定义了将用于MOSFET输出的引脚,以及三个电位计利用的仿照引脚。我们还定义了三个变量来保存三个颜色值。
在设置中,我们将连接到MOSFET的引脚设置为输出。我们还设置了串行监视器,这是可选的,仅用于故障打消。
在循环中,我们读取三个电位器,将它们的值转换为0-255的范围,然后将PWM发送到三个MOSFET开关以掌握我们的LED。这很大略。
一旦统统都准备就绪,请考试测验一下。如果您无法正常事情,请查看串行监视器,以查看从电位计得到的值。
这是一个丰富多彩的实验!
通过利用BJT和MOSFET,我们可以扩展Arduino项目的掌握能力。我们不再局限于40ma以下的设备。
我在这里向您展示的技能可用于各种直流负载,包括感性和非感性。但是它们不能用于掌握互换设备,因此不要考试测验。还有其他掌握互换设备的方法,我们将在往后的文章和视频中先容它们。
祝大家玩得愉快!