如何制作1位永久存储电路?


13

我想做一个简单的电路来存储或保存1位数据。即使电源与电路断开连接,电路也应能够记住LED的状态(亮或灭)。我需要它像手机的硬盘驱动器,闪存或SD存储卡一样工作。

我制作了一个如图所示的电路,输出是一个与470欧姆电阻串联的LED。我使用两个衬套按钮对电容器进行充电或放电,以便输出LED亮起或熄灭。

断开电源或关闭电源后,电路能够记住LED的状态几分钟。

2或3分钟后,电容器完全放电,电路丢失了数据。

在此处输入图片说明 如何停止电容器放电?或者如何降低放电速度,以使电路在一周或更长时间后丢失其数据?

在此电路中,我将555用作逆变器(而不是栅极),但我可以使用任何其他IC。我的目标只是制作一个简单的永久性存储器。


1
您对使用纽扣电池有多厌恶?无法在宏级别上复制EEPROM / Flash / FRAM单元。
伊格纳西奥·巴斯克斯

8
@ IgnacioVazquez-Abrams您可以使用闭锁继电器...
helloworld922

2
@MichaelGeorge:不,闭锁继电器的全部要点是它使用永磁体来保持其状态,而无需施加外部电源。您只需要一个电脉冲即可更改其状态。
戴夫·特威德

6
你可以得到一个电容与一些精心的设计和施工,以保持其充电一周:m.electronicdesign.com/analog/...
pjc50

3
关于电容器放电:如果正确断开连接,它们可能会长时间保持电压。robotroom.com/Capacitor-Self-Discharge-1.html
FarO 2015年

Answers:


29

原始的电子非易失性存储器基于铁氧体磁芯。虽然在一个方向或另一个方向上磁化这样的磁芯以存储一个或零是相对容易的,但它需要一些相当复杂的电路才能可靠地读回。

现代的非易失性芯片依赖于电荷存储,但是要实现此功能,您需要能够创建一个基本具有零泄漏的电容器以及一种读出电荷的方法。这只能在微电子设备中完成,在该设备中,电容器是一块完全包裹在玻璃(二氧化硅)中的微小金属片(“浮栅”),并通过其对附近晶体管的影响而读出。

另一个选择是ferrorelectric RAM(FRAM),它使用一种特殊的介电材料,该材料具有两个不同的,稳定的极化状态。同样,这仅适用于微电子学。

因此,您需要选择其他一些物理现象来存储您的一些信息。一个明显的选择是闭锁继电器,该闭锁继电器将信息存储在其电枢的物理位置中,该位置通过永磁体或弹簧保持在两个稳定位置中的一个。可以通过施加相对短的电流脉冲来更改位置,并通过将电触点连接到电枢来完成读取。



由于您只有一个核心,因此无法使用霍尔效应传感器或其他东西读取它吗?
user253751'9

1
@immibis:不容易。磁场几乎完全包含在铁心内部,几乎没有外部泄漏。
戴夫·特威德

8

制作一个轻击机械开关的电路,例如。无用的盒子。电路需要上电以更改/读取状态,但要使其处于两者之间。


6

一种简单的解决方案是采用PIC12F635之类的微控制器,该器件可提供8引脚DIP或更小尺寸的引脚,并具有内置时钟和欠压复位电路(后者对于保持EEPROM非易失性的完整性很重要。存储)。

所需的代码并不多,是一个很好的入门项目。

所需的唯一外部部件是LED的旁路电容器和限流电阻。

最简单的解决方案可能是2线圈闭锁信号继电器。


6

纯电子产品不会构成永久的存储单元,但是电容器中的电荷会接近该存储单元(需要定期刷新)。EEPROM /闪存将该要求延长至10年,因此出于实用目的,它称为永久性。但这不是普通组件可以做到的。

真正的永久内存使用某种物理双稳态现象。戴夫(Dave)提到的铁氧体磁芯的磁化得到了广泛使用(听说过“磁芯倾卸”吗?)。helloworld922提到的双稳态(或闭锁)继电器更易于使用。

当您看一下早期计算机中的完成方式时,您必须意识到单电池的复杂性与驱动电路的复杂性之间存在平衡。铁氧体磁芯非常简单,但是驱动电路,尤其是读出电路非常复杂。对于双稳态继电器则相反:继电器每位相当复杂,但控制电路非常简单。

你的目的是什么?

  • 如果您只想制造一个电池,请使用双稳态继电器。

  • 如果您想演示实践中不实际的操作方式(DRAM / Flash),请使用存储在电容器中的电荷,并定期刷新。

  • 如果您想使某些东西实用,请使用内置EEPROM的小型微控制器(或可以对其FLASH进行自编程)。


5

保险丝。经常更换可能很烦人,因此您可以升级到断路器。


