PMK_2015_6 (1).pptx

37
PRIMENA MIKROKONTROLERA- MS1PMK 6. deo 2015 Nenad Jovičić

Transcript of PMK_2015_6 (1).pptx

Page 1: PMK_2015_6 (1).pptx

PRIMENA MIKROKONTROLERA- MS1PMK6. deo

2015Nenad Jovičić

Page 2: PMK_2015_6 (1).pptx

Timer/Counter modul - TC• 32-bitni Timer/Counter sa 32-bitnim preskalerom• Implementirana Capture/Match funkcionalnost• 2x32-bitna capture kanala po tajmeru sa/bez prekida

– Mogućnost automatskog demodulisanja ulaznog PWM signala• 4x32-bitna match (compare) registra omogućavaju

– Kontinualno brojanje sa/bez generisanja prekida– Zaustavljanje tajmera sa/bez generisanja prekida– Reset tajmera sa/bez generisanjem prekida– Generisanje četiri izlazna signala sa visokim ili niskim nivoom ili promenom

nivoa signala – PWM ali MBED ga ne podržava….• Modul se taktuje sa periferijskim (PCLK) ili spoljnim taktom

Page 3: PMK_2015_6 (1).pptx

Match/Capture• Capture funkcionalnost

– Kontrolni capture registar kontroliše da li će u jedan od dva capture registra biti upisan sadržaj tajmer counter registra (brojača) po generisanju capture događaja i da li će se generisati prekid.

– Capture događaj na spoljašnjem I/O pinu može biti uzlazna, silazna ili proizvoljna ivica signala.

• Match funkcionalnost– Match funkcionalnost omogućena kroz 4

praga sadržana u 4 match registra. Definiše se i način generisanja izlaza po match događaju kao i da li se generiše prekid.

– Zahtev za DMA prenosom može biti povezan sa match situacijom

Page 4: PMK_2015_6 (1).pptx

Primeri match funkcionalnosti

– Preskaler registar ima vrednost 2– Match registar ima vrednost 6– Setovano generisanje prekida i

reset timer counter registra

– Preskaler registar ima vrednost 2– Match registar ima vrednost 6– Setovano generisanje prekida i

zaustavljanje brojanja timer counter-a.

Page 5: PMK_2015_6 (1).pptx

Repetitive Interrupt Timer - RIT

• Osnovne karakteristike– 32-bitni brojač taktovan sa periferijskim taktom PCLK– 32-bitna compare registar– 32-bitni registar maske

• Modovi brojanja brojača– U kontinualnom režimu brojanja– Reset po generisanju prekida

• Opis rada– Po resetu brojač započinje brojanje od vrednosti 00000000h. Kada vrednost

brojača dostigne vrednost compare registra na pozicijama bita definisanih registrom maske, generiše se prekid. Brojanje se nastavlja u zavisnosti od selektovanog moda brojanja brojača.

Page 6: PMK_2015_6 (1).pptx

RIT

Page 7: PMK_2015_6 (1).pptx

System Tick Timer

Page 8: PMK_2015_6 (1).pptx

Sistemski časovnik http://mbed.org/handbook/Ticker

• Klasa Ticker daje jednostavan način realizacije periodičnog poziva korisničke funkcije, što praktično predstavlja sistemski časovnik.

Page 9: PMK_2015_6 (1).pptx

Ticker - primer programa

#include "mbed.h" Ticker flipper;DigitalOut led1(LED1);DigitalOut led2(LED2); void flip() {

led2 = !led2;}int main() {

led2 = 1; flipper.attach(&flip, 2.0); // the address of the function to be attached (flip)

//and the interval (2 seconds) // spin in a main loop. flipper will interrupt it to call flip

while(1) { led1 = !led1; wait(0.2);

}}

Page 10: PMK_2015_6 (1).pptx

Povezivanje sa funkcijom članicom neke klase

• #include "mbed.h"

• // A class for flip()-ing a DigitalOut • class Flipper {• public:• Flipper(PinName pin) : _pin(pin) {• _pin = 0;• }• void flip() {• _pin = !_pin;• }• private:• DigitalOut _pin;• };

• DigitalOut led1(LED1);• Flipper f(LED2);• Ticker t;

