安全关闭Raspberry Pi的电路


8

我想将Raspberry Pi用作汽车中的XBMC服务器。XBMC文档说,在断开电源之前,应始终使用shutdown命令。我不想(告诉我的妻子)在关闭汽车之前先关闭Pi,然后关闭它-我希望

我一直在思考,应该有可能用电容器和一个二极管创建一个简单的电路,以检测何时断开电源(并在GPIO引脚之一上产生中断),但电容器会提供足够长的电流使系统正常关闭。

这看起来正确且足够吗?

第二稿

该电路将由12.6至11.7V的汽车电池供电。Raspberry Pi的电压为5V(5.25至4.75V),消耗700-1200mA。我还没有计时,但是我猜测关闭过程可能需要5秒钟左右。

所以我想我需要知道的是:

  • 我需要哪种电容器来存储足够的电荷,以使Pi持续足够长的时间,以使XBMC正常关闭?

  • 鉴于Rasperry Pi的GPIO端口需要3.3V,最适合使用比较器/运算放大器(我想我可以使用几个电阻器将输出从5降低到3.3)。

  • 使GPIO线正常高电平或正常低电平会有什么好处?


您可能对此集成电路(linear.com/product/LTC2935)感兴趣。
Bitrex

3
按照以下概念上的答案,您的想法是可以的,但需要非常大的上限。您也可以一直用某种方式为Pi供电,然后只用点火开关就可以关闭电源,也许还需要一个计时器才能在一分钟左右后完全接通电源。
PeterJ

@PeterJ是个好主意-可能会便宜很多。您能以答案的形式详细说明吗?
Nicholas Albion

我认为,与其在点火开关关闭后几秒钟不给电容器的RPi供电,不如使用由555控制和供电的继电器切换到电池可能更有意义。我已经创造了另一个问题:electronics.stackexchange.com/questions/61877/...
尼古拉斯维奇

Answers:


4

一种替代策略是为Raspberry Pi连续供电,并使用点火线启动断电序列。我过去曾这样做过,但对于那些通常不适用于Pi的确切解决方案的系统,通常是这样:

使用DC-DC转换器以获得最佳效率,周围有很多示例,但以下是一些使用方便的示例,它可以从6.5V到32V输入以5V提供1A的电流:

http://www.digikey.com/product-detail/zh/V7805-1000/102-1715-ND/1828608

汽车电源可能非常苛刻,因此您可能需要在输入两端使用30V TVS二极管来防止尖峰,其肖特基二极管的阳极接地,而阴极在12V输入处以防止负电压,或者同时使用两个与汽车电源和系统之间的连接串联的普通保险丝或PTC自恢复保险丝。否则,您可能可以将已经安装好所有东西的汽车“砍”入USB充电器。

我不确定Raspberry Pi在正常的空闲模式下会消耗多少,但是大概在500mA以下(这是USB可以提供的最大电流,更可能是100mA)。假设在5V电压下使用100mA电流,而在12V电压下使用50mA电流,则汽车电池通常约为50Ah,因此大约需要20天的时间才能将电池电量消耗到50%。如果汽车在正常使用状态,则可能无需进一步操作,您可以使汽车保持运行状态,并关闭所有未使用的外围设备。

否则,为了以两种方式检测点火变化并同时通知Pi,需要关闭,然后在一分钟后断开电源,最实用的方法可能是使用驱动FET的外部微控制器。可以使用离散逻辑来完成,但是您还需要确保在点火高时重新接通电源,因此这并不是完全不重要的工作,但是零件成本将比使用大容量电容器低。


谢谢,您的回答使我成为Google的“关机控制器树莓派”。我当时以42美元的价格买到这只,但后来发现这是专门为Raspberry Pi设计的,只有15美元,他有一个专门用于汽车。
Nicholas Albion 2013年

Raspberry Pi模型A占用300ma(每个USB端口上最多100ma),而模型B占用700ma。
路人2013年

您还可以做的就是在树莓派每次开机时都简单地钩上一个按钮并运行python应用程序。然后在python应用程序中,使用按钮函数os(“ halt”)来简单地关闭树莓派。那就是我所做的,并且工作正常。我不知道如何与XBMC一起工作。
mozcelikors

3

我对Raspberry Pi的关机和电源使用情况并不十分熟悉,因此我将主要依靠您提供的数字并保留公式。

您显示的指数放电曲线是针对电阻器-电容器电路的,但是线性稳压器会使事情的表现有所不同。假设RPi始终消耗您指定的最大电流:1200 mA。在这种情况下,该电流始终流经稳压器,并且随着电容器放电,电路的有效电阻会不断变化(减小)。只要我们处于线性稳压器的工作范围内,这是正确的,这很好,因为在到达该区域之前,我们需要关闭RPi。

电容器的微分方程为:

I=CdVdt
可以重新排列以解决C:
C=IdtdV
  • 只是RPi的平均电流。在这种情况下,我们将假定它为1200 mA或1.2A。
  • dt是关闭RPi所需的时间。以您的示例为例,这是5 s。
  • dV是电容器电压的变化。我们假设起始电压是最低的指定电压11.7 V,而终止电压是7.0V。我将终止电压设置为7.0 V,因为7805线性稳压器需要2伏的裕量才能正常工作(5.0 V + 2.0 V = 7.0 V)。这使dV = 11.7 V-7.0 V = 4.7 V.

