Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 10 lis 2025, o 16:25


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 15 ] 
Autor Wiadomość
PostNapisane: 16 gru 2016, o 13:59 
Offline
Użytkownik

Dołączył(a): 18 lip 2014
Posty: 69
Pomógł: 0

Witam,
Ostatnio zająłem się przetwornikiem ADC wewnątrz atmegi16A. Jako źródło odniesienia wybrałem wewnętrzne 2,56V. Badane napięcie zaś podaję na dzielnik rezystorowy (badane_napięcie -- 10K -- wejście_ADC -- 10K -- GND). W ten sposób mogę mierzyć napięcia do ok. 5V.

Do zasilania mojego układu wykorzystałem LM7805 oraz baterię 9V.

Zastosowane filtrowania napięcia:
- pomiędzy pinami VCC oraz GND atmegi wsatwiłem 2 kondensatory 100nF
- pomiędzy AREF oraz GND wstawiłem 100nF
- pomiędzy AVCC oraz GND wstawiłem 100nF
- pomiędzy AVCC oraz VCC wstawiłem cewkę 10uH
- pomiędzy VIN oraz GND stabilizatora LM7805 wstwiłem 100nF
- pomiędzy VOUT oraz GND stabilizatora LM7805 wstawiłem 100nF

W ramach testów podałem na ADC (przez wspomniany dzielnik rezystorowy) napięcie zasilania (czyli VOUT stabilizatora). Odczyty niestety nie są zbyt "ładne" - wahają się w przedziale ok. 851 - 957 (przetwornik ma 100-bitową rozdzielczość, czyli umożliwia uzyska nie wartości 0 - 1023). Różnica między różnymi odczytami dochodzi więc do 100 (możliwe że różnice są nawet większe, dane analizuję w terminalu i takie skrajne wartości wypatrzyłem).

Mam więc w związku z tym pytania:
1. Czy to normalne? Może tak po prostu działa ten ADC?
2. Czy da się to jakoś poprawić? W jaki sposób?

Poniżej wstawiam konfigurację ADC:
Składnia: [ Pobierz ] [ Ukryj ]
język cpp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


//EDIT: To samo napięcie mierzone przez Arduino UNO z wykorzystaniem funkcji analogRead(A0) jest ze znacznie mniejszego zakresu (960 - 990) - da się t oosiągnąć w mojej atmedze?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 gru 2016, o 14:54 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27444
Lokalizacja: Szczecin
Pomógł: 1045

Loreno napisał(a):
Do zasilania mojego układu wykorzystałem LM7805 oraz baterię 9V.

Po prostu MASAKRA - tzn masakryczny pomysł - toż ten PIECH HUTNICZY LM7805 ODSIORBIE ci baterię w try-mi-ga - zasilając w ciepło całą okolicę ... TAK się nigdy nie robi

Cytuj:
Zastosowane filtrowania napięcia:
- pomiędzy pinami VCC oraz GND atmegi wsatwiłem 2 kondensatory 100nF
- pomiędzy AREF oraz GND wstawiłem 100nF
- pomiędzy AVCC oraz GND wstawiłem 100nF
- pomiędzy AVCC oraz VCC wstawiłem cewkę 10uH
- pomiędzy VIN oraz GND stabilizatora LM7805 wstwiłem 100nF
- pomiędzy VOUT oraz GND stabilizatora LM7805 wstawiłem 100nF

Pomijam już fakt że to forum dla elektroników, którzy posługują się schematami a nie forum dla powieściopisarzy którzy posługują się prozą - to ZDECYDOWANIE polecam ci jednak zapoznać się z tym:

http://mirekk36.blogspot.com/2012/04/mi ... lanie.html

bardziej dziwi mnie jednak fakt, że jesteś na forum już od 2014 roku i nie widziałeś tego ? nie zaglądasz na bloga ?

Loreno napisał(a):
Odczyty niestety nie są zbyt "ładne" - wahają się


eeeeh - zassaj sobie pan darmowy program AVPlayer

http://atnel.pl/atnel-video-player.html

wpisz w jego szukajkę hasło ADC i w sekundę dostaniesz LINKI do poradników wideo o SKACZĄCZYCH napięciach na ADC

Obrazek

