16
Univerzitet u Nišu Elektronski fakultet Katedra za Elektroniku Mikrokontroleri Mart 2012 UDP prenos signala Mentor: Student: Prof.dr Branislav Petrovid Zdravko Dirid 12542

UDP prenos signala - es.elfak.ni.ac.rses.elfak.ni.ac.rs/mikro/Materijal/UDP Prenos Signala.pdf · 2.1 Mbed razvojno okruženje Mbed je serija razvojnih ploča bazirane na ARM mikrokontrolerima,

  • Upload
    ngotu

  • View
    233

  • Download
    1

Embed Size (px)

Citation preview

Page 1: UDP prenos signala - es.elfak.ni.ac.rses.elfak.ni.ac.rs/mikro/Materijal/UDP Prenos Signala.pdf · 2.1 Mbed razvojno okruženje Mbed je serija razvojnih ploča bazirane na ARM mikrokontrolerima,

Univerzitet u Nišu Elektronski fakultet Katedra za Elektroniku

Mikrokontroleri Mart 2012

UDP prenos signala

Mentor: Student: Prof.dr Branislav Petrovid Zdravko Dirid 12542

Page 2: UDP prenos signala - es.elfak.ni.ac.rses.elfak.ni.ac.rs/mikro/Materijal/UDP Prenos Signala.pdf · 2.1 Mbed razvojno okruženje Mbed je serija razvojnih ploča bazirane na ARM mikrokontrolerima,

mbed UDP 2012

2 | S t r a n a

Sadržaj

1. Zadatak ............................................................................................................................. 3

2. Uvod ................................................................................................................................. 4

2.1 Mbed razvojno okruženje .......................................................................................................... 4

2.2 UDP protokol .............................................................................................................................. 5

UDP zaglavlje....................................................................................................................... 5

2.3 mbed Biblioteka ......................................................................................................................... 6

2.4 Online compiler .......................................................................................................................... 7

Online Compiler IDE ............................................................................................................ 7

3. Hardver ............................................................................................................................. 9

3.1 Prototip za testiranje ................................................................................................................. 9

3.2 Ethernet modul na mbed pločici .............................................................................................. 10

4. Softver ............................................................................................................................ 11

4.1 Generator signala ..................................................................................................................... 11

Generator šuma ................................................................................................................ 11

Generator impulsa ............................................................................................................ 12

4.2 UDP predajnik .......................................................................................................................... 13

5.Verifikacija rada ............................................................................................................... 16

Page 3: UDP prenos signala - es.elfak.ni.ac.rses.elfak.ni.ac.rs/mikro/Materijal/UDP Prenos Signala.pdf · 2.1 Mbed razvojno okruženje Mbed je serija razvojnih ploča bazirane na ARM mikrokontrolerima,

mbed UDP 2012

3 | S t r a n a

1. Zadatak

Projektovati jednostavni UDP server pomoću mbed razvojne ploče. Zadatak servera je da

kontinualno šalje digitalni signal od 2000 uzoraka pri 12bit-noj rezoluciji odmeravanja. Signal

treba da se formira iz dva eksterna *.bin fajla (u FLASH memoriji mbed ploče): jedan sa

impulsnim signalom i jedan sa šumom.

Impulsni signal je periodičan i on se sabira sa šumom, pri čemu se nakon jednog slanja impulsni

signal sabira sa signalom šuma pomerenim za jedan odmerak u desno. Ovako dobijen signal se

šalje preko Ethernet modula na mbed ploči putem UDP protokola svake 1ms.

Page 4: UDP prenos signala - es.elfak.ni.ac.rses.elfak.ni.ac.rs/mikro/Materijal/UDP Prenos Signala.pdf · 2.1 Mbed razvojno okruženje Mbed je serija razvojnih ploča bazirane na ARM mikrokontrolerima,

mbed UDP 2012

4 | S t r a n a

2. Uvod

2.1 Mbed razvojno okruženje

Mbed je serija razvojnih ploča bazirane na ARM mikrokontrolerima, koji su dizajnirani za brzo

projektovanje.

Mbed NXP LPC1768 mikrokontroler je

projektovan za izradu prototipova raznih uređaja,

naročito onih koji uključuju Ethernet, USB i

fleksibilnost brojnih perifernih interfejsa i FLASH

memoriju. Proizveden je u malom DIP pakovanju

za upotrebu sa raznim proto PCB pločama i

postoji ugrađeni USB FLASH

programator/debager.

Zasnovan je na NXP LPC1768 mikrokontroleru,

sa 32-bitnim ARM Cortex-M3 jezrom koje radi na 96MHz. Sadrži 512KB FLASH memorije,

64KB RAM i mnoštvo interfejsa uključujući i ugrađeni Ethernet, USB, CAN, SPI, I2C, ADC,

DAC, PWM i druge U/I interfejse. Slika iznad prikazuje često korišćene interfejse i njihovu

lokaciju. Uočite da se svi označeni pinovi (p5-p30) mogu koristiti i kao DigitalIn i DigitalOut

interfejsi.

Mbed mikrokontroleri pružaju iskusnim embedded programerima moćnu i produktivnu

platformu za izradu prototipova. Za programere neiskusne u oblasti 32-bitnih mikrokontrolera,

mbed pruža pristupačno rešenje za izradu projekta uz raspoložive biblioteke, resurse i podrške

koju pruža mbed zajednica.

Karakteristike

NXP LPC1768 MCU

ARM® Cortex™-M3 jezgro visokih performansi

96MHz, 32KB RAM, 512KB FLASH

Ethernet, USB Host/Device, 2xSPI, 2xI2C, 3xUART, CAN, 6xPWM, 6xADC, GPIO

40-pinsko DIP kudište, 54x26mm

5V USB ili 4.5-9V napajanje

Ugrađen USB drag 'n' drop FLASH programator

Online Kompajler

C/C++ razvojno okruženje na visokom nivou

Primeri biblioteka i projekata

Page 5: UDP prenos signala - es.elfak.ni.ac.rses.elfak.ni.ac.rs/mikro/Materijal/UDP Prenos Signala.pdf · 2.1 Mbed razvojno okruženje Mbed je serija razvojnih ploča bazirane na ARM mikrokontrolerima,

mbed UDP 2012

5 | S t r a n a

2.2 UDP protokol

User Datagram Protocol (UDP) je jedan od najvažnijih članova Internet Protocol Suite-a, skupa

mrežnih protokola korišćenih za Internet. Sa UDP, kompjuterske aplikacije mogu da salju

poruke, u ovom slučaju se misli na datagrame, drugim host-ovima na Internet Protocol (IP)

mreži bez zahteva za podesavanje specijalnih transmisionih kanala ili staza podataka.

UDP se koristi za razmenu paketa poruka („datagrama“) između računara. Za razliku od

protokola TCP, ovaj protokol ne podrazumeva stalnu vezu nego se paketi „bacaju“ odredišnom

računaru, bez održavanja veze i provere grešaka. Na taj način, ovaj protokol ne garantuje

isporuku paketa niti isti redosled isporuke paketa kao pri slanju. Zbog ovih osobina UDP

protokol je brz i koristi se za aplikacije kojima je važna brzina a prispeće paketa i održavanje

redosleda nije od velike važnosti, koristi ga veliki broj aplikacija, naročito multimedijalne

aplikacije poput internet telefonije i video konferencije. Koriste ga protokoli RTP, VoIP, DNS,

serveri za računarske igre itd.

UDP aplikacije koriste datagram sokete kako bi uspostavili host-to-host komunikaciju.

Aplikacija veže soket za njegovim odredištem za slanje podataka, koje je kombinacija IP adrese i

servisnog porta.

UDP zaglavlje

UDP se sastoji od 4 polja, svako po 2B. Korišćenje dva od ovih četiri je opcionalno u IPv4 (roze

na tabeli). U IPv6 samo je izvorišni port opcionalan.

Page 6: UDP prenos signala - es.elfak.ni.ac.rses.elfak.ni.ac.rs/mikro/Materijal/UDP Prenos Signala.pdf · 2.1 Mbed razvojno okruženje Mbed je serija razvojnih ploča bazirane na ARM mikrokontrolerima,

mbed UDP 2012

6 | S t r a n a

2.3 mbed Biblioteka

Biblioteka koja omogućava lako podešavanje i kontrolu transmisije podataka preko Ethernet

modula na mbed ploči je EthernetNetIf. Sadrži konfiguracije za razlišite protokole kao i

nekoliko korisnih mrežnih funkcija. Klasa koja je odredjena za UDP komunikaciju je UDP

Socket. U njoj su sve funkcije koje su korišćene u ovom projektu radi uspostavljanja prenosa

podataka preko UDP-a.

Page 7: UDP prenos signala - es.elfak.ni.ac.rses.elfak.ni.ac.rs/mikro/Materijal/UDP Prenos Signala.pdf · 2.1 Mbed razvojno okruženje Mbed je serija razvojnih ploča bazirane na ARM mikrokontrolerima,

mbed UDP 2012

7 | S t r a n a

2.4 Online compiler

Mbed kompajler pruža uprošćeni onlajn C/C++ IDE (integrated development environment) koji

je konfigurisan da obezbedi brzo pisanje programa, kompajliranje i njihovo download-ovanje na

mbed mikrokontroler. Nije potrebna nikakva dodatna instalacija ili podešavanje kako bi počeli

rad sa mbed-om. Pošto je mrežna aplikacija, možete se logovati sa bilo kog mesta i nastaviti gde

ste stali, na bilo kojem operativnom sistemu.

Iako je onlajn i uprošćen, takodje je i veoma moćan. Kompajler koristi profesionalni ARMCC

kompajlerski endžin, tako da pravi efikasan kôd koji može biti korišćen bez naplate, čak i u

komercijalnim primenama. IDE uključuje kontrolu verzije, formatiranje kôda i auto-generisanje

dokumentacije za objavljene biblioteke. Mbed alati su fokusirani na prototip a dizajnirani su za

brzo eksperimentisanje, i upotpunjuju ostale profesionalne alate.

Možete direktno objaviti projekte iz radnog prostora kompajlera na sajt mbed.org kako bi

podelili kôd sa drugima, a isto tako možete uneti postojeće biblioteke u vaš radni prostor kako bi

imali početnu prednost.

Online Compiler IDE

IDE uključuje puni editor kôda koji sadrži sintaksno naglašavanje, standardne editorske prečice

na tastaturi, kopiraj/nalepi, tabove i čak i automatsko formatiranje kôda. Ovde radite na ličnom

radnom prostoru, sa više fajlova, folderima, programima, uključujući i drag and drop interfejs:

Page 8: UDP prenos signala - es.elfak.ni.ac.rses.elfak.ni.ac.rs/mikro/Materijal/UDP Prenos Signala.pdf · 2.1 Mbed razvojno okruženje Mbed je serija razvojnih ploča bazirane na ARM mikrokontrolerima,

mbed UDP 2012

8 | S t r a n a

Import wizard omogućava uključivanje programa sa mbed URL-a. Ovo je korisno za

uključivanje kôda koji je pakovan kao bibliotečka komponenta koja se može ponovo koristiti,

tako da možete brzo uključiti blokove za vaš projekat.

Programe ili biblioteke možete pronaći na mbed sajtu, u

import wizardu ili možete koristiti poznati URL.

Kompajler IDE vam takodje omogučava da objavite vaše

programe ili biblioteke na mbed sajtu u code section, tako da

možete lako podeliti vaše dostignuće (ili probleme) sa

drugima.

Kada kompajlirate program, dobićete prikaz korišćenja

memorije. Ovo prikazuje veličinu programskog kôda i svake

const varijable koja će završiti u FLASH-u, i veličinu

varijable podataka koje će završiti u RAM-u.

Page 9: UDP prenos signala - es.elfak.ni.ac.rses.elfak.ni.ac.rs/mikro/Materijal/UDP Prenos Signala.pdf · 2.1 Mbed razvojno okruženje Mbed je serija razvojnih ploča bazirane na ARM mikrokontrolerima,

mbed UDP 2012

9 | S t r a n a

3. Hardver

3.1 Prototip za testiranje

Kao što se na slici levo vidi, prototip je

zaista uprošćen. Na pločici su samo mbed

razvojna ploča i RJ45 utičnica.

Korišćena utičnica je bez integrisanih

transformatora za odvajanje (Straight jack) i

položaj odgovarajućih pinova je prikazan na

slici desno.

Na slici ispod je prikazan deo mbed pločice sa

pinovima namenjenim za Ethernet. Kao što se

vidi sa slika, korišćenjem mbed razvojne

pločice jako je lako pripremiti prototip ploču

koju možemo koristiti za bilo kakvu vrstu Ethernet komunikacije (UDP, TCP...).

Page 10: UDP prenos signala - es.elfak.ni.ac.rses.elfak.ni.ac.rs/mikro/Materijal/UDP Prenos Signala.pdf · 2.1 Mbed razvojno okruženje Mbed je serija razvojnih ploča bazirane na ARM mikrokontrolerima,

mbed UDP 2012

10 | S t r a n a

3.2 Ethernet modul na mbed pločici

Page 11: UDP prenos signala - es.elfak.ni.ac.rses.elfak.ni.ac.rs/mikro/Materijal/UDP Prenos Signala.pdf · 2.1 Mbed razvojno okruženje Mbed je serija razvojnih ploča bazirane na ARM mikrokontrolerima,

mbed UDP 2012

11 | S t r a n a

4. Softver