5
对于EE.SE的答案,这有点薄。请详细说明。
尼克·阿列克谢耶夫

2
所以...默认情况下为1(电流将通过),设置为零,您通过保险丝发送一小段电流将其熔断,现在电流不再通过,再次设置为1,则更换保险丝?
迈克尔

1
我喜欢这里开箱即用的想法。当您按下按钮以关闭LED时,它将使断路器跳闸。当您按下按钮以打开LED时,它将重置断路器。这只是闭锁继电器的怪异版本。可能不是最好的选择,但我仍然喜欢创造力。
MichaelS

1
我只是在指早期的ROM设备是如何工作的。他们是一堆保险丝。在需要零的位置熔断保险丝。我认为这不需要更深入的了解。很老派。
威廉·普赖斯

3

实际解决方案:

@DaveTweed提到的锁存继电器是最简单的。

如果你想要一个固态解决方案,您可以使用并行接口存储器IC喜欢这个东西。您可以仅将地址线绑定到固定地址,而仅使用数据线之一。您将需要一些其他的胶合逻辑。

有趣的解决方案:

如果您正在寻找一个演示内存的项目,那么可以使用带有滞后磁芯的螺线管。在一个方向上将内核饱和以存储1,在另一个方向上将内核饱和以存储0。这需要进行写操作。

然后将其安装在像此霍尔传感器这样的传感器上方。然后,您可以使用霍尔传感器(只是一个模拟比较器)查看剩余磁场的极性,以确定状态。


3

William Price给出的保险丝/断路器答案给出了最明显的解决方案:

一个开关。

拿个灯。插入电源。拔掉 将其移至夏威夷。将其插入。
重新打开。

把它关掉。拔掉 拿回家 将其插入。
它保持关闭状态。

如果您想让计算机启动/关闭LED,它就没有帮助。但是,如果使用按钮拨动开关和电子激活的螺线管,则可以完成工作。按下按钮以打开LED,它激活电磁阀,LED点亮。再按一次,LED熄灭。拔下电源插头,并且按钮仍然机械设置为打开或关闭。

如果您想保留显式的“如果确定,则确定为关闭”功能(而不是拨动开关),则可以使顶部按钮激活一个螺线管,该螺线管按下翻转开关的顶部。然后,底部按钮激活第二个螺线管,该螺线管按下翻转开关的底部。

并不是说这是实现它的最佳方法,但是它是有效的。


1
您所要做的只是描述如何构建双稳态继电器,这是提出的首批解决方案之一。
戴夫·特威德

第二部分,是的,仅描述笨拙的双稳态继电器,如果他有兴趣构建自己的继电器,则可能很有用。但是,第一部分不是。我认为这与问题的意图不符(我想他是对学习电子技术感兴趣,而不是构建最简单的设计),但是单个拨动开关比电子钻头更简单,更容易设计,并且满足了中的要求。前几个句子。
MichaelS 2015年

您可能是正确的,但是我们不确定,因为OP从未回来讨论它-尽管他确实“接受”了我的回答。我根据“电路应该能够记住LED的状态”来解释该问题的总体意图,以指代电子可重写存储器。这将排除只读存储器(开关,跳线,二极管等)和一次写入存储器(熔丝)。
戴夫·特威德

我的想法是LED的状态与最后按下哪个按钮直接相关。从逻辑的角度来看,捕获按钮的状态与捕获LED的状态相同。
MichaelS

2

最简单的一个组件解决方案是双稳态继电器。而且您只需要一个电阻即可读取状态。


2

您可以使用内置EEPROM的微控制器。8位PIC16F84A具有64个字节的EEPROM,通常可存储10,000,000个字节,每个字节的写入量最少为1,000,000个(这称为字节耐力)。在另一个答案中选择的PIC12F635具有128字节EEPROM和100,000次写入的字节耐久力。的PIC24F16KA102,一个16位的处理器,具有512个字节的EEPROM,也100,000写入一个字节耐力。

OP不会指示LED闪烁的频率。为了便于讨论,假设它是每分钟四次。

一年后它将闪烁

46024365=2,102,400 times.

由于EEPROM需要同时捕获最后的打开和关闭事件,因此它将被写入该数字的两倍,即大约420万次。在五年中,这是2100万次。

显然,这将超出我现在内置在微控制器中的任何EEPROM的规格。

但是有一个简单的解决方案。不用一遍又一遍地使用相同的字节来跟踪开或关状态,而是可以使用字节数组来填充整个芯片。

