Mikrokontrolery i ich zastosowania Wstępne uwagi
Wstępny program wykładu: Układy sterowania;układy programowalne. System binarny i heksadecymalny. Mikroprocesor i mikrokontroler - podobieństwa i różnice. Charakterystyka przykładowego mikrokontrolera na przykładzie układu z rodziny HC05 (Motorola/Freescale). Sposoby pisania programu dla mikrokontrolera, narzędzia programowe i sprzętowe. Sprzęganie mikrokontrolera z urządzeniami zewnętrznymi.
Układ sterowania - podstawowe pojęcia Układ o stałym algorytmie działania: działanie układu określone jest przez budowę układu; każdorazowa zmiana realizowanego zadania wymaga przebudowy całego układu. WEJ WYJ "Sztywn y" algorytm dzia lania
Układ programowalny Sposób działania określony jest poprzez algorytm umieszczony w pamięci układu WEJ WYJ Modyfikacja działania U.P. nie wymaga zmiany jego struktury! algorytm dzia lania (p rog ra m ) PAMIĘĆ PROGRAMU Pierwsze przykłady - krosna mechaniczne (XIX w.); Większe rozpowszechnienie - dopiero po wynalezieniu mikroprocesora (lata 70-te XX w.).
System (kod) dziesiętny Używany w życiu codziennym, podstawą systemu jest liczba 10 Np. 1895 = 1*10^3+8*10^2+9*10^1+5*10^0 Do wyrażenia dowolnej liczby naturalnej potrzeba 10 wartości ze zbioru {0,1,2,...,9}. Liczby zapisane w systemie dziesiętnym często oznaczane są przyrostkiem DEC. System bardzo niedogodny do stosowania w technice cyfrowej!
System (kod) binarny (dwójkowy) Podstawą tego systemu (kodu) jest liczba 2. Liczby zapisane w systemie binarnym często oznaczane są przyrostkiem BIN. Do wyrażenia dowolnej liczby naturalnej wystarczają 2 wartości = 0 oraz 1. 1011BIN=1*2^3+0*2^2*1*2^1+1*2^0 = 11DEC System łatwy do zastosowania w technice cyfrowej!
Każda z pozycji wewnątrz liczby binarnej nazywana jest bitem; bit może przyjąć wartość 0 lub 1. W zapisie liczbowym bit pierwszy od lewej nazywamy najbardziej znaczącym (MSB - Most Significant Bit) a pierwszy od prawej najmniej znaczącym (LSB - Least Significant Bit). 1010 -> MSB=1, LSB=0.
Inne systemy liczbowe Kod szesnastkowy (heksadecymalny) - oznaczenie HEX; podstawą jest liczba 16 (w zapisie dziesiętnym). Kod ósemkowy (oktalny) - oznaczenie OCT; podstawą jest liczba 8 [kod rzadko używany].
Niedogodności kodu binarnego Znaczna długość zapisywanych wyrażeń: 254DEC = 11111101BIN ; przy użyciu n cyfr binarnych (bitów) można zapisać 2^n możliwych wartości. Np. przy użyciu 8 bitów = 256DEC możliwych wartości. Z pomocą przychodzi kod szesnastkowy 254DEC = FDHEX Sposób konwersji BIN->HEX : liczbę binarną dzielimy na paczki po 4 bity, zaczynając od prawej (czyli od LSB); następnie każdą paczkę zamieniamy na liczbę szesnastkową według następującej tabeli:
DEC BIN HEX OCT 0 00000000 0 0 1 00000001 1 1 2 00000010 2 2 3 00000011 3 3 4 00000100 4 4 5 00000101 5 5 6 00000110 6 6 7 00000111 7 7 8 00001000 8 10 9 00001001 9 11 10 00001010 A 12 11 00001011 B 13 12 00001100 C 14 13 00001101 D 15 14 00001110 E 16 15 00001111 F 17 16 00010000 10 20
Paczki 4-bitowe określamy jako nible natomiast 8-bitowe jako bajty (byte), 16-bitowe jako słowa (word). W technice mikroprocesorowej wykorzystywany jest głównie kod binarny. Wartości 1 przydzielany jest stan wysoki napięcia (stąd oznaczenie H = High), natomiast wartości 0 stan niski (L=Low). Informacje wewnątrz procesora przechowywane są w tzw. rejestrach. Z pewnym przybliżeniem rejestr można potraktować jako komórkę specjalizowanej pamięci o ustalonej pojemności (liczbie bitów). Liczbę tę nazywamy długością rejestru.
Mikroprocesor i mikrokontroler - - podobieństwa i różnice MIKROPROCESOR: duży pobór prądu (>1A) duża moc obliczeniowa duża liczba niezbędnych układów pomocniczych dość wysoka cena MIKROKONTROLER: niewielki pobór prądu (<10mA) mała lub średnia moc obliczeniowa minimalna liczba niezbędnych elementów pomocniczych niewielka cena (<1 US$). Dodatkowe cechy: możliwość przejścia w stan uśpienia, sprzętowe zabezpieczenia przed zawieszeniem się programu (watchdog).
Najważniejsi producenci mikrokontrolerów Microchip - procesory rodziny PIC Philips - procesory rodz. 8051,ARM Freescale (do 07.2004 jako Motorola) - rodziny HC05,08,11,16,32... Atmel - 8051, AVR Hitachi- Renesas ST Microelectronics - ST6,ST7...
Uzupełnienie - udział mikrokontrolerów (MCU) w rynku Rynek elementów półprzewodnikowych w r. 2006 - ok. 246 mld US$ Rynek mikrokontrolerów - ok. 26 mld US$ (przychody ze sprzedaży) Cechy rynku: Ponad 40 producentów MCU Ponad 50 oferowanych architektur MCU Żadna z architektur nie przekracza 5% udziału w całym rynku Proporcje udziału poszczególnych grup zastosowań: -zast. przemysłowe: 9 mld US$ -zast. konsumenckie: 6 mld US$ -zast. motoryzacyjne: 11 mld US$
Procesory rodziny HC05 - wstępne informacje
Procesor 68HCJ1A - wersja w obudowie DIP
Charakterystyka przykładowego mikrokontrolera na przykładzie układu z rodziny 68HC05 (Motorola/Freescale): Architektura wewnętrzna Mapa pamięci Lista rozkazów rodziny 68HC05 - wprowadzenie Sposoby pisania programu dla mikrokontrolera, narzędzia programowe i sprzętowe.
Procesor 68HCJ1A - wersja w obudowie DIP
Opis wyprowadzeń: -Zerowanie procesora, sygnał aktywny w stanie niskim. - wejście zewnętrznego przerwania niemaskowalnego -wyprowadzenia zewnętrznego, dwukierunkowego portu danych (portu A) - 7 bitów -wyprowadzenia zewnętrznego, dwukierunkowego portu danych (portu B) - 5 bitów
OSC1,2 - wejścia do podłączenia rezonatora kwarcowego lub ceramicznego VCC Zasilanie + VSS Zasilanie -
Rejestry CPU
Uproszczony opis pracy procesora - kolejne czynności Po resecie - sprawdzenie stanu komórek o adresach 7FEhex oraz 7FFhex (wektor resetu) Przejście pod adres w pamięci, który zapisany jest w komórkach 7FE oraz 7FF Pobranie rozkazu Zdekodowanie rozkazu Wykonanie rozkazu Pobranie następnego rozkazu
Lista rozkazów procesora HC05 - grupy instrukcji Instrukcje typu rejestr/pamięć instrukcje typu czytaj-modyfikuj-zapisz instrukcje skoków i rozgałęzień instrukcje manipulacji bitami instrukcje sterujące Dokładniejsze informacje - dokumentacja procesora.
Charakterystyka przykładowego mikrokontrolera na przykładzie układu z rodziny 68HC05 (Motorola/Freescale) - ciąg dalszy: Lista rozkazów rodziny 68HC05 - dokończenie. Wybrane techniki programowania w asemblerze; metody pisania programu dla mikrokontrolera, narzędzia programowe i sprzętowe. Sprzęganie mikrokontrolera z urządzeniami wejścia/wyjścia (I/O); obsługa sygnałów analogowych i cyfrowych Wybrane architektury mikrokontrolerów Programowanie mikrokontrolera w języku wysokiego poziomu - wprowadzenie kompatybilność elektromagnetyczna a mikrokontrolery - wybrane zagadnienia
Lista rozkazów procesora HC05 - grupy instrukcji Instrukcje typu rejestr/pamięć instrukcje typu czytaj-modyfikuj-zapisz instrukcje skoków i rozgałęzień instrukcje manipulacji bitami instrukcje sterujące
Instrukcje rejestr - pamięć Przetwarzają dane z rejestrów CPU i komórek pamięci. Większość używa 2 argumentów - jeden z rejestru CPU, drugi z komórki pamięci.
Instrukcje Czytaj-Modyfikuj-Zapisz Przetwarzają dane z rejestrów CPU lub komórek pamięci. Instrukcja odczytuje zawartość rejestru, przetwarza ją i wynik zapisuje z powrotem do rejestru.
Instrukcje skoków i rozgałęzień Umożliwiają zmianę normalnej kolejności wykonywania rozkazów wchodzących w skład programu. Najważniejsze z nich to JMP (Jump = skok bezwarunkowy) oraz JSR (Jump to Subroutine = skok do podprogramu). JMP = skok bez zapamiętania adresu powrotu JSR = skok do podprogramu z zapamiętaniem adresu powrotu. Adres ten przechowywany jest w wydzielonym obszarze pamięci (na stosie procesora). Adres wierzchołka stosu przechowywany jest w rejestrze SP (Stack Pointer). Ważne instrukcje - BRCLR oraz BRSET : skok warunkowy wykonywany po sprawdzeniu stanu bitu w obszarze pierwszych 256 bajtów przestrzeni adresowej procesora. Przykłady zastosowania: BRSET 4,PORTA, ALARM ; jeśli stan bitu nr 4 portu A (PA4) jest wysoki (PA4=1), to skocz do etykiety ALARM BRCLR 2,PORTB, KONIEC ; jeśli bit PB2=0 to skocz do etykiety KONIEC.
Przykład zastosowania instrukcji skoku Org rom start: lda #$06 sta ddra lda ddra jsr czekaj lda #$01 sta porta jsr czekaj ;podprogram opóźnienia petla: inca sta porta jsr czekaj jmp petla Czekaj: sta $00c0 ; zapamiętaj A w komórce pamięci o adresie 00c0 hex lda #$80 ; wartość 80hex do akumulat. Skok: Deca ; zmniejsz zawartość akumulatora o 1. bpl skok ; jeśli flaga N=0 (tzn. jeśli A>0) lda $00c0; przywróć zawartość A rts ; powrót do programu głównego
Instrukcje manipulacji na bitach Umożliwiają zapis lub odczyt dowolnego bitu z obszaru pierwszych 256 bajtów przestrzeni adresowej procesora; do tej grupy można również zaliczyć wybrane instrukcje skoków warunkowych
Przykład zastosowania instrukcji operacji bitowych BSET 4,PORTA ; ustaw bit nr 4 portu A (PA4) w stan wysoki (PA4=1) bez sprawdzania warunków BCLR 2,PORTB; skasuj bit PB2 (tzn. PB2=0) bez sprawdzania warunków Instrukcje tej grupy są bardzo przydatne przy sterowaniu pojedynczych wyjść/wejść procesora
Instrukcje sterujące Mają wpływ na zawartość rejestrów oraz na sposób pracy procesora (np. wejście w tryb obniżonego poboru mocy).
Sprzęganie mikrokontrolera z urządzeniami wejścia/wyjścia (I/O); Podstawowe zagadnienie: jak wprowadzić do procesora (MCU) lub wyprowadzić z niego sygnał sterujący. Pojawiają się tu następujące problemy: a) dostosowanie poziomów napięć i prądów sygnałów do wymagań procesora b) ochrona przed zakłóceniami oraz ich skutkami. c) konwersja postaci sygnału (np. z postaci szeregowej na równoległą, zmiana protokołu sygnału). d) zapewnienie właściwych uwarunkowań czasowych (np. czas reakcji na zdarzenie krytyczne).
Przykład zastosowania - pilot RTV zrealizowany przy użyciu procesora HC05 Źródło - nota aplikacyjna AN463 Freescale Semiconductors
Przy sterowaniu obciążeń indukcyjnych pojawiają się specyficzne problemy - przepięcia mogące uszkodzić porty procesora; ponadto wydajność prądowa portu jest zwykle niewystarczająca np. do załączenia przekaźnika; dlatego zalecane jest stosowanie tranzystorów pośredniczących i diod antyprzepięciowych; poniżej prosty przykład na bazie procesora atmega128 (moduł Mmnet firmy Propox)
Sterowanie urządzeń mocy - wybrane zagadnienia Przy sterowaniu urządzeń zasilanych napięciem 230V AC lub wyższym pojawia się problem bezpieczeństwa operatora oraz zabezpieczenia mikrokontrolera przed uszkodzeniami. Najlepszym rozwiązaniem jest separacja galwaniczna (oddzielenie elektryczne urządzeń). Rozwiązanie 1 - optoizolacja = użycie transoptora
Elementem wykonawczym często jest tyrystor lub triak jego główną zaletą jest brak elementów mechanicznych i stąd duża trwałość (liczba cykli łączeniowych >10 8 )
Przykład aplikacji - minirobot zadanie nawigacyjne = śledzenie czarnej linii narysowanej na podłożu Źródło: Seattle Robotics Society
Przykład aplikacji - minirobot zadanie nawigacyjne = śledzenie czarnej linii narysowanej na podłożu
Przy okazji - inne zastosowanie transoptora - czujnik optyczny podłoża
Schemat blokowy układu sterowania
Inne architektury procesorów
Mikrokontrolery AVR (Atmel) Nowości: wbudowany UART (układ transmisji szeregowej) Programowanie ISP (w systemie)
Narzędzie potrzebne do pracy z systemem = programator ISP Koszt elementów <10 PLN
Układ docelowy do współpracy z programatorem
Procesory AVR - atmega (Atmel) Nowości: wbudowany przetwornik A/C Mocno rozbudowany układ czasowy (timery z możliwością generacji PWM).
Dalsze zagadnienia: Wybrane architektury mikrokontrolerów - konstrukcje zaawansowane Programowanie mikrokontrolera w języku wysokiego poziomu - wprowadzenie kompatybilność elektromagnetyczna a mikrokontrolery - wybrane zagadnienia - ciąg dalszy systemy operacyjne czasu rzeczywistego - wprowadzenie
Procesory rodziny ARM Opracowanie - firma ARM (Wielka Brytania) www.arm.com brak własnej produkcji, udostępnianie na zasadach licencyjnych innym producentom (obecnie ponad 40 firm). Oferowane jest kilka rodzin procesorów, najbardziej popularne są procesory rodziny ARM7 oraz ARM9.
Uproszczony schemat blokowy procesora rodziny ARM7 Wybrane cechy: Częstotliwość zegara do 133 MHz; Dodatkowe bloki wbudowane w strukturę procesora, np. MMU - Moduł Zarządzania Pamięcią Pipelining, czyli jednoczesna obsługa kilku rozkazów (przetwarzanie potokowe, 3 rozk.) Kompatybilność z różnymi systemami operacyjnymi (Embedded Linux, Windows CE, Symbian, Palm OS). Zastosowania: drukarki, proste palmtopy, aparaty cyfrowe, telefony GSM, sprzęt medyczny
Uproszczony schemat blokowy procesora rodziny ARM9 Wybrane cechy: Częstotliwość zegara do 250 MHz; Dodatkowe bloki wbudowane w strukturę procesora, np. MMU - Moduł Zarządzania Pamięcią Pipelining, czyli jednoczesna obsługa kilku rozkazów (przetwarzanie potokowe, 5 rozk.) Kompatybilność z różnymi systemami operacyjnymi (Embedded Linux, Windows CE, Symbian, Palm OS). Zastosowania: konsole do gier, zaawans. palmtopy, telefony 3G, routery sieciowe
Dalszy rozwój rodziny rdzeni procesorów ARM (mapa drogowa) Dalszy rozwój technologii, zmniejszenie zużycia mocy: np. dla ARM11 - pobór mocy przy Ucc=1,2V nie przekracza 0.4 mw/mhz; dla f=500 MHz P<=0,2W Spokrewnione/ bazujące na ARM rodziny - Intel XScale
Programowanie mikrokontrolerów w języku wysokiego poziomu - wprowadzenie Programowanie w języku asemblera: Zalety: Pełne panowanie nad zasobami procesora Możliwość ręcznej optymalizacji algorytmu Mały rozmiar programu (kodu) wynikowego Wady: Mała produktywność pracy programisty Nieczytelny kod źródłowy Bardzo trudne programowanie np. złożonych operacji matematycznych
Porównanie wyglądu kodu (fragmenty) Asembler: Język C: lda $#0xf5 ; załaduj do A wartość ;f5 hex sta porta ; zawartość akumulatora prześlij do portu A ;--------------------------- inc porta porta=0xf5; porta++;??????? (brak gotowej procedury!) y=sin(x);
Programowanie w języku C: Zalety: Szybkość tworzenia programu duża przenośność kodu łatwe programowanie złożonych algorytmów łatwa obsługa operacji wej/wyj wielka liczba dostępnych bibliotek Wady: Nieco większa objętość kodu źródłowego (przestaje być to obecnie problemem). Dość drogie narzędzia programistyczne(ale często dostępne są wersje darmowe)
Programowanie w języku C - przykładowa literatura: 1) Kernighan, Ritchie - Język C; wyd. WNT 1985+wznow. 2) Kardach, Majewski - Mikrokontrolery jednoukładowe 8051; programowanie w języku C w przykładach, Wyd. PWr 1995, wyd. II 2002 3) Strostroup - Język C++ (dla ambitnych!).
Programowanie w języku C: przykładowe programy dla procesora rodziny 8051 ( Krzysztof Kardach & Jacek Majewski) /************************************************************************** Program zapala lub gasi diody LED dołączone do portu P3 w zależności od stanu przycisków P1 (gdy przycisk wciśnięty to odpowiednia dioda świeci). **************************************************************************/ sfr P1= 0x90; /* definicja adresu portu P1 */ sfr P3= 0xB0; /* definicja adresu portu P2 */ void main(void) { data char i; while (1) { i=p3; /* odczyt stanu portu P3 i kopiowanie tego stanu do zmiennej i */ P1=i; /* kopiowanie stanu zmiennej i do portu P1 */ } }
/************************************************************************** Ćwiczenie 2 Program symuluje działanie 8-bitowego licznika binarnego. Ekspozycja stanów licznika odbywa się na diodach LED (DDS) dołączonych do portu P1. **************************************************************************/ #include <io51.h> /* zbiór definiujący adresy rejestrów procesora 8051 */ void main(void) { int i; } while (1) { P1++; /* zwiększanie zawartości portu P3 */ for(i=0;i<0x7fff;i++){}; /* opóźnienie czasowe */ }
/************************************************************************** Ćwiczenie 3 Program symuluje działanie 8-bitowego licznika binarnego. Ekspozycja stanu licznika prezentowana jest na diodach LED, dołączonych do portu P1 (DDS). Program wywołuje podprogram opóźnienia czasowego - Delay. **************************************************************************/ #include <io51.h> /* zbiór definiujący adresy rejestrów procesora 8051 */ #define SPEED 0x7fff /* definicja stałej */ void Delay(int time) /* podprogram opóźnienia czasowego */ { int i; for(i=0;i<time;i++){}; /* opóźnienie czasowe */ } void main(void) { char k; } while (1) { P1=~--k; /* zmniejszanie zawartości portu P1 */ /* negacja zapewnia świecenie diody gdy odpowiedni bit portu P1 jest w stanie 1 (high) */ Delay(SPEED); }
Przykładowe narzędzie - kompilator ICC-AVR firmy ImageCraft dla procesorów AVR:
Wybór opcji kompilatora:
Wybór opcji programatora:
Przydatne narzędzie : AVR Calc (kalkulator konfiguracyjny)
Perspektywy rozwoju
Rozwiązania Embedded Linux - minimoduł firmy Gumstix www.gumstix.com
Kompatybilność elektromagnetyczna a mikrokontrolery -wybrane zagadnienia Literatura: Intel - Application Note AP-125 ST - Application Note AN1015 i inne
Definicja kompatybilności elektromagnetycznej (EMC) Odpornośc na zakłócenia przedostające się z zewnątrz do układu Niski poziom zakłóceń generowanych Badania EMC - norma ISO/IEC 61000
Objawy niekompatybilności EMC Niestabilność systemu - np. resetowanie sterownika przy zmianach napięcia zasilania - załączenie innego odbiornika w sieci powoduje zawieszenie programu zakłócanie pracy innych urządzeń. Wszystkie urządzenia sprzedawane w UE muszą spełniać wymagania dot. EMC
Należy odróżniać EMS od EMC
Przykładowe źródła zakłóceń Impulsy zakłócające z obwodu zasilania Wyładowanie elektrostatyczne w obudowę urządzenia Model zastępczy obwodu zasilania - wyłączenie obciążenia R1, R2 powoduje przepięcie indukcyjne.
Wyładowania iskrowe Częste źródło problemów w układach motoryzacyjnych (układ zapłonowy - wysokie napięcie). Występują również w układach zawierających silniki komutatorowe (iskrzenia na szczotkach). Użycie w takich warunkach sterownika mikroprocesorowego wymaga specjalnych środków zaradczych.
Dalsze informacje Intel - nota aplikacyjna AP-125
Programowe metody polepszenia niezawodności systemów mikroprocesorowych Specjalna konstrukcja programu - sprawdzanie w pętli, czy nie nastąpiło zakłócenie pracy programu Przydatne jest użycie watchdoga (w razie zawieszenia programu w ciągu ms generuje sprzętowy sygnał reset).
Dalsze informacje - Nota ST Microelectronics = AN1015