Độ bền EEPROM trong đồng hồ năng lượng?


7

Tôi đang thiết kế một đồng hồ năng lượng cho mục đích thanh toán tiền điện bằng cách chuyển đổi một đồng hồ năng lượng tương tự và đếm số lượng xung được cung cấp bởi đèn LED của máy đo tương tự. Vì nguồn có thể bị cắt bất cứ lúc nào, số lượng xung phải được lưu trữ trong bộ nhớ không bay hơi. Tôi đã xem các bảng dữ liệu của Atmel EEPROM AT24C0X và các EEPROMS sẵn có của ATmega328 và PIC16F877A, và thấy tất cả đều có độ bền READ / WRITE tối đa 1000000.

Trong bối cảnh này, vấn đề về độ bền của EEPROM được giải quyết như thế nào trong các máy đo năng lượng thương mại?


2
bạn không thể sử dụng một số loại sram khác? datasheets.maximintegrated.com/en/ds/DS1350W.pdf tự hào có chu kỳ đọc / ghi không giới hạn và lưu giữ 10 năm ... tất nhiên có những con chip đơn giản hơn, sử dụng các kết nối nối tiếp / spi khác với số lượng pin rất nhỏ
Grady Player

1
Cân

Câu trả lời:


16

Tôi sẽ không viết mọi sự kiện cho EEPROM. Hầu hết thời gian bạn sẽ có nguồn điện, vì vậy hãy giữ số đếm trực tiếp trong RAM.

Lượng năng lượng cần thiết để lưu giá trị trực tiếp từ RAM vào EEPROM là khá nhỏ. Sử dụng một tụ điện để lưu trữ đủ năng lượng để chạy micro đủ lâu sau khi phát hiện mất điện để sao chép dữ liệu trực tiếp vào EEPROM, sau đó tắt sạch. Bạn chỉ cần vài giây 10 giây, có thể chỉ vài ms. Bạn cũng cần có khả năng phát hiện mất điện đủ sớm để vẫn còn năng lượng trong nắp để thực hiện chuỗi tắt máy sạch. Điều này không nên khó khăn mặc dù.

Ví dụ: giả sử micro yêu cầu 20 mA ở mức 3,3 V (thực sự khá cao đối với loại ứng dụng này) và việc tắt máy mất 20 ms. Đó là (20 mA) (3,3 V) (20 ms) = 1,3 mJ. Ví dụ, một nắp 470F được nạp vào 12 V giữ 34 mJ. Giả sử bạn thường giữ nắp được sạc ở mức 12 V và phát hiện mất điện khi xuống đến 11 V. Tại thời điểm đó, nó còn 28 mJ. Để có thêm 2 mJ ra chỉ cần rút hết 10,6 V.

Đây chỉ là những con số tôi rút ra khỏi không khí làm ví dụ. Một nắp 16 V 470F sẽ không phải là một vấn đề lớn để thêm vào thiết bị, nhưng thậm chí điều đó rõ ràng là cần thiết hơn trong trường hợp này. Vấn đề là cho thấy phương pháp này khá khả thi.


2
+1, micros rất nhanh và có thể phản hồi trong nháy mắt. Điều khó khăn trong tâm trí tôi là trớ trêu thay vì bạn đang xử lý tín hiệu năng lượng chậm 60 Hz, cần có đủ khoảng trống giữa sạc / xả và bất cứ điều gì đầu vào LDO của bạn đáng tin cậy để kích hoạt.
Nick T

+1; đó là phản ứng ngay lập tức của tôi và tôi bắt đầu đăng nó như một bình luận; sau đó tôi thấy bạn Đối với bất kỳ ai gặp khó khăn khi hình dung điều này, hãy nghĩ về nắp và phát hiện năng lượng như một "micro UPS" báo hiệu cho "máy tính" (đồng hồ) rằng nó nên tắt sạch trước khi hết UPS.
keshlam

8

