Zestaw startowy Microchip PIC16F18446 Sensor Board – demonstracja możliwości płytki, część 2
Czujnik odległości
Microchip od dawna rozwija technologię obsługi czujników dotykowych mTouch. Wykrycie zadziałania czujnika wymaga dotknięcia palcem do dielektryka. Układ stale monitoruje pojemność czujnika względem masy i wykrywa jej znacząca zmianę. Czujnik odległości działa na takiej samej zasadzie, ale ponieważ musi działać na stosunkowo duże odległości, to zmiany pojemności będą zdecydowanie mniejsze. Żeby wykrywanie było niezawodne potrzeba dużo większej uwagi przy projektowaniu sensora tak żeby uzyskać dobry współczynnik sygnału użytecznego do szumu (SNR).
Rysunek 6. Zasada działania czujnika odległości
Żeby osiągnąć maksymalnie niezawodne działanie czujnika trzeba przestrzegać w trakcie jego projektowania kilku zasad:
-
- Odległość czujnika od ścieżek GND i wszystkich metalowych elementów na płytce powinna być jak największa
- Rozmiar sensora powinien być tak duży jak to tylko możliwe
- Można na płytce wykonać aktywną osłonę czujnika (rysunek 7)
- Trzeba wyeliminować ruch elementów układu względem czujnika, na przykład wyeliminować ruchy taśmy elastycznej przez zamocowanie lub przyklejenie
- W układach zasilanych bateryjnie trzeba maksymalnie zwiększyć sprzężenie pomiędzy masą a czujnikiem. W takich układach zarówno ludzkie ciało jak i czujnik mają pojemność sprzęgającą z powierzchnią ziemi. Zostało to pokazane na rysunku 8. Żeby układ zachował dobre parametry musimy dążyć żeby CGND była jak największa. Można to osiągnąć na przykład przez połączenie masy układu z uziemieniem sieci energetycznej, lub jakimkolwiek innym uziemieniem o małej rezystancji
Rysunek 7. Aktywna osłona czujnika
Rysunek 8. Model sprzężeń pojemnościowych przy zasilaniu bateryjnym
Sprzętowa implementacja jest bardzo prosta. Czujnik jest fragmentem metalowej ścieżki na płytce drukowanej i jest podłączony do wejścia przetwornika analogowo-cyfrowego za pomocą cienkiej ścieżki. Opcjonalny rezystor tworzy dodatkowy filtr dolnoprzepustowy. Na rysunku 9 pokazano układ czujnika z naszego modułu. Mikrokontroler cyklicznie mierzy pojemność czujnika względem masy i wykrywa znaczące jej zmiany. Ta zmiana musi być znacząco wyższa niż poziom szumów pochodzących z układu mikrokontrolera, a także ze środowiska zewnętrznego.
Rysunek 9. Układ czujnika odległości
Pomiar pojemności jest techniką opartą na ładowaniu i rozładowywaniu wewnętrznego kondensatora przetwornika analogowo cyfrowego i naprzemiennym ładowaniu i rozładowywaniu kondensatora czujnika. Zasada działania jest dość obszernie i dokładnie opisana w nocie aplikacyjnej Microchipa AN1478 dostępnej na stronie www.microchip.com. Na listingu 6 pokazano procedurę inicjalizacji modułu pomiaru odległości, a na listingu 7 procedurę odczytywania czujnika z wykorzystaniem przetwornika analogowo-cyfrowego.
void initProximity(void) { proximityMin = 0xFFFF; proximityMax = 0; proximityTh = 0; proximitySamples = 64;//4096; clearPlot(&plot1, 0); clearPlot(&plot2, 0); readProximity(); proximity10bitOffset = proximity10bit; proximity12bitOffset = proximity12bit; objectDetected = false; }
Listing 6. Inicjalizacja pomiaru odległości
void readProximity(void) { uint32_t res = 0; ADREF = 0x00; // ADNREF VSS; ADPREF VDD ADPRE = 50; // max 8191 ADCON1bits.ADPPOL = 0; // to VDD ADACQ = 25; // max 8191 for (uint16_t i = 0; i < proximitySamples; i++) { ADCC_GetSingleConversion(channel_Proximity); res += ADCC_GetAccumulatorValue() >> 6; } res = res / (proximitySamples>>2); ADPRE = 0; ADACQ = 0; if ( proximityMin > res ) { proximityMin = res; } if ( proximityMax < res ) { proximityMax = res; proximityTh = proximityMax; } proximity12bit = res; proximity10bit = res & 0xFFFFFFFC; }
Listing 7. Pomiar odległości
Uwagi końcowe
Opisywany tutaj moduł to ciekawe połączenie cyfrowego środowiska mikrokontrolera ze światem analogowym. Pomiary napięcia, ciśnienia, czy temperatury z użyciem scalonych czujników są wykonywane od dawna i również w tym przypadku nie są czymś nadzwyczajnym. Warto się jednak przyjrzeć dwóm ciekawym czujnikom – metalu i zbliżenia. Czujniki przedmiotów stalowych są stosowane od dawna w automatyce. Ale tu mamy interesujący projekt – łatwy do wykonania i bardzo tani. Wykorzystanie taniego mikrokontrolera z wbudowanymi odpowiednimi peryferiami (ADC i NCO) i bardzo prostego układu czujnika pozwala zbudować dobrze działający czujnik „za grosze”. Podobnie jest z dobrze działającym czujnikiem zbliżenia. Tu potrzeby jest tylko jeden rezystor, odpowiednio zaprojektowany czujnik na płytce i tani mikrokontroler. To kolejny przykład na to, że firma przykłada dużą wagę do tej linii mikrokontrolerów i ich wykorzystywania – często niekonwencjonalnego – w tanich systemach sterowania i pomiarów.
Przedstawiłem tu wybrane – według mnie najbardziej istotne – procedury obsługi czujników. Pominąłem fragmenty programu odpowiedzialne za wizualizację pomiarów na wyświetlaczu i sygnalizację dźwiękową. Na stronie Microchipa jest do pobrania cały projekt programu wgranego fabrycznie do mikrokontrolera, z kompletnymi plikami źródłowymi. Każdy zainteresowany może przystosować zamieszczone tam procedury do swoich potrzeb.