Pytanie:
Wytrzymałość EEPROM w liczniku energii?
Debidutta Pattanaik
2014-09-14 19:24:47 UTC
view on stackexchange narkive permalink

Projektuję licznik energii na potrzeby rozliczania energii elektrycznej poprzez konwersję analogowego licznika energii i zliczanie ilości impulsów podawanych przez diodę miernika analogowego. Ponieważ zasilanie może zostać odcięte w dowolnym momencie, liczba impulsów musi być przechowywana w pamięci nieulotnej. Widziałem arkusze danych Atmel EEPROM AT24C0X i wbudowane EEPROMY ATmega328 i PIC16F877A i stwierdziłem, że wszystkie mają wytrzymałość ODCZYTU / ZAPISU maksymalnie 1000000.

W tym kontekście, jak rozwiązano problem trwałości EEPROM w komercyjne liczniki energii?

nie mógłbyś użyć innego rodzaju sram?http://datasheets.maximintegrated.com/en/ds/DS1350W.pdf oferuje nieograniczone cykle odczytu / zapisu i 10 lat przechowywania ... oczywiście są prostsze chipy, które wykorzystują spi / inne połączenia szeregowe z bardzo małą liczbą pinów
[EEPROM Wear Leveling] (http://electronics.stackexchange.com/questions/60342/wear-leveling-on-a-microcontrollers-eeprom)
Pięć odpowiedzi:
Olin Lathrop
2014-09-14 21:16:47 UTC
view on stackexchange narkive permalink

Nie zapisywałbym każdego zdarzenia do EEPROM. Przez większość czasu będziesz mieć moc, więc licz na żywo w pamięci RAM.

Ilość energii potrzebnej do zapisania wartości na żywo z pamięci RAM do EEPROM jest dość minimalna. Użyj kondensatora, aby zmagazynować wystarczającą ilość energii do pracy mikro wystarczająco długo po wykryciu awarii zasilania, aby skopiować dane w czasie rzeczywistym do EEPROM, a następnie zamknij czysto. Powinieneś potrzebować najwyżej kilku 10 sekund, może tylko kilku ms. Musisz również być w stanie wykryć awarię zasilania wystarczająco wcześnie, aby w nasadce nadal była energia do wykonania sekwencji czystego wyłączania. Nie powinno to być jednak trudne.

Na przykład, powiedzmy, że mikro wymaga 20 mA przy 3,3 V (co w rzeczywistości jest dość wysokie dla tego rodzaju aplikacji), a wyłączenie trwa 20 ms. To (20 mA) (3,3 V) (20 ms) = 1,3 mJ. Na przykład nasadka 470 µF naładowana do 12 V mieści 34 mJ. Powiedzmy, że normalnie utrzymujesz nasadkę naładowaną do 12 V i wykrywasz awarię zasilania, gdy spadnie do 11 V. W tym momencie pozostało 28 mJ. Aby wydobyć 2 więcej mJ, wystarczy spuścić je do 10,6 V.

To są tylko liczby, które wyciągnąłem z powietrza jako przykład. Nasadka 470 µF 16 V nie byłaby wielkim problemem do dodania do urządzenia, ale nawet to jest wyraźnie więcej niż to konieczne w tym przypadku. Chodzi o to, aby pokazać, że ta metoda jest całkiem wykonalna.

+1, micros są szybkie i mogą reagować błyskawicznie.Najtrudniejsze w moim umyśle jest jak na ironię, ponieważ masz do czynienia z wolnym sygnałem mocy 60 Hz, musiałby być wystarczający zapas między ładowaniem / rozładowaniem a tym, co twoje wejście LDO ma niezawodnie wyzwolić.
+1;to była moja natychmiastowa reakcja i zacząłem pisać to jako komentarz;wtedy zobaczyłem twoje.Każdy, kto ma problemy z wizualizacją tego, może pomyśleć o nasadce i wykrywaniu mocy jako o „mikro-UPS-ie”, który sygnalizuje „komputerowi” (miernikowi), że powinien się dokładnie wyłączyć, zanim UPS się wyczerpie.
Michael Karas
2014-09-14 20:19:13 UTC
view on stackexchange narkive permalink

Rozwiązanie problemu jest stosunkowo proste. Gromadzisz liczbę impulsów do zwykłej lokalizacji w pamięci RAM. Następnie raz na 10 minut kopiujesz aktualną wartość licznika opartego na pamięci RAM do EEPROM. Stosując tę ​​strategię, pamięć EEPROM o wytrzymałości na milion cykli będzie działać przez około 19 lat. W przypadku większości produktów jest to dobre porównanie z oczekiwanym cyklem życia produktu.

Jeśli nastąpi nagła utrata mocy, stracisz co najwyżej 10 minut akumulacji liczby impulsów.

Istnieje dodatkowa strategia, którą należy wziąć pod uwagę w przypadku tego typu zastosowania EEPROM. Ze względu na możliwość nagłej utraty zasilania i możliwego uszkodzenia operacji zapisu EEPROM, należy zawsze przechowywać dane w pamięci EEPROM z prostym jednobajtowym kodem kontrolnym typu XOR, aby można było dobrze zweryfikować dane EEPROM. Następnie, gdy idziesz do przechowywania danych co 10 minut, przechowujesz DWIE kopie danych kodu kontrolnego &. Upewnij się, że jedna kopia jest w całości zachowana przed rozpoczęciem drugiej kopii. Powodem przechowywania obu kopii jest to, że w przypadku utraty zasilania podczas zapisywania jednej kopii, druga kopia nadal tam jest. W przypadku, gdy jest to pierwsza operacja przechowywania, która zostanie uszkodzona, druga kopia zachowa dane z poprzednich 10 minut operacji przechowywania.

Zawsze, gdy mikrokontroler uruchamia się, odczytaj pierwszą kopię danych z pamięci EEPROM do lokalizacji roboczej RAM i sprawdź poprawność jej kodu kontrolnego. Jeśli sprawdzenie jest OK, przejdź do normalnej pracy produktu. Jeśli pierwszy test wypadł źle, wczytaj drugą kopię danych z EEPROM i sprawdź. Jeśli ta kopia okaże się OK, możesz kontynuować normalną pracę. W mało prawdopodobnym przypadku oba kody kontrolne są nieprawidłowe, musisz zresetować wartość licznika do zera, a następnie powiadomić biuro domowe, że wystąpił problem.

Jeśli produkt ma normalny proces włączania / wyłączania zainicjowany przez użytkownika, w ramach normalnej sekwencji wyłączania można w takim przypadku zapisać dane w pamięci EEPROM. Aby było to skuteczne, żądanie wyłączenia zasilania musi przyjść jako sygnał do mikrokontrolera, aby mógł wykonać takie szczegóły w ostatniej sekundzie, a następnie oddzielne wyjście sterowane oprogramowaniem układowym z mikrokontrolera faktycznie powoduje wyłączenie zasilania.

Użyłem tego schematu w wielu produktach komercyjnych, aby odnieść sukces. Omówienie prostego jednobajtowego kodu kontrolnego XOR, który jest używany do sprawdzania ważności danych z pamięci EEPROM, wykracza nieco poza zakres tej odpowiedzi. To powiedziawszy, mogę udostępnić ten algorytm każdemu, kto jest zainteresowany.

Licznik energii jest zasilany prądem elektrycznym. Nie ma pewności, kiedy nastąpi zanik prądu. W przypadku awarii zasilania, jak sobie z tym poradzić?
Zajmiesz się tym, jak szczegółowo opisałem w mojej odpowiedzi.Jeśli zasilanie wyłączy się co najwyżej, stracisz zliczanie impulsów od ostatniej operacji pamięci EEPROM.Ten schemat może wydawać się nie do przyjęcia dla niektórych ludzi, ponieważ możesz stracić część zliczeń, ale musisz rozważyć to z częstotliwością utraty mocy.
Jeśli prosty schemat EEPROM, który opisuję, jest „niewystarczająco dobry”, musisz skorzystać z zewnętrznej szeregowej pamięci RAM, która jest zabezpieczona ogniwem baterii lub super-cap.Ponieważ wiele produktów ma funkcję RTC, korzystne może być wybranie układu RTC, który ma kilka komórek RAM, które można wykorzystać do tego typu przechowywania parametrów.
W przypadku rozliczeń komercyjnych straty mnożą się do tysięcy urządzeń i spowodują utratę przychodów
Tak, masz rację - JEŚLI masz tysiące nagłych strat mocy.Zwykle jednak tak nie jest, a niewielką stratę można łatwo uzasadnić kosztami bardziej złożonych projektów produktów, które wykorzystują strategię tworzenia kopii zapasowych typu bateryjnego lub superkapkowego dla pamięci RAM.Supercaps są drogie i kosztowne, a baterie wymagają wymiany - obie te sytuacje są negatywem dla produktu, który tworzysz.
Można to wykorzystać, przerywając zasilanie na krótko przed trwałym zapisem.Zapisuje co 10 minut, po prostu przerywa 9 minut po ostatnim uruchomieniu - co 9 minut.
Jako konsument, brak opłaty za ostatnie 10 minut zasilania nie złagodzi faktu, że właśnie wyłączyłeś moje zasilanie, kropka.
To, co musi zrobić OP, to analiza kosztów: ile będzie średniego kosztu potencjalnie niezafakturowanej energii w ciągu X lat?Ile będzie kosztować dodatkowy obwód do liczenia każdego błysku?A potem zapytaj planistów biznesowych, ponieważ mogą wybrać 2 dolary do zapłaty w ciągu X lat zamiast 1 dolara płatnego z góry.
Ghanima
2014-09-14 19:29:30 UTC
view on stackexchange narkive permalink

Pamiętam zdalnie, że przeczytałem notatkę aplikacji Atmel na ten temat. Zobacz AVR101 o technice High Endurance EEPROM Storage przy użyciu okrągłego bufora i zapewniającej ochronę przed resetowaniem.

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

1 000 000 cykli wymazywania to dużo, ale możesz to szybko wypalić, jak zdałeś sobie sprawę. W przypadku odczytów wykonywanych raz na sekundę byłoby to 11,6 dnia.

Jak już wspomniano, przechowywanie w pamięci RAM, a następnie zapisywanie w pamięci EEPROM tylko od czasu do czasu jest jednym ze sposobów.

Innym sposobem jest używać FLASH EEPROM. W przypadku FLASH liczy się tylko liczba kasowań. Możesz pisać wiele razy zamieniając jedynki na 0 bez żadnych kar. Jeśli masz tylko kilka odczytów i stosunkowo dużą ilość miejsca w pamięci FLASH, możesz użyć rekordów.

Usuń dane, pozostawiając je wszystkie 0xFF.

Do zapisu: Zapisuj sekwencyjnie w przestrzeni EEPROM. Kiedy będziesz pełny, usuń wszystko i zacznij od nowa. Jeśli wszystkie twoje dane mają wartość 0xFF, musisz zmienić ją o jeden LSB, aby nie wyglądać jak pusty rekord. W twoim przypadku i tak byłby to warunek przepełnienia.

Do odczytu: Poszukaj rekordu all-0xFF i wykonaj kopię zapasową. Jeśli dojdziesz do końca i nie ma rekordu all-0xFFs, to ostatnia pozycja.

Wytrzymałość FLASH jest zwykle niższa ... powiedzmy 100 000. Jednak zwykła pamięć FLASH 1Mbit wystarczyłaby na prawie 104 lata przechowywania przy użyciu tej metody.

W przypadku produktu komercyjnego takiego jak ten, zapisy EEPROM powinny być zabezpieczone przed awarią zasilania. Albo dodaj wykrywanie awarii zasilania i wystarczającą moc rezerwową (superkapę, cokolwiek), aby zakończyć operację zapisu ... lub wykonaj zapisy w sposób bezpieczny. Aby to zrobić, możesz podzielić EEPROM na dwie połowy, zamieniać je naprzemiennie na połowy podczas zapisu i napisać CRC z rekordem danych. Odczyt będzie szukał najnowszego rekordu na dowolnej stronie z prawidłowym CRC. Dla bezpieczeństwa połówki muszą być wyrównane do wymazywania i blokowania.

Jednak przedsiębiorstwa użyteczności publicznej zwykle chcą czegoś więcej niż tylko całkowitej zużytej mocy. Rozważ śledzenie liczby zliczeń na sekundę, a także zapisz te liczby. Większość mediów pobiera opłaty od klientów komercyjnych w oparciu o maksymalną moc, jakiej potrzebują w danym 15-minutowym odstępie czasu.

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

Miałem podobny problem, gdy potrzebowałem przechowywać dane o stanie środowiska wykonawczego. Używam ferromagnetycznej pamięci RAM F-RAM I2C ( http://uk.farnell.com/ramtron/fm24c04b-g/fram-4k-i2c-8soic/dp/2077745?Ntt=2077745). Wytrzymałość jest zdecydowanie nieograniczona (10 ^ 14 odczytów / zapisów). Cena jest wyższa niż normalna EEPROM, ale nadal wygodna.



To pytanie i odpowiedź zostało automatycznie przetłumaczone z języka angielskiego.Oryginalna treść jest dostępna na stackexchange, za co dziękujemy za licencję cc by-sa 3.0, w ramach której jest rozpowszechniana.
Loading...