使用SPST开关作为数字输入?


10

我是“电气工程”的新手,正在从事一个arduino项目。我想将SPST开关用作板上的数字输入。

我有一根开关线连接到正端,另一根连接到数字输入端。问题是当我关闭电源时,我不确定输入是否会接地。当开关关闭时,如何确保输入接地?

如果我将数字输入连接到接地的电阻器上可以正常工作,那么当开关断开时它会接地,但是当开关接通时它不会短路-可以吗?

Answers:


9

最常规的解决方案是将开关的一侧接地。将另一个连接到数字输入,还连接到正电源上的1到10 K欧姆之间的电阻。

可以采用另一种方法,如Bruno所描述的那样使用下拉电阻,但这种方法不太可取。许多输入已经具有一定程度的隐式上拉,如果未连接,则读数为“ 1”,尽管不够可靠。但是,如果您的开关已经连接到正电源线,则下拉是一个好的解决方案,尽管许多人在将逻辑输入连接到正电源线时更喜欢使用一个小的电阻器。

许多微控制器在GPIO引脚上还具有内部上拉和/或下拉电阻,可通过写入配置寄存器来使能。如果您要驱动此类微控制器的输入,尽管并非每个微控制器都具有这些功能,则可能根本不需要外部上拉/下拉电阻。


4
另外,如果您使用带内置上拉或下拉电路的uC,则最好在不用于使引脚保持已知状态的引脚上启用它们。
马特·杨

实际上,对于我的项目而言,将开关接地是很容易的。因此,我将尝试使用上拉电阻。谢谢!
海绵鲍勃

2
大!当您想问我们有关“开关弹跳”的问题时,请回来:)
gbarry 2012年

事实证明,Arduino将自动执行上拉。我不确定如何操作,但是在代码中有一个数字“ INPUT_PULLUP”,甚至不需要电阻。那很简单。另外,关于开关弹跳,当我监视串行输出时我注意到了。所以我只是在代码中添加了3ms的延迟。它使我免去了再次去商店的旅行。:)
海绵鲍勃

如果您仔细阅读ATMEGA数据手册,将会看到可以在配置寄存器中写入一点以使能上拉功能。Arduino库只是使它更加方便。对于弹跳,通常会忽略一段时间的输入,尽管3ms可能会短一些。如果延迟阻塞了您的整个系统,则可能需要将其保持较短,如果它仅忽略了该输入,而您可以使其更长一点,因为有意的重新激活仍然会比较慢。
克里斯·斯特拉顿

9

是的,它将按您描述的那样工作。之所以称为下拉电阻,是因为它确保了当触点断开时,数字输入的逻辑状态为0(低电平)。通常,您可以为此使用10KΩ电阻。


2

这将起作用,并且会给您带来积极的逻辑:开关闭合时为高电平(逻辑“ 1”)。

但是就像克里斯所说的那样,倒相现象更为常见:开关接地,并且电源上拉电阻(而不是下拉电阻)。您的逻辑将被反转:逻辑“ 1”将对应于打开的开关。

上拉版本的一个很好的理由是大多数微控制器都集成了它们,您可以根据需要启用/禁用它们。一些微控制器也具有可配置的下拉菜单,但这种情况并不常见。

如果需要外部上拉电阻,10kΩ可能是一个不错的选择。微控制器的输入可能具有高达1 µA的泄漏电流,然后10kΩ的压降可忽略不计10 mV。较低的值当然是可能的,但是请记住,当开关闭合时,它们将流向地面的电流更大。一个1kΩ的电阻在5 V电源下将消耗5 mA电流,这实际上是在浪费功率。对于10kΩ,只有500 µA。对于非常低功率的应用,您可以将其值增加到100kΩ,但要记住泄漏电流。1 µA会产生100 mV的压降!

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.