上拉/下拉电阻真的有必要吗?

电器工程 树莓派 GPIO 拉起 拉下 漂浮的
2022-01-18 01:52:24

如果微控制器输入 GPIO 引脚既未连接到 VCC 也未连接到 GND,则其逻辑读数(1 或 0)可能会浮动;有人说是因为周围的射频干扰。

当浮动 GPIO 输入引脚电压受 RF 干扰影响,使其落入未定义的逻辑范围(即 Raspberry Pi 的 0.8V - 2.2V)时,可能会导致浮动引脚的逻辑值发生变化。

我想知道这个问题是否可以通过微控制器的设计来解决。即扩大逻辑电压范围,例如<6V 表示低>6V 表示高。由于干扰很少会达到如此高的电压。

4个回答

tl;博士增加 IO 轨道摆动有缺点,也无济于事,因为静电荷仍然可以摆动到任一轨道。

首先,我们不只是增加 I/O 电压有很多实际原因。这不像某些人在一张纸上划掉 3.3v 并写 12v 那样简单。用于处理器的现代 CMOS 工艺旨在为快速、低压设备创建薄栅极氧化物。生长厚栅极氧化物所需的处理步骤既昂贵又不利地影响性能和产量。许多廉价 IC 的好处在于它们具有简单的工艺——一个 3v3 芯片的所有栅极氧化物可能都生长为能够承受 3.3v+安全系数。您现在已经引入了多个新掩模(加上光刻胶和蚀刻步骤),芯片价格可能会增加一倍或三倍。

同样,高速电路的功耗也是一个问题。特别是对于快速信号,由于电容和串联阻抗,高电压摆幅意味着高功率耗散(大约为电压平方)。此外,如果您必须将核心电压维持在 3.3v 以保持在功率/热预算内,则需要添加电平转换,这本身会产生额外的热量、消耗额外的功率并导致用户产生额外的成本。

您的阈值也是相当随意的——一个尖锐的 6V 阈值需要一个电压比较器,如果某些反馈结构很可能出现在浮动引脚上,这会导致其自身的不稳定问题。对于一个合理的 I/O 缓冲器,阈值将反映缓冲器中晶体管的栅极阈值电压,这与我们的制造限制有关。您会遇到相同的直通问题,但现在情况更糟了,因为两个 FET 开启的区域由于更高的轨道而更宽,并且电源电压更高导致更多的功耗。你让问题变得更糟而不是更好。

现在,尽管如此,简单地提高 I/O 阈值并不能解决浮动信号的问题。考虑到栅极氧化层的惊人高电阻,浮动引脚很容易达到 6V——尤其是考虑到附近有 >6V 的电压轨!

说完这一切后,我们将芯片生产推迟了一年,同时我们开发制造工艺并签订合同,以制造具有 1v2 和 12V I/O 的高性能内核的混合电压系统。我们已经提高了我们的电源预算,这意味着我们必须购买更昂贵的散热器和风扇,以及更大的电池和电源,而且我们还没有可靠地解决这个问题。

或者,您可以在 DigiKey 以 10 美元或在深圳以更低的价格购买 10000 个上拉/下拉电阻器的卷带/卷轴。很有可能,您的 PCB 制造合作伙伴手头已经有一些标准的上拉/下拉电阻器,已装入他们的贴片机中,并准备好进行放置。或者,您的芯片可能已经包含上拉/下拉,因为在某些使用弱 MOSFET 的工艺上可以相当容易地制造这些。

已经解决了。一些微控制器内置了可以通过软件启用的上拉和/或下拉电阻。但是当微控制器没有固件时,这些是不活动的,因此出于安全原因,您可能仍希望使用外部电阻器在上电、复位或固件下载期间保持稳定状态。

微控制器的逻辑读数(1 或 0)可能会在输入 GPIO 引脚上浮动,如果它既不连接到 VCC 也不连接到 GND,有人说这是因为周围的射频干扰。

