PIC16F18446 Sensor board

PIC16F18446 Sensor board
Pobierz PDF Download icon

Microchip z godną podziwu konsekwencją promuje niewielkie, 8-bitowe mikrokontrolery z rdzeniem RISC pamiętającym lata osiemdziesiąte ubiegłego wieku. Ten rdzeń nieco zmodernizowano, ale nie on stanowi o atrakcyjności małych mikrokontrolerów PIC. Na łamach Elektroniki Praktycznej pisałem już o bardzo ciekawym pomyśle łączenia tego rdzenia i szeregu ciekawych, pracujących niezależnie bloków funkcjonalnych. Sterowanie łańcuchami 3-kolorowych diod LED czy generowanie przebiegu PWM o dużej rozdzielczości to przykłady kreatywnego wykorzystania tych peryferii, również opisywane w EP. Nowe możliwości i właściwości mikrokontrolerów z niezależnymi peryferiami pokażemy na przykładzie mikrokontrolera PIC16F18446 i modułu demonstracyjnego PIC16F18446 Sensor Board.

PIC16F18446 ma wbudowany ulepszony rdzeń z rodziny „midrange”, realizujący 48 instrukcji i mający 16-poziomowy stos. Jak na 8-bitowca dysponuje sporą pamięcią programu Flash (28 kB) i RAM (2 kB). Zabudowano w nim typowe interfejsy komunikacyjne: UART, 2×SPI i 2×I2C, liczniki, przetwornik A/C, standardowe układy taktowania itp. Jednym z ciekawszych układów peryferyjnych jest przetwornik A/C z blokiem obliczeń.

Schemat blokowy wspomnianego przetwornika pokazano na rysunku 1. Wyposażono go we własne źródło napięcia referencyjnego i programowany generator taktujący konwersją. Ale najciekawsze są tryby pracy z danymi wyjściowymi konwersji:

Tryb podstawowy. Przetwornik pracuje bez żadnych obliczeń na danych wyjściowych.

Tryb akumulacji. Po każdej konwersji wynik zapisany w rejestrze ACC jest gromadzony (dodawany ) do 16-bitowego rejestru ADACC (dla konwersji 10-bitowej) lub 18-bitowego (dla konwersji 12-bitowej). Rejestr ADCNT zlicza zgromadzone próbki. Rejestr ADACC przepełni się zależnie od wartości ACC po kilku, a maksymalnie po 64 próbkach. Wystąpienie przepełnienia jest sygnalizowane ustawieniem bitu ADAOV. Wartość akumulowana może być przesuwana w prawo o wartość zapisaną w rejestrze ADCRS i zapisywana w rejestrze ADFLT.

Tryb uśredniania. Jest on podobny do trybu akumulacji, jednak gdy liczna próbek zliczana w ADCNT jest równa wartości zapisanej w rejestrze ADRPT, to wartość z rejestru ADFLT staje się średnią wartością sygnału wejściowego za ADCNT próbek. Średnia wartość jest poprawnie obliczana dla ADRPT równe ADRPT=2^ADCRS.

Filtrowanie dolnoprzepustowe. Charakterystyka tłumienia filtra zależy oczywiście od częstotliwości próbkowania. Maksymalna częstotliwość sygnału próbkowanego powinna być równa połowie częstotliwości próbkowania (zgodnie z twierdzeniem Nyquista). Rząd filtru jest programowany w zakresie od 1 do 6 (rejestr ADCRS). Na rysunku 2 pokazano przykład charakterystyk filtrów różnych rzędów dla próbkowania z częstotliwością 900 Hz.

Oprócz przetwornika zabudowano bardzo ciekawe, ale bardziej już znane interfejsy typu Core Independent:

Moduł PWM o rozdzielczości 10 bitów z wyrównaniem do zbocza (edge aligned oputput).

Generator sygnału komplementarnego CWG z funkcją dodawania czasów rising edge deadbandfalling edge deadband (rysunek 4). Źródłem sygnału jest wyjście generatora PWM.

Cyfrowo sterowany oscylator NCO – precyzyjny oscylator z dokładną regulacją częstotliwości.

Moduł DSM (Digital Signal Modulator) modulujący sygnał nośnej (carrier) sygnałem danych – przykład działania DSM pokazano na rysunku 6.

Moduł Signal Mesurement Timer (rysunek 7) to 24-bitowy licznik z zaawansowaną logiką taktowania i bramkowania sygnału mierzonego. Może być skonfigurowany do mierzenia różnych sygnałów cyfrowych, takich jak długość impulsów, częstotliwość i wypełnienie PWM, czas pomiędzy zboczami dwóch sygnałów.

Moduł Hardware Limit Timer HLT (rysunek 8) jest przeznaczony do wykrywania periodyczności zdarzeń na przykład z czujnika wału obrotów wału silnika. Może wykrywać przeciążenia (spadek obrotów wału poniżej określonej wartości) lub zatrzymanie wału silnika. Wykrycie stanów awaryjnych może być sygnałem dla generatora PWM, który zatrzyma sterowanie silnikiem.

Moduł Zero Cross Detect (rysunek 9). Wykrywa przejście sygnału przemiennego przez zero (potencjał masy). Może być użyty do sterowania triakiem z ograniczonymi zakłóceniami EMI (sterowanie w zerze). Może również służyć do pomiaru okresu sygnału AC.

Standardowo wbudowano też mechanizm PPS (Peripherial Pin Select) pozwalający na przypisywanie sygnałów układów peryferyjnych do wybranych wyprowadzeń mikrokontrolera, rozbudowany moduł watchdoga WWD oraz tryby oszczędzania energii IDLE oraz DOZE. Ciekawe jest wprowadzenie mechanizmu MAP Memory Acces Partition zapewniającego ochronę danych użytkownika i wpierającego użycie bootloadera.

Jak widać, wyposażenie tego „małego” mikrokontrolera jest całkiem bogate. Zobaczmy teraz jak można je wykorzystać w nietypowych i standardowych zastosowaniach. Taką możliwość daje firmowy moduł ewaluacyjny PIC16F18446 Sensor Board – pokazano go na rysunku 10.

Mikrokontroler z układem programatora/debuggera zamontowano na niewielkiej płytce MPLAB Xpress PIC16F18446, przylutowanej do dużej płytki bazowej. Na płytce bazowej zamontowano układy: detektora metalu, detektora zbliżenia, czujnika ciśnienia atmosferycznego, czujnika temperatury otoczenia, graficzny wyświetlacz LCD ze stabilizatorem +2,8 V, dwa przyciski S2 i S3, buzzer oraz wyłącznik zasilania. Na drugiej stronie płytki zamontowano dwa gniazda dla baterii alkalicznych 1,5 V typu AA. Schemat ideowy modułu Sensor Board pokazano na rysunku 11.

Niespotykanym rozwiązaniem jest zastosowanie w układzie z „małym” mikrokontrolerem wyświetlacza graficznego zwykle kojarzonego z dużymi wymaganiami sprzętowymi. Wyświetlacz ma rozdzielczość 128×160 pikseli i przekątną 1,8 cala. Do komunikacji z wbudowanym sterownikiem IL9163C wykorzystuje się magistralę SPI. Napięcie zasilania może mieć wartość z zakresu 2,5…3,3 V i typowo wynosi 2,8 V. W module użyto stabilizatora +2,8 V oraz układów dopasowujących sygnały z poziomów logicznych portów mikrokontrolera do poziomów logicznych akceptowanych przez sterownik wyświetlacza zasilanego napięciem +2,8 V. Dodatkowo, zastosowano układ sterowania podświetleniem z tranzystorem FET. Schemat układu wyświetlacza pokazano na rysunku 12.

Program demonstracyjny dostarczany z modułem jest zorganizowany w formie siedmiu funkcji (ekranów) przełączanych przyciskami S2 (poprzedni ekran) i S3 (następny ekran). Mamy do dyspozycji 7 funkcji:

Pomiar napięcia baterii zasilających moduł.

Pomiar temperatury otoczenia w stopniach Celsiusa z rozdzielczością 10 i 12 bitów.

Pomiar ciśnienia atmosferycznego z rozdzielczością 10 i 12 bitów.

Wykrywanie i pomiar zbliżenia. Kiedy moduł jest zasilany z baterii brak aktywności wykrywania zbliżenia powoduje wygaszenie podświetlania wyświetlacza.

Wykrywanie przedmiotów metalowych ferromagnetyków.

Generowanie dźwięków z częstotliwością zależną od wykrytej odległości zbliżenia.

Generowanie dźwięków z częstotliwością zależną od wykrytej odległości przedmiotu metalowego do detektora

Pomiar napięcia baterii

