Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
Miskolci Egyetem Gépészmérnöki és Informatikai Kar Elektrotechnikai-Elektronikai Intézeti Tanszék Villamosmérnöki szak Elektronikai tervezés és gyártás szakirány
Szakdolgozat
Varga Richárd IATFT8 2015
1
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
Eredetiségi nyilatkozat
Alulírott VARGA RICHÁRD
(neptun kód: IATFT8)
a Miskolci Egyetem Gépészmérnöki és Informatikai Karának végzős szakos hallgatója ezennel büntetőjogi és fegyelmi felelősségem tudatában nyilatkozom és aláírásommal igazolom, hogy a
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése című komplex feladatom/ szakdolgozatom/ diplomamunkám1 saját, önálló munkám; az abban hivatkozott szakirodalom felhasználása a forráskezelés szabályi szerint történt.
Tudomásul veszem, hogy plágiumnak számít: - szószerinti idézet közlése idézőjel és hivatkozás megjelölése nélkül; - tartalmi idézet hivatkozás megjelölése nélkül; - más publikált gondolatainak saját gondolatként való feltüntetése.
Alulírott kijelentem, hogy a plágium fogalmát megismertem, és tudomásul veszem, hogy plágium esetén a szakdolgozat visszavonásra kerül.
Miskolc, 2015.05.03 Hallgató aláírása
_________________________________________________________________________ 2
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
1
Megfelelő rész aláhúzandó
Tartalomjegyzék Bevezetés……………………………………………………………………………………..………………………………………………1 1.
Nuc140 MCU felépítése és működése ............................................................................................ 7 1.1.
A rendszermag felépítése ........................................................................................................ 7
1.2.
A Flash memória felépítése ..................................................................................................... 7
1.2.1. 1.3.
Az időzítő áramkörök tulajdonságai ........................................................................................ 8
1.3.1.
Az időzítő áramkörök működése ..................................................................................... 8
1.3.2.
A Watchdog Timer működése ......................................................................................... 8
1.4.
Az RTC áramkör működése...................................................................................................... 8
1.5.
A NUC140 MCU periféria kezelő áramkörei. ........................................................................... 9
1.5.1. 1.6.
3.
A PWM/CAPTURE áramkör ............................................................................................. 9
Az UART áramkörök................................................................................................................. 9
1.6.1.
Az SPI kommunikációs áramkörök................................................................................... 9
1.6.2.
Az I2S kommunikáció működése ................................................................................... 10
1.6.3.
Az I2C kommunikáció működése ................................................................................... 10
1.6.4.
A PS/2 Eszköz vezérlő működése .................................................................................. 10
1.6.5.
Az EBI (Külső kommunikációs vezérlő) működése ........................................................ 10
1.6.6.
Az ADC (Analóg digitális konverter) felépítése és működése........................................ 11
1.6.7.
Az Analóg komparátor áramkör működése................................................................... 11
1.7. 2.
A GPIO felépítése és működése....................................................................................... 8
Az alacsony feszültséget érzékelő eszköz (Brown out detector) működése ......................... 11
A DS1302 RTC áramkör felépítése és működése........................................................................... 12 2.1.
A DS1302 működése.............................................................................................................. 12
2.2.
A DS1302 és MCU közötti kommunikáció ............................................................................. 13
2.3.
A DS1302 kommunikációs protokollja................................................................................... 15
2.3.1.
A CE bemenet ................................................................................................................ 15
2.3.2.
Adatolvasás.................................................................................................................... 16
2.3.3.
Adatírás.......................................................................................................................... 16
2.3.4.
Sorozatmód (Burst mód) ............................................................................................... 16
A mérésadatgyűjtőhöz felhasznált érzékelők................................................................................ 17 3.1.
Hőmérséklet érzékelők .......................................................................................................... 17
3.1.1.
AD590JF analóg hőmérő IC............................................................................................ 19 3
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
3.1.2.
Az AD590JF tulajdonságai .............................................................................................. 20
3.1.3.
Az Ad590JF használata................................................................................................... 20
3.2.
Hőmérséklet hitelesítés ......................................................................................................... 21
3.3.
A DS18B20 digitális hőmérő IC .............................................................................................. 22
3.3.1.
Főbb tulajdonságai ........................................................................................................ 22
3.3.2.
Az áramkör működése ................................................................................................... 22
3.3.3.
A kommunikációs protokoll felépítése és működése .................................................... 24
3.3.4.
Működtető parancsok ................................................................................................... 24
3.3.5.
A vezérlő byte-ok ........................................................................................................... 28
3.4.
Az FXOS8700CQ gyorsulás és mágneses szenzor jellemzői és működése............................. 30
3.4.1.
Legfontosabb jellemzői ................................................................................................. 31
3.4.2.
Érzékenysége ................................................................................................................. 33
3.4.3.
Nulla-G és Nulla-fluxus ofszet........................................................................................ 33
3.4.4.
Önellenőrző teszt .......................................................................................................... 33
3.4.5.
Kommunikáció ............................................................................................................... 34
I2C mód működés .......................................................................................................................... 34 Egyszeri byte olvasás ..................................................................................................................... 36 Többszörös byte olvasás................................................................................................................ 36 Egyszeri byte írási művelet ............................................................................................................ 37 Többszörös byte írás...................................................................................................................... 37 3.4.6. 3.5.
SPI kommunikáció ......................................................................................................... 38
Az SD kártya interfész hardveres működése ......................................................................... 40
4. A kisméretű NUC140 MCU-t tartalmazó mérésadatgyűjtő berendezés hardverjének megtervezése ........................................................................................................................................ 43 4.1.
A mérés-adatgyűjtő ismertetése ........................................................................................... 44
4.1.1.
A mérés-adatgyűjtő tápegysége .................................................................................... 45
4.1.2.
Az RTC áramkör és a NUC140 huzalozása ..................................................................... 45
4.1.3.
Az FXOS8700 és a NUC140 összekötése ........................................................................ 46
4.1.4.
A NUC140 soros kommunikációja ................................................................................. 47
4.1.5.
A hőmérsékletérzékelők és a NUC140 kapcsolata ........................................................ 48
4.1.6.
Az SD kártya és huzalozása a NUC140-el ....................................................................... 48
4.2.
Eagle nyáktervező szoftver .................................................................................................... 49
4.2.1.
A DRAW parancs ............................................................................................................ 50
4
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
4.2.2.
INVOKE parancs ............................................................................................................. 50
4.2.3.
NAME parancs ............................................................................................................... 50
4.2.4.
LABEL (megjelölés) parancs ........................................................................................... 51
4.2.5.
NYÁK lap generálása a kapcsolási rajzból ...................................................................... 51
4.2.6.
Az alkatrészek elhelyezése (Component Placement) .................................................... 51
Kézi huzalozás (Routing Manually) ................................................................................................ 52 4.3.
A tervezés menete................................................................................................................. 52
4.3.1.
A DS1302 RTC áramkör megrajzolása és beillesztése ................................................... 53
4.3.2.
A DS18B20 hőmérséklet mérő szenzor beillesztése...................................................... 54
4.3.3.
Az FXOS8700 megrajzolása és beillesztése ................................................................... 55
4.3.4.
A MAX232DW áramkör beillesztése.............................................................................. 56
4.3.5.
A stabilizátor elemek és az SD foglalat beillesztése ...................................................... 56
4.3.6.
A mérés-adatgyűjtő további elemei illetve azok összekötése....................................... 57
4.4.
Nyák megtervezése ............................................................................................................... 58
5.
A szoftver rendszer felépítése és működése ................................................................................. 62
6.
A mérés-adatgyűjtő fizikai megvalósítása ..................................................................................... 65
7.
A mérésadatgyűjtő tesztelése ....................................................................................................... 67 7.1.
Hőmérséklet érzékelő tesztelése .......................................................................................... 68
7.2.
A mágneses és gyorsulásmérő szenzor tesztje...................................................................... 68
8.
Összefoglalás ................................................................................................................................. 69
9.
Summary........................................................................................................................................ 70
10.
Irodalom jegyzék ....................................................................................................................... 71
5
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
Bevezetés Napjainkban egyre nagyobb figyelmet szentelnek a különböző fizikai mennyiségek mérésére: a hőmérséklet, nyomás, illetve a mágneses tér. Ezek közül a hőmérséklet mérése és naplózása okoz nagyobb problémát. Ezen problémák például az időjárás időbeli pontos meghatározására, illetve ahol nagyobb pontossággal kell a hőmérsékletet mérni, mint erőművekben, geofizikában, fűtés, - hűtés technikákban, kohókban stb. Az előbb említett problémák miatt a mai világban egyre több érzékelőkre van szükség, melyeknek széles kritériumoknak kel megfelelniük: pontosság, gyorsaság, mérési tartomány. Egy hétköznapi érzékelő az említett kritériumoknak nem felel meg, ezért szükséges a komolyabb mérő műszer kifejlesztése. A tervezés egyik nagy nehézség a pontos hőmérsékleten tartás, ugyanis az érzékelők reakció ideje lassabb, vagy sokkal gyorsabb lehet, így nehéz azt a bizonyos tárgyat, pontos hőmérsékleten tartani. A csővezetékek kiépítésénél fontos szempont az elrendezés és az irány. A csatornarendszer tervezésénél és ellenőrzésénél figyelembe kell venni a lejtési szöget, ugyanis ha egy szakaszon lassabb, akkor ott meg is állhat a víz. A közlekedési eszközökben is egyre jobban elterjedtek a különböző gyorsulás és giroszkópos érzékelők, melyeket lehetne több extrákhoz is használni a meglévők mellé. Elsősorban kiemelném, hogy egy autót fel lehet programozni úgy, hogy emberi beavatkozás nélkül eljuthasson A pontból B-be. Ezt úgy érhetjük el, hogy az irány és ferdeség, illetve GPS koordinátákat figyelembe vesszük. Egy teszt kör alatt mérni tudjuk a pontos értékeket, amelyeket tizedmásodperc alatt rögzítethetünk akár egy SD kártyára. A rögzített adatok segítségével, előállítható az autó vezetéséhez szükséges vezérlőutasítás, így egy szervo robotika elirányítja az autót azokon az útvonalakon melyeket a teszt alatt rögzített. Szakdolgozatom célja egy mérésadat-gyűjtő fejlesztése, amely sok féleképpen használható, mivel több fajta érzékelőt tud kezelni, illetve az értékeiket lementeni egy SD kártyára. A mérésadat-gyűjtőt használhatjuk majd hőmérséklet, mágneses irány és gyorsulás mérés-re. E három fizikai jellemzőt rögzíthetjük majd az SD kártyára. A rögzítés dátumhoz lesz kötve, ami 6
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
annyit jelenti, hogy egy előre beállított idő intervallum alatt rögzíti az értékeket a kártyára, és mellé az értékekhez a mérés idejét is lerögzíti. A mérésadat-gyűjtő központi eleme egy NUC140VE3CN típusú mikrovezérlő. A mérőeszközt külsőleg lehet majd felparaméterezni soros vonalon egy PC terminálon keresztül, illetve egy külső nyomógombokkal ellátott kezelő szervvel. Az összes alkatrészt egy 100*60mm es nyákra kel kialakítani, hogy be lehessen építeni egy detektorként funkcionáló házba. A kitűzött cél, hogy megtervezzem a mérésadat-gyűjtő kapcsolási rajzát és nyáktervét, illetve a működéséhez szükséges szoftvert.
1. Nuc140 MCU felépítése és működése A NUC140-es mikrovezérlő adatlapját [1] használtam fel, mint forrást a következő részek kidolgozásához.
1.1. A rendszermag felépítése A rendszermag ARM Cortex-M0 típusú, mely működhet akár 50 MHz-es órajellel is. Tartalmaz egy 24 bites rendszer időzítőt, illetve egy 32-bites hardveres szorzót is. Ebben a magban megtalálható még 32 db bemenet, amely megszakíthatja a benne futó programot, és egyenként 4 prioritási szinttel rendelkezik. A rendszermag tartalmaz hibakereső üzemmódot, amely két törésponttal rendelkezik a hibafelderítéshez. Az IC alacsony fogyasztású alvó üzemmódban. A rendszermag beépített LDO-val (Low Drop Outputtal) rendelkezik, így a tápfeszültsége 2.5-Vtól 5-V-ig. terjedhet.
1.2. A Flash memória felépítése Az eszköz 32K/64K/128Kbyte programmemóriával rendelkezik. Ebben a memóriában helyezkedik el a 4Kbyte-os loader terület. ISP módszerrel is programozható, ami a program frissítést nagyon megkönnyíti.
7
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
1.2.1. A GPIO felépítése és működése Négy I/O módot tartalmaz. Kvázi két-irányú, push-pull kimenetű, nyitott Drain kimenet, illetve csak magas impedanciás bemenetet tartalmaz. A TTL/Schmittrigger közül választhatunk, hogy melyik funkcionáljon bemenetként. Az I/O bemenetet be lehet állítani megszakításként (interrupt) vagy akár lehet él vezérlésű (EDGE) és szint vezérlésű is.
1.3. Az időzítő áramkörök tulajdonságai 1.3.1. Az időzítő áramkörök működése A NUC140 tartalmaz 4db 32 bites időzítőt, ebből 24 bit felfelé számoló, a többi 8 bit pedig elő számláló
(Pre-scale
counter-t).
Független
órajel
forrása
van
minden
időzítőnek.
Alkalmazhatóak külön esemény számláló funkciókhoz is, ilyen például az, ha a bemenetre csatlakoztatok egy jelet impulzus formában, akkor az impulzusok számát meg tudja számolni.
1.3.2. A Watchdog Timer működése Többfajta órajel forrással alkalmazható. Nyolc választható várakozási idő állítható be 1.6mstól ~ 26.0 sec között, a végső érték függ az órajel forrástól. A WDT felébredhet akár kikapcsolásból vagy készenléti módból is. Megszakítás vagy újraindítás választható ki a WDT időzítő lejárta után.
1.4. Az RTC áramkör működése Az RTC számláló év, hónap, nap, óra, perc, másodperc pontossággal számol. Ez a számláló riasztásra is használható, ehhez riasztó regiszterre van szükség (Alarm Register). A riasztási értékként beállítható év, hónap, nap, óra, perc és másodperc.
8
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
Az RTC funkció beállítható 12 órás és 24 órás üzemmódba. Automatikus szökőév korrekciós funkcióval is rendelkezik.
1.5. A NUC140 MCU periféria kezelő áramkörei. 1.5.1. A PWM/CAPTURE áramkör Beépített négy (16 bites) PWM generátor, mely 8 db PWM kimenetet használhat. Minden PWM generátornak szüksége van egy órajel forrásra, ez a forrás kiválasztható. Tartalmaz órajel osztót, illetve egy 8 bites előosztó áramkört.
1.6. Az UART áramkörök
Az UART0 64 byte fifo-val rendelkezik és nagy sebességű működésre képes.
Az UART1 és 2 opcionálisan választható 16 byte fifo-val rendelkező szabványos eszköz.,
Az UART-ok az IrDA (SIR) és LIN funkciók használatát is lehetővé teszik, valamint az RS-232 és RS-485-ös üzemmódot, az RS-485-nél 9 bites módban, irány szabályozással.
Az UART órajel generátora programozható, a baud-rate max 1/16-oda lehet a rendszer órajelnek. Alkalmas a CDMA üzemmódra, továbbá a PDMA módra is.
1.6.1. Az SPI kommunikációs áramkörök A NUC140 négy SPI vezérlő készletet tartalmaz. Ezek alkalmasak a SPI Master és Slave üzemmódok megvalósítására is. A Master működhet 32 MHz-en, a Slave 10 MHz-en is.
9
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
Teljes Duplex szinkronos adatátvitelt tesz lehetővé. Változó hosszúságú adatokat küldhet 1-től, 32 bit-ig. MSB vagy LSB lehet az első adatátvitel. Az Rx és Tx lehet le, illetve felfutó él a soros órajelhez képest. Támogatja az SPI a CDMA üzemmódot is.
1.6.2. Az I2S kommunikáció működése Az Interfész külső audio codec között, Master és Slave üzemmódban képes működni, tudja kezelni a 8,16, 24 és a 32 bites szóhosszúságokat is. Mono és stereo audio adatok fogadása és küldésére alkalmas. I2S az MSB adatátvitelt teszi lehetővé. Kettő 8 szót tartalmazó FIFO adatpuffer áll rendelkezésre, az egyik az adás a másik a vételt szolgálja ki. Generálhat egy megszakítás kérelmet, amikor a buffer méret átlép egy programozható határt. Alkalmas DMA kérelmekhez az adásnál és a vételnél is.
1.6.3. Az I2C kommunikáció működése Az I2C vezérlőből két eszköz található, melyek Master/Slave üzemmódban működhetnek. Kétirányú adatátvitelre képesek Master és Slave között.
1.6.4. A PS/2 Eszköz vezérlő működése Ez az eszköz képes a HOST kommunikációs tiltás és üzenetkérés észlelésére, valamint a frame hibák észlelésére.
1.6.5. Az EBI (Külső kommunikációs vezérlő) működése Használhatjuk 64 Kbyte-os 8 bites módban, vagy 128 Kbyte-os 16 bites módban.
10
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
1.6.6. Az ADC (Analóg digitális konverter) felépítése és működése 12 bites felbontással rendelkezik. Tartalmazhat 8 csatornás egyedüli bemenetet vagy 4 csatornás differenciális bemenetet. A konverzió indítása vagy a működtető programból vagy egy bemenetre adott impulzussal lehetséges. Támogatja a CDMA üzemmódot.
1.6.7. Az Analóg komparátor áramkör működése NUC140 két analóg komparátort tartalmaz, melyeket külső bemenet, vagy belső „bandgap” feszültség által választhatunk. A komparátoroknak van egy negatív pontja, mely konfigurálható.
1.7. Az alacsony feszültséget érzékelő eszköz (Brown out detector) működése
Ez a detektor négy szint érzékelést vesz figyelembe: 4,5 V; 3,8V; 2,7V; 2,2V.
A Brown-out működésbe lép megszakítás és RESET hatására, vagy ha a küszöbfeszültség alá esik a táp.
A küszöbfeszültségi szint: 2,0V. Beállítható alacsony szint hatására úgy, hogy RESET induljon be.
A NUC140-es mikrovezérlő blokk diagramja látható az ábrán.
11
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
Jól láthatóak rajta a perifériák a memóriák és a vezérlők.
2. A DS1302 RTC áramkör felépítése és működése
2. ábra a DS1302 RTC IC rajzjele.
Valós idejű óra számlálóját beállíthatjuk, másodperc, perc, óra, nap, hét, hónap, év pontossággal.
Rendelkezik egy 31*8 bites-es RAMMAL az időjegyzetek adattárolásához.
Soros I/O minimum kivezetés található benne, mely egy egyszerű három kivezetésű interfész-el áll kapcsolatban.
Működési feszültsége 2V-tól egészen 5.5V-ig terjed.
2V-on kevesebb, mint 300nA-t fogyaszt, pl.: az akkumlátorról évekig üzemel.
Ez az áramkör 1, vagy több byte (sorozatkép átvitel) írására és olvasására képes az óra és a ram között.
Kompatibilis a TTL rendszerrel ahol a Vcc=5V.
Működési hőmérséklete -40C°-tól egészen +85C°.ig működőképes, mely a kívánt feladathoz tökéletes.
2.1. A DS1302 működése A DS1302 töltésű időmérő chip tartalmazza a valós idejű óra/naptár és a 31 byte-os statikus ramot. Mikroprocesszor segítségével kommunikál, egy egyszerű soros interfészen keresztül. A
12
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
valós idejű óra/naptár gondoskodik másodperc, perc, óra, nap, hét, hónap, év információkról. Az IC automatikusan átállítja azokat a hónapokat, amelyek kevesebb, mint 31 napot tartalmaznak, beleértve a korrekciókat és a szökőévet is. Az óra működhet 24-órás vagy 12órás formátumban, melyet egy AM vagy PM jelzés mutat.
2.2. A DS1302 és MCU közötti kommunikáció Ez az IC egyszerűsített szinkron soros kommunikációval rendelkezik, melyhez csak három vezetékre van szükség, hogy kommunikáljon az óra a ram-al. Ez három vezeték: a CE; I/O; (adatvonal) és SCLK, azaz a (soros órajel). Az adatok átvihetők, az óra és a Ram között 1 byteban és egy időben, vagy tört byte-ban, mely legfeljebb 31 byte lehet. A DS1302 megőrzi az adatokat, melyet nagyon alacsony fogyasztású működésre terveztek. Az óra kommunikációja kevesebb, mint 1μW-ot igényel. Az áramkörnek a belső felépítése a 3. ábrán látható, a blokk diagramon. A 4. ábrán pedig a működtetéséhez szükséges elrendezést, azaz a kapcsolást mutatja.
3. ábra. A DS1302 Blokk vázlata.
13
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
4. ábra. Az ajánlott kapcsolási rajz. Az órajelhez pontos kvarcot kell használni, mely 32.768Khz frekvenciájú. Ez a kvarc az X1 és X2-es lábra csatlakozik rá, mint ahogy az ábrán is láthatjuk. Ez az órajel nem ugyanaz, ami a soros interfésznél van. Ez ugyanis adatlap szerint akár 500KHz is lehet, mely a gyors kommunikációhoz szükséges.
14
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
2.3. A DS1302 kommunikációs protokollja Az 5. ábra mutatja, a parancs byte-ok felépítését. A parancs byte-ok, adat és cím bitekből állnak. Az MSB (bit 7) azaz a 7. bitnek ”1”-nek kell leni, ha ez „0” akkor ez tiltást jelent a DS1302 a áramkör számára. A 6. bit meghatározza óra/naptár adatokat. Ha a 6. bit 0, akkor az óra adatokat fogja közölni, ha logikailag „1”, akkor a Ram adatokat olvashatjuk vagy írhatjuk. Az 1-5. bit adja meg a címzést a regiszterekhez, és az utolsó LSB 0. bit meghatározza az írási műveletet. Ha logikai „0”, akkor input, ilyenkor írhatjuk, ha logikai „1”, akkor output, ekkor olvashatjuk. A 0. parancs byte alapértelmezetten inputban van. Az 5. ábrán látható a parancs byte, és a cím bitek.
5. ábra. A parancs és címző bitek.
2.3.1. A CE bemenet Ha a vezérlő a CE lábra magas jelszintet ad, akkor elindít valamennyi adattovábbítást. A CE bemenet két funkciójú. - Először, CE engedélyezi a vezérlőlogikát, amely lehetővé teszi a hozzáférést a léptetőregiszterekhez a cím és a parancssorozat fogadásához. - Másodszor, a CE jel szolgál egy lezáró funkciót, mely az adatátvitel végét mutatja, az 1 byteos vagy több byte-os CE adatátvitel esetében. A CE bemenet, ha nincs rajta jel, akkor nagyimpedanciás állapotba kerül. A bekapcsoláskor elengedhetetlenül fontos, hogy mikor a chip megkapja a nagyobb, mint 2V feszültséget, akkor a CE-nek és az órajelnek is logikai 0ban kell lennie. Ezután a CE láb vezérli az adatátvitelt.
15
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
2.3.2. Adatolvasás
Ha a nyolc órajellel párhuzamosan, azaz ciklusban az I/O lábon, a bemeneten írási parancs lesz, akkor egy adat byte a bemeneten az órajel felfutó élére a következő nyolc órajel-ciklusban lesz látható. A többi órajelet, azaz ciklusokat figyelmen kívül hagyja, mert véletlenül fordulhatnak elő. Az adatok bevitele 0. bittől kezdődik.
2.3.3. Adatírás A nyolc órajel ciklusban, ha az input olvasási parancs byte lesz, akkor egy adat byte egy kimenet lesz, az órajel lefutó élével szinkronban. Ne feledjük, hogy az első adat átvitel bitje után következik be a lefutó él miután az utolsó kis parancs byte írás műveletet tesz aktívvá. További órajelek, azaz ciklusok újraküldhetik az adatforgalmat is, illetve véletlenül fordulhat elő. Amíg a CE továbbra is magas. Ez a művelet lehetővé teszi a folyamatos sorozatfelvételt olvasási módban. Továbbá, az I/O-láb egy TRISTATED esetén minden alkalommal felfutó éle az órajelnek. Az adatok kivitele 0. bittől kezdődik.
2.3.4. Sorozatmód (Burst mód)
„Burst” módban megadható akár az óra és a naptár vagy a RAM regiszterek címzési helye. 31 decimális (cím azaz parancs bitek 1-től 5-ig = logikai 1). Mint korábban is említettem, hogy a
16
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
6. bit megadja az óra vagy RAM közötti hozzáférést, és a 0. bit megmutatja, hogy írni vagy olvasni akarunk. Nincs adattároló kapacitás azokon a helyeken, ahol 9-től 31-ig decimálisan, az óra/naptár regiszterek, a hely a RAM- regiszterekben vannak. Olvasás vagy írás a „BURST” üzemmódban indul 0. bit 0. cím. A 6. ábra mutatja a három interfész kivezetésein lévő idő diagramot. 6. ábra. Írás, olvasási módban a soros átvitel idődiagramja. Az ábrán jól látható, hogy az órajel ciklusban van az I/O vonal bitjeivel. A parancsbitek felfutó élre érvényesek, míg az adatbitek olvasástól és írástól függően le, illetve fel futó élre történnek. Egy órajel egy fel és egy lefutó élből áll. Ha a CE bemenet alacsony szinten van, akkor minden adatátvitel befejeződik.
3. A mérésadatgyűjtőhöz felhasznált érzékelők
3.1. Hőmérséklet érzékelők Számomra erre a feladatra csak az olyan érzékelők jöhetnek szóba, amelyekkel kevés külső alkatrésszel megoldható a kívánt jelszinten történő érzékelés, illetve a kis méret. Ezért döntöttem a félvezető alapú érzékelők mellett, melyek kéznél is voltak. Elsőként az Analog Device gyártó AD22100atz típusú érzékelőjét próbáltam ki. Az AD22100atz érzékelő több, mint egy sima érzékelő, ugyanis belső áramköröket tartalmaz, amelyek analóg kimenettel rendelkeznek. Az AD22100ATZ érzékelő tulajdonságait az adatlapja [3] alapján a következők:
200C°-ig bírja a hőmérsékletet
a pontossága jobb, mint ± 2 % a teljes mérési skálán,
a linearitás jobb, mint ± 1 % a teljes skálán.
a hőmérsékleti együttható 22.5mV/C°.
kimeneti feszültséggel arányos a hőmérséklet. 17
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
Egyfajta tápfeszültséget igényel.
Fordított feszültség elleni védelem.
Minimális önmelegedés.
Magas szintű alacsony impedanciás kimenet.
Maga az érzékelő három kivezetésű. ebből egy a táp feszültség, egy a GND, és egy a kimenet. A tápfeszültsége: +4V-tól - +6,5V-ig terjed. Működési hőmérséklete -55-tól +150C°-ig terjed. A maximum tárolási hőmérséklet +160C° lehet.
Az alkalmazott kapcsolása, adatlap [3] szerint a 7. ábrán látható.
7. ábra Az AD 22100 hőmérő blokk vázlata.
Az ábrán jól látható módon a kimeneti feszültség a GND és a V0 lábkivezetések között mérhető, ami a hőmérséklettel arányos. Az áramkört az ábrán látható módon megépítettem, 5V-os tápfeszültséggel és egy digitális multiméterrel mértem a kimeneti feszültséget a földhöz képest. Ahogy melegítettem úgy nőt a feszültség. Majd az említetett Novuton mikrovezérlő kitthez hozzákötöttem és a benne megírt programmal a soros terminálon olvastam le az eredményt. Az eredmény teljesen más volt feszültség értékben kifejezve, mint amit a multiméterrel mértem. A melegítés hatására sem kezdett el változni. Ezután rá mértem a bemenetre a műszerrel azt tapasztaltam, hogy a multiméter is azt az értéket mutatja, mint a maga a soros terminál. Ezután leakasztottam az érzékelőt a bemenetről és azt tapasztaltam, hogy a műszer a helyes értéket igazolja. Ebből arra a következtetésre jutottam, hogy maga a NUC bemenete, illetve a benne lévő12Bites felbontású Analóg/Digitális konverter terheli le. Úgy gondolom, hogy ha előtte egy 18
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
műveleti erősítővel megerősítettem volna, akkor nem terhelődött volna le az érzékelőnek a kimenetele, viszont ez egy plusz áramkört igényelt volna, ezért ez csak bonyolította volna a kivitelezést. Ezért kipróbáltam egy LM típusú érzékelőt is, de az eredmény ott is hasonló volt. Újabb próbát tettem az Analog Device gyártó AD590JFáramkörével.
3.1.1. AD590JF analóg hőmérő IC
Ezen áramkör működéséről az adatlap [4] szolgáltatott információkat. Ez az áramkör is félvezető alapú, több tokozásban is kapható, én a kis mérete miatt Flatpack tokozásút választottam. A „8” ábrán látható az érzékelő és a kivezetései. Az ábrán jól látható, hogy csak két kivezetést tartalmaz és ezeknek a nevük a + és a –, a pozitív láb meg van jelölve egy kisebb dudorral az érzékelő alján. Ez az apró méret mindössze 2*5mm szinte bárhová beültethető. Első ránézésre azt hinné az ember, hogy a + és – -ra tápot kell kapcsolni, de ilyenkor felmerül az a kérdés, hogy honnan vesszük le a jelet?
8. ábra Az AD590JF hőmérő IC tokozása látható.
A jelet nem más, mint egy sorba kötött ellenálláson kell mérnünk, vagy az ellenállás mellet maga az érzékelőn. Ugyanis ez áramkimenettel rendelkezik, amely arányos a mért hőmérséklettel.
19
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
3.1.2. Az AD590JF tulajdonságai
Lineáris áram kimenet: 1 µA/Kelvin
Széles hőmérséklet-tartomány: -55°C és + 150°C-on.
Szonda-kompatibilis kerámia érzékelő a kis mérete miatt.
Két kivezetéses eszköz: feszültség/áram out kimenet, funkciótól függően.
Lézerrel megmunkált ± 0,5 °C kalibrációs pontosság (AD590M).
Kiváló linearitás: ± 0,3 °C feletti teljes körű (AD590M).
Széles tápfeszültség tartomány: 4V-tól 30V-ig.
Szenzor ház teljesen elszigetelt a kivezetésektől.
3.1.3. Az Ad590JF használata
Az AD590 egy, két kivezetéses integrált áramkör. A hőmérséklet átalakítónak a kimeneti árama arányos az abszolút hőmérséklettel. Széles tápfeszültség között 4V és 30V, mellyen a készülék működik. Egy nagy impedanciájú, állandó áram szabályozó, ami 1 µA/Kelvinnel változtatja a hőmérsékletét. Lézeres beállítással munkálták meg a vékonyréteg ellenállásokat a kalibrációhoz, hogy a 298,2 µA kimenetet 298,2 K (25 °C) feleljen meg. Az AD590 – el 150C°-ig lehet hőmérsékletet mérni.. Az AD590 olcsó monolitikus integrált áramkör nem kell mellé lineárizáló áramkör, precíz feszültség erősítők, ellenállás mérő áramkör, és hidegpontot kompenzáló áramkör nem szükséges. Az érzékelőt a 9. ábra szerinti elrendezésben használtam.
9. ábra Az AD590 ajánlott kapcsolási rajza.
20
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
A bekötést annyiban módosítottam, hogy a 950 és a 100 Ω-os potenciométereket 1 KΩ-os, 1%os ellenállással helyettesítettem, így mértem a feszültséget az 1 KΩ-os ellenálláson. Az ellenállás feszültsége 4 és 5 mV között ugrált, majd melegítés hatására nőt 5-ről 10-15mV-re, és így tovább. Aztán ezt is rá kötöttem a NUC mikrovezérlőre és közben mértem a multiméterrel az eredményt és a terminált is figyeltem. Ebből az következik, hogy nem terhelt be, de egy másik nagyobb probléma merült fel. Feszültségugrálás következett be: 4mV a 25C°-nak felel meg, és ha 5 mV-ra változik az visszaszámolva a 298.2µA ami I=U/R szerint az 25.8 C°-nak felelt meg, ami nagyon pontatlan e célra. Ugyanis 0.1pontosságú hőmérséklet mérés és regisztrálás lenne a cél. E hibát az A/D konverternek a hibája okozhatta, mert az csak 12 bites. Megjegyzendő, hogy a kis mV változás zavarra érzékeny, ezért ezt is valamekkora szeresre kellene erősíteni, ami megint + áramkör lett volna.
3.2. Hőmérséklet hitelesítés Nem beszéltem az érzékelők szórásából eredő mért és a tényleges hőmérséklet kijelzés problémájáról, azaz a hiteleségükről. Ugyanis ha működne, egy érzékelő azt egy nála legalább 3-szor pontosabb hőmérséklet mérővel össze kellene hitelesíteni, hogy mennyi az eltérése a pontos műszeréhez képest. Kisebb és magasabb hőmérsékleten ez eltérne, ezért korrigálni kellene, hardver vagy software módon. Maga a művelet elvégzését egy magasabb hőmérsékleten elég nehéz megoldani, mert állandó hőmérsékleten kell tartani a közeget, míg a pontosítás létre nem jön. Ezen okokból úgy döntöttem, hogy tovább keresgélek, hogy kaphatóak-e olyan érzékelők, amelyek kiküszöbölik a kalibrációs, linearitási hibát, és a zavartalan pontos átalakítást. Hosszas keresgélés után megtaláltam az ide illő modern érzékelőnek mondható alkatrészt, egy úgynevezett digitális kimenetű érzékelőt, mely sorosan küldi ki a hőmérséklettel arányos byte-kat, amit nem kell kalibrálni a tényleges hőmérséklettel nem analóg módon, mér belső A/D konverzióval rendelkezik. A Dallas és Maxim gyártó DS18B20-as nevezetű érzékelő az, ami ezt a funkciókat mind tudja, és a belső A/D konvertere 12 bites, nagyobb, mint a mikrovezérlőjé, ami így sokkal pontosabb.
21
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
3.3. A DS18B20 digitális hőmérő IC A programozható felbontású digitális hőmérséklet mérő szenzorról az adatlapja [5] nyújt magyarázatott illetve jellemzőket.
3.3.1. Főbb tulajdonságai
Egyedülálló 1-Wirevezetékes interfész, elegendő egyetlen port a kommunikációhoz.
Busszra felfűzhető képessége leegyszerűsíti az elosztott hőmérséklet érzékelő alkalmazásokat.
Nem igényel külső alkatrészeket.
Meghajtható adatvonal és tápfeszültség. A tápegység 3.0V és 5.5V lehet.
A mérési hőmérséklete -55 °C és + 125 °C között. Fahrenheit megfelelője -67 °F és + 257 °F, ± 0,5 °C pontosság -10 °C és + 85 °C hőmérsékletek között.
Hőmérő felbontása programozható 9-től - 12 bit-ig.
Hőmérséklet érték 750 ms konverziós idő után.
3.3.2. Az áramkör működése
Maga az eszköz kétfajta tokozási formában kapható Sois, azaz SO8 és a To-92-es. Személy szerint én az utóbbit használtam, a kis mérete miatt. Ami a To-92-re igaz, összesen csak három kivezetése van. Egy tápfeszültség láb; egy Data, azaz adatláb; és egy GND kivezetés. A másik tokozásnál is csak ennyi van, mivel a többi nincs bekötve, csak mechanikai funkciót töltenek be. Az ajánlott kapcsolási rajz bekötések láthatóak a 10. ábrán. Az egyik kapcsoláson a parazita működés látható, ilyenkor csak két vezeték kell a működéshez. A másik rajzon a három vezetékes módszer látható, mikor külső tápfeszültség is kell az érzékelőhöz, itt megjegyezném, hogy pontosabb és egyszerűbb a kivitelezés.
22
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
10. ábra. A DS18B20 áramkör tokozásai és kapcsolási módjai.
A blokk diagramja az 11. ábrán látható. A DS18B20 négy fő része: 1.) 64 bites ROM, melyet lézerrel alakítottak ki, 2.) hőmérséklet-érzékelő, 3.) nem felejtő hőmérséklet riasztást kiváltó TH és TL, 4.) a konfigurációs regiszter.
Az áramkör energiaszükségletét az egy-vezetékes kommunikációs vonalon is tudjuk biztosítani. Alternatívaként a DS18B20 hoz, használhatunk külső tápfeszültséget is, 3V és 5.5V közötti értékkel.
23
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
11. ábra, DS18B20 Érzékelő Blokk diagramja.
3.3.3. A kommunikációs protokoll felépítése és működése A kommunikáció az eszköz és a MASTER NUC140 egység között a DQ lábon keresztül történik, sorosan az egy-vezetékes buszon keresztül. Mindig az LSB bitlép ki először. A kommunikációs protokoll a következő.
Inicializálás
ROM utasítás
Memória/vezérlőutasítás
Adatátvitel
3.3.4. Működtető parancsok Inicializálás
Mikor a buszon adatokat vinnénk át, inicializálni kell az alárendelt eszközt. Az inicializálás során a NUC140 egység RESET jelet ad a buszra, amire az érzékelő egység „jelenlét” (presence) jelet ad ki. Ebből tudja a vezérlő Nuc140 egység, hogy az érzékelő egység készen áll az adatforgalomra.
12. ábra A MASTER RESET és a PRESENCE jel kapcsolata.
24
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
A PRESENCE jel, mely látható 12 ábrán. Detektálása után a NUC140 egységnek ROM utasításokat kell kiadnia, az utasítások 8 bit hosszúak. Ezek az utasítások a következők: Read ROM (ROM olvasás)
[33h]: Ez az utasítás lehetővé teszi, hogy a MASTER egység, azaz a NUC kiolvassa a DS1820as 8 bites család-kódját (10h), a 48 bit hosszú egyedi azonosítót (gyári szám) és az előző 56 bitre vonatkozó CRC kódot mely szintén 8 bites. Ez az utasítás csak akkor ad „értelmes” eredményt vissza, ha egyetlen DS1820 csatlakozik a buszra.
Match ROM (ROM kijelölés)
[55h]: Utasítást követő a mikro vezérlő által kiadott 64 bites adatfolyam, mely kijelöli az aktív eszközt, ha több eszköz csatlakozik a buszra. Az az eszköz lesz aktív, amelyik ROM-nak tartalma megegyezik a kiküldött adatfolyammal. A többi eszköz a következő reset impulzusig inaktív marad.
Skip ROM (ROM „átugrás”)
[CChN]: Utasítási időt takarít meg, ha egy eszköz csatlakozik a buszra, rögtön követheti a memória/vezérlő utasítás. Search ROM (ROM keresés)
[F0h]: Az utasítás lehetővé teszi, hogy több egység esetén is lekérdezze a kontroller a ROM tartalmakat. Az eszközök azonosítása a buszon történik. A ROM keresés a következő 3 lépésből álló eljárás ismétlése:
25
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
a,) Az összes egység kiteszi a buszra a ROM kódjának 0.bitjét, ezt a MCU beolvassa. b,) A következő olvasási lépésben az összes egység kiteszi a buszra a 0.bit invertáltját, ezt a mikrokontroller beolvassa. c,) A MASTER egység meghatározza az érvényes 0.bitet a beolvasott két bit alapján, és ezt kiírja a buszra. Ezzel kijelöli azokat az eszközöket, amelyekre a további lépések vonatkoznak. Az érvényes bit meghatározása a következő eljárás segítségével történik: 00 - a buszon lévő eszközök adott pozíción lévő bitje eltérő, ekkor a master eldönti, hogy melyik értéket tekinti érvényesnek, azt írja ki a buszra, megjegyezve azt, hogy ezen a bitpozíción elágazás van. 01 - az összes buszon lévő eszköz adott pozíciójú bitje 0. 10 - az összes buszon lévő eszköz adott pozíciójú bitje 1. 11 - nincs eszköz a buszon. A fenti 3 lépés ismétlésével meghatározható egy eszköz ROM kódja. Ezután a MASTER újabb „SEARCH ROM” parancsot ad ki, majd figyelembe véve az elágazásokat, a fenti eljárás ismétlésével megtudja határozni az összes eszköz ROM-kódját. Alarm Search
(riasztás keresés) [ECh]: Erre az utasításra az eszköz akkor válaszol, ha az utolsó mérésnél a riasztási feltétel igaz. A riasztási feltétel akkor igaz, ha a mért hőmérséklet a TH regiszterben megadottnál nagyobb, vagy a TL regiszterben megadottnál kisebb. A ROM parancsok után az eszköznek vezérlőutasítást kell küldeni. A SCRATCHPAD (jegyzettömb) felépítése és a benne lévő byte-ok értelmezése a 13. ábrán látható.
26
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
13. ábra A SCRATCHPAD felépítése. A TEMP_L és TEMP_H regiszterek tartalma adja meg a mért hőmérsékletet. Ez csak akkor érvényes, ha az eszköz által a 0-7 byte-ra generált CRC kód megegyezik a MASTER eszköz által (a megadott képlet szerint kiszámított) CRC kóddal (lásd később). A hőmérsékletet előjeles kettes komplemens számként kell értelmezni, úgy hogy TEMP_H összes bitje az előjelbit, TEMP_L 0.bitje pedig a 1/2 fokos helyi érték. A következő két regiszter az alsó és felső riasztási érték beállítására szolgál. Ez az érték egy utasítással átmásolható egy E2RAMba, ami lehetővé teszi, hogy az eszköz a tápfeszültség kikapcsolása után is emlékezzen ezekre. A következő két regiszter fenntartott, értékük olvasáskor FFh. A következő két regiszter lehetővé teszi a hőmérséklet pontosabb meghatározását (jobb felbontás), a következő képlet alapján: Temp = TEMP_L,H - 0,25°C + (COUNT PER °C - COUNT REMAIN)/COUNT PER °C Az utolsó byte az előző 8 byte-ból generált CRC kód. 27
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
3.3.5. A vezérlő byte-ok
Write Scratchpad
(„jegyzettömb írása”) [4Eh]: Az utasítást követő két byte az eszköz TL és TH regiszterének tartalma. Ezzel beállíthatók a riasztási hőmérséklet értékek. Mivel ezek 8 bites regiszterek, ezért csak egész hőmérsékleti értékek adhatók meg riasztási értekként (8 bites, előjeles kettes komplemens számként értelmezve).
Read Scratchpad
(„jegyzettömb olvasása”) [BEh]: A SCRATCHPAD tartalmának beolvasása. Copy Scratchpad
(„jegyzettömb másolása”) [48h]: A SCRATCHPAD TH és TL regiszterének bemásolása az E2RAM regiszterekbe, így 13:41 2015.05.01.az érték a tápfeszültség kikapcsolása után is megmarad. Convert T
(„hőmérséklet konvertálás”) [44h]: Ez a parancs indítja el a hőmérséklet konverzióját. Ha ezalatt olvassuk a buszt 0-t kapunk, ha kész a konverzió, akkor a buszról 1 olvasható. A konverzió ideje kb. 500 ms.
28
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
Recall E2
(„E2RAM előhívása”) [B8h]: Ez az utasítás bemásolja a SCRATCHPAD TH és TL regiszterébe az E2RAM-ban eltárolt riasztási hőmérséklet értéket. Ez a művelet egyébként lejátszódik minden tápfeszültség rákapcsoláskor, így az eszköz mindig tud reagálni az „Alarm SEARCH” utasításra.
Read Power Supply
(„tápfeszültség olvasás”) [B4]: Az utasítást követő olvasási ciklusban, ha az eszköz 1-t helyez a buszra, akkor külső tápfeszültségről (+5V) működik, ha 0-t, akkor az adatvonalról nyeri az energiát és azt a belső (parazita) kapacitásban tárolja. Ha az eszközt az adatvonalról kívánjuk energiával ellátni, akkor azt megtehetjük úgy, hogy a MASTER elemnél egy FET 5V-ot kapcsol az adatvonalra 10μs-ra, ezalatt feltöltődik a belső kapacitás. A feltöltést érdemes megtenni minden konverzió előtt. Ha adatvonalról látjuk el az IC-t, akkor a VCC vezetéket testpontra kell kötni. A módszer 100°C-nál magasabb hőmérséklet mérésénél nem használható. A DS18B20 8 22 konfigurációs regiszter 4. bájt a SCRATCHPAD memória tartalmazza a konfigurációs regiszter, mely a 15. ábrán is látható. A felhasználó beállíthatja az átalakítás felbontását, azaz A/D konvertert, az R0 és R1 bittel ebben a regiszterben, mint azt a 16. táblázat mutatja. A bekapcsoláskor az alapértelmezés szerint ezek a bitek R0 = 1, R1 = 1 (12 bites felbontás).
15. ábra a konfigurációs regiszter bitjeit tartalmazza.
29
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
16. ábra. A felbontáshoz tartozó bitértékek táblázata.
3.4. Az FXOS8700CQ gyorsulás és mágneses szenzor jellemzői és működése Erre a célra olyan érzékelőt választottam, ami nem igényel sok helyet, minimális a külső alkatrész igény, kicsi a mérete. Legfőbb szempont, hogy digitális legyen a kimenete. Kutatási munkám során rá találtam az FXOS8700CQ típusú érzékelőre, mely a Freescale Semiconductor, terméke. Az eszközt számos alkalmazásban is használják, többek közt okos telefonokban és tabletekben is. Az érzékelő adatlapját [6] használtam fel a tulajdonságai ismertetéséhez. FXOS8700CQ egy kicsi, alacsony fogyasztású, három tengelyes lineáris gyorsulásmérő és 3 tengelyes magnetométer egyetlen tokban. A készülék rendelkezik egy választható I2C vagy SPI soros interfészel. A 14 bites a gyorsulásmérő ADC és a 16 bites a magnetométer ADC. Az FXOS8700CQ gyorsulásmérési tartományok ± 2g; ± 4g; ± 8g, mágneses mérési tartomány ± 1200µT. Kimeneti adatsebesség (ODR)-re 1.563Hz és 800Hz között változhat a felhasználás szerint. FXOS8700CQ elérhető egy műanyag QFN tokban, és garantált, hogy működni fog a kiterjesztett hőmérséklet-tartományban, -40 °C és +85 °C között. A tokozása a 17. ábrán látható.
17. ábra. Az érzékelő fizikai mérete, és kivezetéseinek elnevezése.
30
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
3.4.1. Legfontosabb jellemzői
Komplett 6 tengelyes, e-iránytű hardveres megoldással.
1,95V - 3,6V VDD tápfeszültség, 1,62V - 3,6V feszültség VDDIO vonalon.
± 2g; ± 4g, ± 8g gyorsulási mérési tartomány.
± 1200 μT mágneses érzékelő mérési tartomány.
Kimeneti adatátviteli sebesség (ODR)-re 1.563 Hz-től 800 Hz-ig és optimális a 400 Hz.
Alacsony zajszint: <126 µg / ˇHz gyorsulás zaj sűrűsége 200 Hz sávszélesség, <100 nT / ˇHz mágneses zajt sűrűsége 100 Hz sávszélesség.
14 bites ADC felbontással mért gyorsulás.
16 bites ADC felbontás mágneses mérésekre.
Alacsony: 240 µA áramfelvétel 100 Hz, illetve 80 µA 25 Hz, ha mindkét érzékelő aktív.
Beágyazott programozható gyorsításra vonatkozó funkciók: .1. Szabadesés és mozgásérzékelés .2. Átmenetek felderítése .3. Vektor nagyságrendű változás kimutatása .4. impulzusos és érintéses érzékelés (szimpla- és dupla) .5. Tájékozódás érzékelés (álló / fekvő)
Beágyazott programozható mágnesességre vonatkozó funkciók: .1. küszöbérték felderítése .2. Vektor nagyságrendű változás kimutatása .3. Autonóm mágneses minimum/maximum felismerés .4. Autonóm kemény vas kalibráció
Programozható automatikus ODR változás az Automata ébresztő és visszatér alvó funkcióba, hogy energiát takarítson meg. Ez a funkció működik mind a mágneses és mind a gyorsulás esetén interrupt (megszakítás) források által.
32-minta gyorsulási adatok csak a FIFO-ban.
Integrált gyorsulásmérő és magnetométer önellenőrzés funkciók.
Maga az eszköz blokk diagramja a 18. Ábrán látható. Az ábrán jól látható módon színekkel külön elhatárolja a négy fő területrészt, melyek a következők: Érzékelők, I/O vonal és illesztő, Digitális logikai rész, és a tápfeszültség stabilizátorok. 31
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
18. ábra. A hat tengelyű érzékelő blokk diagramja, színjelölésekkel.
Maga az érzékelő működéséhez szükséges külső elemeket a 19. ábrán látható kapcsolás szerint kell bekötni. Itt fontos szempont, hogy a Vdd és a Vddio lábakhoz a puffer 4.7µF kondit és a hidegtő 100nF kondenzátorokat a tervezés során a lehető legközelebb kell elhelyezni a tokhoz, mert csak így váltható ki a kívánt stabil működés. Az áramkörnek a tápfeszültségétől nagyobb feszültséget az i/o vonalra nem ajánlatos kapcsolni, tehát olyan illesztést kell alkalmazni, ami ezt nem haladja meg.
19. ábra. Az érzékelő kapcsolási rajza, a külső elemek használatával.
32
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
Felhúzó ellenállásokat SCL/SCLK-t azaz az SDA/MOSI nem szükséges használni, ha a készüléket SPI interfész módban használjuk. Felhúzó ellenállásokat Int1 és INT2 nem kötelezőek, ha ezek a kivezetések vannak beállítva a push/pull (alapértelmezett) működésben.
3.4.2. Érzékenysége Érzékenység gyorsulásmérésben mg/LSB és µT/LSB a magnetométerben. A magnetométer érzékenység fixen 0,1 µT/LSB. A gyorsulásmérő érzékenység változik, ha a teljes körű tartományt a felhasználó választja ki. Gyorsulásmérő érzékenységek: 0,244 mg/LSB 2g módban 0,488 mg/LSB 4g módban, és 0,976 mg/LSB 8g módban.
3.4.3. Nulla-G és Nulla-fluxus ofszet A gyorsulásmérő, nulla g ofszet leírja az eltérés a kimeneti értékek az ideális értékek között, ha az érzékelő álló helyzetben van. Egy gyorsulásmérő stacionárius sík vízszintes felületen, az ideális kimenet 0g az „X” és „Y” tengelyek és 1g a „Z”- tengely. Az eltérések az egyes kimeneteknél az ideális érték az úgynevezett 0g-nél ofszetben jelentkezik. Az ofszet bizonyos mértékig a rezgés hatására az érzékelő pontatlan. Felszerelés után lehet kicsit korrigálni a szenzoron, hogy pontosabban mérjen. A magnetométer, nulla fluxus ofszet leírja az eltérést, a kimeneti jeleket a nullától, ha az eszköz árnyékolva van a külső mágneses mező forrásoktól (vagyis belül nulla gauss kamra).
3.4.4. Önellenőrző teszt Önellenőrzést lehet használni, hogy ellenőrizze a jeladó és jellánc funkciókat anélkül, hogy alkalmazna gyorsulást vagy mágneses térerősséget. Amikor a gyorsulásmérő önteszt aktiválva van, egy elektrosztatikus működtető erő hat az érzékelőre. Ebben az esetben az érzékelő X, Y, Z kimenetei mutatnak változást. A DC szint összefügg a kiválasztott teljes körű tartomány érzékenységgel. Amikor az önellenőrzés aktiválódik, a készülék kimeneti szintje által adott algebrai összege adja az előállított jeleket. Amikor az önellenőrzés aktiválódik a magnetométeren, egy belső mágneses mező keletkezik az X, Y és Z tengelyek mentén. Az
33
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
érzékelő kimeneti értéke lesz a környezeti mágneses mező és az önellenőrzés kiváltott mező összege.
3.4.5. Kommunikáció I2C mód működés A működés részletezéséhez elsőként nézzük meg a jelek idődiagramjai értelmezését, illetve az idejüket a 20. táblázatban összefoglalva, hogy melyik időrés meddig tart. A táblázatott a „G” ábrán láthatjuk.
20. ábra Az I2Ckommunikáció során használatos idők táblázatban.
Két jel kapcsolódik az I2C buszhoz: a soros órajel (SCL) és a soros adat vonal (SDA). Az utóbbi egy kétirányú az adatokat küldésére és fogadására képes. Külső felhúzó ellenállások csatlakoznak VDDIO tápfeszültséghez és az SDA és SCL vonalhoz. Amikor a busz szabad mindkét vezeték magas impedanciájú. Az I2C interfész kompatibilis a gyors üzemmódban (400 kHz), és normál módban (100 kHz) is az I2C szabványnak megfelelően. A működés frekvencián magasabb, mint 400 kHz lehetséges, de több tényezőtől függ, beleértve a felhúzó ellenállás értékét, és a teljes buszkapacitást (trace + készülék kapacitása).
34
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
Az adatáramlást a buszon keresztül a START (ST) jellel kezdődik, amely a meghatározás szerint, magas-alacsony átmenet. A lefutó él az adatvonalon, miközben az SCL az órajel a magas szinten van. Miután a ST jel továbbításra került a MASTER, vagyis a mikrovezérlő, a buszon adatforgalmat bonyolít le. A következő továbbított bájt adat tartalmazza a SLAVET, azaz az érzékelő címét. Az első hét bitet, és a nyolcadik bitet, amely az író / olvasó bit. Ez azt jelzi, hogy a mester adatokat fogad vagy adatokat fog továbbítani a MASTER felé. Amikor egy cím kiküldésre kerül, az egyes eszközök összehasonlítják a saját címével az első hét bitet, mely az ST jel után van. Ha a címek azonosak, a készülék tekinti magát a masternek. A kilencedik órajel követően a SLAVE cím byte és minden további byte-ra visszaigazolja (ACK) jel formában a MASTER felé. Az adónak kell szabadon hagynia a SDA vezetéket a ACK időszakban. A vevő ezt követően húzza az adatsort alacsony szintre, A több byte-os adatátvitel korlátlan. Ha a vevő nem tud fogadni egy újabb teljes byte-t adatot, míg nem végzett el más funkciókat, akkor képes tartás módba hozni az órajel vonalat,. Az SCL alacsony szinten tartása kényszeríti az adót várakozási állapotba. Adatátvitel csak akkor folytatódik, ha a vevő készen áll a következő byte fogadásra, illetve felszabadítja az adatsort. Az alacsony és magas átmenet, vagyis a lefutó él az SDA vezetéken, miközben az SCL magas szinten van az a leállás helyzetét a STOP (SP) jelet jelenti. Az írást vagy többszörös írást nem mindig bontja a mester kiadott SP jellel. A MASTERT megfelelően kell konfigurálni, mert olvasás közben nem nyugtázza, hogy byte érkezett a megfelelő időben. A MASTER is adhat egy ismételt START jelet (SR) a továbbítás során. A SLAVE címet is hozzá kell rendelni a FXOS8700CQ része a 0x1C, 0x1D, 0x1E, vagy 0x1F. A választást megkönnyíti a logikai szinten a SA1 és SA0 bemenet, melyet az 21. táblázat mutat.
21. ábra a címzés beállítása a külső kivezetéseken.
35
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
Írás és Olvasás műveletek:
Egyszeri byte olvasás A MASTER (vagy MCU) továbbítja a start jelet, vagy állapotot (ST) a FXOS8700CQ, amelyet, a SLAVE címet, és az R/W bitet tartalmazza "0" esetén írási műveletet jelent, és a FXOS8700CQ nyugtázó üzenetet küld (ACK). Ekkor a MASTER (vagy MCU) továbbítja a regiszter címét és azt, hogy olvasni akar a regiszterből, erre az FXOS8700CQ szintén nyugtázó üzenetet küld. A mester (vagy MCU) továbbít egy ismételt START jelet (SR), amely a SLAVE címet és az R/W bitet „1" –be állítja, ekkor a már korábban kiválasztott regisztert jelenti. Az FXOS8700CQ tudomásul veszi és továbbítja az adatokat a kért regiszterből. A MASTER nem igazolja vissza (NAK) a továbbított adatokat, de továbbítja a leállás jelet a Stop (SP)-t, hogy véget érjen az adatátvitel. Az adatfolyamatot a következő 22. ábra is igazolja.
22. ábra a single adat olvasási mód idő diagramja.
Többszörös byte olvasás Amikor több byte-os vagy "sorozat bitküldés" olvasást végez, a FXOS8700CQ automatikusan növeli a regiszter címét tartalmazó mutatót, miközben olvasási parancs érkezett. Ezért, miután a lépéseket követve egy byte-os olvasásokból, több byte adat leolvasható egymás után (szekvenciálisan). A regiszterek után FXOS8700CQ nyugtázás jel (AK) érkezik, amíg meg nem érkezik a nem nyugtázás jel (NAK), mely után a MASTER, majd a leállítás bit (SP) jellel jelzi az olvasás művelet adásának végét. A többszörös, vagy a „MULTIPLE” adatolvasás idődiagram az 23. ábrán látható.
36
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
23. ábra a többszörös adat olvasás idődiagramja.
Egyszeri byte írási művelet A kezdés szintén egy írási parancs, melyet a MASTER továbbít start állapotot (ST) majd az FXOS8700CQ, címé és az R/W bitet "0"-ba az írás műveletbe, és az FXOS8700CQ nyugtázó üzenetet küld. Akkor a MASTER (vagy MCU) továbbítja a regiszter címét, hogy írjon a regiszterbe, és a FXOS8700CQ nyugtázó üzenetet küld. Akkor a MASTER (vagy MCU) közvetíti a 8 bites adatot, mely bele íródik a kijelölt regiszterbe és az FXOS8700CQ küld egy visszaigazolást, hogy megkapta az adatokat. Mivel ezt a vevőnek, a MASTER továbbítja a leállás jelet az (SP), hogy véget vessen az adatátvitelnek. Az elküldött adatokat a FXOS8700CQ jelenleg tárolja a megfelelő regiszter. Az adatírási műveletet a 24. ábrán látható idődiagram is szemlélteti.
24. ábra Az egyszeri írás művelet idődiagramja jelmagyarázattal kiegészítve.
Többszörös byte írás A FXOS8700CQ automatikusan növeli a regiszter címző mutatóját miközben írási parancs érkezett. Ezért, minden lépést követve egy byte-os írási vagy több byte-os adatot lehet írni egymás után. Majd az FXOS8700CQ nyugtázó üzenetet küld (ACK). Végezetül a master lezárja Stop paranccsal az írási műveletet, mint ahogyan azt az 25. ábra is mutatja. 37
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
25. ábra. A többszörös írás művelet idődiagramja látható.
3.4.6. SPI kommunikáció Az FXOS8700CQ csak akkor támogatja egy ponttól pontig az SPI protokollt, ha csak egy master (MCU) és egy slave eszközt (FXOS8700CQ) csatlakoztatunk a buszra.
Az
FXOS8700CQ MISO kivezetése nem háromállapotú (Tree-State), amikor a CS_B kivezetése deasserted logikai magas szinten van, ami oda vezethet, hogy egy buszon konfliktus következhet be, ha több slave eszközök vannak jelen a buszon. Nem ajánlott több master és slave eszközt csatlakoztatni az SPI buszra. A CS_B kivezetést az adatkommunikáció elején alacsony szinttel kell meghajtani, ekkor megkezdődik az SPI adatkommunikáció, de az adatáramlás alatt is alacsonyan kell tartani, mert ha magas szinttel hajtjuk meg akkor az adatkommunikáció befejeződik. A kommunikáció során a mester átváltja az SPI órajelre SCLK kivezetést, és továbbítja az adatokat a MOSI lábon keresztül. Egy írási művelet alatt kezdeményezett adattovábbítás az első R/W bittel, mely logikai 1. és egy 8 bites regiszter 7 bitjével kezdődik. Ezután a 8-bites regiszter címének, ADDR [7] bitje bele van kódolva a második byte-ba. Az írandó adatok a harmadik byte sorozatban kezdődnek. A bitek sorrendjét a következő 26. ábra is mutatja.
26. ábra. Az írás közbeni byte sorrendek.
38
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
Többszörös byte adatot lehet továbbítani. Az „X” azt jelzi, hogy az eszköz figyelmen kívül hagyja azt a részt. A regiszter cím automatikusan növekszik, így a következő órajel él hatására lépteti át az adatokat a következő regiszterbe. Ha szükséges, a felfutó él CS_B lábon keresztül leállítható az SPI kommunikáció. Olvasási műveletnél az adás az R/W bit a legelső szintjén 0-ba kell állítani. Ezután a 8-bites regiszter címének 7 bitje az ADDR [6:0], a 7. bit bele van kódolva a második sorozat byte-ba az MSB helyén. Későbbi biteket nem veszi figyelembe. A kiolvasott adatok a MISO kivezetésen történik majd egymás után. Ugyanígy egy írási művelet adását az R/W bit 1-be állításával kezdődik. Az első és a második sorozatban byte-ban lehet átadni az egymást követő regiszterek címét, kezdve a jelzett regiszter címével ADDR [7:0]. Egy SPI kommunikáció által kezdett adatmozgás a CS_B kivezetés lefutó él (magas-alacsony átmenet) által történhet, és végül a CS_B láb (alacsony és magas átmenet) felfutó éllel zárul. Maga az SPI busz rendszerhez az alábbi táblázatban megadott időket és a kommunikációs vezetékeken fellépő idő alakokat kell figyelembe venni, melyeket a 26. táblázat és 27. ábra mutatja az idődiagramon.
26. táblázat az SPI vonalon lévő jelek idő értékei.
39
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
27. ábra Az SPI vonal idődiagramja. A MOSI és MISO elnevezés a működési funkciójáról kapták a nevüket: MOSI= Master output és Slave input szavak kezdőbetűiből tevődnek össze. MISO = Master input és Slave output szavak kezdőbetűiből tevődnek össze.
3.5. Az SD kártya interfész hardveres működése A kártya interfész hat regiszterekből áll, meghatározása: OCR, CID, CSD, RCA, DSR és SCR. Ezekhez hozzá lehet férni a megfelelő parancsokkal. Az OCR, CID, CSD és az SCR regiszterek hordozzák a kártya / tartalmat adott tájékoztatást, míg az RCA és a DSR regiszterek a konfigurációs regiszterek, ahol tárolják az aktuális konfigurációs paramétereket. A 32 bites működés, feltételeit regiszter tárolja, a VDD feszültség profilja a kártyát. Ezen kívül ez a regiszter tartalmaz egy állapot információ bitet is. Ez az állapot bit be van állítva, ha a kártya bekapcsolás eljárás már befejeződött. Az OCR regiszterben kell beállítani a kártyákat, amelyek meg nem támogatják a teljes üzemi feszültséget a megfelelő tartományban. a A kártya bekapcsolásakor kiterjesztheti az idődiagramra is.
40
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
OCR regiszter
A feszültség tartomány nem támogatott, ha a megfelelő bit értéke túl alacsonyra van állítva. Mindaddig, amíg a kártya foglalt, a megfelelő bit (31) van beállítva, hogy ALACSONY. CID regiszter
A kártya azonosítására a (CID) regiszter szolgál, ami 128 bit széles. A kártya azonosító adatait az azonosítási szakaszban olvassa ki az MCU. Minden egyes flash kártya rendelkezik egy egyedi azonosító számmal. A szerkezetet a CID regiszter határozza meg a következő táblázat szerint.
41
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
MID regiszter
Egy 8 bites bináris szám, amely azonosítja a kártya gyártóját. A MID szám ellenőrzött, meghatározott és elkülönített, egy SD memóriakártya gyártó által. Ez az eljárás, amely biztosítja az egyediségét a CID- nyilvántartásban. OID regiszter
Az A/2 ASCII karakterlánc, amely azonosítja a kártyát OEM és / vagy a kártya tartalmát (használják a terjesztési médiumok akár ROM-on vagy flash kártyánként is). Az OID számot meghatározzák a gyártók, melyet egy SD memóriakártya gyártó SD (Group) csoport végez el. Ez az eljárás szintén biztosítja a kártya egyediségét a CID- nyilvántartásban.
PNM regiszter
A termék neve egy STRING, amely 5 ASCII karakter hosszú.
42
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
PRV regiszter A termék felülvizsgálata áll két binárisan kódolt decimális (BCD) számjegyből, négy bit minden, reprezentáló "nm" revízió száma. Az "n" legfontosabb nibble és "m" a legkevésbé jelentős. Példaként a PRV bináris értéket a termék felülvizsgálata "6.2" lesz: 0110 0010
PSN regiszter
A gyári szám, amely 32 bites bináris szám.
MDT regiszter
A gyártás dátumát jelzi a két számjegy, az egyik 8 bit az évet reprezentálja (y), a másik négy bit pedig a hónapot (m). Az "m" mező [11: 8] hónap kódot. 1 = január. Az "y" mezőben [19:12] az év kódot. Példaként a bináris értéke a dátumnak a mező gyártás dátuma "Április 2001" lesz: 00000001 0100.
4. A kisméretű NUC140 MCU-t tartalmazó mérésadatgyűjtő berendezés hardverjének megtervezése
A mérésadatgyűjtő mérő eszköz projekthez a következő alkatrészeket fogom felhasználni egyesekről már írtam az előző részekben is:
Digitális hőmérséklet mérő IC DS18B20 TO-92 tokozású.
FXOS8700CQ Digitális accelerométer és magnetométer érzékelő mely 6 tengelyes és QFN tokozású.
Valós idejű óra IC és elemei DS1302 nevet viseli és SO8-as tokozású. 43
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
MAX232W IC a soros kommunikációért fog felelni, SO16W tokos.
Micro SD kártya és foglalata.
Tápfeszültséget előállító stabilizátorok 78L05 és 78L33 TO-92 tokozásúak.
Nyomó gombok, melyek a helybeni beállítást teszik lehetővé.
LED diódák a tápfeszültséghez és az állapotok kijelzésére.
Csatlakozók a gombokhoz és a soros kommunikációhoz és az érzékelőkhöz.
Nuvoton mikrovezérlő NUC140VE3CN LQFP tokozású.
További járulékos alkatrészek, mint az elem az ellenállások, kondenzátorok kvarcok.
4.1. A mérés-adatgyűjtő ismertetése A mérésadat-gyűjtő kompletten egy detektor műszer házba helyezem el. Az adatgyűjtő állandó tápfeszültségről üzemel. A mérésadat-gyűjtő blokk diagramját az 28. ábrán láthatjuk. CD/DAT3
NYOMÓGOMBOK TÖRLÉS
-
0
+
RÖGZÍTÉS
CMD
SD KÁRTYA CLK DAT0
DS1302
SCL I/O CE
RTC
PA.4 PA.3 SPI1 DO_0
PA.2
PA.1
PA.0
SPI1
CSO SPI1 CLK
PD0
SPI1 DI_0 1.
RÖGZÍTÉS FUT LED
2.
PROGRAM FUT LED
3.
ÉRZÉKELŐ HIBA LED
PE.0
PD1
PE.1
PD2
PE.2
NUC140VE3CN
PC.4
DS18B20 HŐMÉRSÉKLET MÉRŐ IC
TX0
RX0 I2C_0 SCL I2C_0 SDA
SZINTÍLESZTŐ MAX232DW
PC RS232 CSATLAKOZÓ SCL/SCLK SDA/MOSI
FXOS8700CQ
28. ábra A mérés adatgyűjtő elvi blokk vázlata.
A mérésadat-gyűjtőre névleges 12V-ot kell rákötni, így szinte bárhol üzemeltethető lesz. Az autókban, számítógépekben, de legfőképp speciálisan mérő berendezésekhez használjuk. Méréseknél könnyen megoldható a feszültség előállítása. A berendezés minimum 7V tápfeszültségtől kezd el stabilan működni, ezért akkumlátoros megoldásról huzamosabb ideig 44
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
is üzemeltethető. Tápfeszültség hiányában, ha esetleg megszűnne a feszültség, akkor sem kell az óra idejét újra és újra beállítanunk, mert egy külső csekély energiafelhasználású IC-nek (DS1302) köszönhetően, hiszen ez egy CR2032 elemről üzemel ezáltal nem áll meg az óra és a tápfeszültség visszakapcsolásakor ott folytatódik a rögzítés időben, pontosságban ahol kell.
4.1.1. A mérés-adatgyűjtő tápegysége A mérés-adatgyűjtő stabil tápfeszültségét a 78L05 és a 78L33 stabilizátor IC-k állítják elő. A 78L05 IC bemenetére maximum 30V-os feszültséget kapcsolhatunk, de ekkor már erősen disszipálódik, ezért maximum 20V-ig ajánlott kapcsolni rá. A 12-15V a normális, mivel LDO (Low Drop Out) azaz, alacsonyabb bemeneti feszültség mellett is tudja tartani a stabil kimeneti feszültséget. Az LDO értékét az adatlap tartalmazza, ami általában 2V. Az 5V-ot előállító stabilizátor kimenetét egy 10µF-es tantál kondenzátorral és egy 100nF-os kondenzátorral megszűröm a nagy frekvenciás zavarokat, majd ebből állítom elő a 78L33 stabilizátorral a +3.3V-ot. Itt is elengedhetetlen az LDO-s változat ugyan is itt 5V-ból kell a 3.3V-ot előállítanom. A 3.3V-ot is megszűröm 10µF puffer kondenzátorral és egy 10nF-os hidegítő kondenzátorral, a nagyobb frekvenciás zavarok ellen. Azért, hogy biztonságosabb legyen a műszer, gondolva itt a kondenzátor robbanásra vagy valamilyen zárlat miatti meghibásodásra, elsősorban 16V-os kondenzátorokat használok. A bemeneti táp ingadozások miatt 22µF és egy 100nF-os kondenzátort helyezek be a megfelelő szűrés érdekében, viszont itt már 25V-os kondenzátorokat használok.
4.1.2. Az RTC áramkör és a NUC140 huzalozása Az RTC áramkört, azaz a külső óra áramkör IC-je a NUC140-nek a PD0, PD1, és PD2 portjával fog tudni kommunikálni. Fizikailag nézve ez a 81,82 és a 83. kivezetése, igaz ez az SPI vonal is egyben, ami az SD kártyához kellene, de ez a kontroller 4 SPI vezérlőt tartalmaz, így ezenkívül az SD kártyát még használhatom. A következő ábrán látható a blokk diagramnak az ide vonatkozó része.
45
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
29. ábra Az RTC c huzalozása a „Blokk” ábrán Ahogyan a képen is ábrázoltam a blokk diagramban, a NUC140 PD0 lába az RTC SCLK kivezetésére csatlakozik, ami az órajel, melyet a NUC140 fog szolgáltatni. A PD1 lett az adatvonal, melyen az adatokat közvetíteni vagy fogadja az eszköz az órajellel szinkronban. A PD2 kivezetés engedélyezni az DS1302 áramkör kommunikációját a CE kivezetésén keresztül. A DS1302 áramkör „X1” és „X2” kivezetésére került a 32.768Khz-es kvarc, mely az órapontosságáért felelős. A két kvarc kivezetését két hidegtő kondenzátort is kapcsoltam a földhöz képest, egyenként 20pF-os kapacitásúak. A Vcc1 lábára került a 3V-os elem pozitív pólusa és a Vcc2-re pedig a +5V melyet megkapta a NUC140 is.
4.1.3. Az FXOS8700 és a NUC140 összekötése A gyorsulásmérő és mágnesesség mérő szenzor tudja az SPI és az I2C kommunikációt is, de mivel SPI -vel fog kommunikál az SD kártya, ezért ide a jól bevált I2C kommunikációs buszt használtam fel. A NUC140 2 darab I2C busz vezérlőt tartalmaz, én az elsőt, azaz 0-s jelzésű I2C választottam, mely fizikailag a 11. és a 12. kivezetésén van. Értelemszerűen a NUC140 SDA kivezetését az érzékelő SDA/MOSI lábához kapcsoltam, és az SCL kivezetését pedig az érzékelő SCL/SCLK lábához, ami fizikailag a NUC140 11. kivezetése és az FXO8700 4. lába és a 12. kivezetés az a 6. lába az érzékelőnek. Maga az érzékelő kommunikációs kivezetéseit az adatlapjából megköveteli, hogy a kommunikációs vonal tápjához húzzam fel. Ezért én egy 4.7 KΩ -os ellenállással a +3.3 V- hoz húztam fel, mivel az érzékelő maximum 3.7-V-al működhet. Az érzékelőhöz a 3.3V-os tápfeszültség választottam. Felmerült a kérdés, hogy ha az érzékelő kommunikációs vonalán maximum 3.3V lehet akkor, hogy tud kommunikálni az 5V-tal működő NUC140 el. A NUC140 adatlapja szerint támogatja még azt a jelszintet is, 46
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
amely a 3.3V hatására lép fel az adatvonalon. Van olyan alkalmazás, ahol a NUC140 3.3V-os tápfeszültségről üzemel. Az érzékelő adatlapja szerint nem kell behuzalozni és felhúzni a tápra az INT1 és INT2 kivezetéseit I2C kommunikációs protokollban. Az IC 2. kivezetéseit, azaz a BYP és a 8. CRST kivezetéseit egy kondenzátorral, mégpedig egy 100nF-al le kellet kötnöm a földre. A tápfeszültség kivezetéseit pedig szűrés miatt egy 100nF és egy 10µF-os kondenzátort kapcsoltam a földhöz képest, közel elhelyezve az érzékelőhöz. Az érzékelőt címezni kell, és ezek a címek külsőleg beállíthatóak. Ezért I2C buszon négy darab ilyen érzékelő kezelhető. Ahhoz, hogy sokoldalúan tudjam használni az érzékelőket, három darab FXOS8700-as érzékelőt kellet egyszerre csatlakoztatnom a buszra. Ahhoz, hogy ezeket csatlakoztatni tudjam, három db 4 pólusú csatlakozóra volt szükségem. Ezek a csatlakozók kisméretű nyákba forrasztható sorkapcsok, melynek az 1. kivezetésére kerül a +3.3 V a 2. kivezetésére az SCL jel és a 3.-ra az SDA adatvonal a 4. pedig a test lába és melyeket párhuzamosan kötöttem össze. Az 1. érzékelőt a 0x3E címre kötöttem be az SA0 és az SA1 kivezetésekkel, úgy hogy mind a kettőt testre kellett húznom.
4.1.4. A NUC140 soros kommunikációja A soros kommunikációhoz szükség volt egy szint illesztőre azért, hogy távolabbról is lehessen vezérelni, illetve adatleolvasást lebonyolítani akár egy terminálon keresztül. Az illesztés azért szükséges, mert egy asztali számítógép ±10 V-os jelszinttel dolgozik és ott -10 V a logikai ’’0” és +10 V a logikai ’’1”. A NUC140-nek +5 V a magas szint és 0 V az alacsony szintje, ezért illesztést kellet megvalósítanom. Erre a célra kifejlesztettek céláramköröket, ilyen például a MAX232CWN IC-t amely +5 Voltból képes előállítani +10 V-ot és -10 V-ot a belső komparátorainak. Ez az IC a kívánt feszültségeket külső segéd kondenzátorokkal képes előállítani. Az IC adatlapjában [7] a gyártó által meghatározott értékeket és a kapcsolási rajzot használtam fel. A NUC140 soros kommunikációs kivezetései az RX és TX, mely fizikailag a 32. és a 33. kivezetése. Mivel a MAX 232 IC két soros vonalat tud illeszteni, ezért én az elsőt használtam fel, így az illesztő áramkör 11. T1IN kivezetését kötöm össze a NUC140 33. kivezetésével. A NUC140 32. kivezetését az illesztő 12. R1OUT kivezetéséhez kötöttem hozzá. Az illesztő IC kimeneti oldalán a T1OUT azaz a 14. kivezetése és a R1IN 13. kivezetéseit egy három 47
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
kivezetéses nyákba ültethető sorkapocsba kötöttem, melynek 1. tüskéje a test, 2. a TR és a 3. pedig az RV. A TX az TRANSMITTER azaz adó, az RX a RECEIVER, azaz vevő kivezetések.
4.1.5. A hőmérsékletérzékelők és a NUC140 kapcsolata A hőmérséklet érzékelő IC egy vezetéken kommunikál a NUC140 el. Nem közvetlenül a panelon helyeztem el, hanem egy összekötő kábellel csatlakoztattam a panelhez. Erre azért van szükség, hogy az érzékelőt pont oda lehessen helyezni ahol pontosan mérnie, kell a hőmérsékletet. Az érzékelőnek szüksége van egy +5 V-ra, egy testre illetve egy adatvonalra. Mivel az érzékelő lehetővé teszi, hogy egy és ugyanazon a vezetékbuszon több ilyen hőmérséklet mérő érzékelő tudjon kommunikálni ezért úgy, mint a gyorsulás szenzornál három darab három kivezetéses panelbe forrasztható sorkapcsot használtam párhuzamosan összekötve. A csatlakozó 1. kivezetése egy 100mA biztosítékon keresztül csatlakoztattam a +5 V-hoz. Védelmi okokból szükség van erre a biztosítékra, mert ha valamelyik érzékelő esetleg meghibásodna vagy bezárlatosodna, akkor is tud majd működni a NUC140, mert a zárlat a biztosítékot megszakítja. A csatlakozó középső az a 2. kivezetése lett a kommunikációs vonal, melyet a NUC140, PC4-es portja, ami fizikailag a 41. kivezetéséhez csatlakozik. A csatlakozó 3. kivezetése pedig a test. A kommunikációs buszt az érzékelő megköveteli, hogy egy 4.7 KΩ ellenállással a tápra húzzam fel.
4.1.6. Az SD kártya és huzalozása a NUC140-el A rögzítés egy memória kártyára fog történni méghozzá a helyigény miatt Micro SD - re. A kártya a NUC140 el SPI protokollon kommunikál méghozzá a másodikon az 1. SPI vezérlőn keresztül, melynek a bekötését egy SD kártya adatlapja szerint valósítottam meg SPI kommunikáció során. A kapcsolási rajzot és a nyáktervet az EAGLE 6.5 verziójú kapcsolási rajz és nyákrajz szerkesztővel terveztem meg. Elsőnek is a programot mutatom be.
48
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
4.2. Eagle nyáktervező szoftver A program elindítása után egyből a kontrol panel fogadott, ahol létrehozhattam, vagy betölthettem projekteket, kapcsolási rajzokat, nyákrajzokat, stb. illetve alkatrészkönyvtárakat is. Az új projekt után létre kellet hoznom egy schematikot, azaz kapcsolási rajzot, ahol megnyílt, egy ablak mely a munkapad ahol szerkeszthettem a kívánt áramkörömet. A munkapad tartalmazza a rajz területet a menü sort, az eszköztárat. A munkalap a 30. ábrán látható, külön kiemelve a kapcsolási rajzhoz tartozó eszköztárt és a nyáktervező részén található eszköztárt.
30. ábra Az Eagle kapcsolási rajz szerkesztője. Oldalt az eszköz tár felet kis pontokból álló kocka ikonra kattintva jutottam el a GIRD, azaz a rács tulajdonságokhoz, ahol be tudtam állítani a rácspontok távolságát, illetve a mértékegység rendszert, hogy mil vagy inch, vagy mm legyen, illetve hogy látható legyen a rács vagy sem. Továbbá, hogy vonalas vagy pontozott legyen. Majd az eszköztárból kiválasztottam az ad parancsot. Az alkatrészkönyvtárból választhattam ki az alkatrészeket, a közös test pontot jelképező rajzokat, illetve a tápfeszültség pontokat, ellenállásokat, kondenzátorokat stb. A megfelelő alkatrész kiválasztásakor az ablak jobboldalán két kisablakban látható a rajzjele, a másikban a layoutja azaz láblenyomata, alul pedig a leírása. Majd az ok gombra kattintottam lerakhattam a rajzfelületre a kívánt alkatrész. Míg nem kattintottam, addig aktív az ADD, parancs ekkor a kurzorral együtt mozog a területemen az alkatrész a jobb egér gombbal forgatható. A többi alkatrész letétele után össze kellet őket huzalozni melyet a „WIRE” paranccsal tudtam vagy az eszköztárból a menü/Rajzolás pontból is elérhető. Ha valamit rossz helyre kötöttem, akkor azt a „CUT” ollós ikonra kattintottam majd a kijelölt elem, vezeték 49
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
törölhető volt. Az alkatrészeknek az értéküket pl.: ellenállásoknál a „VALUE” paranccsal adhattam, ekkor egy kis ablak ugrott be a kívánt alkatrésznél és itt megadhattam az értékét pl.: 5 K, ami 5 KΩ jelentette hasonlóképen jártam el más alkatrészeknél is.
4.2.1. A DRAW parancs Menü /TEXT parancsa egy ablak nyílt meg, melybe tetszőleges szöveget írhattam. Az OK gombra való klikkeléssel a beírt szöveg a kurzorhoz ragadt, mellyel a szöveg a munkafelület tetszőleges helyére helyezhettem el. Klikkelés után a szöveg az adott helyen maradt.
4.2.2. INVOKE parancs Az INVOKE parancsnak többféle értelmezése van. Abban az esetben is használhattam, amikor egy alkatrészt az előre meghatározott tápfeszültségtől eltérő feszültséggel kell táplálnom. Például a 74LS00a-nél, amelyet az előzőekben már a rajzba helyeztem, a betáplálást a következőképpen módosíthattam: Aktiváltam az EDIT menüből az INVOKE parancsot és kiválasztottam a bal egérgombbal egy kaput. A megjelent ablakban kiválasztottam a PWRN szimbólumot és nyomtam egy OK gombot. A kurzornál megjelentek a betáplálási pontok, amelyeket a kívánság szerint helyezhettem el. Ezeket a pontokat bármelyik jelhez (tápfeszültség) kapcsolhattam.
4.2.3. NAME parancs A NAME (ikon, EDIT menüpont) parancs az összekötések (net name), sínek vagy alkatrészek (Reference Designator) neveinek módosítására szolgált. Aktiváltam a NAME parancsot és klikkeltem bármely összekötésre – egy ablak jelent meg az összekötés nevével, melyet módosíthattam, majd megnyomtam az OK gombot. Azonos módon módosíthattam az egyes alkatrészek neveit is. A program nem engedélyezi az alkatrészek kettőzött elnevezését. Ellenben, az összekötések, amelyek nem voltak láthatóan összekötve,
50
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
kaphattak
azonos
nevet,
ami
során
az
azonos
névösszekötések
automatikusan
összekapcsolódtak. Ezt használhattam ki abban az esetben, amikor a kapcsolási rajzom többoldalnyi terjedelmű és a másik oldalon folytatódót, az összekötéseket az azonos elnevezéssel oldottam meg.
4.2.4. LABEL (megjelölés) parancs
A LABEL (ikon, EDIT menüpont) az egyes összekötések neveinek láthatóvá tételére szolgált. Aktiváltam a LABEL parancsot és klikkeltem valamelyik összekötésre, a kurzor mellett megjelent az összekötés neve, amelyet a bal egérgombbal való klikkelés után bárhol elhelyezhettem. A jobb egérgombbal a szöveget 90 fokonként forgathattam. Amennyiben az összekötés nevét utólag módosíthattam, a látható szöveg is automatikusan megváltozott. Ez a látható szöveg a CHANGE-TEXT paranccsal nem volt módosítható, mert a szöveg az összekötés valódi nevével azonos, csak a NAME paranccsal lehetett módosítani. A betű mérete és fontja azonban módosítható volt a CHANGE-SIZE és CHANGE-FONT parancsokkal.
4.2.5. NYÁK lap generálása a kapcsolási rajzból
A kapcsolási rajz elkészítése, vagy egy kapcsolási rajz betöltése után a BOARD parancs (ikon) segítségével tudtam automatikusan a NYÁK tervezéshez jutnom. A program a NYÁK tervezéséhez szükséges információkat (alkatrészek és azok kapcsolásai, tehát a PARTLIST és NETLIST) a kapcsolási rajzból automatikusan generálta, elindította a nyomtatott huzalozás szerkesztőt és az alkatrészeket, azok összekötéseivel a NYÁK lap körvonalán kívül helyezte el (ez egy fiktív áramkör).
4.2.6. Az alkatrészek elhelyezése (Component Placement)
Klikkeltem a Zoom-to-Fit ikonra, hogy a kép kitöltse az egész munkafelületet. Az alkatrészek a keret bal oldalán helyezkedtek el. Aktiváltam a MOVE parancsot és klikkeltem a legnagyobb integrált áramkör közepére és helyeztem át a kurzort a kereten belülre. A kiválasztott alkatrész
51
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
a kurzor mozgásával együtt helyezkedet át. A jobb egérgombbal való klikkeléssel az alkatrész 90 fokkal elfordult. A légkötések (airwires) szintén az alkatrésszel együtt mozogtak és mindig a megfelelő kivezetéshez kapcsolódva maradtak. Az alkatrész elhelyezéséhez klikkeltem a megfelelő helyre. Hasonlóan helyeztem el a többi alkatrészt is.
Kézi huzalozás (Routing Manually)
A kézi huzalozáshoz a ROUTE parancsot (ikon, EDIT menüpont) használtam, mellyel a kiválasztott légkötést nyomtatott huzalozásra változtattam. Aktiváltam a ROUTE parancsot és klikkeltem valamelyik légkötés elejére. Tetszés szerint húztam a kurzort, miközben a légkötés nyomtatott huzalozásra változott. Klikkeléssel sarkot hozhattam létre és a kívánt irányban folytathattam. Kettős klikkeléssel ideiglenesen befejeztem a huzalozást, a ROUTE parancs mindvégig aktív maradt és egy másik huzallal folytathattam.
4.3. A tervezés menete Az Eagle-t megnyitva a kontrol panel fogadott, majd a menü sorból kiválasztottam az új projektet, majd a kapcsolási rajzot, mely utóbbit szakdolgozat néven mentettem le. Ekkor egy üres rajzterület fogadott, ahol elkezdhettem felépíteni a kapcsolást. A rajz elkészítését az alkatrészek kikeresésével, majd lerakásával kellett kezdenem. Ehhez rá kellet kattintanom az eszköztárból az, ADD parancs gombra, ahol előjöttek az alkatrészek. Az első alkatrész, a NUC140 es mikrovezérlő kikeresésével kezdtem, mert ez a legnagyobb méretű, illetve funkciójából eredően a központi elem a rajzban. Először is az alkatrész gyártók közül kerestem ki a NUC140 mikrovezérlőt, mert gyártók és típusok szerint vannak rendezve az Eagle-ben. Ahhoz, hogy megvalósítsam a kapcsolási rajzot, két dolog közül kellett választanom: 1. Interneten utána néztem az alkatrésznek az Eagle hez való schematik fájlnak, 2. Kézzel rajzolom meg. Az utóbbi nagyon nehéz lett volna, mivel 100 pici kivezetést, kellett volna rajzolnom. Az internetet böngészve sikerült egy Design file-t találnom, azaz egy alkatrész szimbólumot és egy „LAYOUT” egyben. A talált file-t beillesztettem az Eagle-be majd a könyvtárat aktiváltam a kontrol panelben és máris letudtam tenni a rajzterületre. 52
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
4.3.1. A DS1302 RTC áramkör megrajzolása és beillesztése
A következő alkatrészként az RTC IC, azaz az óra IC-t választottam, viszont ezt az alkatrészt az Eagle tervezőben sem találtam meg. Keresgélésemet az interneten folytattam tovább és az Eagle honlapján találtam rá. Ugyanúgy jártam el, mint az előzőnél. Az alkatrészt kikeresve kiderült, hogy a szimbólumában egy kivezetésnek nem az a neve mind az adatlapjában, illetve, hogy DIP8.as tokozású és nem felületszerelt SO8-as. Átírni a kivezetés nevét, illetve átrajzolni SO8-asra nem túl egyszerű, mivel még két alkatrészt tartalmazott a könyvtár. Ezért megrajzoltam az Eagle gyári alkatrészkönyvtár kezelőjével. Az alkatrész megrajzolását a kontrol panel/file új/alkatrészkönyvtárából vált lehetségessé. Ekkor fogadott egy fehér területű ablak, majd a menü sorból a könyvtár. A „SYMBOL” parancsra előjött egy kis ablak, ahol megadhattam a szimbólum nevét. Ezután megjelentek az alkatész rajzolásához szükséges eszköztárak/parancsok. Itt a rácspontokat nem meg. Mindent automatikusan beállított értéken hagytam. Majd a „WIRE” paranccsal megrajzoltam a szimbólum keretét. A keret rajzolásánál fontos dolog volt, hogy a rajz területen lévő kereszt az alkatrész közepén helyezkedjen el, ugyanis később ez fog felelni a forgatásért, illetve a tulajdonság előhívásához való kijelöléshez stb. Igyekeztem a keretet nem túl nagyra választani a kivezetésekhez optimalizált méretre rajzoltam. A rajzterületen láthatóak voltak a fizikai méretek (mm-ben). A keretet a tok szerint rajzoltam meg mivel SO 8-as, ezért téglalap alakúra csináltam, majd ezt követően kivezetéseket raktam le. Ehhez volt egy pin nevű parancs, amivel le tudtam rakni a jobb és bal oldalára. Fentebb az aktív parancs funkcióknál a helyzetét lehetett átváltani, hogy a másik oldalra felrakhatóak legyenek. Igyekeztem a kivezetéseket is egyformán elosztani. Ezt követően a kivezetéseket elneveztem az információ gombbal. Végül a text paranccsal számoztam egyesével a kivezetéseket. A rajz szimbólum lementésre került a mentés (SAVE) gombbal. Ezután jött a könyvtár/PACKAGE parancs ahol, ugyanolyan nevet kapott az alkatrész láblenyomat része, mint a szimbólumnál. Ekkor egy fekete ablak felület jött elő, ahol átrendezve az ablakot elkezdhettem az alkatrész „LAYOUT” tervezését. Előtte a (GIRD) a rácsvonalak sűrűségét 0.1 mm-re állítottam, illetve, hogy mm-ben legyen a mértékegység. A rajzolásnál fontos szempont a fizikai méret, ami már a kész nyák megtervezéséhez szükséges, ezeket a fizikai méreteket az alkatrész adatlapjában [2] megtalálhatóak, általában a dokumentum végénél. Itt legfontosabb az alkatrész körvonala, amit a „WIRE” paranccsal rajzoltam meg. Az 53
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
„X” koordinátát vettem figyelembe majd a függőleges és vízszintes vonalat lemásoltam és összeraktam a keretvonalat középre elhelyezve. Ezután jöhettek a láblenyomatok, mivel felületszerelt, ezért nem a Pad parancsot kellet használnom, hanem mellette a téglalap alakú SMD nevezetű parancsot, amit leraktam az alkatrész közelében. A dokumentumból a téglalap két oldalának a hosszát megállapítottam, és az információ paranccsal a lerakott téglalap méretét beállítottam az SMD „SIZE” legördülő menüből. Az összes szabvány méretű felületszerelt láblenyomat megtalálható a programban, ezért az általam meghatározott értéket választottam, illetve hogy melyik rétegen helyezkedjen el. Mivel egyoldalas nyákot terveztem, piros színű top réteget állítottam be. Majd a kivezetést elhelyeztem a tokhoz az adatlapban megadott lábtávolságokra. A lábakat vagy kivezetéseket egyesével átneveztem arab számokra,1-től 8-ig. Végezetül rajzolok egy kis félkört az egyes és nyolcas láb melletti vonalra meg egy kis pontot az egyes lábhoz közel, amely az alkatrész elhelyezést teszi könnyebbé, referencia pont ad. Ezután lementettem, majd a könyvtár „DEVICE” gombbal létrehoztam magát az alkatrészt és oldalt a „CONNECT” gombbal összepárosítottam a kapcsolási rajzot és a lenyomat lábakat. A projekthez visszatérve frissítettem az alkatrészkönyvtárat, és beillesztem az általam megrajzolt óra IC-t, a NUC140 mellé baloldalra.
4.3.2. A DS18B20 hőmérséklet mérő szenzor beillesztése
A következő alkatrész a Dallas-os IC, azaz a hőmérő IC. Az interneten találtam egy Design file-t az alkatrészről. Az alkatrészt sikeresen beillesztettem, de lerakáskor csak egy körvonalat rakott le és kivezetéseket nem, ezeket a kivezetéseket az „INVOKE” paranccsal tudtam előhívni és letenni az alkatrészhez szisztematikusan. Ide leraktam egy DS18B20-at, és egy DS18S20-at, a kettő annyiban különbözik, hogy a „B” típusnak állítható a felbontása az „S’’ típusnak nem.
54
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
4.3.3. Az FXOS8700 megrajzolása és beillesztése
A gyorsulásmérő és mágnesesség mérő IC volt a következő elem, amit kiválasztotta, melyet saját magam terveztem meg az alkatrészkönyvtár szerkesztővel. Első lépésként szintén a kapcsolási rajz szimbólumot rajzoltam meg. Mivel négyzet alakú az érzékelő és mind a négy oldalán van kivezetés, így célszerűbb volt, hogy a rajzszimbólumhoz hasonlítson. Az IC-hez hasonlóan megrajzoltam két oldalra a 16 kivezetést, majd elneveztem őket és lábszámoztam is. Majd a „PACKAGE” paranccsal létrehoztam a láblenyomatot, melyet elneveztem „FXOS”nek. Egyik fontos szempont volt az alkatrész mérete, hiszen nagyon kicsi alkatrészről beszélünk, így az elemi cellákat, azaz rácspontokat 0.1 mm-re kellett beállítanom. Ezt követően kirajzoltam a keretvonalat, melyet 0.258 mm-es vonallal rajzoltam meg. Mivel az IC-m négyzet alakú, ezért csak egy vonal hosszúságot kellett leszámolnom a koordinátákból. A „MOVE” és a „COPY” parancsokkal összeraktam a négyzetet és átállítottam, hogy más rétegen helyezkedjen el, mint maga a forr szem. A kivezetéseket az SMD paranccsal készítettem, azzal a különbséggel, hogy 0.016*0.008 méretű forr felületet kellett kialakítanom és sokszoroznom. A kivezetéseket a keretvonalon belülre kellett elhelyeznem, mivel ez BGA típusú alkatrész QFN tokozású. Ami azt jelenti, hogy az alkatrész alatt helyezkedik el a kivezetés. Ezzel is csökkentik a fizikai méreteket. A kivezetések elhelyezésénél fontos volt a lábtávolság, melyet az adatlapban [6] megadott érték szerint helyeztem el. Majd a „NAME” paranccsal nevet adtam nekik, ide is számokat használtam 1-16-ig. Referencia jelként egy jelet raktam az egyes lábhoz a keretvonalban úgy, hogy húztam egy levágást az egyes láb melletti oldalhoz. Végül Text paranccsal feliratoztam a nevét és az egyes lábhoz oda írtam, hogy 1. A kész szimbólumot és láblenyomatott a következő 31. ábrán láthatjuk.
55
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
31. ábra FXOS8700 CQ megszerkesztett kapcsolási szimbóluma és láblenyomata.
Ezt követően a kész szimbólumot és láblenyomatott egyesíteni kellett a DEVICE résznél, majd a „CONECT” paranccsal egybekapcsolni a kivezetéseket. Majd lementettem és frissítetem az alkatrészkönyvtárt. A lerakható volt az alkatrész, melyet célszerűbb volt a NUC140 alá elhelyeznem, mivel a bal alsó lábkivezetésénél van az egyes kivezetés és ott van az I2C vonal is.
4.3.4. A MAX232DW áramkör beillesztése
A következő alkatrész a MAX232 IC, melyet tartalmazott az Eagle könyvtár így hát azt csak le raktam a NUC140 jobb oldalára, mivel a port kivezetések az RX/TX ott helyezkednek el. A Max232 is felületszerelt SO-s lábnyomattal rendelkezik, azzal a különbséggel, hogy az Eagle SOL16-nak hozza az SO16 W-et, ami azt jelenti, az Eagle szerint, hogy L=LARGE, azaz nagyobb. Hivatalosan pl.: TME-nél, W-ként kapható.
4.3.5. A stabilizátor elemek és az SD foglalat beillesztése Következnek a Stabilizátor IC–k a 78L05 és 78L33, azaz az 5 V-os és a 3.3 V-os lerakása, ezt tartalmazta az Eagle könyvtár To-92 tokban is, ezeket elsőnek alulra helyeztem el. A következő 56
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
lépés a csatlakozók lerakása elsőként is a Micro SD kártya foglalata. A gyári könyvtár között nem találtam ilyen kártya foglalatot, ezért az internetről sikerült leszednem egy HIROSE dm néven futó design file-t. A letöltött file-t beillesztettem a programba és a kapcsolási rajz szerkesztőbe megjelenítettem.
4.3.6. A mérés-adatgyűjtő további elemei illetve azok összekötése
A többi csatlakozót tartalmazta az Eagle így elrendeztem a szerkesztőben a megfelelő helyre. A nyomógombokat is leraktam, de nem ugyanazon a nyákon helyeztem el, mint a többi alkatrészt. Végezetül le rakom az ellenállásokat, kondenzátorokat, illetve a LEDEKET. Az ellenállásoknak 1206-os és 2512-es méretű SMD-ket választottam. Az utóbbit a felhúzó ellenállásokhoz használtam fel a nyomógomboknak. Mivel a gombok teljesen testre húzzák a NUC140 bemenetét és mellettük lévő prelmentesítést végző 10µF-es kondenzátor miatt hírtelen nagyobb áram is kialakulhat. A kondenzátornak 1206-os méretűt választottam. Ahová tantál vagy polarizált kellett oda 3225-ös méretű kondenzátort raktam le. Az 5 V táp feszültséget jelző lednek is 1206-ost választottam. Ennél kisebb méretű ellenállásokat, kondenzátorokat, LEDEKET nem akartam ugyanis az otthoni körülmények között nehézkes lett volna a forrasztása a kis méret miatt. Ezek után még a tápfeszültséget jelző nyilakat és pontokat kellet leraknom, amiket az alkatrészkönyvtár „SUPPLY” mappából kellet kiválasztanom, az 5 V; a 3.3 V és a testet. A csatlakozókat a „CONNAL” kezdődő mappákból kellet elő hívnom végezetül a nyomógombokat a „SWITCH” mappákból. Az óra IC működéséhez fontos elemet a „BATTERY” mappából választottam ki, a CR2032-es típust, mely 3 V-os. A külső kvarc oszcillátort a nevéből adódóan a kvarc mappából hívtam elő és az értékét a „VALUE” paranccsal átírtam 12Mhz-re, és az óránál is 32.768Khz-re. A kapcsolási rajzot ezután összehuzaloztam, az előre definiált pontokat összekötöttem a „WIRE paranccsal. Ahhoz, hogy átláthatóbbá tegyem a rajzot, a „JUNCTION” csomópontokat kellett kijelölnöm. Elsőként a LEDEKNÉL használtam, ahol a lednek a negatív pólusát a NUC140-re kellett kötnöm egy ellenálláson keresztül. Ott az ellenállás után a vezetéket lezártam és megszámoztam, és ahová a mikro vezérlő kivezetéséhez kellett kötni ott is húztam egy vezetéket. Lezártam majd oda is ugyan azt a számot használtam és így egyesítettem virtuálisan a két lezárt vezetéket. Ez a módszer ugyanolyan, mint ahová az 5 V-ot jelölő nyilakat pakoltam, hiszen virtuálisan azok is 57
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
egy vezetéken vannak. Ugyan így jártam el a másik két LED esetében is. Annyi különbséggel, hogy ott más számot használtam, így hát a három LEDET 1-3-ig számoztam. Ezt a módszert használtam a felhúzó ellenállások és kondenzátoroknál is. Ezekkel a megoldásokkal szép átlátható kapcsolási rajzot tudtam készíteni. Végül a kapcsolási rajzon az elemeknek a „VALUE” paranccsal, értéket adtam, legfőképp az ellenállásoknak, kondenzátoroknak. Majd kissé átalakítottam és a megfelelő helyre raktam az alkatrészeket. E munkafolyamat által készült el a mérésadatgyűjtő kapcsolási rajzom, kerettel együtt. Amely az 1. mellékletben található.
4.4. Nyák megtervezése
A nyák tervezésénél fontos szempont, hogy jól átláthat, kezelhető és könnyen hozzáférhető legyen. A nyákrajz elkezdését az Eagle kapcsolási rajz ablakából kell elindítani a File/váltás nyákszerkesztőre. Az első dolgom az volt, hogy az egér görgőjével közelítettem az alkatrészekre, majd a „MOVE” paranccsal behelyeztem a kívánt pozícióba (téglalapba). Megkönnyítve a dolgomat, a dolgomat kijelöltem az összes alkatrészt a szerkesztőfelületen, így egyszerre tudtam mozgatni őket. Ezután a fehér téglalapot átméreteztem, 100*70mm-re. Az átméretezés után kiválasztottam a top réteget és a „DOCUMENT” rétegeket. A szükségtelen réteget kikapcsoltam. Első lépésként a táp csatlakozót raktam le, ezért azt tükröznöm kellett. A bal alsó sarokba és mellé a tápegység rész többi elemét. Majd egy pár után fogtam a „ROUTE” parancsot és ott kiválasztottam, hogy top rétegen huzalozzon. Manuálisan elkezdtem 0.3048-as méretű huzalokkal összekötni a sárga vonallal jelölt alkatrészeket. A „ROUTE” parancs azaz, a huzalozás paraméterénél be állítható, hogy milyen szögbe törje a vezetősávokat, hogy ferde 45°-os vagy 90°-os legyen. Személy szerint én a ferde 45°-sat használtam. Majd a táp rész huzalozása után jött az FXOS érzékelős rész. Az érzékelő utána elhelyeztem a csatlakozókat. Az érzékelő csatlakozóit a három 4-es csatlakozót, a panel aljára, egymás mellé helyeztem el. Ezt követően mellé a három tűs hőmérős csatlakozókat, majd az utolsó felé a nagyobb RS 232es csatlakozót. A csatlakozókat hullám alakúan kötöttem össze, amit a 32. Ábrán láthatunk.
58
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
32. ábra A csatlakozó huzalozás bemutatása, amely torzított szinuszhoz hasonló. A képen a két középső vezetősáv az SDA SCl sáv, azaz az I2C kommunikációs busz. A nagyobb RS kommunikációért felelős csatlakozó felé helyeztem el a MAX232 IC-t lehetőleg közel a mikro vezérlőhöz, majd ”ROUTE” paranccsal összehuzaloztam. Az IC segéd elemeit, a kondenzátorokat az IC jobb oldalára helyeztem el. Majd a MAX232 felé helyeztem el a Micro SD kártya foglalatát, a MAX232 kondenzátorai mellé a három (rögzítés fut, program fut és az érzékelő hiba jelző) LEDEKET. A LEDEK fölé az előtét ellenállásaikat. Az óra IC a DS1302t elhelyeztem NUC140 mikrovezérlő bal felső oldalára és az IC többi elemét is baloldalra. A 3 V-os elemet az óra IC pontosságához a panel másik oldaláról kell beültetni, mivel furatszerelt, így azt tükröztem, így a pozitív kivezetése az óra IC kívánt lábához esett így könnyű volt összehuzalozni a negatív pólusra. Kis mozgatással a testre tudott csatlakozni a negatív pólusa az elemnek, ezért a kvarc és a hidegtő kondenzátorai az elem alatt a top oldalon lehetnek, illetve maga az IC is. Az IC bal alsó sarkában helyeztem el a NUC140 12 Mhz kvarc-át és kondenzátorait. A NUC140 pont oda esik az oszcillátor lábkivezetése. Az oszcillátor felső része bele esett az elem részébe, de a kvarc SMT technológiájú, ezért a panel e részén ez nem zavart. A NUC140 tetejénél az SD kártya foglalata bal oldalánál helyeztem el a nyomógombok és azok felhúzó és prelmentesítő kondenzátorait. A felhúzó ellenállásokat a csatlakozó baloldalán helyeztem el és a csatlakozók alatt a prelmentesítő kondenzátorokat. Ez a rész könnyen szemlélteti, hogy melyik csatlakozóhoz melyik elemek tartozik. Az SD kártya foglalata jobb oldalánál helyeztem el a programozásért felelős sorkapcsot. Majd tőle szintén jobbra helyeztem el a RESET nyomógombot. A felhúzó és prelmentesítő kondenzátorát a bal oldalán helyeztem el az utolsó csatlakozónál, ami az ellem, felett van. Az SD kártya tápjának a huzalozását nagyon nehéz volt megoldani, végül a Vss pontot a kártya foglalat fémházán keresztül kapta meg. A 3.3 V pedig egy VIA segítségével áthidalva a másik oldalon a BOTTONON, majd a Top oldalon két 0R ellenállással jut el a táprészhez, ezek utóbbi elemeket a kapcsolási rajzban bele kellett integrálnom. Ezután visszatértem a kapcsolási rajz szerkesztőhöz, ahol meg tudtam valósítani a két 0R ellenállást. 0R-es ellenállást kellett alkalmaznom az accelerométer IC-nél is mivel ott az SDA kivezetést nem tudtam a NUC140-el összehuzalozni. Csak úgy tudtam megoldani, hogy tettem bele egy SMD átkötést. A programozó csatlakozó 5 V-os kivezetését is VIA segítségével tudtam összehuzalozni a táp 5 V-os sávjával. A huzalozást befejezvén a 59
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
VIA részek kivételével, amikor minden sárga vonal eltűnt akkor lehetett kezdeni a vezetősávok végleges vastagságát kialakítani, illetve az üres részeket a GND-vel. +5 V-al és a +3.3 V-al kitölteni. A tápvonalaknak 0.4 mm szélességű vezetősávot választottam, 0.3 szélességet használtam a két SO tokoknál, valamint az érzékelő csatlakozók jelvezeték sávjainál, 0.258-ast választottam a NUC140-hez. A többi vezeték sávot, ahogy csak lehetett, és ami még belefért a lehető legszélesebre alakítottam ki és az óra IC-nél a felesleget kitöltöttem a GND fóliával. A NUC140 alatt is kialakítottam két nagyobb szigetelt egyet a GND és egyet a +5 V-nak, hogy minél kevesebb rézfelületet kelljen a gyártás során eltüntetni. Három darab fúratott helyeztem el két darab 3 mm-es csavarnak és egyet a tápcsatlakozó résznél oda 2 mm-es csavarnak a felfogatás, illetve rögzítés céljából. A végső panel méret 92*58 mm-es lett, melyeket méretvonalakkal is igazoltam, amely keretet is kapott. E keretben megtalálhatók a két hőmérő IC és a csatlakozóinak az össze huzalozása, és a nyomógombok is. A 33. ábrán és a 2. mellékletben látható a kész nyákterv.
33. ábra A mérésadatgyűjtő nyákterve a felirat rétegekkel együtt és a kerettel.
Fontosnak tartottam még az alkatrészek referencia hivatkozását is, ami az alkatrészek számozását jelentik a nevük kezdőbetűivel együtt. A feliratok a későbbiek során felismerhetőek legyenek, ezért az alkatrészek nevét egy külön rétegen a „DOKUMENTEN’’ fognak látszódni. A Top és a BOTTON oldalon lévő rétegek behívásakor és ugyan akkor kikapcsoltam a Top réteget, mely a huzalozást tartalmazza. Így csak az alkatrészek rajzolatai és a felirata voltak 60
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
láthatóak. E felíratok néhol olyan pozícióban voltak, hogy egy másik alkatrész alatt voltak elhelyezve, ami így nem legyártható. Az eszköztárból a „SMASH” paranccsal elő tudtam hívni a feliratok kis keresztjét minden alkatrészre, melyeket kattintással lehetett aktívvá tenni. A kereszt, amivel lehet őket mozgatni stb. Ahol szükség volt rá elvégeztem egy elforgatást, tükrözést, mozgatást. Illetve áthelyezést. A tükrözést a kívánt oldalra hajtottam végre a másik nem látható oldalról. Az így feliratozott, alkatrészeket felirattal és körvonallal az 34. Ábrán és a 2. mellékletben láthatjuk a panel két oldalán elhelyezve egyszerre.
34. ábra a nyák felírat rétegei TOP és Botton oldal.
Magát a nyák gyártáskor a részfóliára lemaszkolt területet, azaz csak a TOP réteget tartalmazó rétegeket a 35. Ábrán és a 3. mellékletben láthatjuk.
61
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
35. ábra A mérésadatgyűjtő nyák rézfóliája a furatok feltüntetésével.
Ezzel be is fejeződött a hardveres rész, most következzen a szoftveres rész. A szoftveres rész elkészítéséhez a következő források szolgáltak: NUC140 User Manual [8], illetve példaprogramok SPI [9],I2C [10], Uart WDT, RTC [11].
5. A szoftver rendszer felépítése és működése A szoftver elkészítéséhez az IAR ARM 6.1 fejlesztő rendszerét használtam fel, a programozást C nyelven végeztem. Kiindulásként a Nuvoton cég NUC100 Series BSP_v1.05.003 Driver könyvtárát tanulmányoztam, az ebben található példaprogramok közül a következőket vettem alapul, az általam tervezett működő szoftver elkészítéséhez. -
Smpl_DrvGPIO
A digitális be kimenetek, illetve az IC-k kezeléséhez (nyomó
gombok, DS18B20, DS1302). -
Smpl_DrvI2C FXOS8700CQ kezeléséhez
-
Smpl_DrvSPI
az SD kártya kezeléséhez
-
Smpl_DrvRTC
a rögzítéshez használt dátum és idő kezeléséhez
-
Smpl_DrvUART
a PC felé kapcsolatot teremtő soros port kezeléséhez
-
Smpl_FATFS_SDCard
az SD kártyán létrehozandó FAT fájlrendszer kezeléséhez
Az elkészített működő szoftver a következő funkciókat valósítja meg: -
paraméterek beállítása a PC-n futó terminál szoftver (Hyper-terminál) segítségével.
-
adatgyűjtés indítása és leállítása a PC-ről (a módszer ugyanaz, mint az előző pontnál).
-
hardver inicializálások a következők szerint: o UART0
9600 8, N,1 a PC-s kapcsolathoz
o I2C0
400 kHz az FXOS8700CO kezeléséhez
o SPI1
az SD kártya kezeléshez
o GPIO
portlábak a nyomógombok, a DS18B20 és a DS1302 IC-k
kezeléséhez 62
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
o RTC
24 órás üzemmód, 1 másodpercenkénti IT kérés (a dátum és
időpont beállítása a soros vonalon érkező adatoknak megfelelően) o DS1302
a dátum és időpont beállítása a soros vonalon érkező adatoknak
megfelelően. -
mérési és adatgyűjtési funkció o hőmérséklet, GX, GY, GZ értékek mérése és rögzítése SD kártyán 1 másodpercenként
az
értékek
vesszővel
vannak
elválasztva,
minden
másodpercben keletkezik a fájlban egy új sor, amely ASCII formátumban tartalmazza az adatokat. A program folyamatábrája a fentieknek megfelelően a következő 36. ábrán látható, illetve külön a 4. mellékletben is megtalálható.
63
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
START
Inicializálások: UART0, I2C0, SPI1, GPIO, RTC, DS1302
1
Időpont beállítás parancs a PCtől? Év, hónap, nap, óra, perc, másodperc beállítás az érkező adatok alapján az RTC-ben és a DS1302-ben 2
Mérés start parancs a PCtől?
Mérés stop parancs a PCtől?
File megnyitása az SD kártyán, a file neve [Hó] [Hó] [Óra] [Óra] [Sec] [Sec].dat
File lezárása az SD kártyán
Mérési üzemállapotb an van a rendszer?
1
Hőmérséklet érték beolvasása a DS18B20 IC-ből, GX,GY,GZ beolvasása a FXOS8700CQ IC-ből, ezek alapján egy új sor beírása az SD kártya file-ba.
2
36. ábra A mérésadat-gyűjtő folyamat ábrája.
A szoftver kipróbálását egy kísérleti összeállításon végeztem el, egy Nu Tiny-SDK-NUC140 kártya felhasználásával, amely megfelelő portjaira a következő eszközöket kapcsoltam. -
UART0 PC-s kapcsolat
-
I2C0 FXOS8700CQ 64
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
-
SPI1 SD kártya
-
GPIO DS18B20
Tehát nem végeztem el a DS1302 rendszerbe illesztését, mert az IC nem állt rendelkezésre. A szoftver többi elemét sikerült kipróbálni és működőképessé tenni. A teljes szoftver forráskódját az 5. melléklet tartalmazza.
6. A mérés-adatgyűjtő fizikai megvalósítása A fizikai megvalósítást elsőnek a nyák legyártásával kezdtem. A nyák gyártást otthoni körülmények között végeztem el, de lehetett volna ipari környezetben is. Otthoni eljárások közül, mert több is van én a vasalásos technikát vettetem be. A vasalásos technológia menete: A nyáktervezőből tükrözve kellet kinyomtatni a fólia rajzott fotópapírra, ha ez megvan, akkor jöhet a nyák méretre vágása. A vágást vasfűrésszel hajtottam végre a megfelelő méretre. Ezután 1000 es polírpapírral felcsiszoltam a rész felületet és lemostam a zsírtól, utóbbi nagyon fontos, mert ha zsír, akkor a festék nem ragad rá a réz felületre. A következőkben a kinyomtatott fóliarajzott a nyomtatott oldalt a rézfóliára fektettem és egy vasalóval vasaltam, amíg barnás nem lett a fotópapír. A következő lépésben csapvíz alatt le kellet mosni a nyákról a fotópapírt, majd ezután vas kloridban történhetett a maratás. A maratás végeztével le kellett ismét mosni a panelt és leellenőrizni, illetve javítani az egyes hiányosságokat. A következő lépésben a furatszerelt alkatrészeknek a furatait ki kellett fúrnom 0.5 1mm-res csigafúróval. A készen elkészített nyákot az oxidáció miatt le kellet ónozni az egészet, ezt kétféle képben is lehetett: 1) Kémiai ónozással, ekkor egy folyadékba kell helyezni a nyákot 2) Kézi ónozással, ezt ón és páka segítségével lehet vékonyan megtenni Én a másodikat választottam az egyszerűbbet, ide használtam flux gélt folyasztó szerként. A kész elkészített ónozott nyákot a 37. ábrán és az 6. mellékletben láthatjuk.
65
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
37. ábra. A mérés-adatgyűjtő nyákja ónozás után.
A mérés-adatgyűjtő megvalósítás következő fázisa az alkatrészek beültetése, és egyben forrasztása. Itt elsőként a NUC140 el kezdtem, mert az a legfinomabb raszter távolságú alkatrész, majd a legcélszerűbb volt az SMD ellenállások, LED diódák és kondenzátorok beültetése, forrasztása. Következő lépésben az FXOS8700cQ QFN áramkör beültetése és forrasztása volt soron, ide mivel alul vannak a kivezetései ezért ezt forrólevegős állomással sikerült beforrasztanom. Az utolsó két áramkört a DS1302 es és a soros illesztőt a MAX232DW-t kellet még beültetnem, majd a két kvarcot. A beültetés utolsó lépésében jöttek a furatszerelt alkatrészek a 7805, 78L333, a RESET nyomógomb, a csatlakozók és végezetül az elem az RTC áramkörhöz. A következő fázisa volt a kivitelezésnek az ellenőrzés, itt a zárlatok a helyes beültetési pozíciók, illetve a megfelelő polaritások ellenőrzését értettem. A zárlatok ellenőrzését multiméterrel végeztem. A beültetett panel a 38. ábrán és az 6. mellékletben látható, az SD kártya foglalat nélkül.
66
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
38. ábra. A mérés-adatgyűjtő panel beültetve SD kártya foglalat nélkül.
A mérés-adatgyűjtő beüzemelése volt hátra, melybe egy első tesztként egy LED villogtató programot töltöttem be ahol mind 3 LED villog egyszerre. A levillogtató eredményét a mellékletben csatolt 1. teszt videóban lehet megtekinteni.
7. A mérésadatgyűjtő tesztelése A mérés-adatgyűjtő tesztelésekor szükségem volt egy laptopra, hogy a soros kommunikációt tudjam tesztelni. A laptopra egy USB – soros átalakítót kellett használnom, mivel a laptopon nem volt RS232 csatlakozó. A teszteléshez a végső szoftvert töltöttem rá a mérés-adatgyűjtőre. A tesztelési időszak alatt egy hőmérséklet mérő DS18B20-at, illetve a kártyán elhelyezet mágneses, gyorsulásmérő szenzort használtam. Egy 2GB-os SD kártyára automatikusan történt a rögzítés egy XXX.XXX fájlba. Az adatgyűjtő tesztelésekor figyeltem a soros terminálon a hőmérséklet, XG, YG, ZG, illetve a XR, YR, ZR, koordinátákban megadott mágneses értékeket, és gyorsulásokat.
67
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
7.1. Hőmérséklet érzékelő tesztelése A hőmérséklet érzékelőt megérintve a kezem melegétől azonnal elkezdet növekedni a terminálon a hőmérséklet, szabadon hagyva a szenzort szépen csökkent lefelé a hőmérséklet. A kijelzett érték helyességét egy mellette elhelyezett hitelesített hőmérséklet mérővel ellenőriztem, az értéke tized pontosra annyi volt, mint a hitelesítő mérő kijelzett.
7.2. A mágneses és gyorsulásmérő szenzor tesztje
A mágneses koordinátákat egy henger alakú mágnes segítségével ellenőriztem, melynek pólusai meg vannak jelölve. Elsőnek megkerestem az érzékelő által mért X tengelyt, majd az érzékelő adatlapja szerint rögzített koordinátákkal összehasonlítottam, hogy megegyeznek e. Az X tengely a mérés-adatgyűjtő SD kártya felőli részén van, melyet úgy állapítottam meg, hogy a mágnes északi, azaz a pozitív pólusát az érzékelőhöz közelítettem ebből az irányból és az XR koordinátán jelzett érték nagyon megnőtt negatív irányba, minél közelebb helyeztem a mágnest, annál nagyobb volt a mínuszban a kijelzett érték. A vele szemben lévő oldalhoz közelítve a mágnes pozitív pólusát a kijelzett érték pozitív irányba mozdult el. Az YR tengely a mérés-adatgyűjtő kereszt irányában van az X-hez képest. Az Y tengely pozitív iránya a három LED oldala felé helyezkedik el, melynél az YR érték pozitív értéket mutatott a mágnes pozitív pólusa által. A kvarc felöli oldalán az érték negatív értéket mutatott mikor a mágnes pozitív pólusát közelítettem. A Z tengely pozitív iránya az érzékelő teteje, amelynél az YR érték pozitív irányba mozdult el mikor a mágnes pozitív pólusát közelítettem. Az érzékelő alján, azaz a panel másik oldalán van a Z tengely negatív iránya, ekkor negatív irányba tért el az érték, ha a mágnes pozitív pólusát közelítettem. Értelem szerűen, ha a mágnes negatív pólusát közelítem az előző irányokból, akkor előjelet vált minden ki jelzet érték. A XR, YR és ZR irányok megegyeztek az adatlapban megjelölt irányokkal, tehát az érzékelő megfelelő értékeket mutat. A gyorsulásmérő tengelyinek a teszteléséhez mozgattam az adatgyűjtőt, az értékek nagyobb mértékben változtak. A tesztelésről készített video felvételt a mellékletben található 2. teszt video mutatja, A kártyán megjelöltem az irányokat, melyet a mellékletben található iránytengelyek képen láthatóak.
68
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
8. Összefoglalás A kitűzött cél teljesítése sikeresnek bizonyult, mert nem akadt olyan probléma, amely meggátolta volna a tervezést. A nyák végső méretét sikerült a tervezethez képest lejjebb faragnom, melyben a cél 100*60mm-es méret volt. A végső méret az 92*58mm-es lett, így egy 100*75mm es egyoldalas nyáklemezből legyártható minimális hulladékkal. Továbbfejleszthető lehetne még a mérésadatgyűjtőt, hogy még kisebb legyen a mérete, illetve hogy több paramétert tudjon rögzíteni. A kisebb méretett elsőként a NUC140 kivezetésével kezdeném úgy, hogy a NUC 140 esnek, nem 100 kivezetésest választanék, hanem 48 kivezetésűt. A gyorsulásérzékelő áramkört nem helyezném el közvetlenül a panelon, hanem azt is külsőleg csatlakoztatnám. Kisebb méretű csatlakozót használnék a soros kommunikációnál. A gomboknak a felhúzó ellenállásai helyett kisebb méretű 1206-ost választanék a meglévő 2512 helyett. A soros illesztő IC a MAX232DW helyet normálméretű so16-ost választanék, ezáltal is csökkenne, a panelmérete. Az érzékelők csatlakozóit is kicsit távolabbra tervezném meg egymástól őket, ugyanis most eléggé szűkösen vannak. Az SD kártya foglalatot is áttervezném a meglévőtől, mert eléggé nehézkes beszerezni oda megfelelő foglalatot. Kiegészíteném még az eszközt nyomás érzékelővel, illetve GPS modullal a helymeghatározáshoz. Távolról is lekérdezhetővé lenne az SD kártya tartalma egy bluetoth-os megoldással, és paraméterezhető is lehetne ezáltal. A tervezés menetében fontos szempontok voltak az alkatrészek elhelyezése, főleg a nyáktervezésben. A nyák készítésénél a nem jól kiválasztott alkatrész helyzet a huzalozásban okozott legfőképp nehézséget, de ajánlatos még a kapcsolási rajznál is ügyelni rá, mert úgy könnyebben átlátható a rajz. Ügyelni kellett az SD kártya lábkiosztásánál is hogy a megfelelő kivezetés a megfelelő port lábakra kerüljön.
69
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
9. Summary The originally desired goal was accomplished as there were no such issues that would prevent the designing. Eventually, I managed to decrease the size of the PCB compared to my original plans, according to which the size would have been 100*60 mm; the final dimensions of the PCB became 92*58mm. This can easily be manufactured from a one-sided 100*75mm PCB board with negligible waste. The data logger could still be developed and improved further, in order to that its dimensions could be decreased and that it would be able to record even more parameters. The first step of the process of decreasing its size would be the selection of a smaller, 48-piece outlet for the NUC140 instead of the current 100-piece one. The acceleration sensor circuit would be connected from the outside instead of being connected to the board itself. Furthermore, I would use a plug smaller in size for serial communication. Regarding the pull-up resistors, I would use smaller sized ones, in size 1206 instead of the currently applied 2512. I’d use a normal side so16 serial driver IC instead of a type MAX232DW one, and this would also contribute to a smaller board size. As for the plugs of the sensors, I would place them a little further away from one another as they are rather close to each other right now. According to my plans, the SD card socket would also be redesigned, because it is currently rather hard to purchase a matching socket. I would also integrate a pressure sensor and a GPS module for locating function purposes. Tis way, the SD card could be readable from remote distances via a Bluetooth application, and it would also allow the setting of the parameters. During the designing it was important for me to place each part in the right spot, particularly during the designing of the PCB. During the preparation of the PCB, the wrongly selected parts caused the highest difficulties with respect to the wiring; nevertheless, one also has to pay attention to this issue during the making of the wiring diagram in order that it could be clearer to understand. Also, during the pinout of the SD card, I needed to be extremely careful to connect the right outlet to the right port connections. During testing, the determination of magnetic and acceleration directions became important issues, therefore during installation, the direction of the equipment will be of particular significance.
70
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
10. Irodalom jegyzék 1. NuMicro NUC140 Datasheet EN V3.02.pdf 2. DS1302.pdf 3. AD22100.pdf 4. AD590.pdf 5. DS18B20.pdf 6. FXOS8700CQ.pdf 7. max232.pdf 8. NuTiny-SDK-NUC140 User Manual EN V1.0.pdf 9. 05_NuMicro SPI.pdf 10. 06_NuMicro I2C.pdf 11. 04_NuMicro WDT_Timer_RTC_UART.pdf
71
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
1. Melléklet
72
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
2. Melléklet
3. Melléklet
73
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
3.Melléklet
74
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
4.Melléklet
START
Inicializálások: UART0, I2C0, SPI1, GPIO, RTC, DS1302
1
Időpont beállítás parancs a PCtől? Év, hónap, nap, óra, perc, másodperc beállítás az érkező adatok alapján az RTC-ben és a DS1302-ben 2
Mérés start parancs a PCtől?
Mérés stop parancs a PCtől?
File megnyitása az SD kártyán, a file neve [Hó] [Hó] [Óra] [Óra] [Sec] [Sec].dat
File lezárása az SD kártyán
Mérési üzemállapotb an van a rendszer?
Hőmérséklet érték beolvasása a DS18B20 IC-ből, GX,GY,GZ beolvasása a FXOS8700CQ IC-ből, ezek alapján egy új sor beírása az SD kártya file-ba.
2
75
1
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
5.Melléklet #include <stdio.h> #include <math.h> #include "DrvSPI.h" #include "DrvGPIO.h" #include "DrvSYS.h" #include "DrvUART.h" #include "DrvSDCARD.h" #include <string.h> #include "Driver/DrvRTC.h" #include "diskio.h" #include "ff.h" #include "Driver\DrvI2C.h" int onewire_reset(void); void onewire_write_bit(int bit); int onewire_read_bit(void); void onewire_write_byte(uint8_t byte); uint8_t onewire_read_byte(void); void onewire_line_low(void); void onewire_line_high(void); void onewire_line_release(void); float GetData(void); void onewire_portsetup(void); float ReadDS1820(void); int xert_G,yert_G,zert_G; int xert_R,yert_R,zert_R; FRESULT res; FIL file2; FATFS FatFs[_DRIVES]; BYTE Buff[1024]; char puffer[128]; S_DRVRTC_TIME_DATA_T sInitTime; S_DRVRTC_TIME_DATA_T sCurTime; uint8_t Device_Addr0; uint8_t Tx_Data0[3]; uint8_t Rx_Data0,xmsb,xlsb,ymsb,ylsb,zmsb,zlsb,mag,mod,tem; uint8_t DataLen0; volatile uint8_t EndFlag0 = 0; float homerseklet; 76
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
volatile int jott_karakter=0; volatile int karakter_szamlalo=0; volatile int jo_karakter_szamlalo=0,rossz_karakter_szamlalo=0; volatile uint8_t vett_karakter; volatile uint8_t vett_karakterek[7]; int xert,yert,zert; int xert1,yert1,zert1; double sz_xert,sz_yert,sz_zert; double sz_xert1,sz_yert1,sz_zert1; void UART_INT_HANDLE(uint32_t u32IntStatus){ uint8_t bInChar[1]={0xFF};
DrvUART_Read(UART_PORT2,bInChar,1); vett_karakter=bInChar[0]; if(vett_karakter==0x02) karakter_szamlalo=0; vett_karakterek[karakter_szamlalo++]=vett_karakter; if(karakter_szamlalo>3) {karakter_szamlalo=0;} if(vett_karakter==0x03){ karakter_szamlalo=0; if(vett_karakterek[1]== vett_karakterek[2] && vett_karakterek[1]<128) jott_karakter=1; } } void I2C0_Callback_Rx(uint32_t status){ if (status == 0x08) { DrvI2C_WriteData(I2C_PORT0, Device_Addr0<<1); DrvI2C_Ctrl(I2C_PORT0, 0, 0, 1, 0); } else if (status == 0x18) { DrvI2C_WriteData(I2C_PORT0, Tx_Data0[DataLen0++]); DrvI2C_Ctrl(I2C_PORT0, 0, 0, 1, 0); } else if (status == 0x20) { 77
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
DrvI2C_Ctrl(I2C_PORT0, 1, 1, 1, 0); } else if (status == 0x28) { if (DataLen0 != 2) { DrvI2C_WriteData(I2C_PORT0, Tx_Data0[DataLen0++]); DrvI2C_Ctrl(I2C_PORT0, 0, 0, 1, 0); } else { DrvI2C_Ctrl(I2C_PORT0, 1, 0, 1, 0); } } else if (status == 0x10) { DrvI2C_WriteData(I2C_PORT0, Device_Addr0<<1 | 0x01); DrvI2C_Ctrl(I2C_PORT0, 0, 0, 1, 0); } else if (status == 0x40) { DrvI2C_Ctrl(I2C_PORT0, 0, 0, 1, 0); } else if (status == 0x58) { Rx_Data0 = DrvI2C_ReadData(I2C_PORT0); DrvI2C_Ctrl(I2C_PORT0, 0, 1, 1, 0); EndFlag0 = 1; } else { ; } }
void I2C0_Callback_Tx(uint32_t status){ 78
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
if (status == 0x08) { DrvI2C_WriteData(I2C_PORT0, Device_Addr0<<1); DrvI2C_Ctrl(I2C_PORT0, 0, 0, 1, 0); } else if (status == 0x18) { DrvI2C_WriteData(I2C_PORT0, Tx_Data0[DataLen0++]); DrvI2C_Ctrl(I2C_PORT0, 0, 0, 1, 0); } else if (status == 0x20) { DrvI2C_Ctrl(I2C_PORT0, 1, 1, 1, 0); } else if (status == 0x28) { if (DataLen0 != 3) { DrvI2C_WriteData(I2C_PORT0, Tx_Data0[DataLen0++]); DrvI2C_Ctrl(I2C_PORT0, 0, 0, 1, 0); } else { DrvI2C_Ctrl(I2C_PORT0, 0, 1, 1, 0); EndFlag0 = 1; } } else { ; } }
void Delay(uint32_t delayCnt){ while(delayCnt--){ __NOP(); __NOP(); } } 79
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
unsigned long get_fattime (void){ unsigned long tmr; tmr=0x00000; return tmr; } void RTC_TickCallBackfn(void){ ; }
void GPABCallback(uint32_t u32GpaStatus, uint32_t u32GpbStatus){ ; } void GPCDECallback(uint32_t u32GpcStatus, uint32_t u32GpdStatus, uint32_t u32GpeStatus){ ; } void onewire_portsetup(void){ DrvGPIO_Open(E_GPC,4, E_IO_QUASI); //beállítás kétirányú módba } float GetData(void){ uint16_t temp; onewire_write_byte(0xcc); // ROM parancs átugrása onewire_write_byte(0x44); // T konverzió parancs DrvSYS_Delay(300000); DrvSYS_Delay(300000); DrvSYS_Delay(150000); onewire_reset(); onewire_write_byte(0xcc); // ROM parancs átugrása onewire_write_byte(0xbe); // scratchpad olvasás parancs temp = (int)ReadDS1820(); return temp; 80
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
} float ReadDS1820(void){ unsigned int i; uint16_t byte = 0; for(i=16;i>0;i--){ byte>>=1; if(onewire_read_bit()){ byte|=0x8000; } } return byte; } int onewire_reset(void){ DrvGPIO_Open(E_GPC,4, E_IO_QUASI); DrvSYS_Delay(2); _DRVGPIO_DOUT(E_GPC,4)=0; DrvSYS_Delay(2); DrvSYS_Delay(480); DrvGPIO_Open(E_GPC,4, E_IO_INPUT); DrvSYS_Delay(40); if(GPC_4==1) return 1; DrvSYS_Delay(300); if(GPC_4==0) return 2; return 0; } void onewire_write_bit(int bit){ DrvGPIO_Open(E_GPC,4, E_IO_QUASI); _DRVGPIO_DOUT(E_GPC,4)=1; if(bit){ _DRVGPIO_DOUT(E_GPC,4)=0; DrvSYS_Delay(5); DrvGPIO_Open(E_GPC,4, E_IO_INPUT); DrvSYS_Delay(56); } else{ _DRVGPIO_DOUT(E_GPC,4)=0; 81
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
DrvSYS_Delay(60); DrvGPIO_Open(E_GPC,4, E_IO_INPUT); DrvSYS_Delay(1); } } int onewire_read_bit(void){ int bit=0; DrvGPIO_Open(E_GPC,4, E_IO_QUASI); _DRVGPIO_DOUT(E_GPC,4)=0; DrvSYS_Delay(5); DrvGPIO_Open(E_GPC,4, E_IO_INPUT); DrvSYS_Delay(10); if(GPC_4==1){ bit = 1; } DrvSYS_Delay(46); return bit; } void onewire_write_byte(uint8_t byte){ int i; for(i=0;i<8;i++){ onewire_write_bit(byte & 1); byte>>=1; } } uint8_t onewire_read_byte(void){ unsigned int i; uint8_t byte = 0; for(i=0;i<8;i++){ byte>>=1; if(onewire_read_bit()) byte|=0x80; } return byte; } 82
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
uint8_t i2c_read(uint8_t ic_cim,uint8_t reg_cim){ Device_Addr0 = ic_cim; DataLen0 = 0; EndFlag0 = 0; Tx_Data0[0] = reg_cim-1; Tx_Data0[1] = 0; DrvI2C_UninstallCallBack(I2C_PORT0, I2CFUNC); DrvI2C_InstallCallback(I2C_PORT0, I2CFUNC, I2C0_Callback_Rx); DrvI2C_Ctrl(I2C_PORT0, 1, 0, 0, 0); while (EndFlag0 == 0); return Rx_Data0; } int i2c_write(uint8_t ic_cim,uint8_t reg_cim,uint8_t ertek){ Device_Addr0 = ic_cim; DataLen0 = 0; EndFlag0 = 0; Tx_Data0[0] = reg_cim-1; Tx_Data0[1] = 0; Tx_Data0[2] = ertek; DrvI2C_UninstallCallBack(I2C_PORT0, I2CFUNC); DrvI2C_InstallCallback(I2C_PORT0, I2CFUNC, I2C0_Callback_Tx); DrvI2C_Ctrl(I2C_PORT0, 1, 0, 0, 0); while (EndFlag0 == 0); return 0; } void Ertek_Kiolvasas_G(uint8_t I2C_CIM,int* xertek,int* yertek,int* zertek){ uint8_t xmsb,xlsb,ymsb,ylsb,zmsb,zlsb; int xert1,yert1,zert1; xmsb=i2c_read(0x1e,0x01); xlsb=i2c_read(0x1e,0x02); ymsb=i2c_read(0x1e,0x03); ylsb=i2c_read(0x1e,0x04); zmsb=i2c_read(0x1e,0x05); zlsb=i2c_read(0x1e,0x06); 83
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
xert1=0; xert1=xert1|(((int)(xmsb&0x7f))<<4); xert1=xert1|(0x0f&xlsb); if(xmsb>127) xert1=-(2048-xert1); yert1=0; yert1=yert1|(((int)(ymsb&0x7f))<<4); yert1=yert1|(0x0f&ylsb); if(ymsb>127) yert1=-(2048-yert1); zert1=0; zert1=zert1|(((int)(zmsb&0x7f))<<4); zert1=zert1|(0x0f&zlsb); if(zmsb>127) zert1=-(2048-zert1); DrvSYS_Delay(1); *xertek=xert1; *yertek=yert1; *zertek=zert1; } void Ertek_Kiolvasas_R(uint8_t I2C_CIM,int* xertek,int* yertek,int* zertek){ int16_t acc; uint8_t xmsb,xlsb,ymsb,ylsb,zmsb,zlsb; int xert1,yert1,zert1; xmsb=i2c_read(0x1e,0x33); xlsb=i2c_read(0x1e,0x34); ymsb=i2c_read(0x1e,0x35); ylsb=i2c_read(0x1e,0x36); zmsb=i2c_read(0x1e,0x37); zlsb=i2c_read(0x1e,0x38); acc = (xmsb << 8) | xlsb; xert1=acc; acc = (ymsb << 8) | ylsb; yert1=acc; acc = (zmsb << 8) | zlsb; zert1=acc; *xertek=xert1; *yertek=yert1; *zertek=zert1; } void ic_inicializalas(void){ 84
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
//CTRL_REG1=0x00 i2c_write(0x1e,0x2a,0x00); //M_CTRL_REG2=0x20 i2c_write(0x1e,0x5c,0x20); //M_CTRL_REG1=0x03 i2c_write(0x1e,0x5b,0x13); //XYZ_DATA_CFG=0x00 i2c_write(0x1e,0x0e,0x00); //CTRL_REG1=0x39 i2c_write(0x1e,0x2a,0x39); } int32_t main(void){ STR_UART_T sParam; UNLOCKREG(); DrvSYS_Open(48000000); DrvSYS_Delay(300000); onewire_portsetup(); /* UART0 beállítás*/ DrvGPIO_InitFunction(E_FUNC_UART0); /* UART0 órajel forrás a 12MHz-ről */ DrvSYS_SelectIPClockSource(E_SYS_UART_CLKSRC, 0); /* UART beállítások */ sParam.u32BaudRate = 9600; sParam.u8cDataBits = DRVUART_DATABITS_8; sParam.u8cStopBits = DRVUART_STOPBITS_1; sParam.u8cParity = DRVUART_PARITY_NONE; sParam.u8cRxTriggerLevel= DRVUART_FIFO_1BYTES; /* UART konfiguráció a megfelelő regiszterekbe */ DrvUART_Open(UART_PORT0, &sParam); /* UART0 interrupt engedélyezés */ DrvUART_EnableInt(UART_PORT0, DRVUART_RDAINT ,UART_INT_HANDLE); /* I2C0 beállítása */ DrvGPIO_InitFunction(E_FUNC_I2C0); /* I2C0 megnyitása és az órajel beállítása 400 KHz-re */ DrvI2C_Open(I2C_PORT0, 400000); /* I2C0 slave cím beállítása */ DrvI2C_SetAddress(I2C_PORT0, 0, 0x1e, 0); /* I2C0 megszakítás engedélyezése*/ DrvI2C_EnableInt(I2C_PORT0); 85
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
/*SD kártya teszt */ disk_initialize(0); disk_read(0, Buff, 2, 1); f_mount(0, &FatFs[0]); sprintf(puffer,"XXX.XXX"); res=f_open(&file2,puffer, FA_CREATE_ALWAYS | FA_WRITE); sprintf(puffer,"0123456789\n"); f_printf(&file2,"%s",puffer); f_close(&file2);
/* Visszajelző LED-ek inicializálása */ DrvGPIO_Open(E_GPE,0, E_IO_OUTPUT); DrvGPIO_Open(E_GPE,1, E_IO_OUTPUT); DrvGPIO_Open(E_GPE,2, E_IO_OUTPUT); /* G és R mérő inicializálása */ ic_inicializalas(); while(1){ /* hőmérséklet mérés */ onewire_reset(); homerseklet=(int)GetData()*0.0625; /* G és R koordináták kiolvasása */ Ertek_Kiolvasas_G(0x1e,&xert,&yert,&zert); Ertek_Kiolvasas_R(0x1e,&xert_R,&yert_R,&zert_R); /* mért adatok kiírása a soros vonalon */ printf("Hom:%5.2f Cfok XG:%4.4d YG:%4.4d ZG:%4.4d XR:%4.4d YR:%4.4d ZR:%4.4d \n",homerseklet,xert,yert,zert,xert_R,yert_R,zert_R); /* ellenőrző LED-ek villogtatása */ Delay(500000); DrvGPIO_SetBit(E_GPE,0); DrvGPIO_SetBit(E_GPE,1); DrvGPIO_SetBit(E_GPE,2); Delay(500000); DrvGPIO_ClrBit(E_GPE,0); DrvGPIO_ClrBit(E_GPE,1); 86
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
DrvGPIO_ClrBit(E_GPE,2); } }
87
Kisméretű, Nuc140 mikrokontrollert tartalmazó mérésadat-gyűjtő fejlesztése
6.Melléklet
88