logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak zredukować pobór mocy w projekcie z AVR ATMega165P i kartą MMC?

mzielin 02 Lip 2006 09:20 3249 20
REKLAMA
  • #1 2782511
    mzielin
    Poziom 22  
    Posty: 483
    Pomógł: 31
    Ocena: 16
    Projekt wstępnie będzie zawierał: ( już zresztą pracuje ! )
    AVR ATMega165P (picopower) - procesor główny
    ADS1101 - przetwornik 16 bit
    ADG704 - multiplekser sygnałów wejściowych
    Karta MMC 32MB do przechowywania danych z przetworników.
    Do tego parę innych elementów, ale najbardziej newralgicznym elementem będzie zwykła bateria CR2032 ;).

    Bedzie to autonomiczny "kolektor danych" z pamięcią próbek na 365 dni, pełny pomiar co 10s, dlatego taka duża pamięć.

    W tej chwili mam zaimplementowane:
    - tryb power down w procesorze ( 0,1 - 0,2 uA)
    - przetwornik ADS po 4 pomiarach przechodzi w tryb stand-by ( < 1 uA)
    - multipleksera nie wyłączam ( ok. 0,6 uA )
    - karta MMC po zapisie ma wyłączane zasilanie (klucz pmos) ( < 2 uA )

    Algorytm zbiera działa następująco:
    Procesor budzi się co 10 sekund, pobiera 4 próbki, zapisuje je do RAMU, idzie "spać"... co 15 minut włącza zasilanie do karty MMC, dokonuje zapisu do karty 600 bajtów (system plików FAT), wyłącza kartę ... idzie spać.

    Najwięcej prądu pożera karta MMC ok. 9 mA, musiałem poszukać sterego typu, bo nowe potrafią ciągnąć po 40-50 mA ;).

    No i teraz problem - "mocy ubywaj" ;) - ponieważ pojemność CR2032 to około 220-250 mAh. Natomiast mój system potrzebowałby w tej wersji około 300 mAh, więc każda propozycja zmniejszenia poboru mocy byłaby dla mnie zbawieniem. Propozycje wymiany na np: MSP430F2131 odpada - za mało je znam, a nie mam czasu na naukę, zresztą pobór mocy AVR w wersji picopower jest podobny.

    Dodatkowo system komunikuje się z komputerem poprzez USB (patent Igora Cesko ), ale wtedy pobiera zasilanie z portu USB, więc mocy mam wtedy .. aż nadto. [/img]
  • REKLAMA
  • #2 2782668
    adamusx
    Poziom 27  
    Posty: 977
    Pomógł: 94
    Ocena: 28
    Najbardziej pradozerna w tym przypadku jest karta pamieci wiec nie wiem czy wiele da sie tu zdzialac. Mozesz doonywac zapisu na karte rzadziej, np co pol godziny. Mozesz tez zmniejszyc czestotliwosc taktowania procesora.
  • #3 2782910
    Xitami
    Poziom 29  
    Posty: 1130
    Pomógł: 118
    Ocena: 31
    Ile kosztuje CR2032? ;-)
  • #4 2783121
    august_a
    Poziom 21  
    Posty: 572
    Pomógł: 32
    Ocena: 4
    Cytat:
    Ile kosztuje CR2032?


    ok 3-6zł zależy gdzie kupujesz...
  • #5 2785140
    mzielin
    Poziom 22  
    Posty: 483
    Pomógł: 31
    Ocena: 16
    Zmniejszyć częstotliwości zapisu do MMC nie mogę, kłania się pojemność wewnętrznej RAM. EEPROM wewnętrzny odpada - za duży pobór prądu.
    Częstotliwość zegara na 32 kHz dobre ... ale wtedy nie będę miał komunikacji na USB. Program i tak ma do wykonania ileś tam rozkazów .. więc nie wiem czy warto wydłużać czas pracy procesora, kosztem obniżenia taktowania.
    Co do dowcipów o CR2032 ;) - akumulator do zasilania ruskich zegarków elektronicznych o pojemności 1000 Ah odpada - nie zmieści się :). Do urządzenia wejdzie jedynie CR... a serio moze się zdażyć, że nikt nie zajrzy tam przez rok.
  • #6 2786184
    marek_Łódź
    Poziom 36  
    Posty: 3103
    Pomógł: 208
    Ocena: 66
    Nie masz miejsca na większą baterię, a zatem pewnie nie bardzo możesz coś dobudować do układu. Z bardzo pobieżnych obliczeń wyszło mi, że na zapis 600 bajtów danych masz koło sekundy. Za mało?

    Pierwszy ruch jaki się nasuwa to rezygnacja z FATa (i tak dane zapisujesz sekwencyjnie). Odpadnie czas na obsługę FATa i dojdzie trochę miejsca na rozszerzenie bufora danych, a tym samym wydłużenia okresów między zapisami.

    NI w swoich systemach pomiarowych stosuje prostą "kompresję" danych w postaci pasma nieczułości i zapisu/transferu danych dopiero po wyjściu poza to pasmo, ale to już "wyższy intelekt".

    Drastycznym cięciem byłoby zastosowanie pamięci FRAM, które co prawda pobierają trochę więcej prądu, ale za to czasy zapisu pozwalają skrócić okres aktywności wielokrotnie. Z powodu znaczącego poboru prądu w standbye należałoby je po chamsku odłączać w okresie bezczynności. Być może kombinacja takiej pamięci i karty SD/MMC pozwoliłoby zmniejszyć pobór mocy.
  • REKLAMA
  • #7 2786344
    diag
    Poziom 29  
    Posty: 1401
    Pomógł: 45
    Ocena: 209
    A jaki to proces rejestrujesz. może 16 bit to nie konieczne ?
  • REKLAMA
  • #8 2787763
    mzielin
    Poziom 22  
    Posty: 483
    Pomógł: 31
    Ocena: 16
    Niestety, 16 bit jest konieczne - to akurat nie mój wymysł.
    Obsługę FAT'a własnie zdążyłem uprościć. Powróciłem do metody którą juz kiedyś stosowałem. Tworzę system plików na PC, a mikrokontroler modyfikuje jedynie niektóre bajty w obszarze FAT, długość pliku, no i wpisuje bajty danych. Nie robiłem jeszcze prób, ale powinno mi to zmniejszyć zapotrzebowanie na energię.
    Poeksperymentuje jeszcze ze statycznymi pamięciami CMOS.
  • #9 2789142
    marek_Łódź
    Poziom 36  
    Posty: 3103
    Pomógł: 208
    Ocena: 66
    Jeszcze jeden wariant systemu plików - rejestracja na karcie realizowana w 100% sekwencyjnie a FAT zaimplementowany w dodatkowym procesorze komunikacyjnym zasilanym z USB. Od strony PC będzie to wyglądało jak normalne pliki pecetowskie, od strony rejestratora będzie to zwykły bufor cykliczny. Dodatkowo procesor komunikacyjny może realizować konwersję formatu (np. do pliku tekstowego, wstawiać znaczniki, wykrywać zdefiniowane zdarzenia itp.).

    Pomysł rodem z Tworek (takie pomysły są najciekawsze) ;-) - zasilić całość (albo wspomóc) z APM czyli anteny (np kawałka ferrytu z cewką albo kawałka drutu) z prostownikiem diodowym i kondensatorem. Gdzieś na elektrodzie widziałem procesor pracujący na takim zasilaniu. Jako prostownik można wykorzystać wewnętrzne diody na porcie procesora, czyli w sumie - kawał drutu do portu, duża pojemność na Vcc plus jakiś Zener i bateryjka niepotrzebna. ;-) ;-)
  • #10 2790598
    mkaczor
    Poziom 16  
    Posty: 97
    Pomógł: 13
    Nie znam parametrów AVR ATMega165P (picopower) ale może jest możliwe zasilanie MMC bezpośrednio z któregoś wyjścia procesora ustawionego na 1. Nie tracisz wtedy blisko 2µA.
    mzielin napisał:
    Niestety, 16 bit jest konieczne - to akurat nie mój wymysł.

    Może zamiast rejestrować przez 15min. 16 bitów można by zrobić jeden pomiar 16-to bitowy i przez pół godziny rejestrować nie pomiary a tylko 8-mio bitowe zmiany wartości względem niego? (Inna wersja to rejestrować tylko 7-mio bitowe zmiany a na 8-mym bicie wpisywać informację, że zmiana przekroczyła 7-em bitów i teraz trzeba było zarejestrować 16-cie bitów). Oczywiście zysk może być iluzoryczny bo teraz trzeba zapisać do MMC 1200 bajtów co może trwać prawie dwa razy dłużej.
  • REKLAMA
  • #11 2790609
    mzielin
    Poziom 22  
    Posty: 483
    Pomógł: 31
    Ocena: 16
    Zasilanie - idea niezła ;)
    Co do FAT'a - jednym z zamysłów jest to, że w każdej chwili można tą kartę wyjąć i dać "mundremu urzędasowi" np: z sanepidu i niech ją sobie obrabia EXCELL'em ;)
  • #12 2792997
    Nawigator
    Poziom 33  
    Posty: 1923
    Pomógł: 167
    Ocena: 160
    A jakby ten uP był 256K i pisał próbki do flasha i przez to rzadziej załączał kartę? Wprawdzie flash ma małą trwałość ale jak jest go więcej? Poza tym jak dany bajt się nie zmienił (a to w takich systemach akwizycji reguła) to go nie wpisujemy i oszczedzamy komórkę. Może go wystarczy na kilka lat?
    Pozdr. N.
  • #13 2796299
    KontrolM
    Poziom 12  
    Posty: 50
    Ocena: 7
    a nie mozesz dać wiekszej baterii z serii CR ? model o tej samej srednicy tylko grubszy ?
  • #14 2797440
    mzielin
    Poziom 22  
    Posty: 483
    Pomógł: 31
    Ocena: 16
    Mogę, ale to już będzie ostateczność ;)
    Najpierw zrobię co mogę.
  • #15 4180234
    Xaveri
    Poziom 17  
    Posty: 460
    Pomógł: 13
    Ocena: 77
    Czy mógłbyś udostępnić fragmenty kodu odpowiedzialne za obsługę karty pamięci ? Chciałbym zrobić rejestrator podobny do Twojego tylko bez AD - miałby rejestrować temperaturę z dwóch ds18b20 co minutę przez pół roku.
  • #16 4181033
    BoskiDialer
    Poziom 34  
    Posty: 1530
    Pomógł: 353
    Ocena: 42
    Prąd pobierany przez mikrokontroler można zmniejszyć poprzez zmniejszenie prędkości zegara rdzenia - "CLKPR – Clock Prescale Register" (strona 35). Dane najlepiej było by zbierać w porcjach po 512B, tyle co sektor karty pamięci. Sam sposób przechowywania danych jest uzależniony od cech próbkowanego sygnału - jeśli wszystkie próbki są niezależne, to trzeba je przechowywać w całości, jeśli są wolnozmienne, można przechowywać próbkę zbiorczą i poszczególne delty, jeśli sygnał jest wolnozmienny w długim zakresie czasu, to można przechowywać np deltę w 5 bitach, liczbę powtórzenia się wartości w 2, jeden do sygnalizacji, czy bajt jest próbką częściową, można też blok próbek przechowywać w dłuższej sekwencji - jeden bajt wskazujący długość bloku, pierwsza próbka jest wartością referencyjną, kolejne to delty lub delty+liczba powtórzeń próbki (zysk jest taki, że na długim bloku tracimy tylko 8 bitów na wskazywanie długości bloku, zamiast średnio po jednym bicie na bajt) - głównie odpowiednie pakowanie danych zmniejszy liczbę zapisów do pamięci. Jeśli układ ma być energooszczędny, to zdecydowanie zrezygnował bym z możliwości obsługi USB, gdyż wymaga to kwarcu 12MHz lub więcej... na czas zgrywania danych lepiej by było zastosować jakąś przejściówkę, coś w rodzaju dodatkowego, odłączalnego układu, który zamieniał by strumień z pakietów usb na proste ramki formatu rs232 (w standardzie ttl) lub komunikacja po SPI - prędkość transmisji można by dostosować do pracy na zegarze 32768Hz, ewentualnie na wewnętrznym 1MHz. Praca na kwarcu 12MHz ciągle tylko po to, żeby raz rok (?) można było zgrać zawartość... jest troche bez sensu.. a wogóle może nie trzeba żadnego interfejsu, skoro dane mają być zapisywane na kartę? wyciągnąć kartę i zgrać bezpośrednio z niej?
  • #17 4186787
    Ch.M.
    Poziom 27  
    Posty: 1009
    Pomógł: 62
    Ocena: 15
    Więc tak: zmniejszanie prędkości procka to iluzoryczne oszczędności, ponieważ o wiele więcej stracisz przy zapisie tych informacji, które zabrałeś na kartę (ona najwięcej pożera prądu)
    Zrób tak:
    1) zwiększ prędkość procka do maksymalnej, przy której działa komunikacja) Wzrost prędkosci avra jest wprost proporcjonalny do zużycia energii ale nie wzrasta 2krotnie lecz nieco mniej przy podwojeniu prędkości. Dzięki temu zapiszesz cos duuuzo szybciej i zaoszczędzisz więcej w dłuższym okresie czasu.

    2) Bateria ma pojemność 200-300mAh ale przy określonym poborze prądu. Jeśli zmniejszymy go mocno okarze się, że pojemność jej wynosi 1Ah a samowyładowywanie ogniwa zabiera więcej energii niż zapotrzebowanie procka.

    3) Grupuj dane pobrane z przetworników w pakiet, który jest gromadzony na EEPROMie i wysyłany z niego powiedzmy raz dziennie o północy do karty, lub po naciśnięciu przycisku.

    Nie sugeruj się poborem prądu chwilowym, bo może sie okazać, że ważniejsze parametry to temperatura pracy czy wilgotność otoczenia

    Inna sprawa to rozdzielczość... 16bitów aby Ci na prawde jest potrzebne do rejestrowania temperatury?? czy masz taki szeroki zakres? Jak znam życie to zakres użyteczny nie przekracza 40stopni a rozdzielczość rzędu 0,2st.C jest akceptowalna, czyli w 8bitach się zmieścisz. Ewentualnie zapis różnicowy: o północy pełna 16biotwa cyfra, a kolejne zapisy będą różnicowe 8-bitów.

    Pozdrawiam
  • #18 4188882
    BoskiDialer
    Poziom 34  
    Posty: 1530
    Pomógł: 353
    Ocena: 42
    ad 1/ Zwiększanie prędkości procka? Jeśli pojawią się pętle opóźniające, to w tym samym czasie procek zużyje więcej energii na wykonywanie pustej pętli (więcej instrukcji). Inaczej trzeba by na czas opóźnień (najlepiej wszystkich) usypiać procka. Jeśli w kodzie nie będzie żadnych opóźnień, to jeśli przy większej szybkości procek pochłania mniej mocy w przeliczeniu na cykl, to czemu by nie - wg diagramów z dokumentacji to ma sens (ale czy diagramy uwzględniają pobór prądu rezonatora?)

    ad 3/ gromadzenie w eepromie... pomyślmy... zapis jednej komórki pamięci eeprom trwa 3.5ms, z diagramu "PROGRAMMING CURRENT vs. Vcc" dla 3V czytamy, że napięcie programujące to 5mA (nie sprecyzowane, czy flash czy eeprom)... w takim sam zapis komórek do pamięci eeprom jako preparowanie sektora, zajęło by zaledwie.. 2 sekundy łącznie przy 5mA... to chyba lepiej jednak zapisywać bezpośrednio na kartę mmc - tutaj przynajmniej zapis jest całym sektorem. Jeśli chodziło tobie jednak o zewnętrzny eeprom np na i2c, to wtedy prąd programujący wynosi od 3mA do 5mA z tym plusem, że tyczy się to całej strony... Jakkolwiek pamięć mmc ma stronę o rozmiarze 512B, a ramu w procku jest dość, aby zebrać cały sektor... Tak czy inaczej eeprom odpada.
  • #19 4189089
    Ch.M.
    Poziom 27  
    Posty: 1009
    Pomógł: 62
    Ocena: 15
    BoskiDialer
    Rezonator nie ciągnie MegaWatów energii więc nie masz co sie nim przejmować. Zasilanie 2,7 czy 3V ewentualnie jeszcze mniej (ograniczenie od strony karty MMC)

    Tak jak ktos wcześniej doradził, nie wiem po co ten klucz P_MOS, skoro masz wyprowadzenia procka wolne :) Jak sie martwisz wydajnością prądową to podłącz kilka pinoutów jako zasilanie karty
    Nowe procki maja opcję całkowitego wyłączania pod programem nieużywanych peryferiów z której wypada skorzystać :)

    no może z eepromem przegiąłem bo się nad tym nie zastanawiałem ale jeśli chodzi o opóźnienia czasowe to powiedz mi jakie sa potrzebne przy gromadzeniu i obróbce danych? (ja nie znajduję specjalnie zastosowania dla takowych) Nawet przy zapisie danych na kartę nie ma chyba zbyt dużych zwłok a jeśłi takowe nawet sa, to tak jak napisałeś można wybudzać na żądanie przesyłu kolejnej paczki (przerwanie od SPI)

    Pozdrawiam
  • #20 4189374
    DXFM
    Poziom 20  
    Posty: 340
    Pomógł: 39
    Ocena: 26
    Nie wiem co to za przetwornik ADS1101, ale jeśli konwersja trwa relatywnie długo, można wejść w power down i czekać na przerwanie. W jakim trybie procesor czeka przerwę 10s?
  • #21 4189475
    Ch.M.
    Poziom 27  
    Posty: 1009
    Pomógł: 62
    Ocena: 15
    Nie sadze ze 10s, jeśli chodzi Ci o przerwanie od watchdoga to wynosi ono 8s w nowszych układach a w starszych tylko 2s. A jeśli chodzi o power down to procesor czeka juz tylko na określone przerwania ( w przypadku tego układu jest to stan niski na INT0 lub spełniony warunek startu USI) Nowsze procki budzi sie jeszcze zazwyczaj timerem watchdoga oraz przerwaniami z innych pinow

    Nie wiem jaki jest sens używania przetwornika zewnętrznego o takiej dużej rozdzielczosci (chyba, ze potrzebujemy duzy zakres i duza dokładnosc pomiarów, lub wymiary i odległość)

Podsumowanie tematu

LABEL_AI_GENERATED
Dyskusja dotyczy optymalizacji poboru mocy w autonomicznym rejestratorze danych opartego na mikrokontrolerze AVR ATMega165P (picopower), przetworniku ADS1101 16-bit, multiplekserze ADG704 oraz karcie MMC 32MB do zapisu próbek co 10 sekund przez rok. Kluczowym ograniczeniem jest zasilanie z baterii CR2032. Obecnie zastosowano tryb power down procesora (0,1-0,2 µA), ADS1101 w trybie stand-by (
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA