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



Teraz jest 26 cze 2026, o 19:32


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 14 ] 
Autor Wiadomość
PostNapisane: 7 lis 2016, o 18:41 
Offline
Użytkownik

Dołączył(a): 07 paź 2015
Posty: 79
Pomógł: 0

Szanowni Forumowicze,
po przeczytaniu kilku artykułów i dokumentu od Atmela chciałem uruchomić ADC celem zmierzenia napięcia baterii na dzielniku rezystorowym.
Konfiguracja:
- dzielnik rezystorowy, w szeregu 3 oporniki 1k;
- wtórnik napięciowy na WO;
- wyjście wtórnika podłączone do pinu PB2;
- procesor taktowany wewnętrznym zegarem 32MHz;
- adc w trybie signed i single-ended;

Funkcja inicjalizująca ADC:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Wykonuję ją na początku programu, przed uruchomieniem przerwań.

Wywołuję za każdym razem jednorazowy pomiar:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Obsługa przerwania z gotowym wynikiem:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Nie potrzebuję dużej dokładności, stąd wybór 8bit rozdzielczości, oraz nie potrzebuję trybu free-run, gdyż to ma być jedynie wskaźnik napięcia na baterii pokazujący stan naładowania. Kilka procent błędu względem wyniku normalnego mi w zupełności wystarczy.
Dzielnik, jak wspominałem, to 3 rezystory szeregowo, napięcie mierzę na ostatnim (za nim GND). I jakie wyniki? Dla napięcia 1,28V na rezystorze otrzymuję ADC = 112. Po przeliczeniu na napięcie, wg wzoru: V_in = ADC*V_ref/256 otrzymuję wynik ok. 0.89V. Wynik jest skandaliczny. Nie wiem jednak, gdzie popełniam błąd. ADC powinno wynosić ok. 160.
Co więcej, jak podłączę pin PB2 do masy, to wynikiem ADC jest 254. Wygląda, jakby wyniki były na odwrót (255 dla 0V) jednak przecież w trybie signed minus ADC mam podłączony do masy.

Proszę uprzejmie o wskazówki i pozdrawiam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 lis 2016, o 20:26 
Offline
Użytkownik

Dołączył(a): 07 paź 2015
Posty: 79
Pomógł: 0

Zmieniłem trochę ustawienia zegarów i ADC:
1) Ustawienie generatora 32MHz i zegarów clk_per:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


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


Jednakże wyniki dalej o 0.4V rozbieżne z rzeczywistością. Uprzejmie proszę o jakiekolwiek sugestie.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 lis 2016, o 21:12 
Offline
Użytkownik

Dołączył(a): 25 lip 2013
Posty: 2606
Pomógł: 129

A jaka jest rezystancja wejscia ADC?


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 9 lis 2016, o 21:37 
Offline
Użytkownik

Dołączył(a): 07 paź 2015
Posty: 79
Pomógł: 0

Na ADC idzie sygnał z wtórnika napięciowego na WO w taki sposób:
Obrazek
więc to raczej nie problem za dużej rezystancji wyjściowej badanego układu.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 lis 2016, o 00:09 
Offline
Użytkownik
Avatar użytkownika

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

Witam
Może tutaj coś znajdziesz: http://www.sunduino.pl/wordpress/xmega-adc-ogolnie-czesc-2
Czytając tak bez zrozumienia ;) kilka razy wpadłem na stwierdzenie " ...i tu ciekawa rzecz" więc może Ty dojrzysz tam coś o czym zapomniałeś.

Pozdr.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 lis 2016, o 00:17 
Offline
Użytkownik

Dołączył(a): 07 paź 2015
Posty: 79
Pomógł: 0

Poprawiłem ustawienia zegarów ale wynik dalej bez sensu.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 lis 2016, o 15:17 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 30 cze 2016
Posty: 247
Lokalizacja: Rybnik
Pomógł: 13

Spróbuj zmniejszyć preskaler bądź zwiększyć

_________________
Situs != Situs



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 lis 2016, o 16:44 
Offline
Użytkownik

Dołączył(a): 07 paź 2015
Posty: 79
Pomógł: 0

Sprawdziłem wszystkie i wyniki są stabilne (ale niezgodne z rzeczywistością) od 64 do 256.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 lis 2016, o 17:09 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 30 cze 2016
Posty: 247
Lokalizacja: Rybnik
Pomógł: 13

ustawienie pb2 jako we masz?