4.1 Generator signala

Za potreba testiranja UDP prenosa signala nisu

korišćeni digitalni signali sa A/D konvertora već

su generisani samim kontrolerom. Signali su

smešteni u nizove sa 2000 polja, svako po 2B

(zbog 12bit-nih vrednosti). Nakon popunjavanja

ovih nizova sve vrednosti se pišu u fajl sa

ekstenzijom *.bin koji se nalazi na eksternoj

memoriji na mbed pločici. Generisana su dva

binarna fajla čiji je sadržaj prikazan na slici

desno.

Kod generisanja fajla sa impulsnim signalom

potrebno je podesiti broj impulsa koji želimo i

dužinu njegovog trajanja.

Kod generisanja šuma iskorišćena je rand()

funkcija i njen rezultat se maskira sa 0x01FF

kako bi vrednosti šuma ostale ispod magine od

512LSB.

Generator šuma

#include "mbed.h"

#define STR_LENGTH 2000

LocalFileSystem mbedFile("mbed");

unsigned short str[STR_LENGTH];

int main() {

for (int i=0;i<STR_LENGTH;i++){

str[i]=rand()&0x01FF;

}

FILE *fp = fopen("/mbed/noise.bin", "w");

fwrite (str, 2,STR_LENGTH, fp );

fclose(fp);

}

Page 12: UDP prenos signala - es.elfak.ni.ac.rses.elfak.ni.ac.rs/mikro/Materijal/UDP Prenos Signala.pdf · 2.1 Mbed razvojno okruženje Mbed je serija razvojnih ploča bazirane na ARM mikrokontrolerima,

mbed UDP 2012

12 | S t r a n a

Generator impulsa

#include "mbed.h"

#define STR_LENGTH 2000

#define NO_IMPULSE 4

#define PER_LENGTH STR_LENGTH/NO_IMPULSE

#define IMP_LENGTH 25

LocalFileSystem mbedFile("mbed");

unsigned short str[STR_LENGTH];

int main() {

for (int i=0;i<NO_IMPULSE;i++){

for (int j=0;j<PER_LENGTH;j++){

if((PER_LENGTH-IMP_LENGTH)<=j & j<=PER_LENGTH){

str[i*PER_LENGTH+j]=0x0FFF;

}else{

str[i*PER_LENGTH+j]=0x0000;

}

}

}

FILE *fp = fopen("/mbed/impulse.bin", "w");

fwrite (str, 2,STR_LENGTH, fp );

fclose(fp);

}

Page 13: UDP prenos signala - es.elfak.ni.ac.rses.elfak.ni.ac.rs/mikro/Materijal/UDP Prenos Signala.pdf · 2.1 Mbed razvojno okruženje Mbed je serija razvojnih ploča bazirane na ARM mikrokontrolerima,

mbed UDP 2012

13 | S t r a n a

4.2 UDP predajnik

Fajl UDP.cpp je podeljen na celine i svaka od njih će biti objašnjena u nastavku.

Uključivanje potrebnih biblioteka , definisanje dužine niza (u bajtovima) za signale i deklaracija

lokalnog fajl sistema na mbed pločici.

#include "mbed.h"

#include "EthernetNetIf.h"

#include "UDPSocket.h"

#define STR_LENGTH 4000

LocalFileSystem mbedFile("mbed");

Sledi podešavanje IP adrese, mrežne maske, gateway-a i DNS-a za mbed a potom i podešavanje

IP adrese i porta uredjaja koji će da primi signale.

EthernetNetIf eth(

IpAddr(160,99,11,55), //IP Address

IpAddr(255,255,255,0), //Network Mask

IpAddr(160,99,11,250), //Gateway

IpAddr(160,99,12,230) //DNS

);

Host local(IpAddr(160,99,11,56), 80);

U nastavku su prikazane globalne promenljive i deklaracija tajmera (koji inicira prenos svake

1ms) kao i UDP soketa.

Ticker timer;

UDPSocket udp;

char impulse[STR_LENGTH];

char noise[STR_LENGTH];

char sum[STR_LENGTH];

int p=0;

Sledeće dve funkcije imaju zadatak da podese pokazivač na odgovarajuću poziciju u nizu sa

šumom, pri tom, funkcija circBuffRead() prebacuje pokazivač na početak ako je premašena

dužina niza dok f-ja incPtr() inkrementira pokazivač za 2 pozicije kako bi pokazivao na sledeći

odmerak digitalnog signala.

char circBuffRead(int n){

if(n<STR_LENGTH){

return noise[n];

}else{

return noise[n-STR_LENGTH];

}

}