Pomiar napięcia baterii wykonuje wbudowany przetwornik A/C. Jest on używany we wszystkich funkcjach: pomiaru napięcia baterii, temperatury, ciśnienia, w czujniku zbliżenia i czujniku metalu. Na rysunku 13 pokazano konfigurację tego modułu ADCC przez wtyczkę MCC pakietu MPLAB X IDE. Napięcie +3 V z dwóch poł?czonych szeregowo baterii jest podawane przez diod? Shottky na?wy??cznik zasilania. Dioda zabezpiecza uk?ad zasilania bateryjnego przed uszkodzeniem podczas zasilania zewn?trznego (przez z??cze  USB). Mamy mierzy? napi?cie zasilania, wi?c wystarczy ustawi? napi?cie referencyjne: ADNREF= VSS (GND) i?ADPREF=VDD. Pomiar napi?cia wykonuje procedura ączonych szeregowo baterii jest podawane przez diodę Shottky na wyłącznik zasilania. Dioda zabezpiecza układ zasilania bateryjnego przed uszkodzeniem podczas zasilania zewnętrznego (przez złącze  USB). Mamy mierzyć napięcie zasilania, więc wystarczy ustawić napięcie referencyjne: ADNREF= VSS (GND) i ADPREF=VDD. Pomiar napięcia wykonuje procedura readBattery() pokazana na listingu 1. Mierzone jest napięcie stałe z modułu FVR Buffer, podawane na wejście przetwornika, a zmienia się wartość napięcia referencyjnego – w naszym wypadku napięcia zasilania VDD z baterii.

Pomiar temperatury zewnętrznej

Do pomiaru użyto sensora MCP9701. Jest to typowy układ mierzący temperaturę z zakresu od 0 do +70°C z maksymalną niepewnością ±2°C. Sygnałem wyjściowym jest napięcie zmieniane ze współczynnikiem 19,5 mV/°C. Napięcie Vout jest podawane na wyprowadzenie RC3 (ANC3) mikrokontrolera. Napięcie początkowe dla temperatury 0°C wynosi 400 mV.

W temperaturze pokojowej +20°C mamy napięcie 390 mV (20×19,5 mV) + 400 mV=790 mV. Napięcie referencyjne dla ADCC jest uzyskiwane z modułu programowanego napięcia referencyjnego FVR_Buffer1 – ma ono wartość 1,024 V. To określa maksymalną mierzoną temperaturę na poziomie 1024 mV-400 mV= 624 mV, a więc 624 mV/19,5 mV=32. Układ pomiaru temperatury pokazano na rysunku 15, a procedura pomiaru na listingu 2.

Pomiar ciśnienia atmosferycznego

Czujnikiem ciśnienia atmosferycznego jest układ MP3V5050VC6U, lub MP3V5050GP (rysunek 16). Wykonano go w technologii MEMS. Mierzy różnicę ciśnienia w zakresie od 0 do 50 kPa od poziomu 100 kPa. Rozdzielczość pomiaru wynosi 54 mV/kPa, więc dla pełnego zakresu na wyjściu Vout mamy napięcie 50×54 mV=2700 mV. Układ musi być zasilany napięciem co najmniej +2,7 V – typowo 3,0 V. My mierzymy ciśnienie atmosferyczne o wartości 100 kPa (1000 hPa)+50 kPa. Na listingu 3 pokazano procedurę pomiaru napięcia z rozdzielczością 10- i 12-bitową z czujnika i przeliczenie jej na wartość ciśnienia w paskalach. Dla wyświetlanego ciśnienia 1023 hPa na wyjściu czujnika występuje napięcie ok. 145 mV.

Detektor metalu

Pomiary temperatury lub ciśnienia za pomocą dedykowanych czujników, to standardowe wykorzystanie modułu przetwornika A/C. Na płytce zamontowano ciekawy układ do wykrywania zbliżenia przedmiotów wykonanych z ferromagnetyków (np. stali). Takiego czujnika można użyć na przykład do wykrywania zamknięcia lub otwarcia metalowych drzwi. Głównym elementem detektora jest spora cewka powietrzna o indukcyjności 160 mH (rysunek 17). Na rysunku 18 pokazano schemat elektryczny układu detektora.

Zasada działania detektora jest następująca – po uruchomieniu procesu detekcji jest wykonywana jednorazowo procedura skanowania. Na wejście układu z wyprowadzenia RC1 jest podawany przebieg prostokątny generowany przez moduł NCO. Częstotliwość tego przebiegu zmienia się w zakresie od 30 kHz do 45 kHz. Po każdej zmianie częstotliwości z ustalonym krokiem jest mierzone napięcie stałe („amplituda”) na emiterze tranzystora Q2. Program wyszukuje i zapamiętuje taką częstotliwość sterującą, przy której napięcie na emiterze Q2 jest najwyższe. Pokazane to na listingu 4.

Cewka układu detektora jest włączona pomiędzy bazę tranzystora u masę. Przybliżanie do niej ferromagnetyka powoduje wzrost indukcyjności, a co za tym idzie – zwiększenie reaktancji cewki przy stałej częstotliwości. Amplituda przebiegu na bazie tranzystora maleje. Na rysunku 19 pokazano oscylogramy przebiegów na bazie tranzystora Q2 przy cewce bez przybliżonego ferromagnetyka i potem przy cewce z przybliżonym przedmiotem stalowym. Układ wejściowy działa jak filtr dolnoprzepustowy i dlatego wejściowy sygnał prostokątny generowany przez układ NCO po odfiltrowaniu harmonicznych staje się przebiegiem sinusoidalnym.