Giải pháp cho vấn đề tương đối đơn giản. Bạn tích lũy số xung đến một vị trí RAM thông thường. Sau đó cứ sau 10 phút, bạn sao chép giá trị hiện tại của bộ đếm dựa trên RAM vào EEPROM. Sử dụng chiến lược này, EEPROM với độ bền một triệu chu kỳ sẽ kéo dài khoảng 19 năm. Đối với hầu hết các sản phẩm, đây là một so sánh tốt với vòng đời sản phẩm dự kiến.

Nếu bạn bị mất điện đột ngột thì nhiều nhất bạn sẽ mất 10 phút tích lũy xung.

Có một chiến lược bổ sung cần được tính đến cho loại ứng dụng EEPROM này. Do khả năng mất điện đột ngột và có thể xảy ra sự cố hoạt động ghi EEPROM, bạn nên luôn lưu trữ dữ liệu vào EEPROM bằng mã kiểm tra loại XOR một byte đơn giản để bạn có thể xác thực dữ liệu EEPROM là tốt. Sau đó, khi bạn đi lưu trữ dữ liệu cứ sau 10 phút, bạn lưu trữ HAI bản sao dữ liệu & kiểm tra mã. Đảm bảo rằng một bản sao được lưu trữ hoàn toàn trước khi bắt đầu bản sao thứ hai. Lý do lưu trữ hai bản sao là vì nếu mất điện xảy ra trong khi viết một bản thì bản sao kia vẫn còn đó. Trong trường hợp đó là thao tác lưu trữ đầu tiên bị hỏng, bản sao thứ hai sẽ giữ lại dữ liệu từ hoạt động lưu trữ 10 phút trước đó.

Bất cứ khi nào bộ điều khiển vi mô của bạn khởi động, hãy đọc bản sao đầu tiên của dữ liệu từ EEPROM vào vị trí làm việc của RAM và xác thực mã kiểm tra của nó. Nếu kiểm tra là OK thì tiến hành hoạt động bình thường của sản phẩm. Nếu kiểm tra đầu tiên là xấu thì hãy đọc bản sao thứ hai của dữ liệu từ EEPROM và kiểm tra nó. Nếu bản sao đó kiểm tra OK thì bạn tốt để tiến hành hoạt động bình thường. Đối với trường hợp không thể xảy ra, cả hai mã kiểm tra đều xấu, bạn phải đặt lại giá trị truy cập của mình về 0 và sau đó thông báo cho văn phòng tại nhà rằng có vấn đề.

Nếu sản phẩm của bạn có quá trình bật / tắt do người dùng khởi tạo bình thường thì là một phần trong trình tự tắt nguồn bình thường, bạn có thể lưu trữ dữ liệu vào EEPROM trong trường hợp đó. Để điều này có hiệu quả, yêu cầu tắt nguồn phải là tín hiệu cho vi điều khiển để nó có thể thực hiện bất kỳ chi tiết thứ hai cuối cùng nào như thế này và sau đó một đầu ra điều khiển phần sụn riêng biệt từ vi điều khiển thực sự làm cho hành động tắt nguồn.

Tôi đã sử dụng chương trình này trong nhiều sản phẩm thương mại để thành công tốt đẹp. Một chút vượt quá phạm vi của câu trả lời này để thảo luận về mã kiểm tra XOR một byte đơn giản được sử dụng để kiểm tra tính hợp lệ của dữ liệu từ EEPROM. Điều đó nói rằng tôi có thể chia sẻ thuật toán đó với bất cứ ai quan tâm.


Đồng hồ năng lượng được cung cấp bởi nguồn điện. Không có gì chắc chắn khi mất điện. Trong trường hợp mất điện, làm thế nào để tôi giải quyết tình huống này?
Debidutta Pattanaik

1
Bạn xử lý nó như tôi mô tả chi tiết trong câu trả lời của tôi. Nếu mất điện nhiều nhất bạn sẽ mất tích lũy số xung kể từ hoạt động lưu trữ EEPROM cuối cùng. Sơ đồ này có vẻ không được chấp nhận đối với một số người vì bạn có thể mất một số lượng nhưng bạn phải cân nhắc với mức độ thường xuyên xảy ra mất điện.
Michael Karas

