Atualmente, estou trabalhando em um projeto incorporado no qual tenho um contador que estará ativo o tempo todo. Se a energia cair, também tenho que armazenar o último status do contador e carregá-lo novamente na próxima inicialização. De modo que eu estava planejando usar a EEPROM na qual escreverei continuamente meu valor de contador. Mas li em algum lugar que a EEPROM tem resistência de leitura / gravação em cerca de 100.000 e atualizarei esse contador provavelmente 120.000 por 24 horas. Então, eu estou encontrando alternativas para realizar essa tarefa. por favor me dê sua sugestão para fazer o mesmo.
8
Respostas:
Outra solução poderia ser usar um microcontrolador com FRAM não volátil. O FRAM não sofre as mesmas limitações nos ciclos de gravação da EEPROM.
Alguns dos produtos MSP430 da TI estão disponíveis com o FRAM. Aqui está um link para um aplicativo semelhante ao que você descreve:
MSP430 com FRAM salvar estado em falha de energia
Aqui está o artigo da Wikipedia sobre FRAM: FRAM
fonte
Eu tenho esse problema em um projeto atual.
A maneira como estou lidando com isso é manter o valor ao vivo do contador na RAM. Eu adicionei um pouco de hardware para que o microcontrolador possa detectar que a tensão bruta de entrada é baixa. Nesse caso, ele interrompe o que está fazendo, salva o valor do contador ao vivo na EEPROM e aguarda assistindo a tensão de energia bruta. Se voltar, com alguma histerese, o micro será reiniciado essencialmente. Caso contrário, se a energia continuar diminuindo, o micro acabará parando. Na próxima reinicialização, o valor do contador é carregado da EEPROM e, em seguida, usado ao vivo na RAM novamente até a próxima inicialização.
Não demora muito para escrever um pequeno valor na EEPROM. Provavelmente, o sistema de fonte de alimentação existente possui armazenamento de energia suficiente para detectar a tensão baixa e ainda ter tempo de execução garantido suficiente antes que a energia do micro fique abaixo do limite de operação ou de gravação da EEPROM.
No meu caso, o único hardware adicional era um diodo Schottky para impedir que a fonte de alimentação CC sugasse a carga do reservatório local no caminho para baixo e dois resistores como divisor de tensão para que o micro possa ler a tensão de entrada bruta. O resto é firmware.
É importante observar que você deve observar a tensão na entrada para qualquer fonte de alimentação final que alimenta o micro, e não a voltagem do micro diretamente. Quando o último estiver baixo, pode ser tarde demais. Esperamos que haja uma faixa de tensão abaixo do pior caso, quando tudo estiver funcionando corretamente, e acima do que a fonte de alimentação do micro precisa para garantir a tensão regulada para o micro. No meu caso, o suprimento do micro era um regulador de fanfarrão alimentado a partir de 48 V, então há uma grande variedade abaixo do normal, mas onde o micro ainda pode operar de maneira confiável.
fonte
Solução antiga antiga, contador CMOS + bateria de lítio ou Ram + bateria de lítio.
A fonte de alimentação do elemento de armazenamento vem da fonte de alimentação normal quando está disponível ou da bateria quando não está.
Muitos micros modernos no sono manterão seu estado com uma fonte de corrente muito baixa. Portanto, você pode usar esta técnica com a detecção de desligamento para dormir e, em seguida, use uma bateria para manter o estado durante o período de sono enquanto a fonte principal estiver desligada.
fonte
O microchip possui uma série de partes I 2 C "EERAM" que permitem que os dados sejam armazenados na SRAM e depois gravados na EEPROM (usando a energia armazenada em um capacitor) quando a energia é perdida, e carregada quando a energia retornar. Parece que seria perfeito para a sua aplicação.
Um exemplo representativo dessas peças é o 47L04 .
fonte
Outra solução.
Detecte a energia desligada e use uma supercap ou não super cap para manter a energia por alguns milissegundos. Use esse tempo para escrever seu valor de contador na EPROM. Escreva apenas na EPROM ao desligar. Número de ciclos de EPROM = não de ciclos de desligamento.
fonte
Use um chip FRAM como o FM24C04B. Eles têm uma resistência de gravação muito alta e não são voláteis.
https://www.mouser.com/ds/2/100/001-84446_FM24C04B_4_KBIT_512_X_8_SERIAL_I2C_F-RAM-477782.pdf
Você também pode usar um módulo SRAM (NVRAM) com bateria. Por exemplo M48Z02-150PC1
https://www.mouser.com/ds/2/389/m48z02-955115.pdf
fonte
Eu decidi ir com o "ds1307 RTC". Porque possui 54 bytes de SRAM com suporte de energia. que permite um ciclo infinito de leitura / gravação.
fonte
Se o seu projeto incorporado tiver NIC, envie seu contador para o computador / servidor remoto. Parece que 120.000 iterações em 24 horas são cerca de uma iteração em 0,72 segundos, devem estar OK para o tráfego de rede.
O servidor sempre terá o último valor do contador armazenado. Não há corrupção de valor contrário na perda de energia, pois é necessário emitir um pacote válido para atualizar o valor no servidor; no entanto, requer conectividade constante ou um protocolo de tempo limite especial deve ser projetado. Além disso, como bônus, você poderá controlar seu dispositivo remotamente, se necessário.
fonte
A) Use um capacitor de 100 µF (ou maior) para ligar o contador durante o tempo desligado. Ou qualquer lógica necessária para manter o valor do contador.
B) Use memórias com núcleo magnético ; elas podem ser um pouco difíceis de configurar.
C) Faça um potenciômetro controlado por motor (como um servo); em algum momento seu contador transbordará, certo? Mapeie para 360 graus. Em seguida, faça um loop de feedback para que você possa definir o valor do potenciômetro digitalmente e lê-lo digitalmente.
D) Envie seu valor do contador uma vez a cada minuto para algum servidor ou servidores e deixe que eles se lembrem do valor para você durante o tempo de folga. Depois que a energia voltar, recupere o valor do contador.
fonte