_________________
Situs != Situs



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 10 lis 2016, o 22:14 
Offline
Użytkownik

Dołączył(a): 07 paź 2015
Posty: 79
Pomógł: 0

Jak najbardziej:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 lis 2016, o 03:01 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 1448
Lokalizacja: okolice Warszawa
Pomógł: 149

Witam,
Może nic ważnego, ale na w razie czego. ;)
jest wpis ustawiający signed zamiast unsigned ,
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Ale przecież w tym rejestrze jest jeszcze ustawianie rozdzielczości.
Czy to planowane 12-Bit ? bo tu się zerują dwa bity "RESOLUTION", a coś chyba było pisane o 8-bit. ?

Co prawda nie znam tych poleceń i co się dzieje dalej w kodzie,
ale czy nie lepiej pisać podobnie tak jak jest dalej przy ustawianiu VCC_1,6V
gdzie dla pewności jest zdublowane ustawianie bitu w rejestrze REFCTRL,
z zastosowaniem operatora OR ?
Nie wiem czy w tym kodzie jest to właściwe wpisywanie, ale może jakoś np.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

wtedy nie ma obawy że coś przypadkowo skasujemy,
a bit_1 ustawiający na rozdzielczość ADC 8_bit pozostanie nie tknięty.?
A może to tak specjalnie napisane :?
pozdrawiam.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 lis 2016, o 17:35 
Offline
Użytkownik

Dołączył(a): 07 paź 2015
Posty: 79
Pomógł: 0

Daro69 - tak, napisałem to celowo:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

i to jest prawidłowe ustawienie. Chciałem mieć tryb signed oraz 12bit rozdzielczości, który wg noty jest wtedy, gdy wyzerujemy bity 1 i 2. I przyznaję, pisałem o 8-bit, ale w międzyczasie zmieniłem koncepcję, bo brakowało mi pomysłów na miejsca, gdzie mogłem zrobić błąd. Zapomniałem o tym napisać i przepraszam za to :) Wyniki miałem złe zarówno dla 12bit jak i 8 bit.

Udało mi się dziś odpalić ten ADC i uzyskać prawidłowe wyniki, ale na innej konfiguracji, oto ona:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Żeby przejść na v_ref = 1V musiałem dolutować szeregowo jeszcze dwa rezystory 1k. Więc teraz dzielnik to pięć rezystorów szeregowo 1k każdy. Oto wyniki:
V_bat = 3,44V
V_out = 0.69V (napięcie na wyjściu wtórnika podawane na ADC)
ADC = 1415
V = 1415/2048 = 0,69V.

Czy możliwy jest jakiś błąd w strukturze przy tym REFSEL = VCC/1.6 ? Przy ustawieniu identycznym jw. ale z REFSEL = VCC/1.6 wyniki mam nieprawidłowe.



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

Dołączył(a): 01 lis 2015
Posty: 1448
Lokalizacja: okolice Warszawa
Pomógł: 149

momento, ?

A jakie jest napięcie VCC ? i czy jest stabilne.?
Bo Vref to "VCC/1,6" czyli ile. może w obliczeniach coś nie uwzględnione,
skoro dla wewnętrznego 1V jest ok.

------------------------ [ Dodano po: 43 minutach ]

dla przykładu z pierwszego postu :
8 bit,
1,28V,
oczekiwane ~160 ADC,
=1,6 V_REF ? to zasilanie VCC 2,56 ?

dalej z ostatniego postu:
12_bit signed
VCC 2,56 V
V_out 0,69 V za wtórnikiem
to ADC ~= (0,69 * 2048) / (2,56 /1,6)
= ~ 895 ?
czy coś pochrzaniłem ? :?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 lis 2016, o 07:21 
Offline
Użytkownik

Dołączył(a): 07 paź 2015
Posty: 79
Pomógł: 0

Policzyłeś ok wg mnie. I ja też tak liczyłem :) Jednakże w nocie jak i w pliku "ioax128.h" jak byk stoi "VCC/1.6". Procesor mam w module "mmxmega" firmy Propox a tam jest na pokładzie jakiś LDO 3V3, który na wyjściu daje bardzo stabilne 3.26V (sprawdziłem oscyloskopem). Tak więc vcc/1.6 =~ 2.04V i nie chce być inaczej. Może i wynik jest poprawny, ale vref na pewno nie jest wtedy takie jak w nocie. A że nocie ufałem to szukałem błędu u siebie.



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: 14 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

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


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:  
cron
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO