Skocz do zawartości

Czujnik ir - tsop 4836 problem z działaniem


Buczex

Pomocna odpowiedź

Hej

postanowilem zrobic czujnik, ktory sprawdza czy cos sie przed nim znajduje, udalo mi sie zmontowac taki uklad

wszystkie rezystory maja wartosc 1kohm

c1 = 1uF

c2 = 4,7 uF

mikrokontroler to atmega 88p

tranzystor - 2n2222

dioda d1 to zwykla dioda, ktora daje znac czy czujnik dziala

napisalem taki kod do niego :

#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>



int main(){

TCCR0B |= (1<<CS00);	//bez preskalera
TCCR0A |=(1<<WGM01);	//tryb ctc
TIMSK0 |=(1<<OCIE0A);

TCCR0A |=(1<<COM0A0);
OCR0A = 110;	//zliczanie do 110


DDRC |=(1<<PC4);	//dioda ir
DDRB &=~(1<<PB2);	// wejscie dla odbiornika ir
PORTB |=(1<<PB2);	// podicagniecie pb2 pull upem



EICRA |=(1<<ISC01)|(1<<ISC00);		
EIMSK |=(1<<INT0);

PCICR |=(1<<PCIE0);

PCIFR |=(1<<PCIF0);
PCMSK0 |=(1<<PCINT2);			



DDRD |=(1<<PD5);
sei();
PORTD ^=(1<<PD5);
while (1){

_delay_ms(500);


};

}

ISR(TIMER0_COMPA_vect){

PORTC ^=(1<<PC4);
}

ISR(PCINT0_vect){
_delay_ms(30);
static uint8_t a;
static uint8_t b;
a++;

if(a==36){
	b++;
	if(b==100){
PORTD ^=(1<<PD5);
	a=0;
	b=0;
	}
}
}

Niestety czujnik dziala wlasnym zyciem, ja nie mam bladego pojecia dlaczego raz dioda miga a raz nie. Pomozecie?

Z gory dzieki za pomoc 🙂

nota do diody

http://www.tme.eu/pl/Document/333fae76b330fe9f97e7eb0c768e2e53/LD271.pdf

__________

Komentarz dodany przez: Treker

Link do komentarza
Share on other sites

Przede wszystkim natychmiast wyłącz układ i poczytaj. Bardzo źle zrobiłeś swojej diodzie. Nigdy nie rób tak, by istniała bezpośrednia ścieżka niczym nieograniczonego prądu od plusa zasilania przez diodę do masy. Co ma u Ciebie ten prąd regulować? Tranzystor jest wtórnikiem - na emiterze będzie 0.7V mniej niż na bazie, na którą podajesz 5V. Tak więc dioda dostanie - powiedzmy 4.3V. Podałeś link do danych diody a sam tam zajrzałeś? Widziałeś wykres Forward Current? Jaki prąd będzie płynął po przyłożeniu napięcia 4.3V? Duży, prawda? Dopóki nie stosujesz specjalnych źródeł prądowych (a jestem pewien, że będziesz wiedział gdy ich użyjesz, gdy kiedyś do tego dojdziesz) musisz mieć szeregowo z diodami oporniki. Na pewno znajdziesz też (lub sam wymyślisz) sposób na policzenie wartości. Bez opornika szeregowego przez takie elementy po podłączeniu do źródła napięcia płynie prąd ograniczony jedynie wydajnością źródła. Jeśli masz mały zasilaczyk wtyczkowy, może dioda przeżyła ale jeśli używasz 25 amperowego ATX z PC.. sam rozumiesz.

Opowiedz własnymi słowami, może być w punktach jak chciałeś by Twój program działał. Od samego początku: do czego timer, co miała robić obsługa przerwania jednego i drugiego, jak chcesz generować falę 36kHz, jak i czym ma być ona modulowana itd.. Będzie nam dużo łatwiej gdy przynajmniej będziemy wiedzieć jak to miało działać. A być może pomoże też Tobie uporządkować myśli, dodać komentarze w miejscach których już sam nie rozumiesz itd - to działa, spróbuj.

Link do komentarza
Share on other sites

Myslalem ze to tranzystor zalatwi sprawe regulacji, prad plynacy przez diode nie przekracza 100mA, w nocie pisza ze dopuszczalny jest 130, to czy w takim razie musze dac rezystor?

