Page 1
Czujnik zbli żeniowy indukcyjny
Wizualizacja Danych Sensorycznych Projekt
Łukasz Adamczuk (133047)
1. Wstęp.
Czujniki indukcyjne zbliżeniowe są elementami automatyki reagującymi na
wprowadzenie metalu w ich strefę działania. Powszechnie wykorzystywane są w układach
automatyki przemysłowej do precyzyjnego określania położenia ruchomych części maszyn
i urządzeń. Charakteryzują się dużą pewnością działania i niezawodnością w trudnych
warunkach środowiskowych jak nadmierne zapylenie, wilgotność itp.
Celem projektu było stworzenie czujnika indukcyjnego zbliżeniowego zrealizowanego
na mikrokontrolerze z możliwością wizualizacji pomiaru na wyświetlaczu LCD oraz przy
pomocy złącza RS na komputerze PC. Układ został zrealizowany na płytce uniwersalnej do
programowania AVR-ów z wykorzystaniem mikrokontrolera Atmega8.
Page 2
2. Budowa elektroniczna czujnika zbliżeniowego indukcyjnego.
Na poniższych rysunkach został przedstawiony schemat blokowy czujnika
zbliżeniowego indukcyjnego zrealizowanego na mikrokontrolerze Atmega8, schemat całego
układu oraz zdjęcia pokazujące zrealizowany projekt.
Rysunek 2.1: Schemat blokowy czujnika zbliżeniowego indukcyjnego.
Rysunek 2.2: Schemat układu czujnika zbliżeniowego indukcyjnego.
Page 3
Rysunek 2.3: Wygląd układu czujnika zbliżeniowego indukcyjnego wykonanego na płytce
uniwersalnej.
Rysunek 2.4: Wygląd obudowy wraz z wyświetlaczem oraz czujnika indukcyjnego
.
Page 4
Rysunek 2.5: Wyjście RS-a do wizualizacji wyników na PC oraz LPT do programowania
mikrokontrolera.
3. Mikrokontroler Atmega8. 3.1 Charakterystyka mikrokontrolerów AVR
Budowa rodziny mikrokontrolerów AVR opiera się na architekturze harwardzkiej.
Cechą charakterystyczną tej architektury jest rozdzielnie przestrzeni pamięci adresowej
programu i przestrzeni adresowej pamięci danych. Rozdzielenie to jest wynikiem
zastosowania oddzielnych magistrali adresowych. Dzięki temu umożliwione zostało
stosowanie słowa o różnej szerokości dla pamięci programu i dla pamięci danych. Chroni to
przed przypadkiem, kiedy dane mogłyby być zinterpretowane jako instrukcje.
Mikrokontrolery AVR należą do grupy o architekturze RISC (Reduced Instruction Set
Computer). Wykonanie większości rozkazów jest realizowana w jednym takcie zegara
w przeciwieństwie np. do rodziny mikrokontrolerów 51 zbudowanych w oparciu o
architekturę CISC, gdzie na wykonanie jednego rozkazu potrzeba kilka taktów zegarowych.
Wykonywane rozkazy realizowane są dwustopniowym przetwarzaniem potokowym
(pipeline). Podczas wykonywania rozkazu pobierany jest już wstępnie kod kolejnego.
Page 5
3.2 Architektura mikrokontrolerów AVR
W rodzinie AVR zastosowano klasyczny sposób budowania mikrokontrolerów
o różnych możliwościach, które powstają w wyniku integrowania wspólnego dla rodziny
AVR rdzenia z różnymi blokami peryferyjnymi .
Na poniższym rysunku przedstawiono budowę wewnętrzną mikrokontrolera
ATMEGA8
Rysunek 3.2.1: Budowa wewnętrzna mikrokontrolera Atmrga8
Page 6
Duża ilość rejestrów zwiększa efektywność programowania w językach wyższego
rzędu. Znacznie przyspiesza wykonywanie programu.
Rysunek 3.2.2: Mapa pamięci mikrokontrolera Atmega8
Znaczna część pracy mikrokontrolera to wykonanie operacji arytmetyczno-logicznych.
Wewnętrzne bloki funkcjonalne komunikują się miedzy sobą 8-bitową magistralą, oraz
dodatkowymi liniami sterującymi. W mikrokontrolerze stos został umieszczony w
wewnętrznej pamięci danych (SRAM). Ze względu na to, iż w pamięci tej lokowane są dane
programu, kompilator przeznacza na działanie stosu tylko pozostałe komórki pamięci.
W rodzinie mikroprocesorów AVR dysponujemy wewnętrzną pamięcią programu
typu Flash (Rysunek 3.2.2 ). Cały obszar 1 klow (1 słowo=2 bajty) jest dostępny
bezpośrednio dla wywołań podprogramów i skoków warunkowych.
Wbudowana pamięć Flash upraszcza znacznie prace konstrukcyjne. Programowanie
odbywa się poprzez prosty interfejs, dlatego zbędne stały się skomplikowane i drogie
programatory.
Page 7
Rysunek 3.2.3: Architektura rdzenia mikrokontrolerów AVR
System przerwań mikrokontrolera AVR wykorzystuje niektóre rejestry sterujące
znajdujące się w przestrzeni we/wy. Każde z przerwań ma indywidualny wektor przerwania,
czyli adres skoku do procedury obsługi przerwania.
Tablica wektorów przerwań jest zawsze umieszczana na początku pamięci programu.
Wszystkie przerwania charakteryzują się przypisanym priorytetem obsługi. Im jest niższy
adres danego wektora przerwania, tym wyższy ma on priorytet .
3.3 Funkcje wyprowadzeń
Na poniższym rysunku przedstawiono rozmieszczenie wyprowadzeń mikrokontrolera
Atmega8 w obudowie PDIP lub SOIC. Funkcje wyprowadzeń są następujące:
Page 8
Rysunek 3.3.1: Rozmieszczenie wyprowadzeń mikrokontrolera Atmega8
3.4 Generator taktujący
Do generowania impulsu zegarowego synchronizującego pracę mikrokontrolera
wykorzystano wbudowany wzmacniacz odwracający fazę. Końcówki XTAL1 i XTAL2
pełnią odpowiednio funkcję wejścia i wyjścia. Wzmacniacz zamienia się w generator sygnału
taktującego po dołączeniu zewnętrznego rezonatora. Sposób podłączenia ukazano na rysunku
3.4.1
Wzmacniacz również może współpracować z rezonatorami kwarcowymi
i ceramicznymi.
Rysunek 3.4.1: Zalecany sposób dołączenia zewnętrznego rezonatora kwarcowego
Page 9
3.5 Porty
Mikrokontroler komunikuje się ze światem zewnętrznym poprzez porty
komunikacyjne. Kierunek każdego wyprowadzenia może być przypisany indywidualnie.
Dostęp do portu zapewniony jest przez 3 lokacje w przestrzeni adresowej we/wy
mikrokontrolera. Pierwszym rejestrem jest rejestr danych (Data Register).
PORTx -rejestr danych portu
Rysunek 3.5.1: Rejestr PORTx
Rejestr DDRx służy do ustalenia kierunku transmisji. Każda linia może zostać ustawiona
indywidualnie.
PINx –rejestr wejściowy portu
Rysunek 3.5.2: Rejestr PINx
Rejestr PINx służy do odczytu bezpośredniego stanu na wyprowadzeniach portu.
Zgodnie z tabelą wyprowadzenia portu B mogą spełniać funkcje alternatywne. Port B
może służyć również jako interfejs programowy ISP. Dzięki temu rozwiązaniu wykorzystując
prosty programator zbudowany w oparciu o układ buforujący 74C244 i podłączony do portu
równoległego drukarki zapewniamy sobie możliwość programowania układu. Komunikacja z
układem odbywa się szeregowo w systemie ISP (In System Programming)
3.6 Układ transmisji szeregowej (UART)
Najpopularniejszym standardem przesyłu danych jest standard RS232 powoli
wypierany przez standard USB. Szereg współczesnych urządzeń posiada wbudowany
interfejs szeregowy (synchroniczny/asynchroniczny). Określany jest mianem UART-u
(Universal Asynchronous Receiver and Transmitter). Jest to kompletna implementacja
Page 10
sprzętowa interfejsu. Gdy odległości są większe niż wieloprocesorowe (pracujące w
bezpośrednim sąsiedztwie), należy wykorzystać zewnętrzne układy dopasowujące poziom
sygnałów do standardu RS232 zwiększające możliwości przesyłowe. Znaczna większość
urządzeń,
w których wykorzystany jest interfejs RS232 reaguje na jedynkę logiczną z przedziału od -3
do -12 V, zaś logicznemu zeru przyporządkowany jest przedział napięcia zakresu 3 do
12 V. Sygnały na liniach transmisyjnych nie powinny zawierać się w przedziale od -3 do 3 V,
gdyż mogą być przypadkowo zakwalifikowane wprowadzając tym samym błąd w transmisji.
Najczęściej spotykaną realizacją sprzętową układu dopasowującego poziom napięć
jest układ MAX232. Układ wyprowadzeń przedstawiono na poniższym rysunku
Rysunek 3.6.1: Rozmieszczenie wyprowadzeń układu MAX232
Podstawowe cechy UART wbudowanego w mikrokontrolery AVR to:
- wbudowany generator podstawy czasu dla transmisji szeregowej,
- możliwość uzyskiwania wysokich prędkości transmisji dla niskich częstotliwości rezonatora
kwarcowego,
- dana o długości 8 lub 9 bitów,
- układ redukcji szumów zakłócających transmisję,
- detekcja nadpisania zawartości bufora odbiornika,
- detekcja błędu ramki,
- detekcja błędnego bitu startu,
- trzy wydzielone przerwania do obsługi zdarzeń: zakończenia transmisji danej, opróżnienia
bufora nadawczego, zapełnienia bufora odbiorczego.
Page 11
3.6.1 Sterowanie transmisją. Do obsługi transmisji szeregowej poprzez UART służą cztery rejestry specjalne. UDR -rejestr danych nadawanych/odbieranych
Rysunek 3.6.1.1: Rejestr UDR
- rejestr danych nadawanych/odbieranych przez UART, fizycznie są to dwa oddzielne
rejestry, występujące pod tym samym adresem (przestrzeń I/O). Podczas zapisu dane są
kierowane do rejestru danych wysyłanych (UART Transmit Data Register). Odczyt następuj z
rejestru danych odbieranych (UART Receive Data Register).
UCSRA - rejestr stanu
Rysunek 3.6.1.2: Rejestr UCRSA
- rejestr UCSRA jest rejestrem tylko do odczytu. Sygnalizuje stan pracy układu UART.
Najważniejsze bity z rejestru oznaczają:
RXC (UART Receive Complete): flaga sygnalizująca odebranie znaku przez odbiornik.
Znacznik ten ustawiany jest podczas przenoszenia danej odebranej z rejestru
przesuwającego do rejestru UDR. Ustawienie flagi odbywa się niezależnie od wykrycia
błędu ramki. Jeżeli bit RXCIE w rejestrze UCR jest ustawiony, to podczas wystąpienia
jedynki logicznej na bicie RXC nastąpi zgłoszenie przerwania przez UART Receive
Complate. Oznacza to, że w rejestrze UDR znajduje się dana do odczytu.
TXC (UART Transmit Complete): flaga sygnalizująca zakończenie wysyłania danej
przez nadajnik.
Znacznik ten jest ustawiany w stan logicznej jedynki, gdy cała dana nadawana, łącznie
z bitem stopu zostanie wysunięta z rejestru przesuwającego i nie ma nowej danej
zapisanej w rejestrze UDR. Włączenie nadajnika bitem TXCIE w rejestrze UCR
i ustawienie flagi TXC spowoduje zgłoszenie przerwania od nadajnika UART i będzie
Page 12
ono oznaczało ze nadajnik gotowy jest na przyjęcie kolejnej danej. Bit TXC jest
automatycznie zerowany podczas przejścia do procedury obsługi przerwania.
UDRE (UART Data Register Empty): flaga sygnalizująca opróżnienie bufora UART.
Bit UDRE ustawiany jest podczas przenoszenia danej z rejestru UDR do nadawczego
rejestru przesuwającego. Zgłaszana jest w ten sposób gotowość nadajnika do wczytania
kolejnej danej do wysłania. Gdy bit UDRE jest ustawiony to przerwanie UART Transmit
Complete będzie mogło być obsługiwane dopóty, dopóki bit UDRE jest ustawiony.
Flaga zostaje skasowana podczas wpisu do UDR nowej danej. Należy pamiętać, aby
wchodząc do procedury obsługo przerwania zapisać UDR, ponieważ może to
spowodować wywołanie kolejnego przerwania. Po zerowaniu mikroprocesora flaga
UDRE ustawiana jest sygnalizując gotowość nadajnika do przyjęcia danej.
FE (Framming Error): flaga sygnalizująca błąd ramki.
W przypadku, gdy w bicie stopu wystąpi zerowa wartość, następuje ustawienie flagi,
która zostaje skasowana automatycznie po odebraniu prawidłowego bitu stopu.
OR (OverRun): flaga sygnalizująca nadpisanie danych w rejestrze odbiornika.
Flaga OR jest ustawiana, jeśli zostanie wykryte nadpisanie danych w rejestrze
odbiornika (np. gdy dana znajdująca się aktualnie w rejestrze UDR nie zostanie
odczytana przed wprowadzeniem następnego znaku do odbiorczego rejestru
przesuwającego). Znacznik OR jest zerowany po przesianiu odebranej danej do rejestru
UDR.
UCSRB - rejestr sterujący UART-u
Rysunek 3.6.1.3: Rejestr UCSRB
RXCIE (RX Complete Interrupt Enable): bit zezwalający na przerwanie od odbiornika
Ustawienie znacznika zezwala na przyjęcie przerwania zgłaszanego automatycznie po
odebraniu danej i ustawienie flagi RXC. Przerwanie będzie obsłużone, gdy wcześniej
zostanie odblokowane globalne zezwolenie przerwań.
TXCIE (TX Complete Interrupt Enable): bit zezwalający na przerwanie od nadajnika
Page 13
Jest to zezwolenie przyjęcia przerwania od nadajnika, gdy dana zostanie wyemitowana
i ustawiona zostanie flaga TXC. Przerwanie może być obsłużone, gdy wcześniej
zostanie odblokowane globalne przerwania.
UDRIE (UART Data Register Empty Interrupt Enable): bit zezwalający na przerwanie
od nadajnika po opróżnieniu bufora nadajnika UDR.
Bit zezwala na przyjęcie przerwania po opróżnieniu bufora nadajnika UDR i ustawieniu
flagi UDRIE. Przerwanie zostanie obsłużone pod warunkiem globalnego odblokowania
przerwań.
RXEN (Receiver Enable): bit włączający/wyłączający odbiornik UART
Ustawienie bitu RXEN powoduje włączenie odbiornika UART. Gdy bit jest
wyzerowany odbiór jest niemożliwy.
TXEN (Transmitter Enable): bit włączający/wyłączający nadajnik UART
Ustawienie bitu TXEN powoduje włączenie nadajnika UART. Gdy bit jest wyzerowany
nadawanie jest niemożliwe. Gdy wyzerowanie bitu nastąpi podczas transmisji danej,
nadajnik nie zostanie od razu wyłączony. Nastąpi to dopiero po zakończeniu nadawania
danej znajdującej się w rejestrze UDR.
UCSZ2 (9 Bit Characters Enable): bit ustalający długość danej nadawanej/odbieranej
Ustawienie jedynki logicznej powoduje przyjęcie 9-bitowej długości danej odbieranej
i nadawanej.
RXB8 (Receive Data Bit 8): ósmy bit odebranej danej.
Gdy CHR9 jest ustawione na „1”, RXB8 zawiera najstarszy bit odebranej danej.
TXB8 (Transmit Data Bit 8): ósmy bit nadawanej danej.
Gdy CHR9 jest ustawione na „1”, TXB8 zawiera najstarszy bit nadawanej danej.
UBRR. - rejestr wyboru prędkości transmisji UART
Rysunek 3.6.1.4: Rejestr RUBR
Rejestr UBRR zawiera 8-bitowy parametr określający prędkość transmisji szeregowej.
Sygnały synchronizujące pracą UART są wytwarzane poprzez odpowiednie podzielenie
Page 14
częstotliwości oscylatora systemowego. Wartość wpisu UBRR dobiera się według poniższego
wzoru :
)1(16 +=
UBRR
fBAUD CK
gdzie:
BAUD - prędkość transmisji, −CKf częstotliwość oscylatora taktującego CPU,
UBRR - wartość rejestru UBRR zapewniającą transmisje z ustaloną prędkością (może przyjmować wartości od 0 do 255).
Dla prędkości 9600 i zegara taktującego 8Mhz wartość UBRR to 51. W tym
przypadku błąd transmisji wynosi 0,2%.
Prędkość transmisji dla zastosowanego oscylatora można dobrać wg poniższej tabeli.
Tabela 3.6.1: Dobór parametru UBRR
3.7 Przetworniki A/C Przetworniki A/C to układ elektroniczny mający za zadanie zmianę wartości wielkości
analogowej (ciągłej) na wartość cyfrową - czyli zapisanie za pomocą odpowiedniego kodu
cyfrowego - wielkości analogowej w określonych momentach czasu.
Zasada dzialania :
Page 15
1024
2048
tKo
d cy
frowy
próbkowanie
Rysunek 3.7.1: Próbkowanie sygnałów.
Powyższy wykres pokazuje pewne prawidłowości:
- zamiana wartości wielkości analogowej na kod cyfrowy następuje w określonym momencie
czasu;
- momenty czasowe są tak dobrane aby wykonanie kolejnych konwersji (próbkowanie)
zachowało pełną informację o sygnale analogowym tzn. aby móc go w pełni odtworzyć z
zapisanych kolejnych wartości z postaci cyfrowej (z próbek).
Zamiana wartości wielkości analogowej na kod cyfrowy wymaga wykonania dwóch
kolejnych operacji: zkwantowania wartości analogowej, oraz przypisaniu każdemu
poziomowi kwantowania odpowiedniego kodu cyfrowego.
Przy zwykłych pomiarach prądu i napięcia oraz w większości czujników elektroniki
przemysłowej, elektryczne wartości mierzone występują jako wartości analogowe. Należy je
zatem przekształcić do takiej postaci, która nadawałaby się do dalszego cyfrowego
przetwarzania i przedstawiania jako wartości liczbowych.
000
001
010
011
100
101
110
111
Stan wyjścia(zapisany cyfrowo)
Uwej
KO
DO
WA
NIE
KWANTOWANIE
Błą
d
kw
anto
wania
+Q/2
-Q/2
Rysunek 3.7.2: Kwantowanie sygnałów.
Page 16
Rysunek 3.7.3: Budowa przetwornika ADC w Atmega8.
Page 17
Rysunek 3.7.4: Prescaler ADC
Prescaler posłużył do ustalenia częstotliwości próbkowania
ADMUX - rejestr wyboru wejścia analogowego
Rysunek 3.7.5: rejestr wyboru wejścia analogowego
Tabela 3.7.1: Wybór wejść
Tabela 3.7.2: Wybór napięcia odniesienia (referencyjnego)
Page 18
Opis rejestrów
Rejestr kontrolny przetwornika
Rysunek 3.7.6: Rejestr kontrolny przetwornika
ADEN: uruchamianie przetwornika.
ADSC: pojedyncze przetworzenie.
ADFR: ciągłe przetwarzanie
ADIF : flaga skończonego przetwarzania
ADIE : załączenie przerwania od przetwornika
ADPS2 – 0 : flagi określające częstotliwość próbkowania
4. Wyświetlacz alfanumeryczny LCD
Sterowanie wyświetlaczem alfanumerycznym ze sterownikiem HD44780 odbywa się
na zasadzie wysyłania odpowiednich komend oraz zapisu danych do wewnętrznej pamięci
wyświetlacza. Komendy i dane są rozróżniane na podstawie stanu linii RS (0 - komendy; 1 -
dane). Kierunek transmisji jest określany stanem linii R/W. Sterownik HD44780 posiada dwa
rodzaje pamięci : pamięć generatora znaków (CGROM) oraz pamięć danych (DD RAM).
Pamięć generatora znaków zawiera graficzną postać znaków wyświetlanych na wyświetlaczu
(można porównać do czcionki). Oprócz znaków zdefiniowanych na stałe przez producenta
sterownika do dyspozycji użytkownika pozostaje 8-znakowa pamięć RAM, w której można
zdefiniować własne znaki (np. polskie znaki diakrytyczne). Pamięć danych DD RAM ma
pojemność 80 bajtów (jeden sterownik HD4478 może obsłużyć maksymalnie 80 znaków,
czyli np. 2 linie po 40 znaków, lub 4 linie po 20 znaków).
Zestawienie rozkazów kontrolera HD44780 przedstawia poniższa tabela.
Page 19
Tabela 4.1: Zestawienie rozkazów kontrolera HD44780
Display clear - (RS = 0, R/W = 0, dane = 00000001) -instrukcja ta powoduje wyczyszczenie
wyświetlacza poprzez wypełnienie go spacjami, ustawienie trybu zapisu danych od pozycji w
lewym górnym rogu wyświetlacza oraz wyłączenie trybu przesuwania okna; maksymalny
czas trwania instrukcji - 1,64ms
Display/cursor home - (RS - 0, R/W = 0, dane = 0000001x) - instrukcja powoduje
ustawienie kursora na pozycji pierwszego znaku w pierwszej linii; maksymalny czas trwania
instrukcji 1,64ms
Entry mode set - (RS = 0; R/W = 0, dane = 000001IS) - określenie trybu pracy kursora/okna
wyświetlacza :
- dla S = 1 po zapisaniu znaku do wyświetlacza kursor nie zmienia położenia, natomiast
przesuwa się cała zawartość wyświetlacza
- dla S = 0 po zapisaniu znaku do wyświetlacza kursor zmienia położenie, a przesuwanie okna
jest wyłączone
- dla I = 1 kursor lub okno wyświetlacza przesuwa się w prawo (inkrementacja adresu znaku)
- dla I = 0 kursor lub okno wyświetlacza przesuwa się w lewo (dekrementacja adresu znaku)
Maksymalny czas trwania instrukcji - 40us
Display ON/OFF - (RS = 0, R/W = 0, dane = 00001DCB)
- dla D = 1 - włączenie wyświetlacza
- dla D = 0 - wyłączenie wyświetlacza
- dla C = 1 - włączenie kursora
- dla C = 0 - wyłączenie kursora
- dla B = 1 - włączenie migania kursora
- dla B = 0 - wyłączenie migania kursora
Page 20
Display cursor shift - (RS = 0, R/W = 0, dane = 0001SRxx)
- dla S = 1 - przesuwana jest zawartość okna
- dla S = 0 - przesuwany jest kursor
- dla R = 1 - kierunek przesuwu w prawo
- dla R = 0 - kierunek przesuwu w lewo
Function set (RS= 0, R/W = 0, dane = 001DNFxx)
- dla D = 1 - interfejs 8-bitowy
- dla D = 0 - interfejs 4-bitowy
- dla N = 1 - wyświetlacz dwuwierszowy
- dla N = 0 - wyświetlacz jednowierszowy
- dla F = 1 - matryca znaków 5*10 punktów
- dla F = 0 - matryca znaków 5*7punktów
CG RAM set - (RS= 0, RW = 0, dane = 01AAALLL) - ustawia adres pamięci generatora
znaków. AAA - 3-bitowy adres znaku, LLL - 3-bitowy numer linii składającej się na
graficzne odwzorowanie znaku.
DD RAM set - (RS = 0, R/W = 0, dane = 1AAAAAAA) - ustawia adres pamięci
wyświetlacza, pod który nastąpi zapis (bądź odczyt) danych operacją Data write lub Data
read.
Busy flag read - (RS = 0, R/W = 1, dane = BAAAAAAA) - odczyt flagi zajętości i adresu
pamięci wyświetlacza. B - flaga zajętości wyświetlacza, AAAAAAA - 7-bitowy adres
pamięci.
Data read - (RS = 1, R/W= 1, dane = odczytywany bajt danych) - odczyt danych z pamięci
wyświetlacza, bądź pamięci CG RAM (jeśli poprzednio wydano komendę CG RAM set)
Data write - (RS = 1, R/W = 0, dane = zapisywany bajt danych) - zapis danych do pamięci
wyświetlacza, bądź pamięci CG RAM (jeśli poprzednio wydano komendę CG RAM set)