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



Teraz jest 26 lut 2025, o 22:50


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 12 ] 
Autor Wiadomość
PostNapisane: 8 lut 2015, o 18:23 
Offline
Nowy

Dołączył(a): 12 sie 2014
Posty: 5
Pomógł: 0

Witam serdecznie Wszystkich Forumowiczów,

Zasada działania czujnika, który buduję opiera się na pomiarze napięcia na sensorze MQ - 8, poprzez przetwornik ADC mikrokontrolera ATMEGA 8A. Napięcie to jest porównywane z wartością progową (odczytaną z charakterystyki sensora) i na tej podstawie sygnalizowane jest za pomocą impulsu wyjściowego (linia SIGNAL), przekroczenie krytycznej wartości 1% stężenia. Opcjonalnie wyprowadzone zostały 2 linie do późniejszej komunikacji po magistrali I2C, jednak w chwili obecnej nie są one wykorzystywane.

Problem mój opiera się na błędnym pomiarze napięcia przez sam mikrokontroler. Na nóżce PC1 obserwuje się zmiany napięcia, które występują na sensorze (pomiar multimetrem, oddziaływanie na sensor za pomocą oparów beznyny, na którą także reaguje). Niestety, w układzie prototypowym wszystko działało poprawnie, zmiany sygnalizowane były prawidłowo, dlatego teraz dokładnie nie wiem, gdzie popełniony został błąd. Dodam, że program działa poprawnie z wyłączeniem części związanej z ADC, procesor jest także poprawnie wykrywany. Wertowałem już kilkukrotnie dokumentację mikrokontrolera, jednak być może coś jest nie tak z ustawieniami bitów któregoś z rejestrów związanych z ADC.
Zwracam się z uprzejmą prośbą do Was, drodzy forumowicze o udzielenie mi pomocy. Zamieszczam kod programu, schemat, na jakim bazowałem oraz zdjęcia płytki.

Będę wdzięczny za każdą krytyczną uwagę, odpowiem na każde zadane pytanie, jeśli będzie potrzeba, mogę dosłać wstępnie utworzoną kompletną dokumentację czujnika.

Pozdrawiam.

Schemat układu:

Obrazek

Płytka PCB

ObrazekObrazekObrazek

Struktura programu:

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



Ostatnio edytowano 8 lut 2015, o 21:46 przez MarcinBudziński, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lut 2015, o 18:59 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 wrz 2013
Posty: 161
Lokalizacja: Rbk
Pomógł: 5

ADC masz tak ustawione, że źródło odniesienia to źródło zasilania mikrokontrolera. Czy na pewno tak miałeś w układzie prototypowym?
Lepszym wyborem byłoby ustawienie źródła odniesienia na 2.56V. Ponieważ jeśli napięcie zasilania mikrokontrolera się zmienia to odczytywanie wartości ADC jest różna.

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



Pozdrawiam!



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lut 2015, o 19:02 
Offline
Nowy

Dołączył(a): 12 sie 2014
Posty: 5
Pomógł: 0

Tak samo miałem ustawione w prototypie. Niestety nie mogę ustawić napięcia referencyjnego 2,56 [V], ponieważ napięcie na sensorze zmienia się w zakresie od ~200 [mV] do około 4,55 [V] (tak odczytałem z multimetru).



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lut 2015, o 19:08 
Offline
Użytkownik

Dołączył(a): 22 gru 2013
Posty: 296
Lokalizacja: Szczecin
Pomógł: 47

Tak na szybko:
1. czujnik jest na kanale ADC nr 1 a mierzysz zawsze kanał 0 ( funkcja pomiar(tu błąd) )
2. przemyśl zmienne: pomiar i kanal.
3. pomylone na schemacie ( na płytce sprawdź sam) wartości kondensatorów C2 z C3.
4. R1 służy jako kalibracja ( zwykle potencjometr 10K-60K), ale może jej tutaj nie potrzeba?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lut 2015, o 19:09 
Offline
Użytkownik

Dołączył(a): 19 gru 2012
Posty: 712
Lokalizacja: Opole
Pomógł: 23

A co to za problem? Polecam koledze tą serię poradników: https://www.youtube.com/playlist?list=PLtXXWLsA5QNi_R9uDXpHRpo5hRnig_f23