• int main() {• t.attach(&f, &Flipper::flip, 2.0); // the address of the object, member function, and interval• // spin in a main loop. flipper will interrupt it to call flip• while(1) {• led1 = !led1;• wait(0.2);• }• }

Page 11: PMK_2015_6 (1).pptx

Klasa Timeouthttp://mbed.org/handbook/Timeout

• Klasa Timeout se koristi kada je potrebno generisati akciju nakon isteka određenog vremena.

• Praktično ima isti interfejs kao klasa Ticker, ali se izvršava samo jedan interval.

Page 12: PMK_2015_6 (1).pptx

Timeout• #include "mbed.h"

• Timeout flipper;• DigitalOut led1(LED1);• DigitalOut led2(LED2);

• void flip() {• led2 = !led2;• }

• int main() {• led2 = 1;• flipper.attach(&flip, 2.0); // setup flipper to call flip after 2 seconds

• // spin in a main loop. flipper will interrupt it to call flip• while(1) {• led1 = !led1;• wait(0.2);• }• }

Page 13: PMK_2015_6 (1).pptx

Klasa Timer – merenje vremenahttp://mbed.org/handbook/Timer

• Klasa koja može da se koristi prilikom testiranja za merenje vremena.

#include "mbed.h"

Timer t;

int main() { t.start(); printf("Hello World!\n"); t.stop(); printf("The time taken was %f

seconds\n", t.read());}

Page 14: PMK_2015_6 (1).pptx

RTC – Real Time Clock

• Sat realnog vremena je realizovan kao periferija unutar LPC1768 i omogućava precizno merenje vremena i u režimima smanjene potrošnje čipa, tj. low power modovima.

Page 15: PMK_2015_6 (1).pptx

RTC – Functional Block

Page 16: PMK_2015_6 (1).pptx

Sat realnog vremena – RTC

• Za podršku su kreirane MBED funkcije, ali ne postoji klasa RTC. Funkcije su deklarisane u time.h i rtc_time.h.

time Implementation of the C time.h functionsFUNCTIONS

time Get the current time

set_time Set the current time

mktime Converts a tm structure in to a timestamp

localtime Converts a timestamp in to a tm structure

ctime Converts a timestamp to a human-readable string

strftime Converts a tm structure to a custom format human-readable string

Page 17: PMK_2015_6 (1).pptx

RTC• #include "mbed.h"• int main() {• set_time(1256729737); // Set RTC time to Wed, 28 Oct 2009 11:35:37• while(1) {• time_t seconds = time(NULL);• printf("Time as seconds since January 1, 1970 = %d\n", seconds);• printf("Time as a basic string = %s", ctime(&seconds));• char buffer[32];• strftime(buffer, 32, "%I:%M %p\n", localtime(&seconds));• printf("Time as a custom formatted string = %s", buffer);• wait(1);• }• }

Page 18: PMK_2015_6 (1).pptx

PWM modul

• 32-bitni brojač sa 32-bitnim preskalerom

• 7 x match registara omogućavaju generisanje do 6 PWM signala.

• Podrška za generisanje PWM signala sa kontrolom pozicije jedne ili obe ivice u okviru periode PWM signala.

• Promena sadržaja match registara sinhronizovana sa PWM impulsima kako bi se onemogućilo generisanje gličeva.

Page 19: PMK_2015_6 (1).pptx

PWM modovi rada• Kontrola jedne ivice u okviru periode PWM signala.

– Match registar PWMMR0 određuje periodu PWM signala obzirom da određuje trenutak resetovanja brojača, dok svaki naredni match registar određuje poziciju ivice PWM signala.

– Na ovaj način je moguće generisati 6 nezavisnih PWM signala.

• Kontrola pozicije obe ivice u okviru periode PWM signala.– Preko vrednosti registra PWMMR0 podešava se perioda a preko vrednosti dva

dodatna match registra i pozicija obe ivice PWM signala tako što se podešava pozicija i silazne i uzlazne ivice, odnosno kontrola polariteta PWM signala.

– Na ovaj način je moguće generisati 3 nezavisna PWM signala.

PWMMR0

PWMMRimatch

match PWMMR0

PWMMRimatch

match

PWMMRjmatch

Togg

le o

n m

atch

Kontrola jedne ivice PWM Kontrola dve ivice PWM

Page 20: PMK_2015_6 (1).pptx

Digitalni izlazi sa mogućnošću generisanja PWM signala

• Direktan pristup i konfigurisanje PWM generatora bi zahtevalo podrobno istraživanje arhitekture hardvera.

• Pristup preko MBED biblioteke je vrlo jednostavan i intuitivan.

#include "mbed.h" PwmOut led(LED1); int main() {

while(1) { for(float p = 0.0f; p < 1.0f; p += 0.1f) {

led = p; wait(0.1); }

} }

Page 21: PMK_2015_6 (1).pptx

Klasa PwmOut

Page 22: PMK_2015_6 (1).pptx

Kako je moguće da i LED1 i 6 pinova MBED-a imaju pwm funkcionalnost kada ima ukupno samo 6 izlaza PWM-a?

• Kako i kod MSP-a kod ARM-a koji je komplikovanija arhitektura pinovi mogu da imaju višestruke funkcije. Postoji niz registara kojima se vrši interno prevezivanje različitih periferija na različite izlaze. Korišćenjem MBED biblioteke korisnik ne brine o tome jer posao odrađuje API biblioteke.

• Odatle i odgovor na pitanje iz naslova: LED1 kao digitalni PIN nema veze sa PINOM p26 MBED-a, ali ako se koristi PWM oni dele istu funkciju.

Page 23: PMK_2015_6 (1).pptx

Motor control PWM

• Motor Control PWM je optimizovan za kontrolu trofaznih AC i DC motora.• Poseduje tri direktna i tri komplementarna izlaza.• Shadow registri omogućavaju sinhronizovani upis vrednosti u registre kako

bi se izbegla pojava gličeva.• Funkcionalnost automatskog generisanja dead-time intervala.

• Dead-time interval obezbeđuje da tranzistori kontrolisani izlazima A i B ne budu u istom trenutku uključeni.

Dead time intervali

Page 24: PMK_2015_6 (1).pptx

MCPWM• Modul poseduje 3 nezavisna

kanala od kojih se svaki sastoji od– 32-bitnog Timer/Counter (TC)– 32-bitnog Limit registra (LIM)– 32-bitnog Match registra (MAT)– 10-bitnog dead-time registra

(DT) i pridruženog brojača– Dva modulisana izlaza

suprotnog polariteta.• TC broji do vrednosti LIM

registra u dva moda:– Up modu (brojanje počinje od

0h nakon što se dostigne LIM vrednost)

– Up/down modu (brojanje nagore prelazi u brojanje na dole nakon što TC dostigne vrednost LIM registra)

Page 25: PMK_2015_6 (1).pptx

Quadrature Encoder Interface (QEI)

• Osnovne karakteristike QEI– 32-bitni brojači/registri pozicije i

brzine taktovani sa PCLK– Inkrementiranje/dekrementiranje

zavisno od smera– Određivanje brzine preko

integrisanog tajmera– 3 compare registra za poziciju– 1 compare registar za brzinu

• Na osnovu signala sa 2-kanalnog inkrementalnog enkodera određuje se pozicija, smer rotacije i brzina. Indeksni signal se koristi za resetovanje pozicionog brojača.

Page 26: PMK_2015_6 (1).pptx

QEI funkcije

• Podržana su dva moda rada QEI modula– Sa dva ulazna fazno pomerena signala– Sa signalom smera rotacije i taktom

• Funkcija capture pozicije. Capture mod integracije pozicije je moguće postaviti da se vrši na svaku ivicu jednog ili oba ulazna signala zavisno od zahtevane rezolucije i opsega pozicionog brojača.

• Funkcija capture brzine. Capture brzine koristi programabilni tajmer i capture registar. Meri se broj ivica ulaznog/ulaznih signala u intervalu brojanja tajmera. Po isteku intervala brojanja vrednost broja impulsa se upisuje u capture registar kada se generiše i prekid.

• Funkcija compare brzine. Nakon upisa u capture registar pri određivanju brzine, vrši se poređenje upisane vrednosti sa sadržajem compare registra. Ukoliko je novoizmerena vrednost manja generiše se prekid. Ova funkcionalnost se može koristiti za indikaciju sporog obrtanja ili zaustavljanja osovine.

Page 27: PMK_2015_6 (1).pptx

QEI i MBED?

• Osnovna MBED biblioteka ne definiše klasu QEI, ali postoje projekti i biblioteke u pokviru MBED baze.

Page 28: PMK_2015_6 (1).pptx

LPC17xx UART modul• Osnovne karakteristike UART modula

– Veličina podatka 5, 6, 7 ili 8 bita– Parna/neparna ili bez bita parnosti– Jedna/dva stop bita– 16 bajtni FIFO prijemni/predajni bafer– Integrisani boud rate generator– DMA prenos za prijem/slanje (FIFO sel.)– Podrška za više procesorsko adresiranje– IrDA mod za IC komunikaciju– Podrška za softversku kontrolu protoka– Automatska baud rate detekcija– Statusi: overrun, parity, framing error, stanja

TX/RX bafera, stanje linije– IrDA – UART 0,2,3, RS485 – UART 1

Opis pinova kontrolera16x

oversampling

APB takt

UART1

Page 29: PMK_2015_6 (1).pptx

Serijski portovi – klasa Serialhttp://mbed.org/handbook/SerialPC

• Klasa Serial služi za korišćenje bilo kog serijskog porta LPC1768 uključujući i onog koji se koristi za vezu preko USB prema PC-ju. U tom slučaju koristi se UART0 i cela komunikacija prelazi preko specijalnog čipa za vezu.

#include "mbed.h" Serial pc(USBTX, USBRX); // tx, rx int main() {

pc.printf("Hello World!\n"); }

Page 30: PMK_2015_6 (1).pptx

Klasa Serial

Page 31: PMK_2015_6 (1).pptx

Serijski portovi

• Osim funkcije printf() koja se standardno koristi za prenos preko serijskog porta moguće je koristiti i funkcije koje su orjentisane ka prenosu karaktera.

#include "mbed.h" Serial pc(USBTX, USBRX); // tx, rx PwmOut led(LED1); float brightness = 0.0; int main() {

pc.printf("Press 'u' to turn LED1 brightness up, 'd' to turn it down\n"); while(1) {

char c = pc.getc(); if((c == 'u') && (brightness < 0.5)) {

brightness += 0.01; led = brightness; }if((c == 'd') && (brightness > 0.0)) {

brightness -= 0.01; led = brightness; }

} }

Page 32: PMK_2015_6 (1).pptx

Serijski protovi – testiranje korišćenjem Hyper Terminal-a

Page 33: PMK_2015_6 (1).pptx

Korišćenje prekidahttp://mbed.org/cookbook/Serial-Interrupts

• Osnovna mana funkcija kao što su printf() i scanf() je to što se program praktično zaglavljuje u tim funkcijama sve dok traje prenos podataka.

• Jedan od načina obezbeđivanja “pozadinske obrade” je korišćenje prekida.• Klasa Serial dozvoljava povezivanje korisničkih funkcija za dva tipa prekida: Rx i

Tx.

#include "mbed.h"Serial pc(USBTX, USBRX);PwmOut led(LED1);void UserInterrupt (void){

led=(float)pc.getc()/255;};int main() {

pc.attach(&UserInterrupt, Serial::RxIrq);while (1);//glavni program ne radi nista, tj. slobodan je za NESTO

}

