3.1.2010 RAPORTTI RFM12B LANGATON LÄHETIN/VASTAANOTIN MODULI SULAUTETUISSA JÄRJESTELMISSÄ 0278116 Hans Baumgartner
1 SISÄLTÖ KÄYTETYT MERKINNÄT JA LYHENTEET... 2 1. JOHDANTO... 3 2. LYHYEN KANTAMAN LANGATON TIEDONSIIRTO... 4 2.1 Langattomat tiedonsiirtotekniikat... 4 2.2 Tiedonsiirtonopeudet... 5 2.3 Tekniikoiden kustannukset... 5 2.4 Käyttökohteet... 6 3. RFM12B... 7 3.1 Modulaatio... 8 3.2 Lähetysteho... 8 3.3 Ajurit... 9 3.4 Tietoliikenneprotokolla... 9 4. Testaus... 11 4.1 Lähetin... 11 4.2 Vastaanotin... 12 5. YHTEENVETO... 14 LÄHTEET... 15
2 KÄYTETYT MERKINNÄT JA LYHENTEET F c FSK IEEE IrDA ISM ISP PC RF WLAN kantoaaltotaajuus Frequency Shift Keying Institute of Electrical and Electronics Engineers Infrared Data Association Industrial, Scientific and Medical In-System Programming Personal Computer Radio Frequency Wireless Local Area Network
3 1. JOHDANTO Langattoman tiedonsiirron avulla voidaan kasvattaa sulautettujen järjestelmien sovelluskohteiden määrää sekä laajennettavuutta. Lyhyen kantaman langattomalla tiedonsiirrolla voidaan yhdistää eri laitteita toisiinsa sekä lähettää langattomasti esimerkiksi mittausdataa. Seminaarityössä on tarkasteltu langattoman lyhyen kantaman tiedonsiirron käyttökohteita ja toimintaa yleisesti sekä perehdytty tarkemmin Hope Microelectronics Co., Ltd. RFM12B -moduulin ominaisuuksiin. Kaksi RFM12B-moduulia on lisäksi implementoitu AVR-mikrokontrollereiden avulla testiympäristöön.
4 2. LYHYEN KANTAMAN LANGATON TIEDONSIIRTO Lyhyen kantaman langattoman tiedonsiirron avulla voidaan yhdistää laitteita ja mittausantureita toisiinsa. Käytettävät moduulit toimivat tavallisesti lisenssivapailla kantoaaltotaajuuksilla, alhaisilla lähetystehoilla, joten radiolaitteiden käyttö ei vaadi erityisiä lupia. Usein moduulit käyttävät hajaspektritekniikoita, kuten taajuushyppelyä, jolloin todennäköisyys, että kaksi laitetta toimivat samaan aikaan samalla taajuudella on pieni. Lisäksi, koska lähetystehot ovat pieniä, eivät vastaanottimet häiriinny mahdollisesti muista samalla taajuudella toimivista vastaavista laitteista, mikäli laitteiden välinen etäisyys on riittävä. Mikäli samanlaisia laitteita joudutaan käyttämään samalla alueella, voidaan laitteiden kantoaaltotaajuutta muuttaa tai käyttää protokollaa, joka erottelee datavirrasta kullekin laitteelle kuuluvan datan. Lisäksi osa valmiista protokollista määrittelee, kuinka samalla alueella sijaitsevat laitteet kommunikoivat keskenään [1]. 2.1 Langattomat tiedonsiirtotekniikat Lyhyen kantaman langattomia RF-tekniikoita (Radio Frequency) on useita eri käyttötarkoituksiin. Esimerkiksi kodinelektroniikassa yleisesti käytössä olevia tekniikoita ovat WLAN (Wireless Local Area Network) ja Bluetooth. Myös IrDA (Infrared Data Association) eli infrapuna voidaan laskea kuuluvaksi lyhyen kantaman langattomaksi tekniikaksi. Radiotaajuuksiin perustuva tiedonsiirto tosin on syrjäyttänyt monissa laitteissa infrapunaan perustuvan linkin. RF-taajuudet eivät vaadi näköyhteyttä, jolloin niiden luotettavuus on parempi. Infrapunan näköyhteyteen perustuva linkki tosin suojaa tehokkaasti salakuuntelulta ja samalla taajuudella toimivat laitteet eivät häiritse toisiaan. Myös teollisuudessa käytetään kodinelektroniikasta tuttuja tekniikoita WLAN:a, Bluetooth:a ja infrapunaa. Lisäksi teollisuuden kenttälaitteissa käytetään erityisesti teollisuusympäristöön suunniteltuja tekniikoita kuten ZigBee, Wireless Profibus ja Wireless HART sekä standardoimattomia radiopiirejä [2].
5 Standardoimattomalla radiopiirillä tarkoitetaan piiriä, jonka yhteensopivuus on rajoittunut jopa laitevalmistajatasolle [2]. Lähemmän tarkastelun kohteena oleva RFM12B-moduuli voidaan laskea kuuluvaksi standardoimattomiin piireihin. Kyseinen piiri ei oletusarvoisesti tue mitään kaupallisesti saatavilla olevaa protokollaa, joten kyseinen moduuli pystyy keskustelemaan vain saman valmistajan moduuleiden kanssa. 2.2 Tiedonsiirtonopeudet Kodinelektroniikassa käytettävät protokollat kykenevät parhaimmillaan jopa 54 Mbit/s nopeuksin (WLAN) [3]. Tavallisesti teollisuudessa siirrettävä data on kuitenkin hitaasti päivittyvää ohjaus- tai oloarvotietoa, joka ei vaadi suurta tiedonsiirtonopeutta. Suurempia nopeuksia tarvitaan vain erityiskohteissa kuten videokuvan siirrossa tai erittäin nopeassa säädössä. Muiden langattomien tekniikoiden nopeudet jäävätkin huomattavasti WLAN:n nopeudesta. Esimerkiksi Wireless HART kykenee 250 kbit/s nopeuteen ja Bluetooth lyhytaikaisesti parhaimmillaan 3 Mbit/s nopeuteen. Lähemmin tarkasteltava RFM12B kykenee ilman ulkoisia komponentteja tiedonsiirtonopeuteen 115.2 kbit/s, joka riittää moniin yksinkertaisiin sovelluksiin. Tiedonsiirtonopeuksia tarkasteltaessa on hyvä ottaa huomioon, että useimmiten tarkoitetaan fyysisen kerroksen bittinopeutta, joka sisältää usein huomattavankin määrän otsikkotietoja. Hyötydatan siirtonopeus on siis fyysisen kerroksen siirtonopeutta pienempi. 2.3 Tekniikoiden kustannukset Radiomoduuleiden hinnat vaihtelevat huomattavasti. Yleisesti käytössä, niin kodinelektroniikassa, kuin teollisuudessakin olevia WLAN-laitteita on hyvin saatavilla. Tekniikan monimutkaisuus rajoittaa kuitenkin WLAN-tekniikan käytön valmiisiin laitteisiin. WLAN:n vaatima TCP/IP-protokollapino on erittäin raskas eikä tavallisesti mahdu yksinkertaiseen mikrokontrolleriin. Osa WLAN-moduleista hoitaa
6 verkkoprotokollat rautatasolla tai omalla prosessorillaan, jolloin protokollapinon implementoinnista ei tarvitse huolehtia. Muista langattomista tekniikoista esimerkiksi Bluetooth-moduulit maksava noin 10 euroa (lynx-dev.com) ja ZigBee 15 euroa (sparkfun.com). Lähemmin tarkasteltava RFM12Bmoduuli maksaa alle 5 euroa (lynx-dev.com). 2.4 Käyttökohteet Langattomat radiomoduulit laajentavat huomattavasti sulautettujen järjestelmien käyttökohteita ja monipuolisuutta. Yksinkertaisia esimerkkejä langattomien lähettimien käytöstä ovat esimerkiksi langaton lämpömittari tai periaatteessa mikä tahansa anturi, johon on liitetty langaton lähetin. Langattomuus pienentää anturin asennuskustannuksia, kun kaapeleita ei tarvita. Lisäksi joissain sovelluksissa langattomuus on ainoa tapa toteuttaa mittaus, sillä mittari voi olla liikkuva tai kaapeleita on mahdotonta jälkikäteen asentaa esimerkiksi suljettuun säiliöön. Tarkasteltava RFM12B on suunniteltu tulevan langattomaksi ohjausyksiköksi satamanosturin etäisyysmittariin. Laitteessa ultraäänitoimiset etäisyysmittarit kirjoittavat nosturin ja nostettavan kontin välisen etäisyyden kohdetta kuvaavan videokameran kuvan päälle. Kuva lähetetään langattomasti ohjauskoppiin, josta voidaan langattomasti ohjata mm. etäisyysanturin offset-arvoa, hälytyksiä ja näkyykö etäisyys ylipäänsä näytöllä. Kyseisessä kohteessa käytetään langatonta tekniikkaa, sillä nosturille tulee ainoastaan sähköt. Tarvittavalle video- ja ohjaussignaalille olisi ilman langatonta tekniikkaa pitänyt vetää omat johdotukset, joka olisi ollut erittäin kallista, sillä nosturin liikerata on yli 20 metriä ja kaapeleilta vaaditaan suurta rasituksen- ja säänkestävyyttä.
7 3. RFM12B RFM12B on edullinen, ISM-taajuusalueella (Industrial, Scientific and Medical) toimiva lähetin-vastaanotin. Käytettävät taajuusalueet ovat 433, 868 ja 915 MHz:a. Käytettävä taajuusalue voidaan valita täysin ohjelmallisesti. Moduulin tärkeimmät ominaisuudet on listattu alla. - edullinen, hinta alle 5 yksittäni ostettuna - ei vaadi ulkoisia komponentteja, antennin lisäksi - datanopeus jopa 256 kbit/s, sisäisellä demodulaattorilla 115.2 kbit/s - automaattinen antennin viritys - SPI-väylä - 2.2 3.8 V toimintajännite - matala tehonkulutus, enintään 26 ma lähetysmoodissa, 15 ma vastaanottomoodissa - standby-virta alle 0.3 µa - tukee pientä pakettikokoa, 3 tavua Kuva 1 Lähetinyksikkö. RFM21B-moduuli merkitty punaisella ympyrällä.
8 3.1 Modulaatio RFM12B moduloi lähetettävän signaalin FSK-modulaatiolla (Frequency Shift Keying). FSK on taajuusmodulaatiotekniikka, jossa digitaalisen signaalin bitit esitetään eri kantoaaltotaajuuksina. Kuvassa 2 on esitetty FSK-modulaation periaate. Kuva 2 FSK-modulaation periaate [4] Kuvasta 2 voidaan havaita 0- ja 1-bittejä kuvattavan eri kantoaaltotaajuuksilla. RFM12Bmodulilla voidaan ohjelmallisesti määrittää kilohertseinä kyseinen taajuusdeviaatio välillä 15 240 khz:ä. Deviaation kasvattaminen tekee bittien havaitsemisen helpommaksi, mutta kasvattaa tarvittavaa kaistanleveyttä. Deviaation suuruuden lisäksi voidaan valita deviaation polariteetti eli kuvaako korkeampi taajuus ykköstä vai nollaa. 3.2 Lähetysteho Lähetysteho voidaan valita ohjelmallisesti välillä -21 0 dbm. Yksikkö dbm kuvaa lähetystehoa suhteessa 1 mw lähetystehoon. 0 dbm on absoluuttisena tehona 1 mw ja -21 dbm 0.008 mw.
9 Moduulin tehoa testattiin Lappeenrannan Pesuparkki Oy:ssa, jonka toimitilat ovat metallija betoniseinäisiä. 0 dbm lähetysteholla kiinteistön sisällä olevan lähettimen lähettämä datasignaali pystyttiin vastaanottamaan virheettömästi koko kiinteistön alueella. Lähetin toimii siis erinomaisesti myös sisätiloissa teollisuusympäristössä ainakin kymmeniä metrejä. Saatavilla on myös tehokkaampia 500 mw lähetin-vastaanottimia. Kyseisille moduuleille luvataan jopa 3 km kantosädettä. Viestintävirasto tosin rajoittaa ISM-taajuuksien lähetystehoja huomattavasti, joten tehokkaiden lähettimien käyttö jää henkilökohtaisen harkinnan ja riskinottokyvyn varaan. [5] 3.3 Ajurit RFM12B-moduulille on saatavilla ilmaiset ajurikoodit suoraan AVR- ja PICmikrokontrollereille. Hyvin kommentoitu esimerkkikoodi on myös helppo portata muille prosessoreille, sillä moduulin vaatimat alustukset ovat selkeitä ja suoraviivaisia. Valmiit esimerkkikoodit ovat yhdessä.c-lähdekooditiedostossa, joten koodien käyttö sellaisenaan ajureina omiin sovelluksiin ei onnistu. Ajurikoodit olisi hyvä lajitella omiin.h- ja.ctiedostoihinsa, jolloin koodien uudelleenkäyttö on huomattavasti joustavampaa. Vastaanottimen esimerkkikoodi on toteutettu pollaavana, joskin moduuli tukee myös keskeytykseen perustuvaa vastaanottoa. Kyseisistä puutteista johtuen esimerkkiajurit eivät ole täysin valmiita, vaan vaativat omaa työtä. Seminaarityöhön kuuluvassa implementoinnissa onkin hieman siistitty esimerkkiajureita ja siirretty lähetinpään koodit omiin.h- ja.c-tiedostoihinsa. Vastaanotin tosin on edelleen toteutettu pollaavana, eikä keskeytykseen perustuvana. 3.4 Tietoliikenneprotokolla Testiympäristössä käytetty moduuli ei sisältänyt minkäänlaista tietoliikenneprotokollaa. Lähetetty paketti sisältää ainoastaan siirrettävät tavut eikä lainkaan otsikkotietoa. Yksinkertaisessa sovelluksessa ei protokollaa välttämättä tarvita, mutta esimerkiksi jonkinlainen virheentarkistus on hyvä olla aina.
10 Mikäli useampi moduuleja halutaan käyttää samalla alueella, jolloin moduulit kuulevat toistensa liikenteen on jonkinlainen tietoliikenneprotokolla välttämätön. Jokaiselle laitteelle voidaan asettaa esimerkiksi osoite, jonka perusteella päätetään tarvitseeko vastaanotettuun dataan reagoida. IEEE määrittelee myös avoimia tietoliikennestandardeja joita voidaan käyttää tietoliikenteen suunnittelussa. RFM12B-moduulilla voidaan myös ohjelmallisesti muuttaa kantoaaltotaajuutta kantoaaltotaajuuden ympäristössä. Esimerkiksi 868 MHz kantoaaltotaajuutta voidaan säätää yhtälön (1) mukaan jossa 36 F 3903 F c = 860 + F*0.005Mhz, (1) Yhtälön (1) parametri F määritellään 12-bittisenä kokonaislukuna RFM12B-moduulin rekisterissä 0xA6. Muuttamalla kantoaaltotaajuutta voivat samalla kuuluvuusalueella olevat laitteet toimia toisistaan häiriintymättä. Esimerkiksi 868 MHz keskikantoaaltotaajuus voi vaihdella välillä 860.18-879.515 MHz. Mikäli kaistanleveys on 500 khz, voi samalla alueella kommunikoida 40 eri laitetta. Laitteet voivat toimia myös samalla kantoaaltotaajuudella eri aikaikkunoissa, mutta tällöin laitteet täytyy suunnitella toimimaan yhdessä.
11 4. TESTAUS RFM12B-moduuleita testattiin AVR-mikrokontrollereiden ja PC-tietokoneen avulla. Lähetinyksikkö muodostui RF-modulista sekä Arduino kehitysalusta. Vastaanottimena toimi STK500-kehitysalusta sekä PC-tietokone. 4.1 Lähetin Lähetin muodostuu Arduino-kehitysympäristöstä sekä RFM12B-moduulista, kuva 1. Arduino käyttää ATmega328p-mikroprosessoria ja sitä voidaan ohjelmoida, joko ohjelmointikaapelin avulla tai Arduinon omalla ohjelmointikielellä usb-väylällä. Testauksessa käytettiin ensimmäistä vaihtoehtoa ja käytettynä ohjelmointilaitteena oli AVR ISP-mk2. Lähettimen koodi on esitetty alla. #include <avr/io.h> #include "rfm12b.h" int main(void) { volatile unsigned int i,j; for(i=0;i<1000;i++)for(j=0;j<123;j++); rfm12b_portinit(); rfm12b_init(); rfm12b_writecmd(0x0000); rfm12b_send(0xaa); // PREAMBLE rfm12b_send(0xaa); rfm12b_send(0xaa); rfm12b_send(0x2d); // SYNC rfm12b_send(0xd4); for(i=0; i<1; i++) { rfm12b_send(0x30+i); rfm12b_send(0xaa); // DUMMY BYTES
12 rfm12b_send(0xaa); rfm12b_send(0xaa); return 0; Koodissa alustetaan RF-modulin portit ja itse moduli. Alustuksessa rfm12b_init() määritellään mm. käytettävä kantoaaltotaajuus, lähetysteho sekä lähetysnopeus. Ennen varsinaisen hyötydatan lähetystä lähetetään kolmen tavun preamble rfm12b_send(0xaa) sekä sykronointitavut 0x2D ja 0xD4. Näiden tavujen avulla vastaanotin huomaan, että dataa on tulossa ja valmistautuu vastaanottamaan dataa. Dataosio koostuu 16 tavusta, jotka ovat ascii-merkit 0x30-0x46. Lopussa olevat 0xAA tavut eivät ole välttämättömiä. Lähetin lähettää uuden paketin aina käynnistyttyään ja lopettaa toimintansa tämän jälkeen. Uusi paketti voidaan lähettää painamalla Arduino-kehitysalustan reset-painiketta. 4.2 Vastaanotin Vastaanotin muodostuu STK500-kehitysalustasta sekä PC-tietokoneesta. STK500- kehitysalustassa oleva ATtiny2313-mikroprosessori on liitetty RFM12B-moduuliin, kuva 3. Kuva 3 Vastaanotin
13 Mikrokontrolleri lähettää vastaanotetut tavut sarjaportin välityksellä PC-tietokoneelle. Havaitessaan tulevaa liikennettä sarjaportissa, PC-tietokoneen sovellus kirjoittaa näytölle tekstin hello, world sekä soittaa äänimerkin, kuva 4. Kuva 4 Moduulin toimintaa havainnollistava Windows-ohjelma Kuvan 4 sovellus on toteutettu Microsoft Visual Studio 2008 ohjelmistolla, C++/CLIohjelmointikielellä (Common Language Infrastructure). Sovellus kirjoittaa tekstin näytölle vastaanotettuaan sarjaportista minkä tahansa tavun. Vastaanottavan AVR-mikrokontrollerin koodi on kopioitu lähes suoraan esimerkkikoodeista, joten siinä ei ole erillisiä ajuritiedostoja, vaan kaikki toiminnallisuus on toteutettu yhdessä.c-tiedostossa. Koodi on melko pitkä ja sekava, joten se on raportin liitteenä. Lisäksi mikrokontrollerin ohjelma on pollaava, joten se soveltuu melko huonosti mihinkään todelliseen käyttöön.
14 5. YHTEENVETO Seminaarityössä perehdyttiin Hope Microelectronics RFM12B -langattomaan tiedonsiirtomoduuliin. Raportissa käytiin läpi yleisesti langatonta tiedonsiirtoa sulautetuissa järjestelmissä ja testattiin käytännön laitteessa tutkittua RFM12B-moduulia. Raportissa on selostettu RFM12B-moduulin ominaisuuksia ja toimintaa. Lisäksi raportissa on esitetty moduulin liittäminen AVR-mikrokontrolleriin sekä liitteenä tarvittavat ohjelmistokoodit.
15 LÄHTEET [1] ZigBee, Wikipedia, viitattu 16.11.2009 [2] Kaupallisten lyhyen kantaman radiotekniikoiden kartoitus ja soveltuvuus analyysi metallisorvin ohjauksessa käytettävään point-to-point yhteyteen, kandidaatintyö, Niskanen, V., 2009 [3] WLAN, Wikipedia, viitattu 16.11.2009 [4] FSK, Wikipedia, viitattu 16.11.2009 [5] Määräys 15 (15 Z/2009 M), Viestintävirasto, http://www.ficora.fi/attachments/suomiry/5l1x1fiik/viestintavirasto15z2009 M.pdf, viitattu 3.1.2010 Lisätietoa: RFM12B datalehti, Hope Microelectronics Co. Ltd. RFM12B programming guide, Hope Microelectronics Co. Ltd. RFM12B and AVR quick start, http://zenburn.net/~goroux/rfm12b/rfm12b_and_avr%20quick_start.pdf, 16.11.2009
LIITE #define SCK 7 // SPI clock #define SDO 5 // SPI Data output (RFM12B side) #define SDI 6 // SPI Data input (RFM12B side) #define CS 4 // SPI SS (chip select) #define NIRQ 2 // (PORTD) #define HI(x) PORTB = (1<<(x)) #define LO(x) PORTB &= ~(1<<(x)) #define WAIT_NIRQ_LOW() while(pind&(1<<nirq)) #define LED 6 #define LED_OFF() PORTD &= ~(1<<LED) #define LED_ON() PORTD = (1<<LED) #define BAUDRATE 25 // 19200 at 8MHz #include <avr/io.h> void rsinit(unsigned char baud) { UBRRL = baud; UCSRC = (1<<UCSZ0) (1<<UCSZ1); // 8N1 UCSRB = (1<<RXEN) (1<<TXEN); // enable tx and rx void rssend(unsigned char data) { while(!(ucsra & (1<<UDRE))); UDR = data; unsigned char rsrecv() { while(!(ucsra & (1<<RXC))); return UDR; void portinit() {
HI(CS); HI(SDI); LO(SCK); DDRB = (1<<CS) (1<<SDI) (1<<SCK); DDRD = (1<<LED); unsigned int writecmd(unsigned int cmd) { unsigned char i; unsigned int recv; recv = 0; LO(SCK); LO(CS); for(i=0; i<16; i++) { if(cmd&0x8000) { HI(SDI); else { LO(SDI); HI(SCK); recv<<=1; if( PINB&(1<<SDO) ) { recv =0x0001; LO(SCK); cmd<<=1; HI(CS); return recv; void FIFOReset() { writecmd(0xca81); writecmd(0xca83);
void waitfordata() { unsigned int status; while(1) { status = writecmd(0x0000); if ( (status&0x8000) ) { return; void rfinit() { writecmd(0x80e7); //EL,EF,868band,12.0pF writecmd(0x8299); //er,!ebb,et,es,ex,!eb,!ew,dc writecmd(0xa640); //freq select writecmd(0xc647); //4.8kbps writecmd(0x94a0); //VDI,FAST,134kHz,0dBm,-103dBm writecmd(0xc2ac); //AL,!ml,DIG,DQD4 writecmd(0xca81); //FIFO8,SYNC,!ff,DR writecmd(0xced4); //SYNC=2DD4; writecmd(0xc483); //@PWR,NO RSTRIC,!st,!fi,OE,EN writecmd(0x9850); //!mp,90khz,max OUT writecmd(0xcc17); //!OB1,!OB0, LPX,!ddy,DDIT,BW0 writecmd(0xe000); //NOT USE writecmd(0xc800); //NOT USE writecmd(0xc040); //1.66MHz,2.2V /* unsigned char rfrecv() { unsigned int data; writecmd(0x0000); data = writecmd(0xb000); return (data&0x00ff); */ unsigned char rfrecv() {
unsigned int data; while(1) { data = writecmd(0x0000); if ( (data&0x8000) ) { data = writecmd(0xb000); return (data&0x00ff); int main(void) { unsigned char data, i; LED_ON(); portinit(); rfinit(); rsinit(baudrate); FIFOReset(); while(1) { waitfordata(); for (i=0; i<16; i++) { data = rfrecv(); rssend(data); FIFOReset(); return 0;