Wykład 12. Przetwornik ADC

Podobne dokumenty
LABORATORIUM PROCESORY SYGNAŁOWE W AUTOMATYCE PRZEMYSŁOWEJ. Przetwornik ADC procesora sygnałowego F/C240 i DAC C240 EVM

2. PORTY WEJŚCIA/WYJŚCIA (I/O)

Obsługa przetwornika ADC na mikrokontrolerze ATmega8 CEZARY KLIMASZ OBSŁUGA PRZETWORNIKA ADC NA MIKROKONTROLERZE ATMEGA8

Spis treœci. Co to jest mikrokontroler? Kody i liczby stosowane w systemach komputerowych. Podstawowe elementy logiczne

Mikrokontroler ATmega32. System przerwań Porty wejścia-wyjścia Układy czasowo-licznikowe

Uproszczony schemat blokowy konwertera analogowo-cyfrowego przedstawiony został na rys.1.

Budowa mikrokontrolera UC3C. - 3 rodzaje obudów

Mikroprocesory i Mikrosterowniki Analog-Digital Converter Konwerter Analogowo-Cyfrowy

Metody obsługi zdarzeń

Wykład 10. Komunikacja

Jacek Szlachciak. Urządzenia wirtualne systemu wieloparametrycznego

Przetworniki analogowo-cyfrowe (A/C)

Przerwania, polling, timery - wykład 9

Organizacja pamięci VRAM monitora znakowego. 1. Tryb pracy automatycznej

PRZETWORNIK ADC w mikrokontrolerach Atmega16-32

Wykład 4. Przegląd mikrokontrolerów 16-bit: - PIC24 - dspic - MSP430

1. Wprowadzenie Programowanie mikrokontrolerów Sprzęt i oprogramowanie... 33

Research & Development Ultrasonic Technology / Fingerprint recognition

Wbudowane układy peryferyjne cz. 3 Wykład 9

Wstęp Architektura... 13

Technika Mikroprocesorowa Laboratorium 5 Obsługa klawiatury

TECHNIKA MIKROPROCESOROWA II

Rozdział 21 Moduły analogowo - temperaturowe

Programowanie mikrokontrolerów. 8 listopada 2007

Jednostka Sterująca - Menu

Podstawowe urządzenia peryferyjne mikrokontrolera ATmega8 Spis treści

M-1TI. PRECYZYJNY PRZETWORNIK RTD, TC, R, U NA SYGNAŁ ANALOGOWY 4-20mA Z SEPARACJĄ GALWANICZNĄ. 2

LABORATORIUM PROCESORY SYGNAŁOWE W AUTOMATYCE PRZEMYSŁOWEJ. Mechanizm przerwań i menadżer zdarzeń procesora sygnałowego F/C240

Przetwornik analogowo-cyfrowy

Moduł temperatury TMB-880EXF Nr produktu

Wyświetlacz alfanumeryczny LCD zbudowany na sterowniku HD44780

Instytut Teleinformatyki

OPBOX ver USB 2.0 Miniaturowy Ultradźwiękowy system akwizycji danych ze

Laboratorium Komputerowe Systemy Pomiarowe

LABORATORIUM Komputery przemysłowe i systemy wbudowane

Różnicowy przetwornik ciśnienia EL-PS-xxx

Programowanie mikrokontrolerów AVR z rodziny ATmega.

Parametryzacja przetworników analogowocyfrowych

Wbudowane układy komunikacyjne cz. 1 Wykład 10

Przetworniki AC i CA

Hardware mikrokontrolera X51

1.2. Architektura rdzenia ARM Cortex-M3...16

Przetwarzanie AC i CA

Schemat blokowy karty

DEMERO Automation Systems

Systemy wbudowane. Uniwersytet Łódzki Wydział Fizyki i Informatyki Stosowanej. Witold Kozłowski

Szkolenia specjalistyczne

XMEGA. Warsztaty CHIP Rok akademicki 2014/2015

Magistrala SPI. Linie MOSI i MISO sąwspólne dla wszystkich urządzeńna magistrali, linia SS jest prowadzona do każdego Slave oddzielnie.

1. Podstawowe wiadomości Możliwości sprzętowe Połączenia elektryczne Elementy funkcjonalne programów...

Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska

Zastosowania mikrokontrolerów w przemyśle

Wstęp: Interfejs portu równoległego 6821 i portu szeregowego 6850 firmy Motorola

PC 3 PC^ TIMER IN RESET PC5 TIMER OUT. c 3. L 5 c.* Cl* 10/H CE RO WR ALE ADO AD1 AD2 AD3 AD4 A05 A06 LTJ CO H 17 AD7 U C-"

Wykład Mikrokontrolery i mikrosystemy Cele wykładu:

Programowanie w językach asemblera i C

Generator przebiegów pomiarowych Ex-GPP2

1. Tworzenie nowego projektu.

Interfejs analogowy LDN-...-AN

Komunikacja w mikrokontrolerach Laboratorium

Struktury specjalizowane wykorzystywane w mikrokontrolerach

3.2. Zegar/kalendarz z pamięcią statyczną RAM 256 x 8

1.2 Schemat blokowy oraz opis sygnałów wejściowych i wyjściowych

Funkcje sterowania cyfrowego przekształtników (lista nie wyczerpująca)

Serwonapędy AC Serie EDC, EDB, ProNet

Rejestratory Sił, Naprężeń.

Szkoła programisty PLC : sterowniki przemysłowe / Gilewski Tomasz. Gliwice, cop Spis treści

ADVANCE ELECTRONIC. Instrukcja obsługi aplikacji. Modbus konfigurator. Modbus konfigurator. wersja 1.1

Mikroprocesory i Mikrosterowniki Liczniki Timer Counter T/C0, T/C1, T/C2

Laboratorium Komputerowe Systemy Pomiarowe

Instrukcja integracji urządzenia na magistrali Modbus RTU

Przetwarzanie A/C i C/A

SigmaDSP - zestaw uruchomieniowy dla procesora ADAU1701. SigmaDSP - zestaw uruchomieniowy dla procesora ADAU1701.

Ćwiczenie 5 WIELOFUNKCYJNA KARTA POMIAROWA DAQ

PROGRAMOWALNE SYSTEMY MECHATRONIKI

start Program mikroprocesorowego miernika mocy generowanej $crystal = deklaracja

(Rysunek z książki T.Starecki. Mikokontrolery jednoukładowe rodziny 51. NOZOMI W-wa 1996)

ad a) Konfiguracja licznika T1 Niech nasz program składa się z dwóch fragmentów kodu: inicjacja licznika T1 pętla główna

SPECYFIKACJA PRZETWORNIK RÓŻNICY CIŚNIEŃ

Dokumentacja Techniczna. Czytnik RFID UW-M4GM

Dodatek D. Układ współpracy z klawiaturą i wyświetlaczem 8279

Układy czasowo-licznikowe w systemach mikroprocesorowych

Systemy wbudowane Obsługa interfejsu 1-Wire na przykładzie termometru DS18B20

Instrukcja integracji urządzenia na magistrali Modbus RTU. wersja 1.1

SYSTEM PRZERWAŃ ATmega 32

PROGRAM TESTOWY LCWIN.EXE OPIS DZIAŁANIA I INSTRUKCJA UŻYTKOWNIKA

LABORATORIUM - ELEKTRONIKA Układy mikroprocesorowe cz.2

Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska

Systemy wbudowane. Paweł Pełczyński

STHR-2810, 2811, 2812 Przetwornik temperatury i wilgotności z czujnikiem Sensirion

Notatka lekcja_#3_1; na podstawie W.Kapica 2017 Strona 1

Politechnika Białostocka Wydział Elektryczny Katedra Automatyki i Elektroniki

DOKUMENTACJA TECHNICZNO-RUCHOWA. Sterownik mikroklimatu FAG25-III

Rozdział 19 Analogowa karta rozszerzeń we / wy

2. Code Composer Studio v4 zintegrowane środowisko projektowe... 41

Uproszczony schemat blokowy zespołu 8-bitowego timera przedstawiono na rys.1

ĆWICZENIE. TEMAT: OBSŁUGA PRZETWORNIKA A/C W ukontrolerze 80C535 KEILuVISON

Adresowanie obiektów. Adresowanie bitów. Adresowanie bajtów i słów. Adresowanie bajtów i słów. Adresowanie timerów i liczników. Adresowanie timerów

Programowanie mikrokontrolerów 2.0

Transkrypt:

Wykład 12 Przetwornik

Przetwornik analogowo-cyfrowy () Moduł w mikrokontrolerach Stellaris posiada rozdzielczość 10-bitów i cztery kanały wejściowe oraz dodatkowo wewnętrzny czujnik temperatury. Moduł zawiera także programowalny sekwenser, który umożliwia próbkowanie wielu wejść analogowych bez udziału procesora. Dla każdej sekwencji próbkowania możliwe jest ustawienie programowe źródła danych wejściowych, wyzwalania, generowania przerwań i priorytetu sekwencji.

Cechy przetwornika wejścia różnicowe lub odniesione do masy, 1 milion próbek na sekundę, cztery programowalne sekwencje próbkowania od jednej do ośmiu pozycji oraz odpowiadające im wynikowe bufory FIFO, rozbudowane metody wyzwalania: programowe, zegary, komparator analogowy, PWM, GPIO, sprzętowe uśrednianie do 64 próbek pozwalające na zwiększenie dokładności.

Schemat blokowy

Opis funkcjonalny Układ pozwala na zbieranie danych pomiarowych przy wykorzystaniu podejścia opartego o sekwencje, w przeciwieństwie do pojedynczego lub podwójnego próbkowania stosowanego w większości modułów. Każda sekwencja próbek jest w pełni programowalną serią kolejnych danych, co pozwala zbierać dane z wielu źródeł bez potrzeby rekonfiguracji i obsługi za pomocą procesora. Programowanie każdej z próbek w sekwencji obejmuje takie ustawienia jak źródło danych i tryb (różnicowe, odniesione do masy), generowanie przerwań po zakończeniu przetwarzania próbki, określenie końca sekwencji.

Sekwenser próbek Zbieranie próbek i sterowanie danymi realizowane jest przez sekwenser. Wszystkie sekwensery są jednakowe w realizacji za wyjątkiem liczby próbek które mogą zarejestrować i głębokością bufora FIFO. W tej implementacji elementy bufora FIFO są 32-bitowe, gdzie 10-młodszych bitów zawiera wynik konwersji. Tabela ilości próbek i głębokości bufora FIFO

Sekwenser próbek Dla danej sekwencji próbek, każda próbka jest określona przez dwa półbajty w rejestrach Sample Sequence Input Multiplexer Select (SSMUXn) i Sample Sequence Control (SSCTLn), gdzie n odpowiada numerowi sekwencji. Półbajt rejestru SSMUXn określa określa pin wejściowy. Półbajt rejestru SSCTLn zawiera bity kontrolne odpowiadające takim parametrom jak wybór czujnika temperatury, uaktywnienie przerwań, koniec sekwencji i włączenie trybu różnicowego. Sekwenser próbek jest uaktywniany przez ustawienie bitów ASENn w rejestrze Active Sample Sequencer (ACTSS), może być jednak konfigurowany przed uaktywnieniem.

Sekwenser próbek W czasie konfiguracji sekwensera dozwolone jest wielokrotne użycie tego samego pinu w ramach jednej sekwencji. W rejestrze SSCTLn bit Interrupt Enable (IE)może być ustawiony dla dowolnej kombinacji próbek, umożliwiając w razie konieczności generowanie przerwań dla każdej próbki w sekwencji. Także bit END może być ustawiony w dowolnym miejscu sekwencji. Po skompletowaniu sekwencji dane mogą być odczytane z rejestrów Sample Sequence Result FIFO (SSFIFOn).