Zwłaszcza zagadnienie dotyczące dzielnika rezystorowego.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lut 2015, o 19:19 
Offline
Nowy

Dołączył(a): 12 sie 2014
Posty: 5
Pomógł: 0

Tak, wiem, że zdecydowanie lepiej stosować źródło napięcia referencyjnego 2,56 [V]. Zapoznałem się ze wszystkimi poradnikami Pana Mirka odnośnie ADC. Wydaje mi się, że błąd jest w niewłaściwie napisanej funkcji pomiaru. I własnie teraz próbuję go rozwiązać..



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lut 2015, o 19:24 
Offline
Użytkownik

Dołączył(a): 22 gru 2013
Posty: 296
Lokalizacja: Szczecin
Pomógł: 47

Rozszerzając temat:
nawet jak oprawisz oprogramowanie ( funkcja: pomiar()), to układ może nie mierzyć poprawnie, ponieważ AREF ma dużą rezystancję wewnętrzną i może nie zdążyć naładować C2 =100uF do 5V. Tak więc, jak widzę płytka do przeróbki!


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lut 2015, o 19:32 
Offline
Nowy

Dołączył(a): 12 sie 2014
Posty: 5
Pomógł: 0

Tak, wiem - to będzie raczej konieczne.

A jeśli chodzi o błąd, czy chodzi konkretnie o tą linijkę:

ADMUX |= (ADMUX & 0xF8) | kanal;



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lut 2015, o 19:48 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 wrz 2014
Posty: 1530
Lokalizacja: Warszawa
Pomógł: 55

Po pierwsze to gratuluję super ciekawego pomysłu, projektu, chęci i możliwości zrobienia czegoś fajnego!

Po drugie to zastosowałbym bym jednak dedykowany ic adc.

Dlaczego? Żeby nie wylecieć w powietrze :)

Układy są przeróżne, fajne zestawienie tu:

http://www.ti.com/lsds/ti/analog/dataco ... earch.page

Mają dokladne źródło wewnętrzne, a koszt nie zabija.

_________________
--... ...-- - --- -- . -.-



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lut 2015, o 19:53 
Offline
Użytkownik

Dołączył(a): 22 gru 2013
Posty: 296
Lokalizacja: Szczecin
Pomógł: 47

no to kawa na ławę:
-wywołujesz funkcją ze zmienną "pomiar" a w funkcji podstawiasz "kanal"
-obie zmienne są 16-bitowe a rejestr jest tylko 8-bitowy.
-0xf8 może być ale niekoniecznie ( jeżeli nie będzie rozbudowy układu o dodatkowe pomiary innych kanałów, to zastosowałbym wywołanie pomiar(void); i w ciele funkcji ustawiał już numer kanału ADC=1).
-co do AREF=2,5V to trzeba to policzyć czy się opłaci komplikować układi; i tak będzie trzeba zastosować jakieś uśredniania,potem histerezę dla alarmu itp. więc jeżeli źródło 5V będzie stabilne to może wystarczyć.
A jaka jest różnica napięć między 0% a 1% wodoru (brak alarmu a alarm)?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lut 2015, o 20:18 
Offline
Nowy

Dołączył(a): 12 sie 2014
Posty: 5
Pomógł: 0

Dziękuję wszystkim za pomoc, temat można uznać za zamknięty. Przestawiłem kanał na PC1 i czujnik reaguje poprawnie. Dziękuję bardzo "krish" za pomoc :)

PS. Odnośnie kalibracji: czujnik będzie kalibrowany względem wzorcowego miernika i na podstawie wskazania 1% stężenia zostanie ustalona granica wartości ADC (pm) w programie. Teraz chciałbym dopisać obsługę magistrali I2C i dalej wysyłać 10-bitowy pomiar do SMT32 (względem charakterystyki sensora).

Dziękuję wszystkim za zainteresowanie :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 lut 2015, o 20:22 
Offline
Użytkownik

Dołączył(a): 22 gru 2013
Posty: 296
Lokalizacja: Szczecin
Pomógł: 47

Tylko pamiętaj o tych kondensatorach!



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

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 3 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:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO