Elektroda.pl
Elektroda.pl
X
Adex Agregaty
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Obliczenie poboru prądu z baterii + optymalizacja kodu

Śledziu 18 Mar 2012 12:20 3571 26
  • #1 18 Mar 2012 12:20
    Śledziu
    Poziom 12  

    Chciałbym w tym temacie poruszyć dwa problemy z jakimi się zmagam.
    Pierwszy:
    To obliczenie poboru prądu układu pracującego na baterii-zastanawiam sie czy dobrze to robię;
    Drugi:
    Optymalizacja kodu tak aby był pobór prądu był krótszy.

    Układ składa się z M8 (taką akurat mam pod ręka docelowo będzie zastąpione nowszym procesorem z picopower) wzmacniacza operacyjnego, czujnika i RFM22b.
    Założenia są taki aby wybudzić procesor dokonać pomiaru ADC i wysłać dane co 1s.

    W celu zmierzenia poboru prądu wstawiłem szeregowo rezystor 1Ω - 1% - mierząc na nim spadek napięcia.
    oglądając oscylogram mogę wyróżnić następujące funkcje:
    czas trwania / prąd
    wybudzenia 65µs / 4,08mA
    wlaczenie układów 20µs / 10,7mA
    ADC 85µs / 8mA
    inne i sleep 35µs / 11,1mA

    aby obliczyć ładunek Q, muszę pomnożyć czas * prąd i zsumować
    wynik jest = 1,5477µAs
    do tego dochodzi samo wysłanie inf. - postępując wyżej wymienionego schematu
    otrzymuje Q=30,59µAs
    no i czas między wybudzeniami procesora z trybu power_save będzie równy 1s-(czas_pomiaru)-(czas_wysłania) =0,995425, M8 pobiera około 15µA, czyli=14,93µAs

    Sumując wszystko razem =1,5477µAs+30,59µAs+14,93µAs=47,06µAs
    Zakładam że zasilę układ baterią 3,6V - 2400mAh, po przekształceniach wychodzi mi że bateria starczy mi na ≈5,8lat.
    i w jaki sposób odnieść wynik 47,06µAs do linku (zaczerpnięte ze strony http://mikrokontrolery.blogspot.com) poniżej gdzie są chyba podane średnie prądy a ja mam ładunek muszę jakoś pozbyć się czasu :)

    Link
    Obliczenie poboru prądu z baterii + optymalizacja kodu
    Druga część problemu to działanie samego programu, procesor taktuje wew. rezonatorem 2MHz, (przy 1MHz wszystko działa jeszcze dłużej)

    po wybudzeniu uP potrzebuje aż 65µs żeby wykonać operacja przejścia do procedury włączenia układów peryferyjnych oraz obslugi przetwornika ADC, podczas pomiaru uP jest usypiany (dokonuje tylko jednego pomiaru - I tu ważne pytanie jak dla mnie pomiar jest za długi, prze taktowałem przetwornik do 250kSPS
    czy może warto się przesiąść na inny uP żeby było szybciej - może koledzy by coś zaproponowali?
    )
    czy jest możliwość skrócenia np. "wybudzania" a może warto przejść na napisanie tego programu w ASM?
    Za wszelkie uwagi będę wdzieczny.

    0 26
  • Adex Agregaty
  • #2 18 Mar 2012 13:19
    excray
    Poziom 39  

    Czytam już trzeci raz Twój post i dalej nie wiem o co Ci chodzi. Może zwiększ nacisk na stawianie przecinków oraz skup się na konkretach - czego od nas oczekujesz, a daruj sobie niepotrzebne rozpisywanie się. Poza tym ładunek się mierzy w C - kulombach a nie uAs.

    0
  • #3 18 Mar 2012 13:56
    dondu
    Moderator Mikrokontrolery Projektowanie

    Jest to wykres pokazujący przede wszystkim, na jak długi czas wystarczy pojemność baterii (ładunek w niej zawarty) przy danym średnim równomiernym poborze prądu. I to oczywiście rozumiesz prawidłowo.

    Przy obliczaniu okresu pracy baterii w trybie niejednolitego w czasie poboru prądu, po prostu sumujesz ładunek ciągnięty z baterii w czasie i dochodzisz do momentu, w którym ładunek w baterii się wyczerpuje. I tak właśnie robisz.

    Innymi słowy jeżeli Twój projekt ma powtarzalne zużycie ładunku w ciągu 1s, to dzielisz nominalną pojemność baterii, przez wartość zużycia i wychodzi Ci wynik w ilości porcji ładunku, które wyciągniesz z baterii.

    Przykład:
    mam baterię i pojemności 2000As
    zużywam ładunek 1As.
    ilość porcji ładunku: 2000As / 1As = 2000 porcji ładunku.

    Skoro 1 porcja odpowiadała zużyciu w ciągu 1s, to jeżeli będę tak rozładowywać baterię, to wystarczy ona na 2000s.

    Oczywiście daje to tylko przybliżony okres, ponieważ masz wiele dodatkowych zmiennych:
    - nierównomierność poboru prądu w czasie,
    - spadek napięcia baterii pod koniec jej okresu żywotności,
    - spadek napięcia przy większych prądach, który może wywołać reset mikrokontrolera, (szczególnie gdy energii w baterii zostało niewiele),
    - temperatura otoczenia w momencie pracy oraz w całym okresie jej żywotności,
    - optymalny pobór prądu dla danej baterii,
    - zjawisko samorozładowania baterii (uwzględnione na wykresach),
    - ... może jeszcze o czymś nie napisałem.


    Jak sądzę, jesteś świadomy, że ten wykres dotyczy konkretnej baterii, i że powinieneś sprawdzić na wykresach tej, którą zastosujesz w swoim projekcie - piszę to na wszelki wypadek :)
    Załącz ten wykres to rzucimy na niego okiem.


    Co do drugiego pytania o czas pomiaru i budzenia, to proponuję rozmawiać na temat docelowego procesora o którym wspominasz, bo rozwiązania tam dostępne mogą dawać o wiele większe możliwości.

    PS.
    Link podałeś uszkodzony.


    EDIT:

    excray napisał:
    Poza tym ładunek się mierzy w C - kulombach a nie uAs.

    1C to ładunek elektryczny przepływający w czasie 1s przez przewodnik, w którym płynie prąd o natężeniu 1A, czyli:
    Q = I * t
    1C = 1A * 1s = 1As

    0
  • #4 18 Mar 2012 15:52
    excray
    Poziom 39  

    dondu napisał:
    1C to ładunek elektryczny przepływający w czasie 1s przez przewodnik, w którym płynie prąd o natężeniu 1A, czyli:
    Q = I * t
    1C = 1A * 1s = 1As

    Zgadza się. I to jest 1C. A As pospolicie używa się do pojemności akumulatorów i to wyłącznie w wymiarze mAh/Ah. Więc określanie ładunku zużytego przez jakieś urządzenie w As ma się tak jak określanie oporności w V/A. Gdybyście sprowadzili te obliczenia do kulombów we wszystkich płaszczyznach to byłyby dużo prostsze czyli i pojemność baterii w C i zużycie ładunku w ciągu sek w C. A właśnie to że operujecie w As powoduje wskazane niejasności.

    0
  • Adex Agregaty
  • #5 18 Mar 2012 15:56
    dondu
    Moderator Mikrokontrolery Projektowanie

    excray napisał:
    Zgadza się. I to jest 1C. A As raczej używa się do pojemności akumulatorów i to raczej w wymiarze mAh/Ah. Więc określanie ładunku zużytego przez jakieś urządzenie w As ma się tak jak określanie oporności w V/A.

    Użycie przez autora tematu jednostki As zamiast C, jest jak najbardziej właściwe ze względu na obliczenia jakie robi, a do których wprowadzanie jednostki jaką jest Kulomb którą Ty proponujesz, przeszkadza w zrozumieniu istoty sposobu obliczania, o który pytał autor.

    Innymi łatwiej temat wytłumaczyć na As niż C, ponieważ zarówno bateria jaki i pomiary zużycia prądu operują amperami i sekundami.

    0
  • #6 18 Mar 2012 15:57
    excray
    Poziom 39  

    dondu napisał:
    Innymi łatwiej temat wytłumaczyć na As niż C.

    Wręcz odwrotnie. Zamień sobie wszystko na C łącznie z pojemnością akumulatora i jeszcze raz wykonaj obliczenia. Bułka z masełkiem.

    0
  • #7 18 Mar 2012 15:59
    dondu
    Moderator Mikrokontrolery Projektowanie

    excray napisał:
    Wręcz odwrotnie. Zamień sobie wszystko na C łącznie z pojemnością akumulatora i jeszcze raz wykonaj obliczenia. Bułka z masełkiem.

    Zobacz jakie jednostki są na wykresie, jakie używa autor i nie zaśmiecaj tematu niepotrzebną dyskusją.

    0
  • #8 18 Mar 2012 16:02
    excray
    Poziom 39  

    Pojemność 2,7Ah = 9720C
    W ciągu sekundy urządzenie zużywa łądunek 47,06uAs=47,06uC
    Czyli 9720/0,00004706 = ... = 6,55 lat pracy
    Banał.

    0
  • #9 18 Mar 2012 16:07
    dondu
    Moderator Mikrokontrolery Projektowanie

    I po co wykonywać dodatkowe przeliczenia z As na C skoro ich nie trzeba?

    Nie bez powodu wszelkie kalkulatory poboru ładunku przez mikrokontrolery operują czasem i prądem, w sposób pokazany przez autora tematu, który nie wykonuje niepotrzebnego przeliczania na Kulomby. Chcesz to sobie przeliczaj. Autor robi poprawne obliczenia i operuje wykresami bez zbędnego przeliczania na Kulomby.

    0
  • #10 18 Mar 2012 16:22
    excray
    Poziom 39  

    dondu napisał:
    I po co wykonywać dodatkowe przeliczenia z As na C skoro ich nie trzeba?

    Właśnie widać w pierwszym poście po co. Autor tak się zagmatwał w swoich obliczeniach że po kilkunastu linijkach obliczeń zaczął prosić o pomoc i sprawdzenie. Wszystko tylko dlatego że nie użył odpowiednich jednostek i operował na As gdzie właśnie ten iloczyn w jednostce go gubił. Dondu ja rozumiem że to wszystko jest niezrozumiałe dla Ciebie ale zamiast się kłócić i spierać po prostu sięgnij po podręcznik od fizyki. Wszystko jest do zrozumienia tylko kwestia chęci.

    0
  • #11 18 Mar 2012 16:33
    dondu
    Moderator Mikrokontrolery Projektowanie

    excray napisał:
    Właśnie widać w pierwszym poście po co. Autor tak się zagmatwał w swoich obliczeniach że po kilkunastu linijkach obliczeń zaczął prosić o pomoc i sprawdzenie.

    Autor robi kilka kroków ponieważ sumuje czasy pracy mikrokontrolera przy danym zużyciu prądu. Ta czynność jest niezbędna do określenia ładunku pobranego z akumulatora i jest taka sama dla Ciebie jak i autora. Ty wykorzystałeś do obliczeń wykonane przez niego kroki wykorzystując już policzony przez niego sumaryczny ładunek.

    Jeżeli uważasz, że jest inaczej przedstaw krok po kroku swoje wyliczenia na bazie warunku początkowych - wykonasz dokładnie te same obliczenia + zbędne przeliczanie na kulomby.

    excray napisał:
    Dondu ja rozumiem że to wszystko jest niezrozumiałe dla Ciebie ale zamiast się kłócić i spierać po prostu sięgnij po podręcznik od fizyki. Wszystko jest do zrozumienia tylko kwestia chęci.

    A ja proponuję abyś rozpisał dokładnie wszystkie poszczególne obliczenia i zobaczysz że masz ich więcej ponieważ dodatkowo przeliczasz na kulomby.
    proponuję także abyś znalazł sobie kalkulatory obliczeń dla mikrokontrolerów i zobaczył czym operują. Do kompletu weź sobie do ręki datasheet mikrokontrolera i szukaj tam kulombów.

    Innymi słowy skoro bateria i mikrokontroler mają podane dane w As i dodatkowo mikrokontroler pobiera różne prądy w różnych odcinkach czas, to nie ma sensu przeliczać je na C, tylko po to, żeby zaspokoić chęć stosowania C. Chcesz, to tak rób.

    Obliczenie poboru prądu z baterii + optymalizacja kodu

    Możesz także zmienić w swoim aucie licznik na mph. Tylko będziesz musiał dokonywać dodatkowych przeliczeń, by dostosować swoją prędkość do znaków w km/h - tylko po co skoro można mieć licznik km/h?

    I bez prywatnych wycieczek proszę, bo tej pory miałem Ciebie za osobą na poziomie, ale widzę, że chyba niesłusznie.

    0
  • #12 18 Mar 2012 17:15
    Krauser
    Poziom 26  

    Co do kodu i innych wyborów, które pomogą ograniczyć pobór prądu.
    1. Jak najniższe napięcie zasilania, ważne jeśli jest dodatkowy stabilizator.
    2. Wewnętrzny generator RC - bo wybudzanie z Power Down trwa 6 cykli a dla rezonatora kwarcowego 16 tysięcy cykli.
    3. Praca z jak największą częstotliwością, ale należy dobrać częstotliwość do napięcia zasilania, bo przy 1,8V atmega88PA może być taktowane tylko do 4MHz, a dopiero przy 2,7V do 10MHz itd. Praca przy dużej częstotliwości pozwoli wykonać te same czynności zużywając mniej energii np. przy 4V i 1MHz pobór wynosi 0,7mA, a przy 8MHz 3mA. Jak widać 8-krotne zwiększenie szybkości nie pociągnie 8-krotnego zwiększenia prądu (tylko 4,3 razy) .
    4. W programie należy wyłączyć zbędne peryferia, bo są domyślnie załączone. Rejestr PRR lub funkcja w avr-gcc i nie ma potrzeby przechodzić na asembler.
    5. USART - tu koniecznie trzeba sprawdzić poprawność komunikacji w zakresie temperatur pracy urządzenia (szkoda, że w AVRach nie można zmienić źródła taktowania programowo jak w Cortexach ). Teoretycznie, aby odebrać coś konieczna jest praca w trybie aktywności, ale w praktyce można używać USARTu w trybie power down.
    6. Ogólnie sama budowa programu również wiele może zmienić w poborze prądu. Każde _delay_ms to bezsensowna strata energii, a można obniżyć taktowanie i użyć timera lub watchdoga. Działanie na pełnych obrotach powinno być możliwie krótkie.
    7. Są jeszcze inne rzeczy warte uwagi np. wewnętrzne napięcie odniesienia (lepiej użyć napięcia zasilania zwłaszcza przy zasilaniu baterią litową), do czego są dołączone porty we/wy, ale to wszystko bardzo zależy od wymagań konkretnej aplikacji.

    0
  • #13 18 Mar 2012 20:00
    dondu
    Moderator Mikrokontrolery Projektowanie

    Krauser napisał:
    3. Praca z jak największą częstotliwością, ... Praca przy dużej częstotliwości pozwoli wykonać te same czynności zużywając mniej energii np. przy 4V i 1MHz pobór wynosi 0,7mA, a przy 8MHz 3mA. Jak widać 8-krotne zwiększenie szybkości nie pociągnie 8-krotnego zwiększenia prądu (tylko 4,3 razy) .

    Niestety nie do końca, ponieważ łączny zużyty ładunek jest większy przy działaniu z większa prędkością, co bardzo fajnie pokazali inżynierowie Atmela w prostym eksperymencie: http://mikrokontrolery.blogspot.com/2011/01/bateria-zasila-mikrokontroler-czesc-2.html
    Warto poeksperymentować, by znaleźć optymalne rozwiązanie.

    Poza tym układ należy rozpatrywać łącznie z baterią, która także ma swoje parametry prądowo-napięciowe, co opisałem w cz. 1 artykułu z linku. Jeżeli nie weźmie się tego pod uwagę, to można się mocno zdziwić.

    0
  • #14 18 Mar 2012 20:20
    Śledziu
    Poziom 12  

    Dziękuje kolegom za zainteresowanie tematem.

    Cytat:
    Sumując wszystko razem =1,5477µAs+30,59µAs+14,93µAs=47,06µAs

    Czyli, wszystko dobrze policzyłem.
    Rozumie ze wynik 47,06µAs mogę podstawić bezpośrednio do zamieszczonej charakterystyki rozładowania baterii?

    W projekcie docelowo chce użyć Atemgi88P (ale zawsze można zmienić).
    Na obecną chwilę mam wszystko wyłączone co jest nie zbędne, porty jako wyj. itd... Z racji że chce wszystko zasilić z baterii 3,6V nie wkomponowałem w ukłąd żadnego regulatora napięcia (może jednak warto?).
    W pierwszej wersji programu taktowałem µP - 1MHz ale jak zobaczyłęm ile czasu potrzebuję na wykonanie poszczególnych procedur (np wysłanie danych po SPI) to szybko przeszedłem na 2MHz.

    Na chwilę obecną "przeszkadza" mi zbyt długi czas konwersji przez przetwornik ADC, bo gdybym chciał zrobić nadpróbkowanie to czas znacznie się wydłuża.
    Stąd pytanie jaki µP możecie polecić, na którym mógłbym to wykonać.
    Jutro wkleję oscylogramy.

    0
  • #15 18 Mar 2012 20:35
    Krauser
    Poziom 26  

    Ciekawe jak wypadł by test z 4MHz. Dondu jednak mnie nie przekonał. Swoją drogą nie używał bym BODa jeśli zasilanie jest z baterii litowej. Podobnie regulator nie jest potrzebny jeśli jej używasz. Dopiero, gdy w grę wchodzi bateria alkaliczna np. 9V trzeba użyć dobry stabilizator np. LT3009.

    0
  • #16 19 Mar 2012 01:09
    dondu
    Moderator Mikrokontrolery Projektowanie

    Krauser napisał:
    Ciekawe jak wypadł by test z 4MHz.

    Możesz wykonać we własnym zakresie. Jak już wspomniałem w poprzednim poście - trzeba robić pomiary a nie tylko opierać się na wykresach.

    Krauser napisał:
    Dondu jednak mnie nie przekonał.

    To nie ja robiłem eksperyment tylko producent - Atmel, więc to jego inżynierowie Ciebie nie przekonali :)

    Krauser napisał:
    Swoją drogą nie używał bym BODa jeśli zasilanie jest z baterii litowej. Podobnie regulator nie jest potrzebny jeśli jej używasz. Dopiero, gdy w grę wchodzi bateria alkaliczna np. 9V trzeba użyć dobry stabilizator np. LT3009.

    Zasilanie można rozwiązać na wiele sposobów, jednym z nich jest stosowanie dodatkowych układów będących pompami ładunku, które z baterii rozładowanej nawet do 0,35V potrafią wyciągnąć 3,3V, by zasilić uC, prądem nawet do 100mA. I o tym właśnie pisałem powyżej, ponieważ charakterystyka baterii nawet litowej idealną nie jest i bez takich pomp pozostanie w niej spory ładunek, którego już nie wykorzystasz.

    ------------------------------

    Śledziu napisał:
    Rozumie ze wynik 47,06µAs mogę podstawić bezpośrednio do zamieszczonej charakterystyki rozładowania baterii?

    Tak, ale z pewnym przybliżeniem z powodów, które przyczyny wypunktowałem w pierwszym poście oraz w artykule.

    Śledziu napisał:
    W projekcie docelowo chce użyć Atemgi88P (ale zawsze można zmienić).
    Na obecną chwilę mam wszystko wyłączone co jest nie zbędne, porty jako wyj. itd... Z racji że chce wszystko zasilić z baterii 3,6V nie wkomponowałem w ukłąd żadnego regulatora napięcia (może jednak warto?).

    Najpierw sprawdź charakterystykę baterii, dopiero później można zastanawiać się nad tym, czy się opłaci.

    Poza tym dobra alternatywą może być pompa z ogniwem 1,2V ale o znacznie większej pojemności niż ta 3,6V. Objętość (gabaryty) będą te same, ale czas pracy takiego tandemu może być o wiele dłuższy - po to zaprojektowano takie pompy.


    Śledziu napisał:
    W pierwszej wersji programu taktowałem µP - 1MHz ale jak zobaczyłęm ile czasu potrzebuję na wykonanie poszczególnych procedur (np wysłanie danych po SPI) to szybko przeszedłem na 2MHz.

    Robisz to na przerwaniach i usypiasz kiedy się da?

    Śledziu napisał:
    Na chwilę obecną "przeszkadza" mi zbyt długi czas konwersji przez przetwornik ADC, bo gdybym chciał zrobić nadprubkowanie to czas znacznie się wydłuża.

    Do takich spraw warto stosować mikrokontrolery posiadające możliwość zmiany prędkości zegara w trakcie jego działania.


    Śledziu napisał:
    Stąd pytanie jaki µP możecie polecic na którym mógłbym to wykonać.

    Ja pracuję z takimi projektami na PICach, więc w doborze Atmela z głowy nie pomogę :)

    0
  • #17 19 Mar 2012 08:04
    Śledziu
    Poziom 12  

    Obiecane zdjęcie
    Przedstawia pojedynczy pomiar. Wybudzenie - zasilanie układów - konwersja- inne i sleep.

    Cytat:
    Ja pracuję z takimi projektami na PICach, więc w doborze Atmela z głowy nie pomogę

    Możesz jakiś procek zaproponować? O PIC'ach nie mam bladego pojęcia:
    Ważne żeby miał ADC 10bit,SPI i Timer, nic mi więcej nie potrzeba.
    Obliczenie poboru prądu z baterii + optymalizacja kodu

    0
  • #18 19 Mar 2012 13:13
    94075
    Użytkownik usunął konto  
  • #19 19 Mar 2012 13:50
    Halkilor
    Poziom 15  

    albertb napisał:

    Tylko założenia tak rozumianego eksperymentu są błędne.
    Przy działaniu z większą prędkością prąd się oczywiście zwiększa, czego nikt nie neguje.
    Ale procesor może działać krócej i to kompensuje zwiększony pobór prądu.


    To jest uwzględnione w tym eksperymencie, gdyż procek zasilany jest z kondensatora i mierzony jest czas na ile wystarczy jedno ładowanie kondensatora.

    0
  • #20 19 Mar 2012 13:58
    94075
    Użytkownik usunął konto  
  • #21 19 Mar 2012 14:19
    dondu
    Moderator Mikrokontrolery Projektowanie

    albertb napisał:
    Ale procesor może działać krócej i to kompensuje zwiększony pobór prądu.

    No właśnie nie jest to regułą, co opisałem w artykule podając przykłady :)
    Łączny zużyty ładunek przy mniejszej prędkości może być mniejszy, a nie większy.

    Jako, że temat oszczędzania baterii jest mi bardzo bliski, z ciekawości prawie rok temu po dość burzliwej dyskusji na forum w tym temacie, wykonałem podobne doświadczenie z tym, że bez transmisji, a sprawdzanie momentu zaprzestania pracy obserwowałem na analizatorze stanów logicznych. Wynik był podobny do Atmelowskiego, wolniejszy zegar zużywał mniejszy ładunek ze źródła zasilania niż przy pracy z większą częstotliwością.

    Może w wolnej chwili powtórzę ten eksperyment i zamieszczę jego wyniki, choć oczywiście będzie to tylko wynik przy jakichś konkretnych założeniach parametrów. Przy innych może być inny.


    albertb napisał:
    Procesor wysyła tak samo długo, choć przy większej prędkości mógłby wysłać 4 razy szybciej a pozostały czas spać nic nie robiąc i pobierając znikomy prąd.

    Ale nie takie były założenia tego eksperymentu - założenie mówiły jasno, że układ ma wykonać co sekundę:

    Cytat:
    The code is meant to simulate a sensor device that transmits data once a second. After the initialization (which will differ with each optimization method), the code will enter an infinite loop.

    This loop is separated into stages:
    1. ADC conversion
    2. Simulated 1000 cycles of processing
    3. Convert number in to ASCII string
    4. Send data over UART (More oomph to your amps, picoPower! [iteration nr])
    5. Repeat

    Inne założenia będą miały inne wyniki i nie można ich porównywać do wyników tego eksperymentu.

    albertb napisał:
    Ale może działać krócej, gdy wyniki będziemy wysyłać szybciej, a nie jak inżynierowie Atmela z tą samą prędkością RS ;-)

    Dlatego podkreślam zawsze, że same tabelki i wykresy parametrów mikrokontrolera nie dają jednoznacznej odpowiedzi, kiedy praca na baterii będzie dłuższa, ponieważ wpływa na to cały projekt (jego koncepcja) na który składa się:
    - bateria,
    - mikrokontroler
    - program.
    Rozpatrywanie tylko jednego z tych punktów prowadzi do niewłaściwych wniosków i osiągnięć.

    Zawsze warto eksperymentować i nie odrzucać, żadnej koncepcji już na samym początku :)

    BTW: Jako, że artykuł pisałem w początkowej fazie powstawania bloga, uzupełnię go w najbliższym czasie o sposób liczenia zużycia ładunku oraz nieco dokładniej opiszę zależności oraz możliwe scenariusze.

    0
  • #22 19 Mar 2012 15:05
    94075
    Użytkownik usunął konto  
  • #23 19 Mar 2012 16:11
    Śledziu
    Poziom 12  

    Proszę bardzo, to samo co wcześniej tylko dla 1MHz, można sobie po przeliczać.
    Obliczenie poboru prądu z baterii + optymalizacja kodu

    0
  • #24 19 Mar 2012 18:05
    Krauser
    Poziom 26  

    Inżynierowie z atmela pokazali, że przy pracy z zegarem 8MHz minimalne napięcie pracy to 2,7V, a dla 2MHz 1,8V (ale również dla 4MHz). Im mniej ładunku w kondensatorze tym niższe napięcie na jego okładkach. Skoro procesor może jeszcze pracować przy napięciu znacznie niższym niż 2,7V to zostało jeszcze sporo ładunku do wykorzystania, ale należy zmniejszyć częstotliwość, by pozostać w bezpiecznym obszarze pracy (charakterystyka Maximum Frequency vs. VCC). Nie jest to w sprzeczności z tym, że należy używać maksymalnej częstotliwości. Jeśli źródło napięcia ma twardą charakterystykę (bateria litowa) to częstotliwość powinna być maksymalna, a jeśli miękką (bateria alkaliczna, kondensator) to mniejsza, ale możliwie duża dla minimalnego napięcia zasilania 1,8V - 4MHz - co pozwoli na dalszą pracę, bo z większą częstotliwością to nie byłoby bezpieczne. Jeśli procesor sam mierzyłby swoje napięcie to mógłby dostosować prędkość do napięcia baterii.

    0
  • #25 19 Mar 2012 23:16
    dondu
    Moderator Mikrokontrolery Projektowanie

    I wróciłeś do punktu wyjścia o którym piszę cały czas, że nie można rozpatrywać problemu patrząc tylko i wyłącznie na samą charakterystykę mikrokontrolera, ponieważ może prowadzić to do niewłaściwych wniosków, co można zaobserwować na wykresie baterii w pierwszym poście.

    0
  • #26 23 Mar 2012 09:46
    PiotrPitucha
    Poziom 33  

    Witam
    Śledziu napisz mi swojego maila na priv, mam dokładną analizę Twojego problemu ale nie mogę ze względów prawnych wystawić tego na forum.
    Piotr

    0
  • #27 23 Mar 2012 15:38
    Śledziu
    Poziom 12  

    Witam.

    Oto, co jeszcze udało mi się wyskrobać z programu:
    Obliczenie poboru prądu z baterii + optymalizacja kodu

    I w sumie najważniejsza rzecz, program:

    Code:

    while(1)
      {         
          GetADC();      
             
             
             if(ile_d==30) //15 jesli pobieram np z dwoch kanałów , jesli pobieram z jednego 30
             {
                data[0] = cc++;
                ile_w++;
                rf22_sendpacket(data,ile_w);
                ile_w=0;
                ile_d=0;
                k=1,kk=2;
             }
             
          
          set_sleep_mode(SLEEP_MODE_PWR_SAVE);   //slip mode dla układu    
          
          sleep_mode();  //Ciagle usypiany   
          
          
       
      }
    }

    ISR(ADC_vect)
    {
       
    }


    ISR(INT0_vect)
    {
       
       rf22_read(0x03);         // clear interrupt status
        rf22_read(0x04);         // clear interrupt status   
       rf22_write(0x07, 0x00);
       
    }


    ISR(TIMER2_OVF_vect)  //timer asynchroniczny
    {

     TCNT2 = timer_start;
     zlicz++;
     ile_d++;
       
       
       WO_Set_PD3();   //Wlaczewnie wzmacniacza   
       WO_SET_PD1();   //wlaczenie czujnka      
       ADCSRA |= (_BV(ADEN)) | (_BV(ADSC));
     
    }

    Code:

    static inline void GetADC(void)
    {
       
       set_sleep_mode(SLEEP_MODE_ADC);   //Tryb noise canceller
       sleep_mode();  //Ciagle usypiany
       
       unsigned char adcL=0,adcH=0;
       adcL=ADCL;
       adcH=ADCH;
       data[k]=adcH;
       data[kk]=adcL;
       ile_w+=2;
       k+=2;
       kk+=2;
       
          
       ADCSRA &= ~(_BV(ADEN));      //wyłacz ADC
                
       WO_Reset_PD3();
       WO_Reset_PD1();
       
    }

    0