Sekwenser próbek Bufory FIFO są prostymi buforami cyklicznymi, które odczytują pojedynczy adres w celu składowania danych. Dla celów debugowania programu pozycja wierzchołka bufora FIFO jest widoczna w rejestrze Sample Sequence FIFO Status (SSFSTATn) tak samo jak flagi FULL i EMPTY. Przepełnienie i niedopełnienie bufora monitorowane jest z użyciem rejestrów OSTAT i USTAT.

Przerwania Sekwenser próbek generuje zdarzenia, które wyzwalają przerwania, nie ma on jednak kontroli nad momentem wygenerowania przerwania przez kontroler przerwań. Sygnał przerwania modułu jest sterowany przez bity MASK w rejestrze Interrupt Mask (IM). Status przerwań może być odczytywany z dwóch miejsc: rejestru Raw Interrupt Status (RIS), który pokazuje status przerwań sekwensera oraz rejestru Interrupt Status and Clear (ISC), który pokazuje logiczny AND bitów INR rejestru RIS i bitów MASK rejestru IM. Rejestry są kasowane poprzez zapisanie wartosci 1 do odpowiednich bitów rejestru ISC.

Układy sprzętowego uśredniania W celu poprawy dokładności wyników w module zaimplementowane zostały układy sprzętowego uśredniania. Jednak poprawa wyników realizowana jest kosztem przepustowości. Maksymalnie do 64 próbek może być akumulowane i uśredniane dla jednego wejścia danych bufora FIFO sekwensera. Częstotliwość otrzymywania próbek zmniejszona jest proporcjonalnie do liczby próbek użytych do uśredniania. Domyślnie układy uśredniania są wyłączone i wszystkie dane z przetworników są bezpośrednio przepisywane do bufora FIFO sekwensera. Układy uśredniające są kontrolowane przez rejestr Sample Averaging Control (SAC). W systemie dostępny jest tylko jeden układ uśredniający, w związku z tym wszystkie kanały uśredniane są w ten sam sposób.

Tryb testowy W module dostępny jest dla użytkownika tryb pracy pozwalający na testowanie działania cyfrowej części modułu. Realizowany jest on w postaci pętli pozwalającej testować część cyfrową w przypadku kiedy niedostępne są dane analogowe. Tryb ten dostępny jest poprzez rejestr Test Mode Loopback (TMLB).

Wbudowany czujnik temperatury Wbudowany czujnik pozwala na odczyt temperatury oraz zapewnia napięcie odniesienia. Napięcie na wyjściu SENSO jest wyznaczane z następującej zależności SENSO = 2.7 - ((T + 55) / 75) Na wykresie przedstawiona jest charakterystyka zmian w funkcji temperatury

Inicjalizacja i konfiguracja W przypadku użycia modułu należy uaktywnić pętlę PLL i wykorzystywać wspierane częstotliwości kwarców (informacja w opisie rejestru RCC). Użycie nieprawidłowych częstotliwości może powodować błędne działanie przetwornika.

Inicjalizacja modułu Inicjalizacja modułu jest stosunkowo prosta i realizowana jest w kilku krokach. Główny krok związany jest z uaktywnieniem zegara przetwornika i rekonfiguracją priorytetów sekwensera próbek. Poszczególne kroki inicjalizacji są następujące: Odblokowanie zegara poprzez zapisanie wartości 0x0001.0000 do rejestru RCGC1. W zależności od potrzeb, rekonfiguracja priorytetów sekwensera próbek w rejestrze SSPRI. Domyślna konfiguracja zakłada, że sekwenser 0 ma najwyższy priorytet a sekwenser 3 najniższy priorytet.

Konfiguracja sekwensera próbek Konfiguracja sekwensera próbek jest bardziej złożona niż inicjalizacja modułu, ponieważ każda sekwencja jest w pełni programowalna. Konfiguracja sekwensera składa się z następujących kroków: Należy upewnić się, że sekwenser jest zablokowany poprzez wpisanie 0 do odpowiedniego bitu ASEN w rejestrze ACTSS. Programowanie sekwensera jest dozwolone tylko wtedy, kiedy jest nieaktywny. Zablokowanie sekwensera w czasie programowania zapobiega błędnemu wykonaniu, jeżeli zdarzenie wyzwolenia wystąpi w czasie konfiguracji. Konfiguracja chwili wyzwalania w rejestrze EMUX sekwensera próbek. Dla każdej próbki w sekwencji próbek skonfigurować odpowiadające źródło danych w rejestrze SSMUXn.