Mówię ci obejrzyj te poradniki a pozbędziesz się skaczących napięć niczym cięcie mieczem laserowym rycerza dżedaj ;)

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 gru 2016, o 15:00 
Offline
Użytkownik

Dołączył(a): 18 lip 2014
Posty: 69
Pomógł: 0

Czytałem Pańskie artykuły o zasilaniu, ale było to rzeczywiście dosyć dawno, wydawało mi się, że filtrowanie jest prawidłowe. Zajrzę jeszcze raz i odświeżę sobie te informacje.

Wygląda na to, że przede mną długi seans Pańskich filmów (a Pan, jak widzę, seans w postaci najnowszych Gwiezdnych Wojen ma już za sobą lub niedługo obejrzy :)).

W razie pytań, wrócę do tego wątku.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 gru 2016, o 15:05 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27444
Lokalizacja: Szczecin
Pomógł: 1045

Loreno napisał(a):
(a Pan, jak widzę, seans w postaci najnowszych Gwiezdnych Wojen ma już za sobą lub niedługo obejrzy

Nie nie, nie oglądałem najnowszych GW ale zobaczysz sam wątki GW w tych poradnikach o ADC i aż się zdziwisz ;) zapraszam do ich obejrzenia

Loreno napisał(a):
W razie pytań, wrócę do tego wątku.

i o to chodzi

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 gru 2016, o 16:01 
Offline
Użytkownik

Dołączył(a): 28 wrz 2016
Posty: 215
Pomógł: 14

Spróbuj na wejście przetwornika ADC podać napięcie z baterii paluszka (AA lub AAA nie musi być nowa), ewentualnie z przyłączonym równolegle kondensatorem 100n. Wtedy przekonasz się co jest źródłem zakłóceń, czy przetwornik, czy też zakłócenia są na wejściu przetwornika. Następny krok, to zewnętrzne źródło napięcia odniesienia, np w postaci baterii, by przekonać się czy to może źródło napięcia odniesienia jest przyczyną skoków odczytu ADC. Sprawdź też napięcie baterii, bo to też może być przyczyną.
Zamiast baterii 9V i 7805 lepiej użyć baterii 4,5V, wtedy niepotrzebny będzie stabilizator. Pozwoli to zaoszczędzić kilka mA prądu na zasilenie stabilizatora.
Oczywiście pod warunkiem, że zasilamy sam uC, a nie zestaw.

_________________
de gustibus non est disputandum



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 gru 2016, o 19:06 
Offline
Użytkownik

Dołączył(a): 18 lip 2014
Posty: 69
Pomógł: 0

Jestem w trakcie oglądania filmów o ADC, ale w międzyczasie zrobiłem tak jak mówi kolega @Alef2.
Najpierw wziąłem jakąś baterię AA i mierzyłem na niej napięcie. Skoki odczytanych wartości są tak samo duże jak pisałem w pierwszym poście.
Oprócz baterii pomyślałem, że sprawdzę jaki będzie rezultat gdy zmierzę napięcia, które są dostępne na Arduino - 3,3V oraz 5V. Co ciekawe, okazało się, że w tym przypadku rezultat jest całkiem dobry (tak mi się wydaje) - różnica między najmniejszym a największym pomiarem wynosi 6 (wartości od 639 do 646 dla napięcia 3,3). Czy napięcie na baterii powinno bardziej "szaleć" niż napięcie wystawiane przez Arduino (które zasilane jest z USB)?

Po przeczytaniu artykułu o poprawnym zasilaniu AVR-a przypomniało mi się o tym, że oprócz kondensatorów ceramicznych, trzeba dodać kondensatory elektrolityczne, co oczywiście uczyniłem. Jak na razie nie ma poprawy w odczytach ADC, ale jestem nadal dopiero na początku jeśli chodzi o filmy ADC, tak więc możliwe, że jeszcze znajdę jakiś błąd w swoim układzie.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 gru 2016, o 22:16 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 sie 2013
Posty: 165
Lokalizacja: Sycyna Południowa
Pomógł: 4

