INPUT和INPUT_PULLUP有什么区别?


24

在较新的Arduinos,可以设置pinMode三种状态之一:OUTPUTINPUT,和INPUT_PULLUP

该页面显示

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

我相当确定,但是,改变行为并不是唯一的行为。

怎么INPUT_PULLUP办?它与的区别是什么?INPUT如何决定使用哪一个?


IDE 1.0.1中添加了INPUT_PULLUP。所使用的Arduino板无关紧要,它们都支持PULLUP。
baldengineer

Answers:


23

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

Arduino内部是上拉电阻,阻值约为50k欧姆。这些电阻可以选择使用内部连接INPUT_PULLUP。这在功能上(和电气上)等效于在引脚和+ 5V之间连接50k欧姆的电阻,唯一的区别是它不需要外部组件,并且您可以在程序执行期间通过软件打开和关闭它。

那么为什么要上拉而不是下拉呢?可能有多种原因,但是当对按钮或开关或“常开”的任何东西进行接线时,只需要将它们接地即可,而无需将+ 5V电压输出到它们。由于出于屏蔽的原因,大多数电路板将被设计为带有大面积的接地层,因此实际上接地是接地的原因。

一些功能更强大的IC(如ARM芯片)具有上拉和下拉功能,但8位AVR线路仅带有上拉功能。您只需要记住它HIGH是“打开的”和LOW“关闭的”。


赞成。仅供参考,根据文档,内部上拉电阻为20K,并不是说与50K的差异很大。 arduino.cc/en/Tutorial/DigitalPins
SDsolar

9

请注意,在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

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


非常聪明。谢谢你写这篇 赞成。
SDsolar '17
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.