Konfiguracja sekwensera próbek Dla każdej próbki w sekwencji należy ustawić bit kontrolny w odpowiednim półbajcie rejestru SSCTLn. Po zaprogramowaniu ostatniego półbajtu należy ustawić bit kończący END. Nieustawienie bitu END może spowodować nieprzewidywalne błędy. Jeżeli do obsługi wykorzystywane są przerwania należy ustawić wartość 1 w odpowiednim bicie maskującym MASK rejestru IM. Uaktywnić układy logiczne sekwensera poprzez ustawienie wartości 1 bitu ASEN w rejestrze ACTSS.

Mapa rejestrów Offset jest odniesiony do adresu bazowego przetwornika wynoszącego 0x4003.8000.

Offset Nawa Typ Reset Opis Mapa rejestrów 0x000 ACTSS R/W 0x0000.0000 Active Sample Sequencer 0x004 RIS RO 0x0000.0000 Raw Interrupt Status 0x008 IM R/W 0x0000.0000 Interrupt Mask 0x00C ISC R/W1C 0x0000.0000 Interrupt Status and Clear 0x010 OSTAT R/W1C 0x0000.0000 Overflow Status 0x014 EMUX R/W 0x0000.0000 Event Multiplexer Select 0x018 USTAT R/W1C 0x0000.0000 Underflow Status 0x020 SSPRI R/W 0x0000.3210 Sample Sequencer Priority 0x028 PSSI WO - Processor Sample Sequence Initiate 0x030 SAC R/W 0x0000.0000 Sample Averaging Control 0x040 SSMUX0 R/W 0x0000.0000 Sample Sequence Input Multiplexer Select 0 0x044 SSCTL0 R/W 0x0000.0000 Sample Sequence Control 0 0x048 SSFIFO0 RO 0x0000.0000 Sample Sequence Result FIFO 0 0x04C SSFSTAT0 RO 0x0000.0100 Sample Sequence FIFO 0 Status

Offset Nawa Typ Reset Opis Mapa rejestrów 0x060 SSMUX1 R/W 0x0000.0000 Sample Sequence Input Multiplexer Select 1 0x064 SSCTL1 R/W 0x0000.0000 Sample Sequence Control 1 0x068 SSFIFO1 RO 0x0000.0000 Sample Sequence Result FIFO 1 0x06C SSFSTAT1 RO 0x0000.0100 Sample Sequence FIFO 1 Status 0x080 SSMUX2 R/W 0x0000.0000 Sample Sequence Input Multiplexer Select 2 0x084 SSCTL2 R/W 0x0000.0000 Sample Sequence Control 2 0x088 SSFIFO2 RO 0x0000.0000 Sample Sequence Result FIFO 2 0x08C SSFSTAT2 RO 0x0000.0100 Sample Sequence FIFO 2 Status 0x0A0 SSMUX3 R/W 0x0000.0000 Sample Sequence Input Multiplexer Select 3 0x0A4 SSCTL3 R/W 0x0000.0002 Sample Sequence Control 3 0x0A8 SSFIFO3 RO 0x0000.0000 Sample Sequence Result FIFO 3 0x0AC SSFSTAT3 RO 0x0000.0100 Sample Sequence FIFO 3 Status 0x100 TMLB R/W 0x0000.0000 Test Mode Loopback

Opis funkcji Funkcje API przetwornika są podzielone na trzy grupy: obsługujace sekwencje próbek związane z wyzwalaniem przetwarzania, związane z obsługą przerwań.