Cześć. Tu będzie winna raczej bateria, albo sam stabilizator. Dodaj na jego wyjściu kondensator elektrolityczny 47uF/16V Jak masz inne źródło zasilania np zasilacz 12V to spróbuj go podłączyć zamiast tej baterii ale jak Mirek pisał uważaj na ciepło bo w tym wypadku bedzie jeszcze większe. U mnie przy atmedze 328P w wersji SMD i ze stabilizatorem 7805 również w wersji SMD mam wahania ADC od 407 do 408 czyli o 1. Jeśli to nie pomoże i nie zależy CI na mega szybkim pomiarze to spróbuj zastosować jeszcze kondensator 100nF do masy na pinie którym wykonujesz pomiar:
Obrazek

https://www.youtube.com/watch?v=Hz08hH-_AEE



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 16 gru 2016, o 22:38 
Offline
Użytkownik

Dołączył(a): 28 wrz 2016
Posty: 215
Pomógł: 14

Wygląda na to, że to coś złego dzieje się przez tryb free running mode. Spróbuj może wyzwalać przetwornik w trybie single conversion mode poprzez ustawienie bitu ADCS, i oczekiwanie na jego wyzerowanie. I jeszcze wybierz wybierz konkretny numer kanału ADC. Tak jest to robione w Arduino (w funkcji . analogRead(analogInPin)).
Filtracja wejścia raczej nie pomoże, bo po pierwsze nie uśredni takich skoków, a po drugie przy pomiarze napięcia baterii, którą możemy uznać za bezszumną, jest to samo.
Spróbuj też innego zasilania, choćby z USB, wtedy okaże się czy to zasilanie. Choć ja nie stawiałbym na to.

_________________
de gustibus non est disputandum



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 gru 2016, o 12:19 
Offline
Użytkownik

Dołączył(a): 18 lip 2014
Posty: 69
Pomógł: 0

Tak jak radził kolega @Alef2 wybrałem konkretny kanał ADC - ustawiłem ADC1 (pin PA1).
Jeśli chodzi o kondensator na wejściu, to nie wiem czy to dobry pomysł, bo zamierzam zbierać pomiary napięć zmiennych w czasie, np, sinusoidalnego do ok. 30Hz. Arduino bez problemu dawało z tym radę, więc mam nadzieję, że sam mikrokontroler też da.

Zrobiłem kilka testów, zgodnie z Waszymi sugestiami.
1. Zasiliłem mikrokontroler z USB - przy takim zasilaniu mierzyłem napięcie wyjściowe z LM7805 (które miało VIN z baterii 9V) i pomiar był całkiem stabilny - od 958 do 976
2. Nadal zasilanie z USB - pomiar napięcia VCC (czyli właśnie z USB) dał wyniki z zakresu 888 - 993 - z tym, że momentami cały ten zakres przesuwa się do dołu lub do góry, a momentami jest idealne 1022-1023 ( i utrzymuje się to przez kilkanaście sekund, wystarczy lekko ruszyć kabelkiem i znowu są skaczące odczyty). Zauważyłem, że odczyty BARDZO "skaczą" zaraz po podłączeniu przewodu do VCC - odczyty przez kilka sekund są wtedy z zakresu właściwie 800 - 1023, potem zakres ten zmniejsza się do wspomniianego 888 - 993

Widać więc, że wyniki są dosyć nieciekawe.

Sprawdzałem również Single Conversion Mode i wydaje mi się, że pomiary są lepsze, chociaż nadal występują spore skoki (do 50 różnicy).
Z braku żadnego żadnego "ciekawego" źródła napięcia do pomiaru, znowu włączyłem Arduino i mierzyłem jego napięcia - ponownie muszę powiedzieć, że te pomiary są najstabilniejsze - różnica między min a max pomiarem to 5.
Kolejna sprawa: przy zasilaniu układu z baterii 9V oraz LM7805 zmierzyłem napięcie z USB (które było w tym czasie oczywiście odłączone, bo miałem baterię) - wynik był tak samo dobry jak w przypadku Arduino.

Ostatni test każe mi się zastanawiać czy przypadkiem nie jest tak, że przetwornik działa dobrze i będzie w stanie prawidłowo pomierzyć napięcia, ale po prostu samo napięcie zasilające mikrokontroler ma taki chaotyczny charakter.