Program w moim zamysle ma dzialac tak:

dioda miga z czestotliwoscia 36kHz, jezeli sie od czegos odbije i trafi do tsopa to wtedy powinno sie wygenerowac przerwanie zasygnalizowane mignieciem drugiej diody.

Link do komentarza
Share on other sites

Tak, musisz dać rezystor, bo tranzystor w tym układzie nie służy do regulacji prądu. Może trafiłeś na wyjątkowo słaby egzemplarz (wzmocnienie prądowe), może prąd bazy jest za mały by mógł wysterować dobrze diodę (to właściwie to samo) a może zasilanie przysiada. Zacznij od zrobienia poprawnego układu, dopiero bierz się za oprogramowanie.

No i nie rób tu przedszkola. Zasady działania czujnika odbiciowego nie musisz tu tłumaczyć. Miałeś opisać działanie Twojego, tego konkretnego programu. Umiesz napisać 10 zdań? To chyba niewielki wysiłek. Skup się, na początek pomogę: Timer taki a taki pracuje w trybie śmakim i zgłasza przerwanie co ileśtam milisekund. W obsłudze przerwania funkcja blablabla robi to i to... itd, łapiesz?

Po takim opisie będziemy wiedzieć co chciałeś zrobić a nie co wyszło. I tak bawiąc się w programowanie będziesz kiedyś musiał robić dokumentację swojej pracy. Możesz zacząć już teraz. Im będziesz gorzej nazywał zmienne i mniej komentował kod, tym będzie Ci trudniej. No i powtórzę raz jeszcze: opowiadanie komuś jak coś ma działać często pomaga w samodzielnym znalezieniu błędu.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Jezeli urazilem to przepraszam

timer0 pracuje w trybie ctc, wystepuje z czestotliwoscia 36 036 Hz(taktowanie 8MHz, bez preskalera, zliczanie do 110), timer mruga dioda ir

przerwanie int0 reaguje na zbocze narastajace, w tym przerwaniu chce mrugac dioda na znak ze czujnik dziala, zmienne a i b to liczniki aby dioda migala z mniejsza czestotliwoscia

Link do komentarza
Share on other sites

Nie chodzi o urażanie tylko o poważne traktowanie się nawzajem. Oczekujesz pomocy - więc zrób wszystko by nam ją ułatwić. Wrzucenie kodu nie wystarcza.

OK, to tak:

1. Po co w ogóle masz obsługę przerwania od timera, skoro on sam sprzętowo może mrugać diodką. Timer przepełnia się z częstotliwością 8MHz/111=72kHz ale dzięki temu, że za każdym przekręceniem się odwraca stan linii PD6, dostajesz 36kHz. Sprzętowe mruganie pinem masz w kodzie, czyż nie? Samą obsługą przerwania zgłaszanego co 13us strasznie zamulasz procesor. Przepnij tranzystor na wyjście OC0A i wytnij obsługę przerwania od timera a IR będzie się nadawało samo.

2. Odbiornik TSOP teoretycznie daje stały stan niski gdy "widzi" falę 36kHz. Dlaczego oczekujesz jakichś zboczy?

3. Niestety odbiorniki przystosowane są do pracy z kodami zdalnego sterowania, a te składają się z paczek impulsów a nie z fali ciągłej. Nie masz szans uzyskać sensownych zasięgów (o ile w ogóle jakieś przewidywalne działanie) dopóki będziesz nadawał falę ciągłą.

4. No i przede wszystkim popraw sterowanie diodą nadawczą bo to co jest teraz może psuć zasilanie i powodować np. resety procesora a już na pewno nie jest zdrowe ani dla tranzystora ani dla samej diody.

5. Wywal opóźnienie z obsługi przerwania - po co to?

6. Zmienna a jest zerowana tylko gdy b==100, a chyba nie tak miało być.

Gfzieś tu na Forum leży obszerny artykuł o IR i jej odbiornikach. Zajrzyj tam i przemyśl raz jeszcze działanie tego czujnika. Przejrzyj też dane katalogowe TSOPów - jest tam wiele cennych uwag. Nie odkrywasz Ameryki ta konstrukcją a może szkoda czasu na walkę na ślepo. Na pocieszenie powiem Ci, że w takiej konfiguracji, z prawidłowo sterowaną diodą nadawczą i modulacją fali IR odpowiadającą potrzebom odbiornika TSOP możesz uzyskać zasięg rzędu 3-4 metrów od dużej przeszkody. Powodzenia 🙂

