功率器件如bts和mosfet与Arduino输出的接口是一个关键配置,允许通过Arduino的低功率输出切换高功率负载。
在这篇文章中,我们详细讨论了使用或连接晶体管如bts和mosfet与任何微控制器或Arduino的正确方法。
这样的阶段也被称为“电平移位器”因为这一阶段将相关输出参数的电压水平从一个较低的点改变到一个较高的点。例如,这里的电平移位是从Arduino 5V输出到MOSFET 12V输出的选定的12V负载。
无论Arduino的编程或编码有多好,如果它没有正确地与晶体管或外部硬件集成,可能会导致系统运行效率低下,甚至损坏涉及系统的组件。
因此,了解和学习使用外部有源元件(如MOSFET和BJT)和微控制器的正确方法变得极其重要,以便最终结果是有效、平滑和高效的。
在我们讨论晶体管与Arduino的接口方法之前,了解BJT和MOSFET的基本特性和工作原理是非常有用的。
晶体管的电气特性(双极)
BJT代表双极结晶体管。
BJT的基本功能是根据外部电压触发器接通附加负载。与输入触发器相比,负载的电流更大。
因此,BJT的基本功能是在低电流输入触发器的响应下接通高电流负载。
从技术上讲,这也被称为晶体管的偏压,这意味着使用电流和电压来操作晶体管以实现预期功能,这种偏置必须以最佳方式进行。
bts有3个引线或3个引脚,即基极、发射极、集电极。
底座引脚用于馈电外部输入触发器,以小电压和小电流的形式。
发射器引脚始终连接到接地或负极电源线。
集电极引脚通过正电源连接到负载上。
BJT有两种极性,NPN和PNP。如上所述,NPN和PNP的基本引脚配置相同,但直流电源极性相反。
的BJT的pinouts可以被理解通过以下图像:
在上图中,我们可以看到NPN和PNP晶体管(bts)的基本pinout配置。对于NPN,发射极成为接地线,并与负电源连接。
通常,当在直流电路中使用“接地”一词时,我们假设它是负电源线。
然而,对于晶体管而言,与发射极相关联的地线参考其基极和集电极电压,发射极“地”不一定意味着负电源线。
是的,对于NPN BJT,接地可能是负电源线,但对于PNP晶体管如上图所示,“接地”总是指正极电源线。
两种bts的ON/OFF开关功能基本相同,只是极性发生了变化。
由于BJT的发射极是电流通过基极和集电极进入的“出口”通道,因此必须将其“接地”至电源线,该电源线应与基极/集电极输入端使用的电压相反。否则电路将无法完成。
对于NPN BJT,基极和集电极输入与正触发或开关电压相关,因此发射极必须参考负线路。
这确保了进入基极和集电极的正电压能够通过发射极到达负电压线并完成电路。
PNP型是机器,基极和集电极与负电压输入相关联,因此自然PNP型的发射器必须引用积极的线,这样积极的供给可以通过发射极输入并完成其基极和集电极的旅程。
注意,NPN的电流是从基极/集电极流向发射极的,而PNP的电流是从发射极流向基极/集电极的。
在这两种情况下,目标都是通过BJT底部的一个小电压输入来接通集电极负载,只是极性改变而已。
以下模拟显示了基本操作:
在上面的模拟中,只要按下按钮,外部电压输入就会进入BJT的基极,并通过发射极到达地线。
当这种情况发生时,BJT内部的集电极/发射极通道打开,并允许正电源从顶部进入灯泡,并通过发射极到地,接通灯泡(负载)。
按下按钮时,两种切换几乎同时发生。
这里的发射器引脚成为输入馈线(基极和集电极)的公共“出口”引脚。
发射极供电线路成为输入电源触发器和负载的公共接地线。
这意味着,与BJT发射极连接的电源线也必须与外部触发源的接地和负载严格连接。
为什么我们在BJT的底部使用电阻器
BJT的底座设计用于低功率输入,该引脚不能接收大电流输入,因此我们使用了电阻器,以确保不允许大电流进入底座。
电阻器的基本功能是根据负载规格将电流限制在正确的规定值。
请注意对于bts,这个电阻的尺寸必须根据集电极侧负载电流。
为什么?
因为BJT是电流相关的“开关”。
也就是说,基极电流需要根据集电极侧的负载电流规格进行增减或调整。
但是BJT底部所需的开关电压可以低至0.6V或0.7V。也就是说,BJT集电极负载可以以低至1V的电压通过BJT的基极/发射极开启。
下面是计算基本电阻的基本公式:
R = (Us - 0.6)Hfe /负载电流,
式中,R=晶体管的基极电阻,
Us =源电压或基电阻的触发电压,
Hfe =晶体管的正向电流增益(可从BJT的数据表中找到)。
虽然这个公式看起来很简洁,但并不总是绝对需要如此精确地配置基电阻。
这仅仅是因为,BJT基本规格具有宽公差范围,并且可以轻松容忍电阻值的大差异。
例如,连接继电器由于线圈电阻为30mA,该公式可以在12V电源输入下为BC547提供56K的电阻值……但我通常更喜欢使用10K,而且它工作完美。
然而,如果你没有遵循最佳规则,结果可能会不好,对吗?
从技术上讲,这是有道理的,但与花费在计算上的精力相比,损失是如此之小,可以忽略不计。
例如,使用10K而不是56K可能会迫使晶体管以稍微多一点的基极电流工作,导致它稍微热一些,可能会高一些……这一点都不重要。
如何连接BJT与Arduino
好了,现在让我们来看看实际情况。
由于到目前为止,我们已经全面了解了BJT需要如何在其3个引脚上进行偏置和配置,因此我们可以快速掌握其与任何微控制器(如Arduino)接口的细节。
连接BJT和Arduino的主要目的通常是打开采集器侧的负载或某些参数,以响应Arduino输出脚中的一个编程输出。
这里,BJT底座引脚的触发输入应该来自Arduino。这意味着基电阻的末端只需要连接Arduino的相关输出,以及带有负载或任何预期外部参数的BJT的收集器。
由于BJT的有效开关几乎不需要0.7V到1V,因此Arduino输出引脚的5V完全足以驱动BJT并运行合理负载。
配置示例如下图所示:
在这幅图中,我们可以看到Arduino是如何通过BJT驱动阶段以继电器的形式操作小负载的。继电器线圈成为集电极负载,而来自选定Arduino输出引脚的信号充当BJT基座的输入开关信号。
虽然,继电器成为通过晶体管驱动器操作重负载的最佳选择,但当机械开关成为一个不良因素时,升级bts成为操作大电流直流负载的更好选择,如下所示。
在上述示例中,可以看到达林顿晶体管网络,配置为在不依赖继电器的情况下处理指示的高电流100瓦负载。这允许在干扰最小的情况下无缝切换LED,确保所有参数具有较长的工作寿命。
现在让我们继续,看看如何配置mosfet Arduino
MOSFET的电学特性
使用带有Arduino的mosfet的目的通常与上述BJT类似。
然而,由于通常场效应管的设计与bts相比,它们可以有效地处理更高的电流规格,这些主要用于切换高功率负载。
在我们理解mosfet与Arduino的接口之前,了解一下基本原理会很有趣BJT与MOSFET的区别
在我们之前的讨论中,我们理解这一点bject是当前依赖的设备,因为它们的基开关电流依赖于集电极负载电流。更高的负载电流将需要更高的基电流,反之亦然。
对于mosfet,这是不正确的,换句话说,等效于BJT基极的mosfet栅极需要最小的电流来开启,而不管漏极电流如何(mosfet的漏极引脚等效于BJT的集电极引脚)。
说到这里,虽然电流不是决定mosfet门开关的因素,电压是多少。
因此,MOSFET被认为是电压依赖型器件
mosfet产生正常偏置所需的最低电压为5V或9V, 12v是mosfet完全开启的最优范围。
因此,我们可以假设,为了打开mosfet,并在其漏极上施加负载,可以在其栅极上使用10V电源,以获得最佳结果。
mosfet和bject的等效引脚
下图显示了MOSFET和BJT的互补引脚。
基极对应于栅极集电极对应于漏极发射极对应于源极。
Mosfet栅极应使用什么电阻器
从我们之前的教程中,我们了解到BJT底部的电阻器是至关重要的,没有它,BJT可能会立即损坏。
对于MOSFET,这可能不太相关,因为MOSFET不会受到其栅极电流差的影响,相反,更高的电压可能被认为是危险的。通常,任何高于20V的电压都可能对MOSFET栅极不利,但电流可能无关紧要。
因此,栅极处的电阻器不相关,因为电阻器用于限制电流,并且mosfet栅极不依赖于电流。
也就是说,mosfet是非常容易受到突然的波动和瞬变的影响在他们的门口,与bts相比。
因此,通常在MOSFET的栅极处首选低值电阻器,以确保没有突然的电压尖峰能够通过MOSFET栅极并在内部将其撕裂。
通常10至50欧姆之间的任何电阻器可用于MOSFET栅极,以保护其栅极免受意外电压尖峰的影响。
将MOSFET与Arduino接口
如上所述,一个mosfet需要大约10V到12V来正确地开关ON,但是由于Arduinos工作于5V,它的输出不能直接配置一个mosfet。
由于Arduino使用5V电源运行,其所有输出设计为产生5V作为逻辑高电源信号。尽管该5V电压可能具有开启MOSFET的能力,但它可能会导致设备的低效切换和加热问题。
为了有效的MOSFET开关,并将Arduino输出的5V转换为12V信号,可以配置一个中间缓冲级,如下图所示:
在图中,可以看到MOSFET配置有两个BJT缓冲级,允许MOSFET使用来自电源的12V电压,并有效地打开自身和负载。
这里使用了两个BJT,因为单个BJT会导致MOSFET对每个正向Arduino信号产生相反的传导。
假设使用一个BJT,则当BJT在Arduino正信号下打开时,mosfet将关闭,因为其栅极将由BJT集电极接地,负载将在Arduino关闭时打开。
基本上,一个BJT将反转mosfet栅极的Arduino信号,从而产生相反的开关响应。
为了纠正这种情况,我们使用了两个BJT,以便第二个BJT将响应反向,并允许mosfet仅对来自Arduino的每个正信号进行ON开关。
最后的想法
到目前为止,您应该已经全面了解了用微控制器或Arduino连接BJT和MOSFET的正确方法。
你可能已经注意到,我们主要使用NPN bts和n沟道mosfet进行集成,而避免使用PNP和p沟道器件。这是因为NPN版本的工作原理类似于交换机,在配置时很容易理解。
这就像正常情况下向前驾驶一辆汽车,而不是向后看,在倒车档驾驶。在这两种情况下,汽车都会运行和移动,但在倒车档行驶效率低得多,没有意义。同样的类比也适用于这里,与PNP或P沟道MOSFET相比,使用NPN或N沟道器件成为更好的选择。
如果你有任何疑问,或者如果你认为我可能在这里漏掉了一些东西,请使用下面的评论框进行进一步讨论。
非常感谢你的解释。我想知道,如果12v加热器/负载使用12v电压,如何获得这种电路的传递函数。非常感谢您的帮助。
不客气,很高兴你喜欢这个职位。你可以使用第一个电路来操作12V加热器。加热器可与继电器触点和12电源连接。
我有个类似的电路,但坏了。我使用Atmega328(与UNO相同的mpu)驱动一个74HC138解码器为8×32 LED像素(RGB)矩阵。输出(一次一个)通过p沟道mosfet (Vgs 2-4伏)激活8行矩阵。在mosfet的源上有12伏电压。当我使用5伏时,矩阵工作正常,即我可以点亮单个像素或led。当我打开电压(我需要12伏,因为它们是1瓦的led),在大约8伏的时候,除了我实际激活的两排。在12伏时,所有的行都打开了,但我只激活了第一行和第二行。我尝试了NPN晶体管,NPN逆变器(如上所示),n通道MOSFET隔离p通道,各种电阻的变化,所有都无济于事。今天我打算更严谨一些,而不是黑客,而是测量哪些可行,哪些不可行,但我希望你能提供任何见解。我有原理图,PCB布局,和照片,如果要求。 I’ve ordered some 74HC238 (sourcing o/p instead of sink) to try that with my N-channel-to-P-Channel driver! It is driving me nuts.
P通道fet将需要一个负电压通过他们的门/源,所以如果序列输出是正的,那么它可能不工作?
你能在任何一个免费的图片托管网站上传原理图并提供链接给我吗??
优秀的文章。
E不应该在PNP BJT的图片上面吗?
谢谢你指出这一点,我很快就会更正图表
当可能的时候,教我们如何计算mofet的电流在一些未来的教程。对我们来说,控制BJT中的电流是非常容易的。但在mosfet中,这就更暗了。没有人能更清楚地告诉我们这一点。
在BJT中都知道,只是控制BJT的电流基数多一些计算,到达电流希望允许随电流的集电极到发射体。但是在mosfet中如何做到这一点呢?如何计算正确的电压在门当我的愿望是允许仅1.76A的例子?
谢谢Vinicius,计算MOSFET中的电流可以很容易地通过在其栅极引脚上添加另一个BJT来完成,如本文底部所示。您可以应用此技术并在任何mosfet上实现所需的电流限制