上拉电阻和下拉电阻

上拉电阻

上拉电阻(Pull-up Resistor) 是数字电路中非常重要的一个概念,它的作用是将一个信号引脚的电平“拉”向高电平(通常是 Vcc),以确保在没有其他信号驱动时,该引脚不会悬空(floating),从而有一个稳定可靠的逻辑“1”。

1、为什么需要上拉电阻

有些引脚(如开漏输出、输入引脚、复位引脚等)本身不能主动输出高电平,或者在某些时刻没有明确驱动电平。如果没有外部辅助,它们的电压会浮在一个不确定的状态。这会导致:

引脚电平不稳定,受干扰影响严重

电路逻辑异常,比如 MCU 误判中断、电平错乱

功耗增加(由于输入级高频翻转)

为什么某些引脚(比如输入、开漏输出、复位引脚)如果没有上拉电阻,而是悬空或直接接 VCC,会导致问题。

①为什么“悬空”会导致电压不确定?

因为输入引脚本质上是一个高阻抗(High-Z)节点:

它内部没有强驱动力

如果没有外部电压源或者电阻拉电平,它不会自己稳定在高或低

就像空着的金属探针一样,一点点干扰、静电、手接近、PCB 泄露电流,都会让电压上下乱跳

举个比喻:你把输入脚比作一个“耳朵”,但没人跟它说话,它就胡思乱想——所以你得让上拉电阻当“默认声音”告诉它:现在是高电平。

②为什么不能直接把输入或开漏输出接 VCC?

对于输入引脚:

不能“直接接 VCC”是片面的说法,要看是否你允许它被拉低

如果你直接接 VCC,你就失去了改变它电平的能力

比如你希望接一个按键,按下后变低,那你就不能直接接 VCC 否则永远是 1

正确做法是加个上拉电阻到 VCC,这样它默认是 1,但可以被拉低。

③那为什么不能靠芯片内部自己搞定?

很多芯片确实提供了内部上拉电阻选项,但是:

不是所有引脚都有

有的芯片默认不上拉,需要你在程序中配置

内部电阻值较大(20kΩ~50kΩ),不适合高速通信(比如 I²C)

所以,硬件上加上拉电阻更稳定可靠,特别是在:

开漏输出

按钮输入

复位引脚

多路驱动总线

I²C、1-Wire 等通信协议

2、上拉电阻是怎么工作的

+Vcc (比如 3.3V 或 5V)

R(上拉电阻)

信号点 ──────► 接到芯片 IO 或总线

└──── 其他驱动电路(如按键、开漏输出)

3、上拉电阻作用总结

作用说明

提供默认高电平

没有主动驱动时,维持逻辑“1”

防止输入悬空

避免干扰、误动作

用于开漏输出

提供输出高电平能力

与按钮配合使用

松开按钮时自动回到高电平

通信总线保持空闲高电平

如 I²C、1-Wire 等协议

4、上拉电阻阻值怎么选

典型选值范围是:1kΩ ~ 100kΩ,根据电路需求选择:

阻值范围应用场合

1kΩ ~ 4.7kΩ

较强拉力、用于高速通信(I²C、开漏信号)

10kΩ ~ 20kΩ

一般 GPIO 输入、按键

>50kΩ

低功耗、慢速响应,不推荐用于通信

下拉电阻

下拉电阻(Pull-down Resistor)就是一个连接在信号引脚和 GND 之间的电阻,用来保证该引脚在没有被主动拉高时保持在稳定的低电平(逻辑 0)。

1、结构图示

MCU 输入引脚 ─────┬────────► 信号输入

[R] ← 下拉电阻(如10kΩ)

GND

2、常用电阻值范围

电阻值适用情况

1kΩ ~ 10kΩ

通用下拉(推荐)

>10kΩ

电流更小,但抗干扰差

<1kΩ

更强拉力,但增加功耗(不常用)

3、下拉电阻的常见应用场景

①MCU 输入引脚需要默认低电平

比如你接了一个信号线,但在大多数时候这个线是“空闲”的,你希望 MCU 默认读到逻辑 0:

if (GPIO_ReadInput() == 0)

{

// 默认认为空闲状态

}

这时就需要加一个下拉电阻。

②某些控制引脚(如复位、使能)

例如一些芯片的 EN、RST 引脚,要求默认是低电平,只有在某条件下拉高才有效,这时可以加下拉电阻。

4、注意事项

错误做法为什么错误

直接接 GND 代替下拉电阻

会导致外部驱动器输出高电平时短路

阻值太大(>100kΩ)

抗干扰能力差,逻辑不稳定

不加下拉

芯片引脚悬空可能导致误触发、功耗增加

[an error occurred while processing the directive]