Link do komentarza
Share on other sites

Generalnie to staralem sie wzorowac na tym artykule

https://www.forbot.pl/forum/topics61/czujnik-optyczny-vt4761.htm

mozesz mi powiedziec gdzie w nocie wyczytales ze tsop daje staly stan niski jak cos widzi?

ja za bardzo to nie umiem czytac not i trochu te wszystkie wykresy to czarna magia dla mnie

Jak mam nadawac ta fale? mam nadawac przez jakis czas i przerwac? i tak dalej?

Z tym tranzystorem to podlaczylem rezystor 1kohm do diody ir, natezenie pradu spadlo do 3,9mA, nawet jezeli zwiekszam prad na bramce tranzystora prad na diodzie nie zwieksza sie, to jak mam uzyskac 100mA?

Link do komentarza
Share on other sites

Ojej, nie jest dobrze. Jeśli uważasz, że przez 1k z 5V może popłynąć 100mA, to czas wrócić do szkoły 🙁 Celowałbym w środek gimnazjum?

A tak na poważnie, skup się i słuchaj. Zacznij od kilku wieczorów z książkami o podstawach elektroniki, szczerze. To będzie naprawdę dobrze zainwestowany czas. Zostaw te procesory i timery, wyłącz komputer i czytaj o prawie Ohma, Kirchoffa, potem o diodach - w tym świecących, może nawet o tranzystorach w różnych konfiguracjach. Bez podstawowej wiedzy będziesz żałośnie bezradną mrówką próbującą wyjść ze szklanki. Może nawet przy odrobinie pomocy kogoś z internetu jesteś w stanie ten czujnik odtworzyć (słowo zbudować jakoś nie przechodzi mi przez gardło) choć uważam, że to czysta strata Twojego (i naszego) czasu. Nie obraź się, proszę - nie taki jest mój cel, ale nawet dział dla początkujących nie jest szkółką niedzielną dla tych co przespali. Przecież nie ma sensu wykładać tu teorii dostępnej w setkach książek lub stron w sieci, prawda? Jeśli uwierzyłeś komuś, że procesorki to taka fajna sprawa, że można zacząć od razu do czegoś nietrywialnego, że można się uczyć na darmowych przykładach ściągniętych wprost z czyjejś stronki to.. tak, to prawda ale i oszustwo zarazem. Bo trzeba też mieć trochę pokory i znać swoje aktualne możliwości. Jeśli ewidentnie nie rozumiesz tego co robisz, to czy nie odnosisz wrażenia, że powinieneś skupić się na podstawach? Pisałem o tym byś znalazł sposób policzenia opornika szeregowego - nie kiwnąłeś nawet palcem tylko na głupa wstawiłeś 1k i bezwstydnie piszesz o swoim zaskoczeniu. Daj mi choć jeden powód dla którego miałbym Ci wszystko podawać na tacy. Wymiękam, przepraszam, do usłyszenia jakieś dwie książki później. Wskazówka: nawet na tym Forum leży kilka pouczających i wartościowych opracowań - możesz zacząć od nich. Czy ktoś przejmie misję niesienia kaganka oświaty?

Link do komentarza
Share on other sites

znam prawo ohma i oba prawa kirchhoffa, ale tego nie moge nigdzie znalezc:

czemu ta dioda musi byc uparcie razem z rezystorem, kiedy natezenie pradu(98mA) jest mniejsze od maksymalnego(130mA), oraz napiecie na diodzie (1,28V) tez jest mniejsze od maksymalnego(1,5V)?

Mam nadzieje ze na to pytanie jeszcze odpowiesz

Pozdrawiam

Link do komentarza
Share on other sites

Marek chyba ma dość - w sumie trochę rozumiem, ale z ciekawości zapytam, skąd wziąłeś te wartości:

1) natężenie prądu 98mA

2) maksymalny prąd 130mA

3) napięcie na diodzie 1,28V

4) maksymlane napięcie na diodzie 1,5V

Link do komentarza
Share on other sites

napiecie 1,28V i natezenie pradu 98mA zmierzylem miernikiem

Z tego co tu rozumiem ze natezenie maksymalne jest 130mA

A napiecie jakie powinno panowac na diodzie to od 1,30-1,5V(maksymalne nie widze zeby pisalo)

Link do komentarza
Share on other sites

Wyjątkowo prądożerna dioda - typowe diody mają prądy rzędu 20mA, stąd było moje pytanie. Zauważ tylko, że parametr Maximum Ratings, nie zawsze oznacza warunki, w których urządzenie może pracować stale. W dalszej części masz informację, że dioda może pracować nawet z prądem 1A, ale producent przezornie ograniczył czas takiego impulsu do 100us. Swoją drogą 100mA podawano też tylko przez 20ms - więc bardzo bym uważał z tymi 130mA.

Natomiast wracając do układu który narysowałeś, Marek wyraźnie napisał - zastosowałeś układ wtórnika emiterowego, więc na emiterze tranzystora masz napięcie ~4.3V. Ponieważ nie lubisz rezystorów, więc podajesz je bezpośrednio na diodę. Sam możesz sprawdzić jaki prąd wtedy płynie - ale pewnie za dużo zarówno dla diody, jak i dla tranzystora. Więc jeden z elementów przepali się pierwszy i na tym się skończy takie połączenie.

Link do komentarza
Share on other sites

Podpiolem rezystor 100om napiecie na diodzie spadlo do 1,22V a natezenie do 33,5mA, zakladam ze teraz niczego nie spale. 😃

to jest z noty katalogowej tsopa, z tego wynika ze musze zamigac przynajmniej 10 - 70 razy dioda , a potem zrobic przerwe wieksza od 12 okresow?

Link do komentarza
Share on other sites

Ciepło, ciepło 🙂

Kiedyś był już ten temat wałkowany. Udało mi się nawet popełnić kilka eksperymentów i opisać ich wyniki. Spróbuj przeczytać i przetrawić to:

https://www.forbot.pl/forum/topics34/teoretyzowanie-przed-praktyka-1-podczerwien-w-robotyce-amatorskiej-vt9084,113.htm

Moim zdaniem jest to dokładnie o tym co próbujesz zrobić. Ciekaw jestem Twoich wniosków.

-----------------------

EDIT:

A jeśli już jesteśmy przy diodach (świecących ale i każdych innych): licząc układy z tymi elementami - oprócz pewnych szczególnych przypadków - nigdy nie polegaj na napięciu. Wielu dobrze zapowiadających się młodych konstruktorów 🙂 jest przyzwyczajonych do liczenia obwodów tak jak nauczyli się tego ze szkoły: oporniki, prawo Ohma - więc napięcie i prąd. To oczywiście wciąż jest prawdą, ale diody nie mają stałej rezystancji więc myślenie kategoriami U/I/R jest tu bardzo zdradliwe. Już pierwszy rzut oka na charakterystykę U=f(I) pokazuje, że jeśli pominiemy jej początek i prądy rzędu uA, to napięcie na diodzie jest właściwie stałe w szerokim zakresie prądów. No bo co to za zmiana, gdy jadąc z prądem od 10 do 200mA (czyli 20 razy) napięcie rusza się od 1.1 do 1.5V? Tak więc wymyślając driver diody, zwykle robisz to dla jakiegoś punktu jej pracy. Ponieważ dioda świeci od prądu a nie od napięcia, musisz zrobić układ który kontroluje głównie prąd. To jest łatwiejsze a co więcej, napięcie diody zmienia się z jej temperaturą a zależy także od egzemplarza, serii produkcyjnej i pewnie jeszcze tego co pracownik w danym dniu jadł na śniadanie. Tak więc nawet gdybyś zrobił dobry, superdokładny stabilizator napięcia opartego na wykresie z datasheet i uznał, że idealne będzie np. 1.25V bo chcesz mieć prąd 60mA i związaną z nim konkretną moc promieniowania to i tak prąd w prawdziwym układzie będzie określony z rozrzutem pewnie z ±50% a może i gorzej.

