udp prenos signala - es.elfak.ni.ac.rses.elfak.ni.ac.rs/mikro/materijal/udp prenos signala.pdf ·...
TRANSCRIPT
Univerzitet u Nišu Elektronski fakultet Katedra za Elektroniku
Mikrokontroleri Mart 2012
UDP prenos signala
Mentor: Student: Prof.dr Branislav Petrovid Zdravko Dirid 12542
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
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.
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
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.
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.
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:
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.
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...).
mbed UDP 2012
10 | S t r a n a
3.2 Ethernet modul na mbed pločici
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);
}
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);
}
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];
}
}
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);
}
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();
}
}
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.