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

Bascom/atmega8 - Czy procesor może się mylić?

Tomekddd 29 Sie 2012 17:42 1221 11
  • #1 29 Sie 2012 17:42
    Tomekddd
    Poziom 23  

    Witajcie, mam drobny kłopot otóż zrobiłem sterownik który ma reagować na napięcie akumulatora i w momencie naładowania odłączać ładowarkę (solar) a w momencie rozładowania ponownie ją włączać. Wszystko gra jak chciałem sterownik prawidłowo mierzy napięcie i reaguje jednak co jakiś czas (nie mierzyłem jaki) występuje błędny pomiar tzn. dziwnie bo wykrywa za duże napięcie akumulatora i wyłącza ładowarkę a ponowne załączenie następuje dopiero po spadku do 11V i jeśli taki skok wystąpi powyżej 11V to akumulator będzie nie doładowany bo dopiero poniżej 11V się włączy.

    Czy jest jakiś sposób żeby uniknąć pomyłek procesora? Skoków napięcia na akumulatorze raczej nie ma (przynajmniej nie udało mi sie ich złapać), pomiar wykonywany jest co 10 sekund, a akumulator obciążony tylko dwoma przekaźnikami więc nie sądzę żeby aż tak wpływały na pomiary.

    Akumulator 12V 72Ah (samochodowy)
    ADC raczej poprawnie ustawione i odfiltrowane czyli kondensatory 100nF przy AREF i AVCC do tego dławik 10uH, zasilanie 1000uF 300nF 100nF przed 7805 i 100nF 1000uF za stabilizatorem

    Proszę o pomoc bo już nie wiem jak sobie z tym poradzić.

    0 11
  • Arrow Multisolution Day
  • #3 29 Sie 2012 18:55
    Tomekddd
    Poziom 23  

    Procesor wykonuje 100 pomiarów, zapomniałem dopisać, co 10 sekund wykonywana jest pętla w której wartość mierzona jest 100 razy potem dzielona przez 100 i mnożona razy przelicznik na napięcie

    0
  • Arrow Multisolution Day
  • #4 02 Wrz 2012 08:18
    Dżyszla
    Poziom 42  

    Najlepiej, jakbyś zapisał dane wejściowe i wyjściowe (po przeliczeniu) - wtedy można by coś wywnioskować. Procesor nie może się mylić poza rzadkim (na poziomach do 10 000 stóp n.p.m.) przypadkiem potraktowania go przez promieniowanie kosmiczne. Raczej błąd może leżeć w pomiarach albo w algorytmie przetwornika C/C (czyli zamiany poziomu zmierzonego przez układ pomiarowy i przetwornik A/C na wartość napięcia).

    0
  • #5 02 Wrz 2012 09:57
    Tomekddd
    Poziom 23  

    Może i to wina programu bo długo nad nim kombinowałem i jest dość rozbudowany.
    Oto fragment odpowiedzialny za sam pomiar napięcia

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod


    Mierzy poprawnie więc dziwne że raz na jakiś czas coś wywali błędnego.
    Narazie dopisałem pętlę opóźnienia 30s po skoku i problem ustąpił, więc chyba zostawię to tak jak jest.

    0
  • #6 02 Wrz 2012 11:00
    Cezary_
    Poziom 16  

    W podanym fragmencie programu brakuje na początku jednego wiersza:
    Napiecie = 0
    Za mało skopiowałeś, czy może tego wiersza brak?

    0
  • #8 02 Wrz 2012 15:04
    Tomekddd
    Poziom 23  

    Zmiennej Napiecie nigdzie nie zeruję i to by mogło być przyczyną?

    Zmienne:
    pomiar - word
    napiecie - single
    krok - byte

    Mogę wstawić cały program ale jest on dość długi i ubogi w komentarze i pewnie też pokombinowany za bardzo ale jeszcze się uczę :D

    0
  • #10 03 Wrz 2012 07:15
    Cezary_
    Poziom 16  

    Tomekddd napisał:
    Zmiennej Napiecie nigdzie nie zeruję i to by mogło być przyczyną?

    Licząc średnią serii pomiarowej dzielisz sumę wartości pomiarowych przez ilość pomiarów. Jeśli nie wyzerujesz uprzednio zmiennej sumy, to otrzymasz przypadkowy wynik, bowiem do sumy wartości pomiarowych dodana będzie niezerowa wartość początkowa zmiennej.

    0
  • #11 03 Wrz 2012 11:47
    SylwekK
    Poziom 29  

    Zawsze jeszcze można poprawić algorytm dodając do tego co masz porównanie z drastycznie odbiegającym wynikiem od spodziewanego. Taka wartość po prostu mogłaby być ignorowana (zamiast niej pozostałby przedostatni pomiar jak aktualny).

    0
  • #12 03 Wrz 2012 14:01
    Tomekddd
    Poziom 23  

    Spróbuję z zerowaniem może najprostszy sposób zadziała, jak nie to jeszcze się odezwę. Dzięki

    0