Page 34: PMK_2015_6 (1).pptx

UART – IrDA mod rada

• IrDA (UART0/2/3)– Integrisani IrDA

koder/dekoder.– Podešavanje trajanja IC

impulsa (>1,63s)– Jednostavno

povezivanje IrDA primopredajnika

IrDA_TX

IrDA_RX

LPC17xx

Page 35: PMK_2015_6 (1).pptx

• Konfiguracija kao adresibilnog slave-a u multidrop mreži.• Adresni mod se signalizira od strane mastera

preko adresnog bita (bita parnosti)• EIA485 modovi rada

– EIA-485 Normal Multidrop Mode. Po prijemu adresnog bajta UART generiše prekid, kada je moguće podesiti da li se podaci upisuju u prijemni FIFO bafer.

– EIA-485 Auto Address Detection. UART slave je moguće konfigurisati da odbacuje sve podatke primljene nakon adresnog bajta u slučaju da nije adresiran.

– EIA-485 Auto Direction Control. Primopredajnik automatski generiše izlazni ENABLE signal za kontrolu smera komunikacije (DTR ili RTS).

– EIA-485 driver delay time. Omogućeno je programiranje intervala od slanja stop bita do deaktiviranja ENABLE signala.

– EIA-485 Output Inversion. Omogućena je promena polariteta nekih izlaznih signala.

UART – EIA485 mod rada

Page 36: PMK_2015_6 (1).pptx

Class SerialHalfDuplex

LPC17xx hradverski ne podržava halfduplex serial prenos.ALI, STM32F401 NUCLEO podržava half-duplex komunikaciju.

Vrlo nedokumentovana klasa – postoje problemi sa njom.Za početak, half’duplex znači da se i za predaju i za prijem koristi isti pin, a ne dva različita.

Page 37: PMK_2015_6 (1).pptx

Zadatak 2

• Napisati program koji korišćenjem serijskog porta prima sa računara jednocifren broj i ispisuje ga na sedmosegmentnom LED displeju.

• Brzina komunikacije treba da bude 19200 bit/s. • Istovremeno sa uključivanjem displeja poslati broj

treba da određuje i periodu PWM signala koji se šalje na diodu LED1. Osnovna učestanost PWM signala treba da bude 100 Hz.

• Program realizovati korišćenjem funkcije getc().