为什么将继电器连接到 Arduino 时需要晶体管?

电器工程 Arduino 晶体管 中继
2022-02-01 14:43:42

我正在尝试使用一个简单的 Arduino 电路来打开和关闭交流灯。这是我从网站上获得的即将尝试的电路。

在此处输入图像描述

我不明白为什么那里需要晶体管。我以为我们已经有一个 5 V 输出,我们可以直接连接到继电器。

4个回答

好的,这(几乎)是您需要的一切:

示意图

模拟此电路- 使用CircuitLab创建的原理图

Arduino 使用 ATMEGA MCU(大多数 AVR 具有相似的规格,因此并不重要),因此数据表包含相关信息:

  • 在 5V 电源下,输出端口 HIGH 电压至少为4.2V,负载为 20mA

  • 还是一个5V,输出口LOW电压最高0.7V,带20mA负载

由于他们引用了 20mA 的电流,因此可以安全地假设电流可用(芯片的电流高达 400mA ,如绝对最大值)。

从 BC547 数据表中您可以看到:

  • 最大电流能力为 100mA(继电器线圈的大小)

  • 2mA 时的直流电流增益 (hFE)至少为110

  • 基极发射极饱和度通常为 0.7V

  • 基极发射极电压可能会降至 0.55V(这是初学者的陷阱)

现在,为了计算:你想在 GPIO 高电平的基础上放一些 mA:所以你有一个 4.2V 电源、基极电阻和 BE 结(为此目的,它基本上是一个二极管,下降 0.7V)

然后你离开电阻器上至少有 3.5V 电压下降。建议的 1k 电阻器将电流限制在大约 3.5mA(最小值)。乘以 hFA 就可以得到 350mA 的潜在集电极电流,这已经足够了(例如,如果你试图拉动超过 100mA 的电流,BJT 就会死掉)。所以即使是稍微大一点的电阻也可以工作(不过不要太大)

现在,对于上面提到的陷阱:如果你真的不走运,你可以拥有一个具有非常高低输出 (0.7V) 的 AVR 和一个具有非常低 VBE (0.55V) 的 BJT。所以继电器实际上可以在 GPIO 为低电平时触发!

出于这个原因,在基极和发射极之间添加另一个电阻以分流过电流是很有用的。计算不是立即的(想想与 BE 结二极管并联的电阻器)。然而,一个 10k 电阻器是有用的并且是传统的几十年。

像您的 Arduino 上的普通微控制器在端口引脚上只有有限的“强度”。通常它可能是 2..20mA。您的继电器可能需要 60mA 的猜测,因此您需要一些放大端口引脚的方法。通常使用晶体管或mosfet。

请注意,您的图表缺少与晶体管串联的电阻器,因为晶体管只需要大约 0.7V 即可将其打开。该电阻器将端口引脚电压从 5V 降至 0.7V。

让我尝试简化:

  • A - 检查数据表中打开继电器所需的最小电流。
  • B - 检查数据表中 MCU GPIO 可以提供的最大电流

如果 B>A 那么你不需要晶体管,否则你需要晶体管来提供继电器所需的额外电流。

有些继电器不需要晶体管来操作:例如,HE3300 簧片继电器需要低至 10 mA 的电流,并且可以直接由微控制器引脚驱动。请注意,这样的继电器反过来又相当有限,因为它们的触点可以切换的功率(对于 HE3300,最大为 10W)。