INPUT 和 INPUT_PULLUP 有什么区别?

电器工程 Arduino 硬件 软件 引脚
2022-01-18 11:27:13

在较新的 Arduino 上,可以将 pinMode 设置为以下三种状态之一:OUTPUTINPUTINPUT_PULLUP

这个页面说:

Arduino 上的 Atmega 芯片具有您可以访问的内部上拉电阻器(内部连接到电源的电阻器)。如果您更喜欢使用这些而不是外部下拉电阻,您可以使用 pinMode() 中的 INPUT_PULLUP 参数。这有效地反转了行为,其中 HIGH 表示传感器关闭,LOW 表示传感器打开。

不过,我很确定反转行为并不是它唯一的作用。

做什么INPUT_PULLUP是什么使它与 不同INPUT,以及如何决定使用哪一个?

2个回答

默认设置是INPUT将引脚设置为INPUT. 如果引脚完全断开,它将随机读取HIGHLOW如果将其连接到 +5V 或 0V,它显然会显示为HIGHLOW

在 Arduino 内部,Atmega 芯片具有内部上拉电阻,其值约为 20k 欧姆。(有关详细信息,请参阅DigitalPins文档)这些电阻器可以选择在内部使用INPUT_PULLUP. 这在功能(和电气)上相当于在引脚和 +5V 之间连接一个 ~20k 欧姆电阻,唯一的区别是它不需要外部组件,您可以在程序执行期间用软件打开和关闭它。

那么为什么是引体向上而不是下拉呢?可能有几个原因,但是当连接按钮或开关或任何“常开”的东西时,您只需将它们接地,您不需要为它们运行 +5V。由于无论如何出于屏蔽原因,大多数电路板都将设计有较大的接地倾倒,因此接地实际上是原因。

一些功能更强大的 IC 像 ARM 芯片都有上拉和下拉,但 8 位 AVR 线只有上拉。你只需要记住它HIGH是“开放的”和LOW“封闭的”。

请注意,在 1.0.1 之前,您可以使用digitalWrite(). 你仍然可以。

代码:

pinMode(13, INPUT);
digitalWrite(13, HIGH); // Turns internal pull-up on
digitalWrite(13, LOW);  // Turns internal pull-up off

这是一个重要的区别,因为INPUT_PULLUP显然会打开上拉电阻。然而,不太明显的是,从 1.0.1 开始,简单地调用INPUT会强制关闭上拉。(以前,上拉的状态保持不变)。

要了解引脚在使用和不使用上拉的情况下如何工作,请观看以下视频。

示波器上的浮动引脚:http ://www.youtube.com/watch?v=dBIBFLYCjMM

启用上拉:http ://www.youtube.com/watch?v=SAIw7LLVl-U

关于引体向上的完整教程视频(请注意,我是在将 INPUT_PULLUP 添加到 Arduino 库之前制作的):http ://www.youtube.com/watch?&v=jJnD6LdGmUo