是的,还有静电荷。

当受 RF 干扰影响的电压使 GPIO 输入引脚电压落在未定义的逻辑范围内(即 Raspberry PI 的 0.8V - 2.2V)时,会导致逻辑读数浮动。

是的,这可能会导致内部问题。在下方图 1 的输入级中,未定义的逻辑状态可能导致上下晶体管同时开启。(在适当的逻辑电平下,一次只有一个开启。)结果是一种称为“击穿”的情况,高(对于设备)电流将流过设备。这如图 2 所示。这将导致栅极过热。

在此处输入图像描述

图 1 和 2 来自 TI 的应用报告慢速或浮动 CMOS 输入的影响

文章继续解释:

CMOS 和 BiCMOS 系列都具有 CMOS 输入结构。这种结构是一个由p沟道到V CC和一个n沟道到GND组成的反相器,如图1所示。低电平输入时,P沟道晶体管导通,N沟道截止,引起电流从 V CC流出并将节点拉至高电平状态。输入高电平时,n 沟道晶体管导通,P 沟道截止,电流流向 GND,将节点拉低。在这两种情况下,没有电流从 V CC流向 GND。然而,当从一种状态切换到另一种状态时,输入跨越阈值区域,导致 N 沟道和 P 沟道同时开启,在 V CC和 GND 之间产生电流路径。这种电流浪涌可能会造成破坏,具体取决于输入处于阈值区域(0.8 至 2 V)的时间长度。 每个输入的电源电流 (ICC) 可以上升到几毫安,峰值约为 1.5V VI(参见图 2)。在特定器件的推荐工作条件表中指定的数据表指定的输入转换时间限制内切换状态时,这不是问题。[强调我的。]

因此,他们说,“(1) 将输入驱动到定义的逻辑电平。(2) 在逻辑电平之间快速切换。”

我想知道这个问题是否可以通过微控制器设计来解决。即扩大逻辑电压范围,例如 < 6 V 表示低 > 6 V 表示高。由于干扰很少会达到如此高的电压。

那会让事情变得更糟。

  • CMOS 门的输入阻抗非常高,达到 6 V 并不难。
  • 现在,任何击穿都成为一个更严重的问题。在图 2 中,我们可以看到在 5 V 电源上的峰值电流为 4 mA。从 P = V × I 我们可以计算出栅极中消耗的峰值功率等于 20 mW。如果我们使用 12 V 逻辑,峰值功率将在 4 mA 时增加到 48 mW - 但实际电流可能会高得多。
  • 即使有良好的逻辑电平和快速的转换,芯片内部产生的热量也会随着频率的增加而增加,因为每秒有更多的转换。

多年来,随着器件变得越来越小,逻辑电源电压一直在降低,以解决功率密度问题。5 V 逻辑曾经是标准的,现在我们有 3.3 V 和更低的电压来降低功耗和管理热量。

TI 的文章值得一读。(而且你的英语读得很好。)

电子学中有一条非常重要的规则:NEVER left anything out of control. 因此,如果数据表中没有严格说明输入具有内部上拉或下拉,则不要让此输入具有未定义的状态。如果您不需要此输入,请将其连接到地或 Vcc,切勿悬空。这种未定义的状态可能会导致一些或多或少的意外问题,很难调查和解决 - 仅仅因为您想节省一个小电阻的成本而花费数小时来解决它们是不值得的。这确实是非常糟糕的做法。这就像开车:在路上停下来之前总是照照镜子。

注意:在现代 MCU 的情况下,可以通过(以编程方式)将未使用的 i/o 引脚配置为输出来解决问题,因此无需在任何地方连接它们。但是,如果您将 i/o 引脚方向更改为输入,并且 MCU 内部没有上拉/下拉,您必须注意这一点并保持自己正确拉动。浮动状态对我们来说是 ARCHENEMY ;) ;) ;) ;)