Żałuję, że nie mam możliwości w tej chwili podłączyć jakiegoś zasilacza laboratoryjnego lub jeszcze lepiej generatora sygnału. W tygodniu jednak postaram się uzyskać dostęp do generatora sinusoidy - wtedy zobaczę czy działa to prawidłowo.
Poprzednio podobny układ zbudowałem z wykorzystaniem Arduino i nie było żadnych problemów - dobrze mierzył wszystkie napięcia - również swoje zasilające. Miałem nadzieję, że z atmegą będzie podobnie.

Myślę, że dobrym pomysłem będzie kupić jakąś przetwornicę jak radzi Pan Mirek i zobaczyć jak to wpłynie na jakość zasilania i pomiarów.

Wstawiam również zdjęcie mojego układu. LM7805 nie jest podłączony, bo układ był w chwili robienia zdjęcia zasilany z USB:
Obrazek



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 gru 2016, o 12:39 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27444
Lokalizacja: Szczecin
Pomógł: 1045

Loreno napisał(a):
Myślę, że dobrym pomysłem będzie kupić jakąś przetwornicę jak radzi Pan Mirek i zobaczyć jak to wpłynie na jakość zasilania i pomiarów.

Przetworniczka to podstawa tym bardziej na potrzeby baterii ale zanim ją kupisz - to przede wszystkim powiedz mi czy oglądałeś poradniki i zastosowałeś omawiane w nich sposoby uśredniania pomiarów ?

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 gru 2016, o 12:46 
Offline
Użytkownik

Dołączył(a): 18 lip 2014
Posty: 69
Pomógł: 0

mirekk36 napisał(a):
Loreno napisał(a):
Myślę, że dobrym pomysłem będzie kupić jakąś przetwornicę jak radzi Pan Mirek i zobaczyć jak to wpłynie na jakość zasilania i pomiarów.

Przetworniczka to podstawa tym bardziej na potrzeby baterii ale zanim ją kupisz - to przede wszystkim powiedz mi czy oglądałeś poradniki i zastosowałeś omawiane w nich sposoby uśredniania pomiarów ?



Zdążyłem obejrzeć 5 części poradnika i właśnie też zastanawiam się nad uśrednianiem. Dzisiaj od rana robiłem wiele testów i porządkowałem nieco układ, a teraz postaram się zaimplementować uśrednianie. Chciałbym wysyłać uzyskane pomiary co 2ms (czyli czyli 500 pomiarów na sekundę), a jeśli miałbym zastosować uśrednianie, musiałbym zwiększyć kilkukrotnie częstotliwość pomiaru. Zastanawiam się, jaki powinien być minimalny czas przerwania, aby zdążyć w nim:
- zmierzyć ADC
- dodać ADC do bufora, który będę później uśredniał
- sprawdzić stan 2 wejść cyfrowych
- stworzyć łańcuch tekstowy zawierający moje pomiary
- wysłać przez UART (115200bps) całą paczkę

Będę musiał to sprawdzić.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 gru 2016, o 16:02 
Offline
Użytkownik

Dołączył(a): 18 lip 2014
Posty: 69
Pomógł: 0

Spróbowałem zastosować uśrednianie 3 próbek ADC. Niestety nic to nie polepszyło, a nawet wręcz przeciwnie - z jakiegoś powodu napięcia mają charakter jakby falujący. Nie jestem pewien czy mikrokontroler wyrabiał się za każdym razem w przerwaniu, biorąc pod uwagę, że ma tam kilka rzeczy do zrobienia, a dochodzi jeszcze oddzielne przerwanie od RX, w którym atmega musi przeanalizować przesłaną wiadomość i odpowiednio ustawić wyjścia cyfrowe oraz PWM na jednym pinie.

Nie próbowałem więc zbierać jeszcze większej ilości próbek do uśredniania, chociaż wiem, że w poradniku wideo zbierane było chyba minimum 8 próbek.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 gru 2016, o 18:51 
Offline
Użytkownik

Dołączył(a): 28 wrz 2016
Posty: 215
Pomógł: 14

W układzie "siedzi" niewątpliwie jakiś gruby błąd, bo przetwornik ADC ma maksymalny błąd rzędu 4 bitów (LSB), a tu mamy 100.
Nie ma sensu uśredniać, dopóki nie wyeliminuje się grubych błędów. Dopiero jak uda się zmniejszyć skoki wartości o rząd wielkości można pomyśleć o dalszym zwiększaniu dokładności pomiaru poprzez oversampling czy filtrację zarówno elektryczną jak i programową (np. uśrednianie).