数组中的每个元素都需要两个字节。因此,一个64字节的EEPROM(如PIC16F84A中的EEPROM)可以容纳32个元件。每次写入EEPROM时,都将0写入状态字节(表示此元素有数据),或者将0写入数据字节(LED最后熄灭)或0xFF(LED最后点亮)。下次访问EEPROM时,将对元素进行索引,直到找到一个状态字节为0xFF的元素,然后使用该元素。如果没有剩余,则重新初始化EEPROM并重新开始(对于低端PIC,这意味着向每个状态字节写入0xFF;对于PIC24,有一条命令擦除整个EEPROM)。如果您需要了解LED的最后状态,则可以像以前一样对阵列进行索引,但是现在返回一个元素并读出数据字节。

在此处输入图片说明

对于PIC16F84A,这本质上是将对单个字节的访问次数除以16的因数(16个而不是32个,因为每个状态字节被写入两次)。这样一来,它总共可以处理1600万次写入,足以容纳近四年的数据。PIC12F635的EEPROM更大,但字节耐力更小,仅为100K,将能够处理320万次写入,足够用9个月。

具有512字节EEPROM和批量擦除功能的PIC24F16KA102将能够处理2560万次写入,足够五年以上。

如果闪烁速度仅为每小时四次,而不是每分钟四次,则意味着每年总共写入70,080次。甚至具有每字节100,000次写入能力的PIC12F635也可以持续使用45年!


在断电之前,您可以避免写入EEPROM。电容器应存储足够的电荷,以保持uC运行足够长的时间以写入当前状态。这样可以大大延长EEPROM的寿命。
MichaelS

另外,为什么不每个字节使用多个位呢?第一个字节存储7位计数数据和1位LED数据。首次写入时,将字节设置为0000001L,然后设置为0000010L,依此类推。当达到1111111L时,将下一个字节重置为全零。到达最后一个字节后,将第一个字节重置为零。然后,您的下一个读取位置是前7位为0 <7位<= 127的第一个字节,而下一个写入位置是7位<127为首的字节。现在,您几乎将访问量增加了一倍,因为( )每次写入都是单个字节,而不是两个字节。
MichaelS

@MichaelS我也想到了这一点。首先,您不能从11111110转到11111101,因为您不能写入1(我颠倒了起始条件。)相反,您将在字节中一次写入0。但是,在限制每个字节的写入次数方面,它实际上没有任何好处-您最终不得不向每个字节写入8次,而不是一次。
tcrosley

我没有使用过确切的PIC器件,但我的理解是,先擦除所有数据,然后更改不应立即默认的任何位。因此,如果“已擦除”的意思是全1,那么您将擦除所有内容并更改1-6位,甚至可能更改L。接下来,您擦除所有内容并更改1-5、7位,可能更改为L。 ,您只需更改一些位(1110110L-> 1110111L仅更改位4和L)。由于每次擦除有50%的机会,每次写入有50%的机会,因此要擦除给定的位,则平均为100%,即每个擦除/写入周期为8位。
MichaelS 2015年

使用您的方法,整个状态字节在使用前会被擦除,然后在使用时设置为零,或每个擦除/写入周期设置为16位。同时,您的整个数据字节每次擦除的机会为50%,每次写入的机会为50%,或者每个擦除/写入周期平均为8位。这样一来,每个周期总共需要24位。即使我们假设每个字节的擦除/写入周期是相等的,它仍然是两个字节而不是一个字节。(无法编辑以上评论,在最后一句话中,我指的是给定的位更改(而不是擦除)为50/50 。)
MichaelS

2

这可能是一个非常幼稚的建议……但是如何构建一个由纽扣电池驱动的低功率晶体管锁存器呢?然后使用输出的信号馈入由电源驱动的运算放大器。这样,您就可以减轻纽扣电池的负担,避免产生有用的输出。您不能在电源关闭时使用它,对吗?

编辑:另外-根据下面的评论-建议进行制作,以便在电源消失时将锁存器与运算放大器隔离。电源馈送的任何类型的继电器(或等效电路)都应该能够在此处完成工作。

考虑到一个简单的手表可以由纽扣电池驱动多年,因此给一个简单的闩锁供电应该使每个电池的使用寿命长达十年。您甚至可以并联放置两节电池,这样就可以将它们换掉(一次换一次)而不会丢失信息。


只有很少的运算放大器可以使输入端的电压高于电源电压,这在关机期间就是这种情况。
阿森纳

如果是这样的话,如果电源中断,实际上没有隔离闩锁的方法,那么是否没有办法切断运算放大器的输入呢?任何一种继电器(或等效电路)都可以解决问题,不是吗?
MichaelK

0

可以对小型CPLD进行编程,以驱动将一组简单的值写入I2C总线所需的协议。

恩智浦制造了一系列非常小的存储器,旨在替代DIP开关,例如PCA8550 / PCA9561。

结合两者,您将拥有一个很小的固态开关,可以记住它的状态。

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.