Domanda:
Resistenza EEPROM nel contatore di energia?
Debidutta Pattanaik
2014-09-14 19:24:47 UTC
view on stackexchange narkive permalink

Sto progettando un contatore di energia per la fatturazione dell'elettricità convertendo un contatore di energia analogico e contando il numero di impulsi fornito dal LED del contatore analogico. Poiché l'alimentazione può essere interrotta in qualsiasi momento, il numero di impulsi deve essere memorizzato nella memoria non volatile. Ho visto le schede tecniche di Atmel EEPROM AT24C0X e EEPROM incorporate di ATmega328 e PIC16F877A e ho scoperto che tutte hanno una resistenza in LETTURA / SCRITTURA massima di 1000000.

In questo contesto, come viene affrontato il problema della durata della EEPROM contatori di energia commerciali?

non potresti usare un altro tipo di sram?http://datasheets.maximintegrated.com/en/ds/DS1350W.pdf vanta cicli di lettura / scrittura illimitati e 10 anni di conservazione ... ovviamente ci sono chip più semplici, che utilizzano connessioni seriali spi / altri con conteggi di pin molto piccoli
[EEPROM Wear Leveling] (http://electronics.stackexchange.com/questions/60342/wear-leveling-on-a-microcontrollers-eeprom)
Cinque risposte:
Olin Lathrop
2014-09-14 21:16:47 UTC
view on stackexchange narkive permalink

Non scriverei tutti gli eventi su EEPROM. La maggior parte delle volte avrai energia, quindi mantieni il conteggio in tempo reale nella RAM.

La quantità di energia necessaria per salvare il valore in tempo reale dalla RAM alla EEPROM è piuttosto minima. Utilizzare un condensatore per immagazzinare energia sufficiente per far funzionare il micro abbastanza a lungo dopo che è stata rilevata un'interruzione di corrente per copiare i dati in tempo reale in EEPROM, quindi spegnere in modo pulito. Dovresti aver bisogno solo di qualche decina di ms al massimo, forse solo pochi ms. È inoltre necessario essere in grado di rilevare l'interruzione di corrente abbastanza presto in modo che ci sia ancora energia nel tappo per eseguire la sequenza di spegnimento pulito. Tuttavia, non dovrebbe essere difficile.

Ad esempio, supponiamo che il micro richieda 20 mA a 3,3 V (che in realtà è abbastanza alto per questo tipo di applicazione) e che lo spegnimento richieda 20 ms. Questo è (20 mA) (3,3 V) (20 ms) = 1,3 mJ. Ad esempio, un condensatore da 470 µF caricato a 12 V mantiene 34 mJ. Diciamo che normalmente si mantiene il tappo carico a 12 V e si rileva un'interruzione di corrente quando scende a 11 V. A quel punto rimangono 28 mJ. Per ottenere altri 2 mJ è necessario solo scaricarlo a 10,6 V.

Questi sono solo numeri che ho tirato fuori dall'aria come esempio. Un condensatore da 470 µF a 16 V non sarebbe un grosso problema da aggiungere al dispositivo, ma anche questo è chiaramente più del necessario in questo caso. Il punto è dimostrare che questo metodo è abbastanza fattibile.

+1, i micro sono veloci e possono rispondere in un lampo.La parte difficile nella mia mente è ironicamente perché hai a che fare con un segnale di alimentazione lento a 60 Hz, ci dovrebbe essere abbastanza spazio tra carica / scarica e qualunque sia il tuo ingresso LDO da cui innescare in modo affidabile.
+1;quella è stata la mia reazione immediata e ho iniziato a postarlo come commento;poi ho visto il tuo.Per chiunque abbia problemi a visualizzarlo, pensa al cap e al rilevamento dell'alimentazione come a un "micro UPS" che segnala al "computer" (il misuratore) che deve spegnersi in modo pulito prima che l'UPS si esaurisca.
Michael Karas
2014-09-14 20:19:13 UTC
view on stackexchange narkive permalink

La soluzione al problema è relativamente semplice. Si accumula il conteggio degli impulsi in una normale posizione della RAM. Quindi una volta ogni 10 minuti si copia il valore corrente del contatore basato su RAM su EEPROM. Utilizzando questa strategia, una EEPROM con una durata di un milione di cicli durerà circa 19 anni. Per la maggior parte dei prodotti, questo è un buon confronto con il ciclo di vita del prodotto previsto.

Se si verifica un'improvvisa perdita di potenza, al massimo perderai 10 minuti di accumulo di impulsi.

Esiste una strategia aggiuntiva che dovrebbe essere presa in considerazione per questo tipo di applicazione di EEPROM. A causa della possibilità di un'improvvisa perdita di alimentazione e di un possibile danneggiamento dell'operazione di scrittura della EEPROM, è necessario memorizzare sempre i dati nella EEPROM con un semplice codice di controllo del tipo XOR di un byte in modo da poter convalidare i dati EEPROM come buoni. Quindi, quando vai a memorizzare i dati ogni 10 minuti, memorizzi DUE copie del codice di controllo & dei dati. Assicurati che una copia sia completamente memorizzata prima di iniziare con la seconda copia. Il motivo per memorizzare le due copie è che se si verifica un'interruzione di corrente durante la scrittura di una copia, l'altra copia è ancora lì. Nel caso in cui la prima operazione di archiviazione venga danneggiata, la seconda copia conserverà i dati della precedente operazione di archiviazione di 10 minuti.

Ogni volta che il microcontrollore si avvia, leggere la prima copia dei dati dalla EEPROM nella posizione di lavoro della RAM e convalidare il suo codice di controllo. Se il controllo è corretto, procedere con il normale funzionamento del prodotto. Se il primo controllo è errato, leggere la seconda copia dei dati dalla EEPROM e controllarla. Se la copia è corretta, puoi procedere con il normale funzionamento. Nel caso improbabile che entrambi i codici di controllo siano errati, è necessario reimpostare il valore del contatore a zero e quindi informare l'ufficio in casa che si è verificato un problema.

Se il prodotto dispone di un normale processo di accensione / spegnimento avviato dall'utente, in tal caso come parte della normale sequenza di spegnimento è possibile memorizzare i dati nella EEPROM. Affinché ciò sia efficace, la richiesta di spegnimento deve arrivare come segnale al microcontrollore in modo che possa eseguire dettagli dell'ultimo secondo come questo e quindi un'uscita separata controllata dal firmware dal microcontrollore esegue effettivamente l'azione per spegnere l'alimentazione.

Ho utilizzato questo schema in più prodotti commerciali con successo. È un po 'oltre lo scopo di questa risposta discutere il semplice codice di controllo XOR di un byte che viene utilizzato per verificare la validità dei dati dalla EEPROM. Detto questo, posso condividere l'algoritmo con chiunque sia interessato.

Il contatore di energia è alimentato dalla rete elettrica. Non c'è certezza quando si interrompe l'elettricità. In caso di interruzione di corrente come affrontare la situazione?
Lo gestisci come ho descritto in dettaglio nella mia risposta.Se si spegne al massimo, si perde il conteggio degli impulsi dall'ultima operazione di memorizzazione EEPROM.Questo schema può sembrare inaccettabile per alcune persone perché puoi perdere alcuni conti, ma devi valutarli rispetto alla frequenza con cui si verifica la perdita di potenza.
Se il semplice schema EEPROM che descrivo non è "abbastanza buono", allora devi ricorrere a una RAM seriale esterna che è supportata da una cella della batteria o da un super-cap.Poiché molti prodotti hanno una funzione RTC, può essere vantaggioso selezionare il chip RTC che ha alcune celle RAM che possono essere utilizzate per questo tipo di memorizzazione dei parametri.
Per la fatturazione commerciale le perdite si moltiplicano in migliaia di dispositivi e ne conseguiranno perdite di entrate
Sì, hai ragione - SE hai migliaia di improvvise perdite di potenza.In genere non è così e la piccola perdita è facilmente giustificata dai costi di progetti di prodotti più complessi che utilizzano una batteria o una strategia di backup di tipo supercap per una RAM.I supercap sono costosi e raffinati e le batterie richiedono la sostituzione, entrambi aspetti negativi per un prodotto come quello che stai sviluppando.
Può essere sfruttato interrompendo l'alimentazione poco prima della scrittura persistente.Scrive ogni 10 minuti, interrompe solo 9 minuti dopo l'ultimo avvio - ogni 9 minuti.
Come consumatore, non essere fatturati per gli ultimi 10 minuti di alimentazione non allevierà il fatto che hai appena spento il mio potere, punto.
Ciò che il PO deve fare è l'analisi dei costi: quanto sarà il costo medio dell'energia potenzialmente non fatturata in X anni?Quanto sarà il costo di un circuito aggiuntivo per contare ogni blip?E poi chiedi ai pianificatori aziendali perché potrebbero scegliere $ 2 da pagare in X anni piuttosto che $ 1 pagato in anticipo.
Ghanima
2014-09-14 19:29:30 UTC
view on stackexchange narkive permalink

Ricordo di aver letto a distanza una nota applicativa Atmel su quell'argomento. Vedi AVR101 sulla tecnica di archiviazione EEPROM ad alta resistenza utilizzando un buffer circolare e fornendo protezione dal ripristino.

darron
2014-09-14 22:28:09 UTC
view on stackexchange narkive permalink

1.000.000 di cicli di cancellazione sono molti, ma puoi bruciarli rapidamente come te ne sei reso conto. Per letture una volta al secondo, ciò sarebbe ottenuto in 11,6 giorni.

Come già accennato, memorizzare nella RAM e poi scrivere su EEPROM solo occasionalmente è un modo.

Un altro modo è per utilizzare FLASH EEPROM. Con FLASH è solo il conteggio delle cancellazioni che conta. Puoi scrivere molte volte trasformando 1 in 0 senza penalità. Se hai solo poche letture e quantità relativamente grandi di spazio FLASH, puoi usare i record.

Cancella i dati, lasciando tutti 0xFF.

Per le scritture: scrivere in sequenza nello spazio EEPROM. Quando sei pieno, cancella tutto e ricomincia. Se il valore dei dati è tutti 0xFF, devi modificarlo di un LSB per evitare di sembrare un record vuoto. Nel tuo caso, si tratterebbe comunque di una condizione di overflow.

Per le letture: cerca il record all-0xFFs e fai il backup di uno. Se raggiungi la fine e non ci sono tutti i record 0xFFs, l'ultima posizione è quella.

La resistenza FLASH è solitamente inferiore ... diciamo 100.000. Tuttavia, un semplice FLASH da 1 Mbit avrebbe abbastanza spazio per quasi 104 anni di archiviazione utilizzando questo metodo.

Per un prodotto commerciale come questo, dovresti avere la sicurezza in caso di interruzione di corrente sulle scritture EEPROM. Aggiungi il rilevamento di interruzioni di alimentazione e una potenza di backup sufficiente (supercap, qualunque sia) per completare un'operazione di scrittura ... o esegui le scritture in modo sicuro. Per fare ciò, è possibile dividere la EEPROM in due metà, alternare le metà durante le scritture e scrivere un CRC con il record di dati. La lettura cercherà l'ultimo record in entrambe le pagine con un CRC valido. Le metà devono essere allineate al blocco di cancellazione per sicurezza.

Le utility di solito vogliono qualcosa di più della semplice potenza totale utilizzata, però. Considera l'idea di tenere traccia di quanti conteggi / secondo ottieni e memorizza anche questi numeri. La maggior parte delle utility addebita anche ai clienti commerciali in base alla potenza massima di cui hanno bisogno in un dato intervallo di circa 15 minuti.

TMa
2014-09-14 23:31:24 UTC
view on stackexchange narkive permalink

Ho avuto un problema simile quando avevo bisogno di memorizzare i dati sullo stato di runtime. Uso la RAM ferromagnetica I2C F-RAM ( http://uk.farnell.com/ramtron/fm24c04b-g/fram-4k-i2c-8soic/dp/2077745?Ntt=2077745). La resistenza è di fatto illimitata (10 ^ 14 letture / scritture). Il prezzo è superiore alla normale EEPROM ma comunque conveniente.



Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 3.0 con cui è distribuito.
Loading...