Po przybliżeniu przedmiotu stalowego amplituda zmalała z 3,1 V na 2,7 V, a napięcie stałe na wyjściu układu czujnika z 880 mV do 610 mV. Zbliżanie i oddalanie przedmiotu stalowego powoduje, że napięcie na czujniku będzie się zmieniało mniej więcej w zakresie 610…880 mV. Teraz wystarczy to napięcie zmierzyć i odpowiednio interpretować. Procedura obsługi czujnika wyświetla na ekranie linię. Jej umiejscowienie na ekranie odzwierciedla stan napięcia na wyjściu czujnika. Jest tez możliwość sygnalizacji dźwiękowej. Przy zbliżaniu metalu do cewki rośnie częstotliwość sygnału dźwiękowego, a przy oddalaniu maleje. Pomiar napięcia wyjścia detektora wykonuje procedura readMetalDetector zamieszczona na listingu 6.

Czujnik odległości

Microchip od dawna rozwija technologię obsługi dotykowych 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 trzeba dużo większej uwagi przy projektowaniu sensora tak żeby uzyskać dobry współczynnik sygnału użytecznego do szumu SNR (rysunek 20). Ż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.

Sensor powinien być tak duży, jak to tylko możliwe.

Można na płytce wykonać aktywną osłonę czujnika, jak na rysunku 20.

Trzeba wyeliminować ruch elementów układu względem czujnika. Na przykład, wyeliminować ruchy taśmy elastycznej przez zamocowania lub przyklejenie.

W układach zasilanych bateryjnie trzeba maksymalnie zwiększyć sprzężenie pomiędzy gruntem  a czujnikiem. W układach z zasilaniem bateryjnym (a z takimi mamy tu do czynienia), zarówno ludzkie ciało jak i czujnik mają pojemność sprzęgającą z powierzchnią ziemi. Pokazano to na rysunku 21. Żeby układ zachował dobre parametry musimy dążyć, aby 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 22).

Implementacja sprzętowa jest nieskomplikowana. Czujnik jest fragmentem metalowej ścieżki na płytce drukowanej i jest przyłączony do wejścia przetwornika A/C za pomocą wąskiej ścieżki. Opcjonalny rezystor tworzy dodatkowy filtr dolnoprzepustowy. Na rysunku 23 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 z poziom szumów pochodzących z układu mikrokontrolera, ale także ze środowiska zewnętrznego. Pomiar pojemności odbywa się techniką opartą na ładowaniu i rozładowywaniu wewnętrznego kondensatora przetwornika A/C i naprzemiennym ładowaniu i rozładowywaniu kondensatora czujnika.

Zasada działania jest obszernie i dokładnie opisana w nocie aplikacyjnej Microchipa AN1478 dostępnej na stronie www.microchip.com. Na listingu 7 pokazano procedurę inicjalizacji modułu pomiaru odległości, a na listingu 8 procedurę odczytywania czujnika z wykorzystaniem przetwornika A/C.

Uwagi końcowe

Opisywany moduł to interesujące 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 wypadku 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 (A/C i NCO) oraz bardzo prostego układu czujnika pozwala na zbudowanie dobrze działającego czujnika „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.

Opisałem wybrane przeze 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.

Tomasz Jabłoński, EP

Artykuł ukazał się w
Elektronika Praktyczna
maj 2018
DO POBRANIA
Pobierz PDF Download icon
Elektronika Praktyczna Plus lipiec - grudzień 2012

Elektronika Praktyczna Plus

Monograficzne wydania specjalne

Elektronik marzec 2020

Elektronik

Magazyn elektroniki profesjonalnej

Raspberry Pi 2015

Raspberry Pi

Wykorzystaj wszystkie możliwości wyjątkowego minikomputera

Świat Radio kwiecień 2020

Świat Radio

Magazyn użytkowników eteru

APA - Automatyka Podzespoły Aplikacje marzec 2020

APA - Automatyka Podzespoły Aplikacje

Technika i rynek systemów automatyki

Elektronika Praktyczna marzec 2020

Elektronika Praktyczna

Międzynarodowy magazyn elektroników konstruktorów

Praktyczny Kurs Elektroniki 2018

Praktyczny Kurs Elektroniki

24 pasjonujące projekty elektroniczne

Elektronika dla Wszystkich kwiecień 2020

Elektronika dla Wszystkich

Interesująca elektronika dla pasjonatów