得到以下结果:

C=1.2A5s4.7V=1.28F

是的,那是1.28法拉(这里没有微或毫)。这可能需要购买几个低压电容并将其串联

因此,另一个问题是您的电路-它无法按您想要的方式工作,因为比较器的正输入接近负输入电压(因此输出可以改变)的唯一方法是输入电压已经死了 按照设计,比较器将永远不会切换。

您要做的是在电容器和二极管之前测量输入电压,并将该电压与可通过微调电位器设置的“参考”进行比较。请参见下面的示例电路:

原理图

模拟此电路 –使用CircuitLab创建的原理图


没错-我的意思是从二极管D1的另一侧馈入比较器的正输入。当12V电源断开(收音机和配件已关闭)时,我需要GPIO引脚来触发中断。...因此参考电压为0,不是吗?TVS二极管的目的是什么?
Nicholas Albion

我在这里有多个,对于他们的工作他们是否完美?i.ebayimg.com/images/g/lF8AAOSwBP9UYdRb/s-l300.jpg
feedc0de

@danbru不知道,那是一张图片,而不是数据表。如果您认为eBay电容器在5.5V电压下确实为1.5F,那么您仍然需要串联和并联多个电容器以获得所需的电容。
W5VO'9

@ W5VO有一些简单的方法可以测试电容吗?
feedc0de

2

注意:以下答案是在假设仅文件系统对SD卡的使用可能会损坏的前提下编写的。此后,许多轶事证据表明,SD卡本身的内部状态(低于任何文件系统)可能因不适当的断电而遭受损坏的风险,有些事情可能无法解决。文件系统级别。


我很想尝试一种完全不同的方法,一种从根本上解决问题的方法。从本质上讲,仅仅从pi上获取权力并没有什么根本错误。问题可能是未提交的文件系统状态导致文件系统损坏,以及随后的启动失败,直到您修复/重新镜像该卷为止。

但这可以通过以下几种组合在软件方面解决:

  • 在SD卡上创建更多分区,并且切勿以可写模式挂载引导或操作系统分区。如果您想走得更远,请不要在SD卡上写任何东西,将所有可变数据保存在USB记忆棒上。

  • 使用日志文件系统来存储将在操作中实际修改的数据。

  • 只需简单地准备好备用卡,就可以选择从连接的卡上进行某种自动备份和恢复方案,其规则是在任何给定时间只能安装其中一张卡(结合引导/操作系统的第一条规则)分区永远不可写)

最终,它归结为设计哲学问题-在以下两者之间进行选择:

A)精巧的系统,必须保护其免受功率损耗的影响,而不会遭受损坏

要么

B)设计的系统,使意外的功率损耗不会导致不可恢复的损坏。

大多数嵌入式系统更像(B)。


SD卡上具有一些只读功能的单独分区无法完全解决问题。SD卡上的耗损均衡可能会破坏卡上的任何块(交换块时)。这种损耗平衡完全隐藏在SD中,无法对其进行控制。实际上,对于文件系统分区,只读分区将具有最低的写计数,并且将成为损耗均衡时交换内容的主要目标。
darron

顺便说一句-我得出的结论是,除非您可以保证完全关机,否则SD卡无法设计出功能强大的嵌入式解决方案。对于嵌入的用例来说,规范确实很糟糕……考虑到嵌入了多少个用例,这是一个非常可悲的状况。
darron 2013年

@darron:令人遗憾的是,考虑到有很多方法可以避免这些问题。例如,规范可能已经指定了“关闭”命令,并要求任何设备必须能够在例如接收到设备的250ms之内将其置于安全状态。我认为,即使shutdown命令是在“后台碎片整理”操作的中间进行的,而这种操作可能要花几分钟才能完成,但大多数实用的SD卡实现都不会对这种规格产生任何问题。
2013年

@darron-正是由于存在此类跨分区问题,我提到了根本无法写入SD卡的可能性。
克里斯·斯特拉顿

正确关闭后,XBMC会将正在播放的歌曲/电影中的当前点保存到磁盘,以便重新启动时可以从同一点恢复。我真的很想避免:“爸爸,我们已经看到了这一点,您能停下来并快速前进到那个人做事情的地方吗?”
Nicholas Albion 2013年

0

正如其他人指出的那样,到目前为止,提出的电路存在一些问题,您可以得到一个足够大的电容器来支撑电源。如果您愿意建立一些电路,则可以考虑通过按钮操作的闭锁电源打开/关闭控制器。要关闭XBMC服务器,您可以按下一个按钮,指示Pi关闭,然后它可以执行有序的彻底关闭操作,然后向电路发出GPIO信号以关闭自身的电源。这样可以给RPi足够的时间进行安全关闭SD卡之类的事情。电路不必像继电器和计时器那样复杂。

这是一个简单的电路,仅使用双mosfet作为控制器。该电路在网页上描述。

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.