注释
|
@matthijskooijman:上拉和下拉初级用于限制流入和流出逻辑引脚的电流。没有它们,这可能会导致逻辑引脚失效。大多数时候,这不会发生,但这主要是对用户的预防性警告,以防止他们因接线不当而损坏 Arduino 引脚。 |
|
嗯?这完全不是我(和我问过的其他人)理解下拉的方式。至少,没有下拉/上拉不应该导致引脚被炸毁。使用直接连接到地面或 VCC 当然有短路的可能性,也许你的意思是?(虽然我不认为它实际上可以炸掉引脚本身——只要它被配置为输入模式,只有少量电流可以流入它,因为它的输入阻抗很高)。 在任何情况下,下拉的主要目的是防止输入引脚在未连接输出时悬空。例如,参见https://learn.sparkfun.com/tutorials/pull-up-resistors/what-is-a-pull-up-resistor 至于我的提议,让我用图片澄清一下: 此处,R1 是 Arduino 内部的内部上拉电阻,该引脚配置为输入。
如果您担心引脚被意外配置为高输出导致短路,在开关和引脚之间连接一个小电阻可能会有所帮助,尽管这也适用于常开开关(除了常开开关关闭的频率较低,因此不太可能触发此类问题,但这并非不可能)。 如果你能回应这个提议,我会很高兴。我想像这样实现常闭开关,但我认为这需要代码中的一些支持(反转限位开关的含义,同时不禁用内部上拉)。如果您愿意接受,我很乐意为此提供代码。 |
|
@matthijskooijman: 对不起,我的误会。它不直接影响引脚本身,但如果没有下拉电阻,它仍然会消耗电压源。如果您的电压源与为 Arduino 供电的电压源相同,它会短路并消耗足够的电流来停止处理器。 如果您使用建议的带 NC 开关的上拉电阻,您仍然会以较低的速率消耗电源。但是,如果您有足够多相同的连接,例如 3 个限位开关和 3 个控制开关,则累积功率损耗会导致同样的问题。只需按照推荐的方式接线即可避免这一切。 |
|
我仍然不确定没有下拉电阻(并使用内部上拉电阻)会比使用外部下拉电阻消耗更多的电流。 当你说“如果没有下拉电阻,它仍然会消耗电压源”时,你是指我上一篇文章中的接线吗?还是您有其他想法? 又是一张图。IIUC,这是常闭开关的推荐接线? 这次下拉在 Arduino 外部。 AFAICS,在两种情况下均未按下开关时,漏电流为 5V / R1。对于内部上拉电阻 R1 >= 20k,因此泄漏 <= 0.25mA,几乎可以忽略不计。使用外部上拉,您当然可以使 R1 更大并减少泄漏,但我认为这可能会导致其他问题(响应时间变慢,对静电更敏感)。在任何情况下,每个开关 0.25mA 对我来说都不是什么大问题,而且我看不出下拉是如何阻止它的。 |
|
@matthijskooijman:我的意思是,如果你有一个没有下拉电阻的常闭开关,你可以将 Vcc 与地的连接短路。这显然会耗尽电流。至于你的带有上拉电阻的 NC 提案,我认为它只消耗 0.25mA 持续 328 秒并不重要。它不是一个健壮的解决方案,不能保证它不会随着人们将它移植到不同的 CPU 而改变。你可以分叉它并做任何你想做的事,但我不会直接支持只有上拉电阻的 NC 开关。此外,如果我记得,如果不将引脚设置为正常高电平,则无法启用内部上拉。我可能错了。 |
|
想多了,我就糊涂了。我上一条评论中的接线使用下拉,但实际上并没有颠倒引脚的含义——高电平仍然表示开关未激活,低电平仍然表示开关已激活。这样布线需要关闭上拉,而不是引脚意义反转。我发布的第一个原理图需要打开上拉,但引脚的意思是倒置的。但是,当您启用限制引脚的反转时,代码会同时执行这两项操作——它会关闭上拉并反转引脚的含义。对于常闭开关,您推荐什么接线?
那么,Vcc 连接在哪里,接地连接在哪里?我显然不是在建议短路的接线。
据我所知,所有 AVR 都具有相当高的上拉电阻值。根据您的推理,您根本不应该使用内部上拉电阻——谁能保证没有 CPU 的 1 针泄漏电流(按下该开关时)不会太多? 请注意,我并不是要在这里变得令人讨厌或固执,我只是不相信需要外部下拉(并且自从这篇文章以来,我不完全确定即使使用外部下拉也应该使用什么接线……)。 |
|
大家好!只要正确连接 nc 开关,这与无开关完全相同,应该没有问题,只要在开关关闭时引脚未设置为高电平! 如果我没记错的话,所有引脚在启动时都设置为低电平,所以不要尝试将您的开关连接到 vcc,这可能会在启动时将其烧毁。 |
嗯?你如何连接“与没有开关相同”的东西?
AVR 处理器将其所有引脚配置为输入模式(== 高阻抗/浮动),而不是输出。或者 GRBL 是否明确地使所有引脚输出低电平? @chamnit,我刚刚想到,使用“下拉”电阻器,您可能是指串联电阻器来限制电流?就像是: (但是当开关打开时,这会使引脚悬空——它仍然需要(内部)上拉才能工作)。 |
|
嗯?你如何连接“与没有开关相同”的东西? |
|
@skrutt,但是如果我像常开开关一样连接它,添加一个下拉并让 grbl 禁用内部上拉,你会得到: 在这种情况下,无论开关状态如何,引脚始终为低电平,对吗?那可不好 |
|
是的,只需卸下那里的电阻器并反转配置中的引脚,就可以了。并且不要禁用内部上拉!;) |
这正是我最初提出的,请参阅#542 中的原理图(评论)
我不能——启用反转限制引脚配置会反转引脚的含义并禁用内部上拉。我看不出前者有什么办法,而后者呢? |
|
没问题,只要加一个外部上拉电阻,1000 到 20Kohm 之间应该没问题!或者找到一种在引脚反转时仍然启用内部上拉的方法,但连接外部上拉可能更容易。 是的,你是对的!来回如此之多,以至于我错过了。 |
|
@matthijskooijman: 没有必要挑剔并开始提出要求。 我想我开始理解你原来的观点了。您只需使用 AVR IO 引脚中的上拉电阻并将其拉高以用于常开和常闭开关。Grbl 中的逻辑管理它是否将信号解释为正在接合的开关。无论是上拉还是下拉,您将始终拥有带常闭开关的通电电路。这样对吗? 正如您所说,这对于基于 AVR 的设计可能没问题,但对于所有 ARM 而言,其 IO 引脚上都有内部上拉电阻并且行为方式相同? |
我也不是故意的。如果那样的话,我很抱歉。我只是想弄清楚这一点(并可能在此过程中改进一些文档):-)
是的。
是的,假设“通电”意味着“电流”。我看不出有一种方法可以让常闭开关在空闲状态下没有电流流动(与常开开关相反,常开开关只有在激活时才有电流流动)。
据我所知,Due 和 Teensy 都有,我不知道有任何其他(官方)基于 ARM 的 Arduino。此外,如果有人将 GRBL 移植到没有它们或上拉会以某种方式导致问题的板上,他们应该能够禁用内部的并根据需要添加外部的。 在软件方面,我赞成添加一个“限位开关上拉”设置来独立于已经存在的“反转限位开关”设置来控制限位开关上的上拉。听起来怎么样?不确定 GRBL 是否有优雅处理升级的机制? |
|
@matthijskooijman: 好的,我会考虑更改限位开关方法。可能有几个用户已经连接了外部电阻器,他们需要充分了解此类变化。不确定是否存在任何相关风险。 允许配置上拉的目的是什么?此时,您必须管理 4 种可能的开关状态,而不是两种。我想保持简单。 |
好吧,我可以想象可能存在内部上拉不起作用或不需要的非标准布线方案,但我现在想不出任何具体情况。 更重要的是向后兼容性——对于已经有外部电阻或依赖内部上拉关闭的人来说,事情可能会中断。添加设置将允许升级以在设置反转标志时禁用上拉。OTOH,也许您可以期望人们在升级时阅读变更日志,并在出现问题时让他们调整接线… |
|
我的两分钱是内部上拉的编译时间选项,默认开启(按原样)并且反转限制引脚选项不会影响这一点。 简单、干净、支持默认接线,对于那些想要/需要更改它的人来说,这样做非常简单。但是,当有人(如果有人)因为使用旧的反向上拉选项而遇到问题时,wiki 应该有新的明确说明来涵盖这个问题。就个人而言,我对 grbls 选项感到非常自在,但我仍然发现自己经常阅读 wiki! |
|
@matthijskooijman有点像那个评论,但你会希望像往常一样读取引脚,但仍然禁用内部上拉。考虑到有人使用 av 常开开关连接到 vcc,并使用高电阻作为下拉电阻。如果下拉电阻器的值与内部上拉电阻器的值相同,并且它在更新中突然被激活,则限制引脚上的结果电压将为 2.5 V,这可能会产生一些非常不稳定的行为。 这种情况很可能很容易通过例如使用较小的电阻器重新布线,但添加代码支持可能也很简单,并为 grbl 提供更大的灵活性。 如果您要将 grbl 安装到商用机器上并且已经定义了止动器的逻辑电平,那么无论是否使用倒置限位销,您都可能希望禁用上拉。 |
|
我不会依赖内部上拉,它们太大了,所以它对噪音很敏感,而且大多数开关都喜欢一点电流来帮助清洁触点 |
|
@langwadt: 很高兴知道。那么,话虽这么说,这是否意味着没有理由改变现在的运作方式?我希望如此,因为我不想再次重写东西。 |
|
@chamnit, 以我的经验,内部上拉适用于简单的开关,到目前为止(在非 CNC 应用中)从未有过任何问题。我怀疑@langwadt在某些情况下(长线、嘈杂的环境)是正确的,但内部上拉并非普遍无用。 如果在某些环境中上拉确实太大,可以通过添加较小的上拉来解决,不需要内部上拉 AFAICS。 此外,我认为这些都不受常开与常闭的影响——如果内部上拉电阻对于 NC 开关来说太大,它对于与 NO 开关一起使用来说也太大了。因此,在反转限制引脚的同时禁用内部上拉是没有意义的——你实际上是在无缘无故地强制使用带有 NC 开关的外部上拉。 由于上述原因,我仍然赞成提议的解决方案:让反转限制设置只是反转开关的含义,并允许仅将禁用内部上拉作为编译时选项。 我刚刚完成了对带有双 NC 端挡块的小型 Mantis CNC 铣床的重新布线。由于我使用的 protoneer 的 grblshield 没有任何外部上拉,我将根据上述建议修改代码,并在下周在我的硬件上进行测试。一旦我有东西要展示,我会提交 PR |
|
从我的角度来看,实现限位和停止开关的最安全方法是将 grbl 置于正常操作低电平并启用内部上拉开关,或者如果内部部件不够用则添加一些。这样做你还可以确保如果一些断线或没有连接,引脚被内部电阻拉高并停止调用。 |
|
当我发现#289时,我刚才正在查看 git 日志以弄清楚要为我的提交消息使用什么样式,它最初引入了禁用上拉和反转限制引脚设置。显然@Travis-Snoozy具有在达到限制时将限制引脚驱动为高电平的硬件,需要下拉(参见此评论中的原理图)。 看到那是反转代码的原始用例,我现在更好地理解了为什么事情是这样的。我仍然相信我们改变现状的提议是好的,@Travis-Snoozy仍然可以使用编译时选项支持他的设置。 |







在常见问题解答中,我读到:
我不确定这应该如何工作。AFAIU 下拉/上拉,这些可防止引脚在开关打开时浮动(例如,以确保在开关打开时引脚具有预定义的逻辑电平)。我看不出让一根大头针浮起来怎么会把它炸掉?
此外,应该可以使用内部上拉以及 AFAICS 连接常闭开关。在这种情况下,开关通常将引脚拉至地,因此读数很低(并且有一个小电流,高达 5V/20kohm = 0.25mA 运行)。当限位器被激活且开关打开时,接地断开,上拉电阻将引脚拉高,使其读数为高电平。AFAICS支持常闭开关唯一需要做的就是在读取时反转引脚状态,因为现在低电平表示空闲,高电平表示结束停止激活。内部上拉可以保持打开状态,开关可以正常连接到 GND,不需要外部下拉。
如果有的话,有人可以指出我的推理中的缺陷吗?