Gruby błąd może być spowodowany zarówno błędem montażu/układu jak i błędem programowym. Nie znamy ani całego układu (schematu) ani całego programu. Być może błąd jest w innej części programu, która wydaje się nie mieć nic wspólnego z pomiarem, a w rzeczywistości ma. Być może też uC, a właściwie sam przetwornik jest uszkodzony. Być może przyczyna całego zła jest płytka stykowa. Nie sposób powiedzieć dokładnie.
Dlatego sugerowałem, co w mojej opinii jest najbardziej prawdopodobnym źródłem zakłóceń i co należy sprawdzić/zmienić. Skoro nie przyniosło to zadowalających rezultatów, to należałoby zacząć szukać błędów systematycznie.
Ja zrobiłbym tak, poszukałbym rzeczy pewnych i krok po kroku dodawał nowe rzeczy i sprawdzał jak działają (niekoniecznie jest to najszybsza i najlepsza droga). Ale za każdym razem tylko jedna rzecz. Mianowicie za pewne uznałbym, że płytka Arduino zasilana z USB z programem Arduino działa poprawnie. Pierwsze co bym zrobił, to zamienił program pisany w Arduino na program pisany w C. Jeśli działałby poprawnie, to zasiliłbym Arduino z baterii i sprawdził czy działa poprawnie. A następnie dodawałbym kolejne elementy programu i sprawdzał czy działają poprawnie. I tak do skutku. Dopiero jak uzyskałbym stabilne pomiary, pomyślałbym o "ulepszaniu" pomiaru poprzez filtrację. Skupiłbym się na jednej rzeczy i doprowadzał ją do końca.

Trzymam kciuki.

_________________
de gustibus non est disputandum



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 gru 2016, o 19:45 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 sty 2013
Posty: 1760
Pomógł: 196

Witam
Ja tak na wszelki wypadek - czy na płytce stykowej linie zasilające są całe czy wymagają zworek,
bo jeśli to drugie to może gdzieś nie łączy/czegoś brakuje.

Pozdr.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 gru 2016, o 21:20 
Offline
Użytkownik

Dołączył(a): 18 lip 2014
Posty: 69
Pomógł: 0

kicajek napisał(a):
Witam
Ja tak na wszelki wypadek - czy na płytce stykowej linie zasilające są całe czy wymagają zworek,
bo jeśli to drugie to może gdzieś nie łączy/czegoś brakuje.

Pozdr.



Linie nie wymagają zworek, ale i tak je założyłem już na początku, bo myślałem, że, tak jak w mojej poprzedniej płytce, będzie to wymagane.

@Alef
Rzeczywiście sprawdzę wszystko od początku, ale po prostu zamówię drugi procesor ATmega i na nim przeprowadzę testy.
Sam program wydaje mi się dobry, ale go tutaj wstawię, może komuś będzie chciało się sprawdzić czy nie widać jakichś błędów:
Składnia: [ Pobierz ] [ Ukryj ]
język cpp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Schemat wstawię jutro.


//EDIT
Zauważyłem dodatkową rzecz: W trakcie pomiaru zewnętrznych napięć (czyli np. podawanych przez Arduino) - łączę razem ze sobą masę mojego układu oraz masę Arduino. Bez tego nie mógłbym oczywiście mierzyć napięć. Dziwna sprawa jednak, że kiedy dołączę się do masy po jednej stronie płytki stykowej, to ADC odczytuje napięcie 5V. Kiedy jednak GND Arduino podłączę po drugiej stronie mojej płytki (jak można zobaczyć na zdjęciu z postu wyżej linie zasilania są po dwóch stronach), to jest wyraźnie inny doczyt - ok. 4.95V (w tej chwili mam odczyt napięcia a nie wartości 10-bitowej z przetwornika, dlatego tak podaję). Czy jest to normalne, że płytki mają tak dziwną masę?
Kolega @kicajek pytał czy moja płytka ma przerwy w linii zasilania? Sprawdzałem i nie ma, ale mimo to (co również widać na zdjęciu) w wielu miejscach łączę ze sobą te linie, tak po prostu, aby polepszyć styk.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 15 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 1 gość


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO