Skocz do zawartości

Czujnik światła TSC 3200


Sawa

Pomocna odpowiedź

Witam wszystkich. Robię projekt z czujnikiem TSC3200 (http://botland.com.pl/czujniki-swiatla-i-koloru/4932-czujnik-koloru-przetwornik-swiatlo-czestotliwosc-tcs3200-modul-waveshare.html). Jest tam pin OUT z określoną skalą częstotliwości i z niego odczytuje wartosc koloru. Moglby ktos mi wytlumaczyc jak dziala komunikacja z mikrokontrolerem (odczyt częstotliwości). Z jaką częstotliwością muszę go próbkować? Powiedzmy, że działa on z częstotliwością 100kHz. Jak go próbkuje to skąd wiem kiedy skończyć, jak dlugo trwa pomiar itp. Siedze dzisiaj caly dzien i nic nie moge zrobić. Projekt jest w C. Na stronie http://botland.com.pl/content/153-wykrywanie-koloru-z-arduino jest przykładowy kod dla Arduino

Link do komentarza
Share on other sites

Jak sam napisałeś, sygnałem wyjściowym z tego czujnika jest częstotliwość czyli liczba pełnych okresów na sekundę. Pomiar częstotliwości polega na zliczaniu tych okresów przez pewien czas. Teoretycznie długość tego czasu nie jest ważna, choć wpływa na dokładność pomiaru. Jeżeli np. sygnał 10.532kHz będziesz mierzył przez 1ms to dostaniesz 10 albo 11 impulsów w zależności od tego jak swoim okresem próbkowania "załapiesz" się na sygnał wejściowy. To oznacza, że wbudowany w zasadę pomiaru błąd będzie na poziomie 10% wielkości mierzonej. Jeśli ten sam sygnał będziesz mierzył przez 1s to zliczysz 10532 lub 10533 impulsy i tu już masz błąd rzędu 0.1%. Prosta zależność: im dłużej mierzysz częstotliwość tym dokładniej. Musisz wymyślić jakiś kompromis, bo czasem zbyt długie okresy są nieakceptowalne z tego powodu, że zjawisko jest zbyt szybkie. Jeśli np. przed czujnikiem będą przesuwać się szybko jakieś przedmioty na taśmie, to nie możesz mierzyć przez 1s bo wtedy wynik będzie średnią z przedmiotu i z tła. O ile pamiętam ten czujnik ma trzy detektory koloru więc aby poznać całą prawdę musisz częstotliwość zmierzyć trzy razy zmieniając po drodze stan jakichś dwóch pinów.

Jak mierzyć częstotliwość? Wszystko zależy jaką. W przypadku 100kHz nie masz szans zrobić tego programowo na Arduino. Musiałbyś próbkować wejście procesora co najmniej z szybkością 200kHz (a najlepiej jeszcze szybciej) by odróżniać każdą "dolinę" od "górki" i prawidłowo wykrywać zbocza sygnału. Na szczęście procesor ma do tego sprzętowe timery. Każdy z nich może być przestawiony na taktowanie zegarem zewnętrznym. Robisz więc tak:

1. Wybierasz timer który poświęcić na pomiary. Proponuję Timer1 jako najdłuższy, bo 16-bitowy.

2. Przestawiasz go na taktowanie z wejścia T1. Od tej pory timer będzie inkrementowany gdy na pinie PD5 pojawi się zbocze narastające. Tę linię procesora musisz oczywiście ustawić na wejście i tam doprowadzić sygnał z czujnika.

3. Przed pomiarem ustawiasz odpowiednio wejścia sterujące czujnika (wybór koloru), zerujesz timer i zaczynasz czekać.

4. Po upływie określonego czasu (np. 100ms?) zatrzymujesz i odczytujesz timer - to jest Twój wynik. Dla 100kHz będzie to ok. 10000.

Zliczanie czasu możesz także zrobić na kolejnym timerze - od tego są, ale to już Twój wybór. Czy to jest jasne?

EDIT:

W przykładzie podanym na stronie Botlandu timer 2 służy do odliczania czasu 10ms. Sygnał z czujnika jest doprowadzony do wejścia przerwania zewnętrznego INT0 którego procedura obsługi inkrementuje licznik programowy. Można i tak, choć skoro mamy timer zliczający to sprzętowo, po co obciążać procesor przerwaniami? Czego tam nie rozumiesz?

  • Lubię! 1
Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • 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.