Page 14: UDP prenos signala - es.elfak.ni.ac.rses.elfak.ni.ac.rs/mikro/Materijal/UDP Prenos Signala.pdf · 2.1 Mbed razvojno okruženje Mbed je serija razvojnih ploča bazirane na ARM mikrokontrolerima,

mbed UDP 2012

14 | S t r a n a

void incPtr(){

if(p<STR_LENGTH-2){

p=p+2;

}else{

p=0;

}

}

Najvažnija funkcija je svakako sigAdd(). U njoj se odvija sabiranje impulsa i pomerenog šuma

(za vrednost pokazivača p). Nakon sabiranja se inkrementira pokazivač na niz sa šumom i

dobijeni niz se šalje preko UDP-a pomoću funkcije udp.send().

void sigAdd(){

for(int i=0; i<STR_LENGTH; i++){

sum[i]= impulse[i] | circBuffRead(i+p);

}

incPtr();

udp.sendto( sum, STR_LENGTH, &local);

Net::poll();

}

Inicijalizacija Etherneta se vrši funkcijom ethSetup() koja poziva funkciju eth.setup() iz

EthernetNetIf biblioteke. Funkcija eth.setup() vraća broj greške u slučaju da je doslo do greške u

konfigurisanju i to se ispisuje preko serijske konekcije na računar povezan sa mbed-om. U

suprotnom se ispisuje Setup OK. Funkcija udp.bind() vezuje soket na ranije definisani host.

void ethSetup(){

printf("Setting up...\n");

EthernetErr ethErr = eth.setup();

if(ethErr)

{

printf("Error %d in setup.\n", ethErr);

}

printf("Setup OK\n");

udp.bind(local);

}

Dva fajla koji sadrže signale se učitavaju u odredjene nizove na sledeći način:

void readFiles(){

FILE *fp1 = fopen("/mbed/noise.bin", "r");

fread(noise, 1, STR_LENGTH, fp1);

fclose(fp1);

FILE *fp2 = fopen("/mbed/impulse.bin", "r");

fread(impulse, 1, STR_LENGTH, fp2);

fclose(fp2);

}

Page 15: UDP prenos signala - es.elfak.ni.ac.rses.elfak.ni.ac.rs/mikro/Materijal/UDP Prenos Signala.pdf · 2.1 Mbed razvojno okruženje Mbed je serija razvojnih ploča bazirane na ARM mikrokontrolerima,

mbed UDP 2012

15 | S t r a n a

Pošto su sve glavne operacije smeštene u funkcije, glavna petlja ja dosta uprošćena. Prvo se

vezuje prekid na tajmer koji će na svakih 1000us pozivati funkciju za sabiranje i slanje podataka.

Zatim se isti na kratko vreme isključuje kako bi se učitali signali i podesio ethernet. I na kraju je

jedna beskonačna petlja koja radi poll-ing mreže.

int main() {

timer.attach_us(&sigAdd,1000);

NVIC_DisableIRQ(TIMER3_IRQn);

readFiles();

ethSetup();

NVIC_EnableIRQ(TIMER3_IRQn);

while(true)

{

Net::poll();

}

}

Page 16: UDP prenos signala - es.elfak.ni.ac.rses.elfak.ni.ac.rs/mikro/Materijal/UDP Prenos Signala.pdf · 2.1 Mbed razvojno okruženje Mbed je serija razvojnih ploča bazirane na ARM mikrokontrolerima,

mbed UDP 2012

16 | S t r a n a

5.Verifikacija rada

Nakon što su podešene IP adrese za mbed i odredišni računar, razvojna ploča se može povezati

mrežnim kablom na željeni računar. Korišćen je softver za nadgledanje protoka podataka preko

Ethernet-a (Wireshark) na računaru koji će primiti signale. Analiza pristiglih podataka je otežana

usled činjenice da posmatramo digitalne signale.

Prvo što se vidi sa slike iznad jesu IP adrese. Levo je adresa mbed ploče a desno odredišta,

odnosno računara. U istom redu vidimo da je prenos podataka izmedju ova dva uredjaja u skladu

sa UDP protokolom. U delu gde se opisuje pristigli frejm uočava se vremenska razlika izmedju

pristiglih podataka koja je u skladu sa zahtevima. U donjem delu je naznačeno da smo primili

4000B što odgovara poslatom signalu (2000 uzoraka, svaki po 2B). I na kraju, skroz dole je

prikazan signal preveden u ASCII formu. Analizom susednih pristiglih signala može se uočiti da

se šum pomera za jednu poziciju a da impuls ostaje nepromenjen.