W liczeniu prostych układów opartych na diodach elementem wyznaczającym prąd jest zwykle.. opornik. W tym celu musisz dysponować napięciem zasilania sporo większym niż ma sama dioda a metoda jest prosta: skoro mamy stałe zasilanie (np. 5V) i stałe napięcie na diodzie (np. 1.2V) to na oporniku musi być ich różnica 5-1.2=3.8V. Skoro ma przez niego płynąć prąd diody (np. 20mA) to musi mieć rezystancję 3.8/0.02=190Ω. Przyjmujesz najbliższe z szeregu 180 lub 200Ω i możesz teraz sam sprawdzić, jak zmieni się prąd diody dla napięcia na niej np. 1.1V lub 1.3V. Różnice nie będą duże dlatego, że opornik 200Ω w takim układzie szeregowym stanowi jakby źródło prądowe, bo jego rezystancja jest dużo większa niż rezystancja dynamiczna diody.

Zwykle układ nie jest tak prosty i po drodze jest jeszcze jakiś klucz tranzystorowy. Tutaj masz do wyboru dwie opcje: MOSFET - który możesz traktować jak bardzo mały opornik i w zasadzie możesz go w obliczeniach pomijać lub tranzystor bipolarny, na który możesz przyjąć stały spadek 0.05-0.3V w zależności od wielkości tranzystora i prądu. W tym ostatnim przypadku napięcie Uce traktujesz jak zmniejszenie napięcia zasilania i koniec.

Te zasady działają, gdy tranzystor jest bardzo mocno włączony - tj. gdy rzeczywiście jest kluczem. W przypadku gdy sterujesz jego bazę/bramkę zbyt słabo (to Twój przypadek) tranzystor nie "ma siły" wejść w obszar nasycenia i napięcie na nim (Uce) zaczyna rosnąć. Jeżeli jest to celowe - to OK. Można sobie wyobrazić układ inteligentnie sterujący bramką/bazą tak by np. stabilizować prąd wyjściowy. No ale wtedy budujesz źródło prądowe - wiesz o tym i zupełnie inaczej podchodzisz do projektu. Musi gdzieś być pomiar prądu, wzmacniacz błędu i driver bazy/bramki. Nie ma żadnych oporników szeregowych bo za regulator robi tranzystor. Układ jest przewidywalny a wielkość wyjściowa (np. prąd) będzie taka jak przewidziałeś i policzyłeś. W Twoim przypadku wpuszczasz jakiś prąd do bazy, bierzesz tranzystor o jakimś wzmocnieniu prądowym więc nie dziw się, że w obwodzie emitera płynie jakiś prąd diody. Prąd ten zależy od tak wielu czynników, że nie sposób go przewidzieć. W ten sposób układów się nie robi a przynajmniej nie w sposób poważny. Nawet najlepszy elektronik nie będzie w stanie powiedzieć ze schematu jaki prąd popłynie w Twojej diodzie, bo parametry tego układu zależą od cech osobniczych elementów w nim użytych.

Podsumowując:

1. Napięcie zasilania sporo wyższe niż diody.

2. Tranzystor pracujący jak klucz a więc silnie sterowany - polecam układ ze wspólnym emiterem z diodą włączoną w kolektor. Gdy emiter stoi na masie możesz bardzo dobrze wyznaczyć prąd bazy przez dobór rezystora między portem procesora a bazą. Z kolei konieczny prąd bazy zakładasz z dużym naddatkiem przy realistycznie założonym wzmocnieniu tranzystora dla danego prądu diody.

3. Rezystor szeregowo z diodą określający jej prąd wg podanego wcześniej wzoru.

Taki układ będzie bezpieczny dla wszystkich elementów i nie będzie zakładał pewnych konkretnych ich cech więc możesz zrobić takich 20 sztuk bez uciążliwego dobierania i pomiarów elementów a każdy będzie bardzo, bardzo podobny w działaniu.

Link do komentarza
Share on other sites

Przeczytalem Twoje prace na temat tsopow. Naprawde sporo sie dowiedzialem z tego co tam napisales, ale mam jeszcze pytania 😃

1 wypelnienie obwiedni - chodzi o pwm?(tak obstawiam)

powiedzmy ze wysylam paczke 20 okresow, to wypelnienie musi byc 0,4.Przerwy miedzy paczkiami ustawia sie pwm?

2 chyba to trywialne pytanie, ale czym sie charakteryzuje silny, slaby sygnal?

Mam nadzieje ze to ostatnie problemy i potem wszystko bedzie smigac 😃

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Gość
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.