Poprzedni temat «» Następny temat
Pomiar napięcia z uśrednianiem - dwa problemy.
Autor Wiadomość
matrix 



Wiek: 39
Dołączył: 15 Mar 2006
Posty: 1583
Skąd: Sochaczew
  Wysłany: 2015-04-15, 19:07   Pomiar napięcia z uśrednianiem - dwa problemy.

Korzystając z programu napisanego Przez Mirka na jego blogu przerobiłem program z C na Bascom. Niestety uśrednianie mi nie działa. Kiedyś zrobiłem to prawidłowo ale teraz nie chce działać.

Korzystając z tak napisanej procedury jak -> W TYM LINKU <- przepisałem to na bascoma i niby wszystko było by ok ale występują dwa problemy.
1. Jako że jest to dzielnik 1/3 z racji użycia dzielnika rezystorowego to mnożę wynik przez trzy i dopiero poddaję obróbce i wyświetlam wynik docelowy i zamiast napięcia 5V mam napięcie 4.06V
2. Mimo że średnia jest ładnie dociągana to występuję kłopot że po kilku chwlach ponawia się dociąganie i tym razem 0.76V a po kilku chwilach spada do 0V

-> TUTAJ FILMIK PREZENTUJĄCY BŁĄD <-

A kod wygląda jak niżej. Możecie mi powiedzieć co jest nie tak ? Zauważyłem że im mniejsza ilość próbek (zmienna Dt mniejsza) tym wynik bliższy prawdy, ale nie powinno tak być.

Kod:

Dim Dt as Word
Dt = 1                    'ilość próbek
Dim Wynik as Word
Dim Srednia as Word
Srednia = 0


Do
Gosub Pomiar   'skok do podprogramu pomiar

'Waitms 50

Home
Lcd "U=" ; V ; "V   "        'wyswietlanie wartości obliczonego napięcia
Lowerline

Lcd "ADC=" ; Srednia ; "    "       'wyświetlanie wartości ADC

Loop



Pomiar:
Wynik = Getadc(0)

Srednia = Srednia * Dt                 'obliczana jest średnia wyniku i mnożona przez ilość próbek

Srednia = Srednia + Wynik          'do średniej dodawany jest wynik ADC
  Dt = Dt + 1                                 
Srednia = Srednia / Dt                  'tu mamy końcową wartość średniej

'*******************************************************
'*** typowe obliczanie napięcie z wejścia ADC ***
'*** z tym że do obliczeń brana jest średnia ******
'*******************************************************

Wartosc_wyniku = Srednia
Wartosc_wyniku = Wartosc_wyniku / 204
Wartosc_wyniku = Wartosc_wyniku * 3
V = Fusing(wartosc_wyniku , "#.$$" )
Return
 
 
     
Artyliusz 



Dołączył: 06 Sty 2013
Posty: 293
Skąd: Z Polski
Wysłany: 2015-04-16, 00:29   

Sama procedura wydaje się dobrze napisana.
Trzeba się przyjrzeć podłączeniu. Co najważniejsze to napięcie referencyjne i jego stabilność. Jakiego używasz? Po drugie dobra filtracja układu.
I czy źródło zasilania, które mierzysz ma Twoje równe 5V i czy napięcie mierzone wychodzące z dzielnika ma dokładnie tyle ile się spodziewałeś? Niedokładność napięcia referencyjnego, inna wartość napięcia źródła i tolerancja rezystorów plus zakłócenia mogą właśnie dawać inny wynik niż się spodziewałeś. Zmierz to miernikiem dla czystego sumienia. :P

Swoją drogą nawet nie podałeś jaki to procek.
Faktycznie zanik napięcia na samym końcu (lub jego spadek w trakcie) wydaje się dość dziwny. Najpierw trzeba by było wykonać pomiary miernikiem. Ale może przez małe próbkowanie wkrada się zjawisko aliasingu przez nie spełnienie twierdzenia Shanona chociaż nie wiem czy to na taką skalę ma wpływ. :P

Pokaż też samą inicjalizację ADC.
Spróbuj zobaczyć pomiar jaki będzie bez uśredniania.
 
 
     
matrix 



Wiek: 39
Dołączył: 15 Mar 2006
Posty: 1583
Skąd: Sochaczew
Wysłany: 2015-04-16, 06:59   

Płytka to EVB AVR04 z Propoxu (nie reklamuję, było pytanie więc padła odpowiedź)



Także o stabilizację nie mam się co martwić. Napięcie referencyjne to napięcie 5V czyli inicjalizacja ADC wygląda tak:
Kod:
Config ADC = Single, Prescaler = Auto, Reference = AVCC

Zmiana wejścia pomiarowego na inny kanał ADC niczego nie zmienia (tak sprawdzałem w razie gdyby pin procka okazał się uwalony). Procesor to Atmega8.

Pomiary miernikiem wskazują jak najbardziej prawidłowe wyniki.

Zapomniałem napisać że sam problem leży gdzieś w procedurze uśredniania wyniku ponieważ bez uśredniania działa prawidłowo i wskazania są prawidłowe nawet przy podziale 1/3 za pomocą dzielnika rezystorowego i mnożeniu wyniku *3

Znalazłem swój post na innym forum i znalazłem jaki kod dzialał z uśrednianiem. Poniżej kod.
Kod:

Srednia = Srednia * dt
Srednia = Srednia + Wynik
Temp = Dt + 1
Srednia = Srednia / Temp

Dodanie zmiennej Temp ustabilizowało działanie. Jeśli wpisałem:
Kod:
Dt = Dt + 1

To nie chciało to działać. Dopiero dodanie zmiennej Temp i wpisywanie do niej nowej wartości nie powoduje restartu uśredniania.

Niestety to rozwiązanie też nie jest pozbawione wad. Im więcej próbek czyli im większe Dt tym większy błąd pomiarowy. Do przyjęcia jest jeszcze Dt=4 bo błąd wynosi zaledwie 0.06V względem mojego miernika UNI-T M890C.

Natomiast jeszcze jedna kwestia jest taka że biorąc pod uwagę wyniki z mojego wyżej wspomnianego miernika i przy Dt=4 przy pewnych napięciach badanych na akumulatorze samochodowym odchyłka zmenijsza się do 0.01V a nawet wskazuje jednakowy wynik z miernikiem.

Z napięciami większymi niż 14V też nie jest dobrze ponieważ powyżej wspomnianych 14V przekłamuje prawie o 2V.
 
 
     
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Dodaj temat do Ulubionych
Wersja do druku

Skocz do:  


Powered by phpBB modified by Przemo © 2003 phpBB Group
Strona wygenerowana w 0,04 sekundy. Zapytań do SQL: 10