Funkcje API void SequenceDisable (unsigned long ulbase, unsigned long ulsequencenum) void SequenceEnable (unsigned long ulbase, unsigned long ulsequencenum) long SequenceOverflow (unsigned long ulbase, unsigned long ulsequencenum) void SequenceOverflowClear (unsigned long ulbase, unsigned long ulsequencenum) void SequenceStepConfigure (unsigned long ulbase, unsigned long ulsequencenum, unsigned long ulstep, unsigned long ulconfig) long SequenceUnderflow (unsigned long ulbase, unsigned long ulsequencenum) void SequenceUnderflowClear (unsigned long ulbase, unsigned long ulsequencenum) void SoftwareOversampleConfigure (unsigned long ulbase, unsigned long ulsequencenum, unsigned long ulfactor) void SoftwareOversampleDataGet (unsigned long ulbase, unsigned long ulsequencenum, unsigned long #pulbuffer, unsigned long ulcount) void SoftwareOversampleStepConfigure (unsigned long ulbase, unsigned long ulsequencenum, unsigned long ulstep, unsigned long ulconfig)

Funkcje API void HardwareOversampleConfigure (unsigned long ulbase, unsigned long ulfactor) void IntClear (unsigned long ulbase, unsigned long ulsequencenum) void IntDisable (unsigned long ulbase, unsigned long ulsequencenum) void IntEnable (unsigned long ulbase, unsigned long ulsequencenum) void IntRegister (unsigned long ulbase, unsigned long ulsequencenum, void (#pfnhandler)(void)) unsigned long IntStatus (unsigned long ulbase, unsigned long ulsequencenum, tboolean bmasked) void IntUnregister (unsigned long ulbase, unsigned long ulsequencenum) void ProcessorTrigger (unsigned long ulbase, unsigned long ulsequencenum) void SequenceConfigure (unsigned long ulbase, unsigned long ulsequencenum, unsigned long ultrigger, unsigned long ulpriority) long SequenceDataGet (unsigned long ulbase, unsigned long ulsequencenum, unsigned long #pulbuffer)

Opis funkcji Konfiguracja sekwencji próbek odbywa się za pomocą funkcji SequenceConfigure() i SequenceStepConfigure(). Sekwencje są uaktywniane i blokowane za pomoca funkcji SequenceEnable() i SequenceDisable(). Do zbierania danych wykorzystywane są funkcje SequenceDataGet(). Zarządzanie przepełnieniem bufora FIFO jest zarządzane przez funkcje SequenceOverflow(), SequenceOverflowClear(), SequenceUnderflow() i SequenceUnderflowClear().

Opis funkcji Sprzętowe nadpróbkowanie jest sterowane przez funkcje SoftwareOversampleConfigure(). Programowe nadpróbkowanie realizowane jest przez funkcje SoftwareOversampleStepConfigure() i SoftwareOversampleDataGet(). Wyzwalanie za pomocą procesora realizuje funkcja ProcessorTrigger(). Zarządzanie funkcjami obsługi przerwań realizowane jest przez funkcje IntRegister() i IntUnregister(). Źródło przerwań dla sekwencji jest zarządzane przez funkcje IntRegister() i IntUnregister().

Przykład obsługi Przykład pokazuje wykorzystanie API do zainicjowania sekwencji próbek i programowego zainicjowania zbierania danych oraz odczytu zebranych danych, kiedy sekwencja jest gotowa.

Przykład obsługi unsigned long ulvalue; // // Uaktywnienie pierwszej sekwencji do zbierania danych z kanały 0 po wystąpienia wyzwolenia z procesora. // SequenceConfigure(_BASE, 0, _TRIGGER_PROCESSOR, 0); SequenceStepConfigure(_BASE, 0, 0, _CTL_IE _CTL_END _CTL_CH0); SequenceEnable(_BASE, 0); // // Wyzwolenie sekwencji próbek. // ProcessorTrigger(_BASE, 0); // // Odczekanie dopóki sekwencja jest zebrana. // while(!intstatus(_base, 0, false)) { } // Odczyt wartości z przetwornika. // SequenceDataGet(_BASE, 0, &ulvalue);