2
Nếu sơ đồ EEPROM đơn giản mà tôi mô tả là "không đủ tốt" thì bạn phải sử dụng RAM nối tiếp bên ngoài được sao lưu từ một pin hoặc siêu nắp. Vì nhiều sản phẩm có chức năng RTC, nên có thể thuận lợi khi chọn chip RTC có một số ô RAM có thể được sử dụng cho loại lưu trữ tham số này.
Michael Karas

1
Có bạn đúng - NẾU bạn bị mất điện đột ngột 1000. Thông thường, đó không phải là trường hợp và tổn thất nhỏ dễ dàng được chứng minh dựa trên chi phí của các thiết kế sản phẩm phức tạp hơn sử dụng chiến lược sao lưu loại pin hoặc siêu tụ điện cho RAM. Supercaps là đắt tiền và finniky và pin yêu cầu thay thế - cả hai đều là tiêu cực cho một sản phẩm như bạn đang phát triển.
Michael Karas

1
Là một người tiêu dùng, việc không được lập hóa đơn trong 10 phút cuối của quyền lực sẽ không làm giảm bớt sự thật rằng bạn chỉ cần tắt điện, thời gian của tôi.
Nick T

3

Tôi nhớ từ xa để đọc một ghi chú ứng dụng Atmel về chủ đề đó. Xem AVR101 về kỹ thuật Lưu trữ EEPROM độ bền cao bằng cách sử dụng bộ đệm tròn và cung cấp bảo vệ thiết lập lại.


3

1.000.000 chu kỳ xóa là rất nhiều, nhưng bạn có thể ghi nó ra một cách nhanh chóng như bạn đã nhận ra. Đối với các bài đọc một lần một giây, điều đó sẽ được đáp ứng trong 11,6 ngày.

Như đã đề cập, việc lưu trữ trong RAM sau đó chỉ ghi vào EEPROM là một cách.

Một cách khác là sử dụng FLASH EEPROM. Với FLASH, chỉ có số lần xóa mới là vấn đề. Bạn có thể viết nhiều lần biến 1 thành 0 mà không bị phạt. Nếu bạn chỉ có một vài bài đọc và lượng không gian FLASH tương đối lớn, bạn có thể sử dụng các bản ghi.

Xóa dữ liệu, để lại tất cả 0xFF.

Đối với ghi: Viết tuần tự vào không gian EEPROM. Khi bạn đầy, xóa tất cả và bắt đầu lại. Nếu giá trị dữ liệu của bạn là tất cả 0xFF, bạn phải thay đổi nó bằng một LSB để tránh trông giống như một bản ghi trống. Trong trường hợp của bạn, dù sao đó cũng là một điều kiện tràn.

Để đọc: Hãy tìm bản ghi all-0xFFs và sao lưu một bản ghi. Nếu bạn đạt đến cuối và không có bản ghi tất cả 0xFF, vị trí cuối cùng là nó.

Độ bền của FLASH thường thấp hơn ... khoảng 100.000. Tuy nhiên, một FLASH 1Mbit đơn giản sẽ có đủ dung lượng cho gần 104 năm lưu trữ bằng phương pháp này.

Đối với một sản phẩm thương mại như thế này, bạn nên có sự cố mất điện an toàn trên ghi EEPROM. Hoặc thêm phát hiện sự cố mất điện và đủ năng lượng dự phòng (siêu tụ điện, bất cứ điều gì) để hoàn thành thao tác ghi ... hoặc thực hiện ghi theo cách không an toàn. Để làm điều này, bạn có thể chia EEPROM thành hai nửa, xen kẽ giữa các nửa trên ghi và viết CRC với bản ghi dữ liệu. Việc đọc sẽ tìm bản ghi mới nhất trong một trong hai trang có CRC hợp lệ. Các nửa phải được xóa khối căn chỉnh cho an toàn.

Các tiện ích thường muốn nhiều hơn chỉ là tổng công suất sử dụng, mặc dù. Cân nhắc theo dõi số lượng / giây bạn nhận được và lưu trữ những con số này. Hầu hết các tiện ích đều tính phí khách hàng thương mại dựa trên công suất tối đa họ cần trong bất kỳ khoảng thời gian 15 phút nào.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.