Budapesti Műszaki és Gazdaságtudományi Egyetem Villamosmérnöki és Informatikai kar Méréstechnika és Információs Rendszerek Tanszéke
Holcsik Tamás
Növényházi adatgyűjtő- és vezérlőrendszer tervezése
KONZULENS EREDICS PÉTER BUDAPEST, 2013
2
Hallgatói nyilatkozat Alulírott Holcsik Tamás, szigorló hallgató kijelentem, hogy ezt a diplomatervet meg nem engedett segítség nélkül, saját magam készítettem, csak a megadott forrásokat (szakirodalom, eszközök stb.) használtam fel. Minden olyan részt, melyet szó szerint, vagy azonos értelemben, de átfogalmazva más forrásból átvettem, egyértelműen, a forrás megadásával megjelöltem. Hozzájárulok, hogy a jelen munkám alapadatait (szerző(k), cím, angol és magyar nyelvű tartalmi kivonat, készítés éve, konzulens(ek) neve) a BME VIK nyilvánosan hozzáférhető elektronikus formában, a munka teljes szövegét pedig az egyetem belső hálózatán keresztül (vagy autentikált felhasználók számára) közzétegye. Kijelentem, hogy a benyújtott munka és annak elektronikus verziója megegyezik. Dékáni engedéllyel titkosított diplomatervek esetén a dolgozat szövege csak 3 év eltelte után válik hozzáférhetővé. Kelt: Budapest, 2013. 12. 16.
..................................................................... Holcsik Tamás
3
Kivonat Diplomatervem témája egy olyan növényház vezérlés készítése amely korszerű eszközökkel, szenzorok által mért mennyiségek alapján, beállítható határértékek szerint végzi egy növényház ajtajainak vezérlését. Első részében létező megoldásokat tekintek át amelyből következtetéseket levonva felállítok egy követelményrendszert amelyet teljesítenie kell a megtervezendő rendszernek. A továbbiakban megvizsgálom hogy ezekre a követelményekre milyen lehetőségek közül lehet választani, majd felvázolom az egész rendszer tervét és az egyes alkotó elemeinek a szerepét. A következőekben ezeknek a komponenseknek a hardveres megvalósításához szükséges alkatrészek kiválasztási szempontjait és tervezési folyamatát mutatom be. Végül a megvalósított rendszerre írt szoftvert mutatom be. Kitérek működtető program funkcióira és komponenseire, és az egyes hardvereket működtető programrészekre.
4
Abstract The topic of my thesis is to design a greenhouse controller capable of controlling a greenhouse’s doors by the measured values from it’s sensors. In the first section I will introduce some existing solutions from that I can draw conclusions to make a set of requirements to my system, then I can design a system which mets these requiremenst. Next I will examine what options to choose from to fulfill the requirements above, and then outline the plan of the whole system and specify the role of each component. After that I will introduce the process of selecting the proper hardware components and designing each circuit in the system. Finally the controlling software will be introduced. I will mention the functions and components that operate the system, and each hardware module.
5
Tartalomjegyzék 1. 2.
Bevezetés.............................................................................................................................. 6 Gyári megoldások................................................................................................................. 7 2.1 Wadsworth EnviroSTEP.............................................................................................. 7 2.2 Growtronix................................................................................................................... 7 2.3 Szenzorok .................................................................................................................... 8 3. A rendszer felépítése ............................................................................................................ 8 3.1 A modulok közötti kommunikáció ............................................................................ 10 3.1.1 RS-485 .............................................................................................................. 11 3.1.2 CAN busz.......................................................................................................... 11 3.2 Hőmérsékletmérő....................................................................................................... 13 3.3 Páratartalom érzékelő ................................................................................................ 14 3.4 Szélerősségmérés....................................................................................................... 14 4. Hardver............................................................................................................................... 15 4.1 Mikrovezérlő-család kiválasztása.............................................................................. 15 4.2 Az STM32-es mikrovezérlő ...................................................................................... 16 5. A modulok részletes bemutatása ........................................................................................ 18 5.1 Vezérlőmodul ............................................................................................................ 18 5.1.1 Tápegység ......................................................................................................... 19 5.1.2 SD kártya .......................................................................................................... 20 5.1.3 Ethernet-illesztő ................................................................................................ 20 5.1.4 Kijelző illesztés................................................................................................. 21 5.1.5 CAN busz illesztés............................................................................................ 22 5.2 Szenzormodul ............................................................................................................ 24 5.3 Kiegészítő modulok................................................................................................... 26 5.4 IO modul.................................................................................................................... 29 5.4.1 Kimeneti fokozat............................................................................................... 29 5.4.2 A modul tápegysége.......................................................................................... 31 5.5 Tápegység és akkutöltő.............................................................................................. 32 6. Megvalósítás....................................................................................................................... 32 6.1 A nyomtatott áramköri lapok megtervezése .............................................................. 32 6.2 Modulok élesztése ..................................................................................................... 33 7. Szoftver .............................................................................................................................. 34 7.1 Fejlesztőkörnyezet ..................................................................................................... 34 7.2 Programozó hardver................................................................................................... 35 7.3 Operációs rendszer..................................................................................................... 35 7.3.1 Control_Task..................................................................................................... 36 7.3.2 Communication task ......................................................................................... 36 7.3.3 uIP_Task ........................................................................................................... 36 7.3.4 uIP_periodic_Task ............................................................................................ 36 7.4 Fájlkezelés ................................................................................................................. 36 7.5 Ethernet kezelés ......................................................................................................... 38 7.5.1 uip TCP/IP stack ............................................................................................... 38 7.5.2 Weboldal ........................................................................................................... 39 7.5.3 Webszerver funkciók ........................................................................................ 40 7.6 Grafikus kijelző ......................................................................................................... 40 7.7 Menürendszer ............................................................................................................ 42 7.8 CAN busz kezelés...................................................................................................... 45 8. Összefoglalás...................................................................................................................... 48 9. Irodalomjegyzék................................................................................................................. 49 10. Függelék......................................................................................................................... 51
6
1. Bevezetés A mai kor megköveteli, hogy a növényházakban termesztett növényeknek minél optimálisabb körülményeket teremtsünk. A termés optimalizálására a körülmények biztosításának egyik lehetősége a növényház automatizálása. A megépítendő rendszer egy valós alkalmazási célra készül, egy jelenleg is működő (szobatermosztátokkal vezérelt) növényház ajtóinak nyitását és zárását fogja végezni a különböző szenzorok által mért adatok szerint. A megtervezése során elsősorban
a
megbízhatóságot
illetve
az
univerzalitást
tartottam
a
kiemelt
szempontokként. A növényház kifejezés takarja mind az üvegház, illetve mind a fóliasátor kivitelezést, a dokumentációban a könnyebb érthetőség érdekében általában üvegházként hivatkozok a növényházra.
7
2. Gyári megoldások Munkámat gyári megoldások áttekintésével kezdtem, hogy képet kapjak arról hogy milyen fizikai mennyiségeket szoktak mérni az eszközök, illetve a felépítésükről szerezzek információt.
2.1 Wadsworth EnviroSTEP Ez egy egyszerűbb és kisebb tudású üvegházvezérlő [1]. Önálló működésű, mikrokontroller vezérlésű, hálózatba nem köthető.
1. ábra - Wadsworth EnviroSTEP
Főbb jellemzői: Csak analóg szenzorokat tud kezelni, illetve rendelkezik 4 digitális bemenettel egyéb kapcsolók érzékelésére. 12 relés, illetve 2 darab 0-10 V-os analóg kimenettel rendelkezik, az adatokat 15 percenként képes menteni, és 7 napra visszamenőleg tárolja azokat. Bővíthetősége annyiban merül ki, hogy kapható hozzá szélsebességmérő modul, illetve egy olyan modul amelyen keresztül egy számítógéppel tud kommunikálni.
2.2 Growtronix Számítógép alapú rendszer [2], egyszerűbb vezérlések megvalósítására. A vezérlést maga a PC-n futó szoftver végzi, a számítógéphez RS232 porton csatlakozik, maga az eszköz tápegysége. A tápegység modulra lehet felfűzni az összes eszközt, szabványos CAT5 kábelekkel működik a rendszer, de nem ethernet alapon. Egyszerre maximum 29 eszközt kezel, lánc struktúrát megvalósítva.
8
2. ábra - Growtronix rendszer
2.3 Szenzorok Kutatásom során, illetve az eddig megismert rendszerek alapján az alábbi mennyiségek függvényében működnek a szabályzók -
hőmérsékletérzékelés (hűtés, fűtés, szellőztetés)
-
páratartalom mérés (szellőztetés)
-
talajnedvesség mérés (locsolás)
-
fényerősség mérés (árnyékolás)
-
CO2 szint mérés (CO2 befúvatás)
-
szélerősség mérés (védelem) Ezek közül a jelenlegi alkalmazás szempontjából első közelítésben a
hőmérsékletmérést, páratartalommérést, illetve a szélerősségmérést tartom fontosnak megvalósítani, de meghagyom a lehetőséget későbbi bővítés során a többi beépítésére. A piacon kapható szenzorok egy része vagy komplett egységként kapható (pl.: termosztát), vagy valamilyen rendszerhez csatlakoztathatóan. Ezek lehetnek ipari szabványt használó (pl .: analóg, RS-485 ) komplett modulok, vagy önmagában álló integrált áramkör.
3. A rendszer felépítése A családi házunknál található a kertben egy fóliasátor, amelyben dísznövényeket termesztünk, így a növények számára ideális hőmérsékletet kell biztosítani, amelyet az ajtók nyitásával lehet megoldani. Öt darab ajtó található a fóliasátron, de ezek három kategóriába esnek, a végeken lévő alsó illetve fölső ajtók, illetve középen a tetőajtó.
9 Ezek nyitása elektromos úton történik házilag épített lineáris egységek által. Ezek 24 V egyenfeszültségről működnek, polaritás váltással lehet az ajtókat nyitni illetve zárni, a lenyitott illetve bezárt állapotot egyszerű végálláskapcsolók érzékelik, illetve szakítják meg az áramot. Mivel a jelenlegi vezérlés hagyományos szobatemosztátokkal van megvalósítva, így fennáll az a probléma, hogy nem lehet tetszőleges nyitási is zárási hőmérséklet tartományokat beállítani, illetve különböző kényelmi funkciókat nem tud megvalósítani a rendszer.
3. ábra - A fóliasátor felépítésének rajza
A helyi adottságok alapján össze tudtam állítani a követelményeket amelyeket teljesítenie kell a rendszernek. A fent említett fóliasátor ajtajainak a vezérlését kell megoldania. Rendelkeznie kell megfelelő kimenetekkel amelyek meg tudják hajtani az ajtókat kapcsoló reléket. Minden ajtó kategóriát külön kell tudnia vezérelnie egymástól függetlenül. Egy központi egységnek kell az egész rendszert felügyelni és vezérelni. A központi egység rendelkezzen grafikus LCD-vel amelyen láthatóak legyenek az érzékelők által mért értékek, illetve a hozzájuk tartozó határértékek. A határértékek legyenek állíthatóak, a grafikus LCD-ről kezelőszervekkel. Kényelmi funkcióként rendelkezzen távoli menedzselési lehetőséggel, amelyen ugyanazokat a beállításokat el lehessen végezni, mint a kezelőszervekkel. Szenzorok tekintetében levegő hőmérséklet, páratartalom, és szélerősséget kell mérnie, a vezérléshez a belső hőmérsékletet kell figyelembe vennie. Az ajtók manuális nyitásához illetve zárásához a fóliasátorban biztosítani kell nyomógombokat arra az esetre, ha valamilyen okból szükséges az ajtók külön vezérlése. Ezek alapján az elképzelt rendszer felépítése az alábbiak szerint alakul: az egész rendszert a vezérlőmodul szolgálja ki. Ez felel a szenzorok kiolvasásának ütemezésért,
10 és a beolvasott értékek alapján történő működtetésért. A vezérlő rendelkezik kijelzővel, így grafikus felhasználói felületet nyújt a felhasználónak, aki így a különféle beállításokat illetve az aktuális fontos paraméterek értékét nyomon követheti.
4. ábra - A rendszer felépítésének terve
Szenzor modulok feladata a szenzorok buszra illesztése. Ezekre azért van szükség, mert az egyes szenzorok kommunikációs interfésze teljesen más lehet, illetve a nagyobb távolság miatt nem lehetne biztosítani a zavarmentes működést. Az IO modul szerepe a fizikai beavatkozók kapcsolása, ez a busz topológia miatt tetszőlegesen helyen állhat, illetve több darabot is tartalmazhatna ha az üvegház felépítése megkövetelné. Az egyes modulok között egy busz tart kapcsolatot. A típusának kiválasztása során figyelembe kell venni hogy nagyobb távolságot kell áthidalni hibamentesen, és az esetleges bővíthetőség lehetőségéről sem szabad megfeledkezni. A tápegység látja el az egyes szenzorokat illetve vezérlő egységet tápfeszültséggel. Az alkalmazandó 24 V-os feszültség kellően magas ahhoz hogy a kábelen lévő veszteség miatt probléma legyen, illetve a 24 V törpefeszültségnek minősül, így nincs érintésvédelmi probléma a használata során. A tápfeszültséget az egyes modulok a busznak használt többeres kábel erre fenntartott szálain kapják.
3.1 A modulok közötti kommunikáció A modulok egymással való kapcsolatát valamilyen nagy távolság áthidalására képes vezetékes összeköttetésnek kell biztosítania. Nagyobb távolságra csakis differenciálisan vitt jelekkel lehet biztosítani a hibamentes nagyobb sebességű kommunikációt, ezért ilyen elven működő buszok közül választottam ki két jellemző típust, amelyet összehasonlítottam
11
3.1.1 RS-485 Az RS-485 manapság [3] az ipari irányítástechnikában széleskörűen elterjedt kommunikációs busz típus. A szabványt az EIA/TIA vezette be. A TIA/EIA-485 szabvány csak a busz fizikai felépítését, meghajtó áramkörök felépítését definiálja, miközben a buszon megvalósított kommunikációs protokollt nem. A hálózatot csavart érpárral lehet kialakítani, és ajánlott csakis lánc alakzatban felépíteni, a reflexiók kiküszöbölése érdekében. A busz végein található 1-1 darab a vezeték hullámimpedanciájával megegyező lezáró ellenállás.
5. ábra - RS485 busz felépítése (forrás: [3])
Az RS-485 hálózat szabvány szerint maximum 32 eszközt tartalmazhat egy buszon, illetve hátrányként említhető meg az is, hogy semmilyen hardveres támogatás nincs a buszon való kommunikáció lebonyolítására. A busz egyik végén található meg az az ellenállásosztó, amely a busz közösmódusú előfeszítését valósítja meg. Ez azért szükséges hogy a feszültségszintek a vevők komparálási szintjéhez megfelelően illeszkedjenek.
3.1.2 CAN busz A CAN buszt [4] a Bosch cég fejlesztette ki, és a nyolcvanas évek végére lett belőle ipari szabvány. Eredetileg autóipari alkalmazások céljára készült, mivel ekkor kezdtek megszaporodni az autókba épített különböző elektronikus segédberendezések (ECU, ABS, stb) és a köztük lévő gyors kommunikációt biztosítani kellett. Fizikai felépítését az ISO11898–as szabvány ismerteti. A buszt felépítését tekintve egy csavart vezetékpár alkotja, amelyet differenciálisan hajtanak meg az eszközök. A csavart érpár biztosítja a külső elektromágneses tér elleni zavarvédelmet, a differenciális jelvezetés pedig a közösmódú zavarok elleni védelmet biztosítja.
12
6. ábra - CAN busz felépítése (forrás: [4])
A busz a végein találhatóak azok az ellenállások, amelyek biztosítják a vezetékre jellemző hullámimpedanciás lezárást a reflexiók minimalizálására. A szabvány szerint a buszokra csatlakozó eszközöket node-oknak nevezik, melyek a buszra láncszerűen csatlakoznak közvetlenül, hozzávezetések nélkül. (Hosszú hozzávezető kábelek reflexiókat okoznának). A CAN busz multimasteres, a busz arbitrálás hardveres úton van megoldva minden CAN üzenet elején. Későbbi fejlesztés során így lehetőség van arra, hogy akár több vezérlőegység legyen egy buszon (pl. ha több fóliasátron keresztül van vezetve a busz, és néhány szenzormodul, illetve IO modul közös). Alapkiépítésben ez nincs kihasználva, mert a vezérlő egyszerre csak egy modullal kommunikál, és a kérés után vár a válaszra. Az összeköttetés maximális hosszát elsősorban az átviteli sebesség határozza meg, a korlátozás oka a kábelen történő jelterjedés véges sebessége. 1 Mbit sebességgel kb. 40 m az áthidalható sebesség, de a sebesség drasztikus csökkentésével több mint 1000 métert át lehet vele hidalni.
7. ábra -CAN keret felépítése (forrás: [5])
Egy CAN adatcsomag felépítése a 7. ábrán látható [5]. A csomag elején található meg a csomag azonosítója, amely segítségével az arbitrálás végrehajtódik. Minél kisebb
13 a cím annál nagyobb a prioritása, mivel a buszon a 0 szint dominál. A cím küldésekor a küldő node figyeli hogy a kiadott jelszintnek megfelelő adatbit található-e a buszon. Abban az esetben ha ez nem stimmel, akkor csomag ütközés jönne létre, emiatt felfüggeszti a csomag küldését, és vár addig amíg fel nem szabadul a busz. Az azonosító után követeznek a vezérlőbitek, illetve a csomag hosszát jelölő DLC bájt. A DLC jelentése az, hogy az utána következő adatbitek közül mennyi jelenti az adatmezőt. Az adatmező után következik a 15 bites ellenőrző összeg, amely segítségével el lehet dönteni a csomagról hogy keletkezett-e valamilyen sérülése. A fentiek alapján arra a következtetésre jutottam, hogy az én célomra a CAN busz lesz az ideálisabb. Fő előnyei a hardveres kommunikációs támogatás, és a nagy átvihető távolság, továbbá mivel manapság ez egyre jobban elterjedő szabvány, ezért a hasznos ismeretekre tudok szert tenni a fejlesztés folyamán A busz fizikai megvalósítása hagyományos CAT5 UTP kábellel fog történni, ennek a hullámimpedanciája megfelelő a CAN busz számára is. Mivel a kábel 8 eres, a fennálló szabad vezetékeken át lehet vinni a modulok számára a 24 V-os tápfeszültség.
3.2 Hőmérsékletmérő Jelen alkalmazásban a levegő hőmérsékletét kell mérni, ezért egy egyszerű hőmérsékletmérő integrált áramkört elegendő használni. Abban az esetben ha talajhőmérsékletet kellene mérni akkor már célszerűbb lenne egy gyárilag erre felkészített szenzort használni, a megfelelő szigetelés miatt Növényházi alkalmazás céljára általában elegendő a 0,5 °C felbontás is, így a szenzor
kiválasztását leszűkítettem az ilyen pontosságú eszközökre. A levegő
hőmérsékletének mérésére megfelelő egy hagyományosan tokozott integrált áramkör. Általában minden nagyobb félvezetőgyárnak létezik saját hőmérsékletmérő integrált áramköre, többféle interfésszel, így érdemes rászánni az időt a megfelelő kiválasztására. Típus LM75 ADT7301 DS18B20 TMP100
Felbontás(°C) max 0,50000 0,03125 0,06250 0,06250
Pontosság (°C) ±2 ±1 ±0,5 ±2
Interfész
Tokozás
Ár(Ft)
I2C SPI 1-Wire I2C
SO8 SOT23, MSOP8 TO92, uSOP8 SOT23
229 1066 1500 990
1. táblázat – A célra alkalmas hőmérsékletmérő IC-k (forrás:[6])
A
szóba
jöhető
integrált
áramkörök
az
1.
táblázatban
találhatóak.
Összehasonlításom alapja a maximális felbontásuk, pontosságuk, a kommunikációs protokoll típusa, tokozás és az áruk volt. A táblázat alapján látható hogy a legpontosabb
14 IC-nek a DS18B20 IC kínálkozik, viszont ez a legdrágább. Ha egy kicsit lejjebb adunk a pontosságból, akkor a következő az ADT7301. Ennek az ára már alacsonyabb, és a pontossága is, de az alkalmazás szempontjából még megfelelő. A DS18B20 egyvezetékes kommunikációt használ, amivel könnyebb megoldani azt, hogy ne a NYÁK-on helyezkedjen el, hanem egy 1-2 méteres vezetéken, viszont a kommunikációs protokoll jóval bonyolultabb az SPI-t használó ADT7301 IC-nél. Megemlítendő, hogy a felbontásuk a kitűzött célt jóval felülteljesítik, de ilyen pontossági osztályban ilyeneket lehet találni.
3.3 Páratartalom érzékelő A páratartalom érzékelőből léteznek ipari szabvány analóg kimenettel ellátott szenzorok, illetve léteznek csak félvezető alapú szenzor IC-k is. Jelen alkalmazásban a digitális kimenettel rendelkező szenzorokat részesítem előnyben, a digitális környezetbe való könnyebb illeszthetőség érdekében. Mivel a pontosságuk függ a hőmérséklettől, ezért kompenzálásként általában tartalmazzák a hőmérsékletérzékelőt is, így akár meg lehetne spórolni a hőmérsékletszenzort a rendszerből, viszont ezek pontossága alacsonyabb a komolyabb, kifejezetten hőmérsékletmérésre gyártott IC-knél. Típus
Felbontás % Pontosság %
Interfész
Tokozás
Ár (Ft)
HIH6131
0,04
±4
I2C
SO8
5600
SHT11
0,05
±3
I2C
LCC
8600
SHT25
0,04
±1,8
I2C
LCC
9400
2. Táblázat – Páratartalom érzékelők (forrás:[6])
Páratartalom érzékelő IC-kből kisebb a kínálat, valamint az áruk is egy nagyságrenddel magasabb tartományban mozog. Pontosság szempontjából a legjobb a Sensirion gyártmányú SHT25-ös IC, és ennek a legmagasabb az ára is. Ilyen komoly pontossági követelmény viszont nem szükséges, így költségkímélés céljából a Honeywell gyártmányú HIH6130-as lesz beépítve.
3.4 Szélerősségmérés Üvegházi alkalmazásnál fontos lehet hogy figyelje a külső időjárást, és megfelelően reagáljon rá. Ilyen esetre jó példa az, hogy vihar esetén a növények és maga az üvegház védelme érdekben az ajtókat, szellőztetőket becsukja, hogy az erős szél ne tegyen bennük kárt.
15 A
szélerősség
mérésére
legegyszerűbb
esetben
használhatunk
kanalas
szélerősségmérőket, amiből érkező sebességgel arányos impulzusokat lehet dolgozni. Pontosabb illetve gyorsabb mérésre képesek az ultrahangos szélsebességmérők, de jelenlegi alkalmazás nem követel meg ilyen pontosságot.
4. Hardver 4.1 Mikrovezérlő-család kiválasztása A megfelelő mikrovezérlő kiválasztása egy nagyon fontos lépés a rendszer szempontjából. A kapcsolástechnikát meghatározza a mikrovezérlő családja, illetve előre kell gondolkozni, hogy később a szoftverfejlesztést milyen eszközökkel lehet megoldani. Az első fontos döntési kérdés az volt, hogy 8 bites vagy 32 bites mikrovezérlő kerüljön beépítésre. A 8 bites mikrovezérlők jellemzően maximum 20 MHz-es sebességgel működnek, amely itt a szenzor modulnál bőven elegendő lett volna, viszont általában CAN interfészt nem tartalmaznak, vagy amelyekben megtalálható, azok jellemzően olyan áron beszerezhetőek, mint egy 32 bites mikrovezérlő. Továbbiakban a jövőre gondolva célszerű, ha ugyanaz a fejlesztőkörnyezet van használva és ugyanazt a szoftveres library-t használja a rendszerbe épített összes mikrovezérlő, ami különösen hasznos abban az esetben, ha a később debuggolni kell. A vezérlőmodulba egy LCD kijelző kerül beépítésre, ezért célszerű olyan típust használni, amely tartalmaz valamennyi hardveres gyorsítást, hogy lehetőleg minél gyorsabban lehessen frissíteni a kijelző tartalmát. Ezzel a felhasználói élményt nem rontja el, és készülék egy gyorsan működő rendszer benyomását kelti. Az alkalmazott kijelzővel párhuzamos 16 bites buszon lehet kommunikálni, tehát olyan vezérlő kell amely erre képes. A 32 bites mikrovezérlők közül egyre jobban elterjednek a Cortex-M mag alapú mikrovezérlők, ebből jelenleg a legkönnyebben talán a Cortex-M3 mikrovezérlőkkel lehet megbarátkozni, mert sok dokumentáció fellelhető hozzá. Fejlesztőkörnyezetből létezik hozzá nyílt forráskódú, ingyenesen hozzáférhető, programozó illetve debugger eszközből is hasonló a helyzet. A jelenleg beszerezhető családok közül az NXP, ST, illetve az ATMEL gyártmányúak jöhettek szóba, de ebből kiestek számomra az NXP gyártmányúak mert azokon nincs párhuzamos kimenet, emiatt a kijelző frissítési sebessége nagyon lassú
16 lenne. Végül az ST gyártmányú mikrovezérlők mellett döntöttem, mert ez rendelkezik a fentebb a kijelző meghajtásához alkalmas memória interfésszel [7].
4.2 Az STM32-es mikrovezérlő Az áramkörökbe az ST Microelectronics által gyártott STM32-es 32bites családba tartozó mikrokontrollereket építettem be. Közös jellemzőjük, hogy mindegyikben az ARM által kifejlesztett Cortex-M3 maggal rendelkeznek. Ez a mag egy viszonylag új fejlesztés, elsősorban a 8bites mikrovezérlők konkurenciájaként lett kifejlesztve. Alacsony tápfeszültségűek és áramfelvételűek, de komolyabb számítási teljesítménnyel rendelkeznek a 8bites változatokhoz képest. Órajelüket tekintve 100 MHz felett változatuk is létezik, az ár és teljesítmény arányuk sokkal kedvezőbb a 8 bites változatokhoz képest.
8. ábra - STM32F1 sorozat blokkvázlata (forrás:[8])
A mikrovezérlő belső felépítése a 8. ábrán látható. Megfigyelhető hogy nagyobb sebességű eszközök egy busz mátrixon keresztül kapcsolódnak egymáshoz és az AHB
17 buszhoz. Ennek a busz mátrixnak az a lényege hogy közvetlenül tudnak egymással kommunikálni a magasabb sebességű eszközök, és nem az AHB buszt használják. Így meg lehet valósítani azt, hogy míg a DMA periféria adatokat másol valamilyen periféria felől a belső SRAM-ba, addig CPU a Flash memóriából hozhatja fel a következő utasításokat. Az alacsonyabb sebességű perifériák az APB1 és APB2 buszokon találhatóak meg. A legtöbb perifériához lehet DMA-t rendelni, így sokat lehet gyorsítani, illetve automatizálni a megoldandó feladatot főleg hogy képes periféria-periféria közötti adatátvitelre is. Így például megoldható egy AD konvertálás eredményét felhasználva közvetlenül kitöltési tényezőt állítani egy Timer PWM modulján. Az egyes perifériák energiatakarékos módját úgy biztosítják a mikrovezérlőben, hogy a meghajtó órajelüket le lehet tiltani. Ilyenkor a beépített CMOS tranzisztorokra jellemzően megszűnik a dinamikus áramfogyasztás, és csak a nagyon alacsony statikus áramfogyasztás marad meg. Mivel alaphelyzetben minden periféria kikapcsolt állapotban van, inicializálásuk előtt be kell kapcsolni a hozzájuk tartozó órajelvezetéket az órajelmodulban. Az órajel ellátást az alábbi ábra szemlélteti
9. ábra - STM32F1 sorozat órajel modul (forrás:[8])
18 A mikrovezérlőben alapvetően 4 db oszcillátor található. Egy 40 kHz-es LSI, amely csak a watchdog illetve a belső Real-time clock-ot tudja meghajtani. A real-time clock meghajtására megtalálható az LSE oszcillátor amely az elterjedt pontos külső 32.768 kHz-es kvarc kristály meghajtására használható. Maga a processzor járhat a belső 8 MHz-es (HSI) oszcillátorról, vagy külső 4-16 MHz-es kvarc kristályról (HSE). Ezekhez az oszcillátorokhoz lehet rendelni PLL-t is, amellyel a külső kvarc frekvenciáját fel lehet szorozni. A felhasznált STM32F103C6T6 illetve STM32F104VC mikrovezérlők maximum 72 MHz-en működtethetők, de a szenzormodulokban csak 12 MHz-en járnak, a központi vezérlőpanelba épített pedig 48 MHz-en. A PLL által felszorozott órajel hajtja a processzor magot, illetve az AHB buszra tartozó perifériákat. Az APB perifériákra kerülő órajelet akár osztani is lehet, ha szükséges, de az APB1 perifériánál maximum 36 MHz-en működhetnek az eszközök.
5. A modulok részletes bemutatása Mivel a modulok kapcsolási rajza A4-es méretű, ezért ezek a jelen beszámoló függelékében találhatóak meg, itt alább csak a modulokra jellemző lényeges kapcsolási részleteket emelem ki és mutatom be. Az egyes modulok kapcsolása között bizonyos áramköri részletek megegyeznek, ezáltal gyorsabb volt a fejlesztés, és kevesebb fajta alkatrészt kellett beépíteni.
5.1 Vezérlőmodul A vezérlőmodul szolgál a szenzormoduloktól való adat lekérdezésére, illetve ezek alapján az IO modul(ok) vezérlésére. Követelményként tartalmaznia kell ethernet interfészt hogy távolról menedzselhető lehessen, rendelkezzen megfelelő méretű LCD kijelzővel, illetve megfelelő memóriával, ahol a kijelzőre kerülő grafikákat tudja tárolni. A modulba egy STM32F103VCT6 típusú [8] mikrovezérlő került beépítésre.
19
10. ábra - Vezérlőmodul blokkvázlata
5.1.1 Tápegység A tápegységnek kell előállítania a mikrovezérlő, illetve a különféle egyéb perifériák 3.3 V-os tápfeszültségét az egész rendszer 24 V-os feszültségéből. Ismerve azt, hogy a kijelző háttérvilágítása illetve az ethernet vezérlő fogyasztja a legtöbbet összesen (kb. 300 mA) ezért csakis valamilyen kapcsolóüzemű feszültségszabályzó jöhet szóba, hogy kicsi legyen a veszteség. Erre a célra a Microchip MCP16301-es, viszonylag új integrált áramkörét [9] használtam fel. A dokumentációja szerint képes akár 96 %-os hatásfokkal működni, kisméretű SOT23-6 tokozással rendelkezik, magas a kapcsolási frekvenciája, emiatt kisméretű és értékű induktivitást lehet beépíteni. 600 mA áram leadására képes, tehát így az áramkör céljait teljes mértékben kielégíti.
11. ábra - 3.3V-os tápegység
A tápegység sorkapcsokon kapja meg a 24V-os tápfeszültséget, védelemként található rajta egy SMJ33A típusú 33 V-os túlfeszültség-levezető, az IC védelme céljából. Az IC hagyományos step-down elven működik, a kimenőfeszültséget az R7 és R8-ból felépített feszültségosztóval lehet beállítani a kívánt tápfeszültségre, amely itt a
20 jelen esetben 3.3 V. Érdekességképpen a kapcsoláson szereplő D2 és C6 által alkotott kapcsolás szolgáltatja a beépített N-csatornás kapcsolótranzisztor számára a Gate feszültséget.
5.1.2 SD kártya A kijelzőn használandó grafikák tárolására szükség van valamilyen nagyobb kapacitású memóriára. Ez lehet valamilyen Flash alapú memória IC, vagy lehet használni SD kártyát. Manapság az SD kártyák ára nagyon alacsony, illetve könnyű őket kezelni, valamint cserélhető, ezért ezt terveztem bele.
12. ábra - SD kárya illesztése
Az SD kártyákat lehet az egyszerű SPI interfészen keresztül kezelni, illetve létezik egy gyorsabb, 4bites párhuzamos kommunikációs módja is, de annak nincsen hozzáférhető dokumentációja, így a jelenlegi alkalmazásban SPI módos kezelés szerint van bekötve. A mikrovezérlőhöz a MISO, MOSI, SCK jeleken csatlakozik, illetve még az M_CS kiválasztó jellel. Ezen a buszon található meg az ethernet vezérlő is így ezen osztozkodva egyszerre csak az egyik eszközzel lehet kommunikálni.
5.1.3 Ethernet-illesztő A specifikáció szerint az áramkörnek rendelkeznie kell ethernet interfésszel, a távoli számítógépes kapcsolat biztosítására. A mikrovezérlő kiválasztásánál az egyik nagy dilemma volt a beépített ethernet vezérlő, vagy a kijelzőhöz való memória interfész, mivel ebben a családban nem volt olyan típus, amelyik mindegyiket támogatta volna. Végül az a típus lett felhasználva, amelyikben nincs ethernet interfész, így ezt egy külső megoldással kellett megvalósítani. Ennek összesen annyi hátránya van, hogy valamennyivel lassabb mintha beépített vezérlő lenne. Választásom a Microchip
21 ENC28J60-as típusára esett [10]. Ezt elterjedten használják beágyazott rendszerekben, így kellő támogatás is rendelkezésre állt a szoftver fejlesztéséhez.
13. ábra - Ethernet illesztő
Az ethernet vezérlő SPI buszon kommunikál a mikrovezérlővel, ugyanarra a buszra van kötve mint az SD kártya, továbbá rendelkezik egy interrupt kimenettel a mikrovezérlő felé, amelyet elsősorban a beérkező ethernet csomag jelzésére használ. Az IC-hez szükséges még csatlakoztatni az ethernet kábel meghajtásához szükséges illesztő transzformátort, ebből létezik RJ45-ös csatlakozóba épített változat, így ilyen lett beépítve, helytakarékossági célból.
5.1.4 Kijelző illesztés A kijelzőben található egy SSD1289-es vezérlő IC [11], aminek köszönhetően a kijelző saját memóriával rendelkezik, elegendő csak akkor képet feltölteni a kijelzőre, amikor valami változás történt, nem kell egyfolytában frissíteni. A kijelzővezérlő párhuzamos 16 bites buszon kommunikál a mikrovezérlővel. A mikrovezérlő rendelkezik párhuzamos kimenettel is, ezért akár közvetlenül is meg lehetne oldani a vezérlést, de ennél sokkal kifinomultabb, ha a beépített FSMC1 modulon [12] keresztül kommunikálunk
a kijelzővel.
Ennek
köszönhetően
a kijelző
egy bizonyos
memóriacímen lesz elérhető, így DMA műveletekkel gyorsan és automatikusan lehet frissíteni a képernyő tartalmát.
1
Flexible Static Memory Controller
22 A
vezérlőmodul
kezelését
alapértelmezetten
a
kijelzőbe
beépített
érintőképernyővel lehet végezni. Lényegét tekintve két elektromosan vezető műanyag rétegből áll, amelyek alaphelyzetben egymástó elszigetelve vannak egymástól. Érintés esetén ezek egy ponton érintkeznek, így egy-egy ellenállásosztó alakul ki.
14. ábra - Rezisztív érintőképernyő illesztése
Ha erre a két-két ellenállásosztóra feszültséget kapcsolunk, és a másikból olvasunk, majd megfordítva ugyanezt végigcsináljuk, akkor megkapunk két feszültséget, amelyek az X és az Y koordinátával arányos. Ezt a műveletet a mikrovezérlő GPIO kimeneteivel, illetve AD konverterével meg lehet oldani, de maga a kijelzőmodul tartalmaz egy ADS7843 típusú [13] érintőkijelző vezérlő IC-t. Ez önmagában elvégzi a mérést, így csak az ADC értékeket kell kiolvasni. Rendelkezik egy TP_IRQ kimenettel, amely abban az esetben aktív, ha éppen meg van érintve a kijelző, ezt így megszakítással le lehet kezelni, és a megfelelő koordinátákat ismerve műveleteket lehet végezni a grafikus felületen
5.1.5 CAN busz illesztés A CAN buszhoz való vezérlőt beépítve tartalmazza a mikrovezérlő, így csak a buszmeghajtót, a fizikai réteget kell hozzátervezni. Ilyen meghajtó a Texas Instruments SN65HVD230-as integrált áramköre [14], amely biztosítja a megfelelő teljesítményt a busz meghajtásához, illetve a sebessége is elegendő jelen alkalmazáshoz.
23
15. ábra - CAN busz meghajtó
Az IC mikrovezérlővel a TXD és az RXD lábon csatlakozik. Küldés során, ha a TXD alacsony szinten van, akkor a kimeneten a CANH és CANL vezeték domináns2 állapotban van, magas TXD szint esetén recesszív állapotban. Az RXD láb ehhez megfelelően, akkor van magas szinten, ha recesszív szint van a CAN buszon. Az IC képes 3.3 V-os tápfeszültségről működni, kialakítását és feszültségszintjeinek határát tekintve az 5 V-os tápfeszültségről működő CAN buszokkal is kompatibilis. Bár a meghajtó IC a dokumentáció szerint rendelkezik busz felőli túlfeszültségvédelemmel, a biztonság kedvéért beépítésre került egy NXP gyártmányú PESD1CAN típusú, kifejezetten CAN buszra kifejlesztett túlfeszültség levezető dióda. A
kapcsoláson
található
R11
és
R12
ellenállás
valósítja
meg
a
hullámimpedanciás lezárását a kábel felé. Az értéküket a kábel hullámimpedanciája határozza meg, de célszerű a végleges beszerelés után ellenőrizni a jelalakokat a buszon, szükség esetén korrigálni rajta. Nem minden modulba kell beépíteni a lezáró ellenállásokat, csak a busz két végén lévő eszközbe.
2
Domináns állapot: a CANH láb magas szinten van, a CANL lába alacsonyan, a recesszív állapot esetén magas impedanciás állapotban vannak a kimenetek. Ilyenkor a buszon a CANH és CANL lábak ugyanazon a feszültégen vannak, jellemzően VDD/2
24
16. ábra - A megvalósított vezérlőmodul, kijelző nélkül
A modul egy 104x65 mm méretű NYHL lemezre fért rá. A méretét elsősorban a beépített kijelző modul méretei határozták meg. A kijelző távtartókkal van rögzítve a vezérlőmodulhoz, és hosszú tüskesorral csatlakozik az alatta lévő áramkörhöz. A távtartó hossza akkora hogy a kijelző alá befér az Ethernet csatlakozó. A modul sorkapcsokon keresztül kapja meg a tápfeszültséget, illetve a CAN busz felé is ezen keresztül csatlakozik.
5.2 Szenzormodul A szenzormodulok kisméretű áramkörök, feladatuk jellemzően a különböző interfésszel rendelkező szenzorok illesztése a CAN buszra, így egységes felületet biztosítva a vezérlőmodul számára, ezáltal a vezérlőmodulnak sokkal egyszerűbb lekérdezni a szenzorok által mért adatokat.
25
17. ábra - A szenzormodul blokkvázlata
A szenzormodulba egy STM32F103C6 típusú [15] mikrovezérlő van beépítve, ez rendelkezik 32 kbyte FLASH memóriával 8 kbyte RAM-mal, CAN, SPI, I2C interfésszel, illetve AD konverterrel, így a célnak tökéletesen megfelel, könnyen beszerezhető és olcsó mikrovezérlő. A modult tápfeszültséggel a fentebb megismert MCP16301-el felépített tápegység látja el. Ide szintén szükséges volt a kapcsolóüzemű tápegység, a hatásfok biztosítása és a hőtermelés minimalizálása miatt. A szenzormodul szintén az SN65HVD230-as CAN illesztővel tart kapcsolatot a busszal, és itt is megtalálható a túlfeszültség védelem.
18. ábra
A modul csatlakozó kiosztása a 18. ábrán látható, rendelkezik I2C és SPI lábakkal, illetve mindegyik láb használható analóg bemenetnek, így csak a szükséges kisméretű NYÁK lemezt kell elkészíteni és hozzácsatlakoztatni. A szenzormodul a szenzoroktól való adatgyűjtésen kívül másra is alkalmas. Ilyen alkalmazás lehet például LED-ek meghajtása, vagy nyomógombok olvasása, illetve egyszerűbb kijelző vezérlése
26 is. A jelenlegi fóliasátorban is mutatnia kell majd aktuális hőmérsékletet, ellenőrzés céljából.
19. ábra - A megvalósított szenzormodul
A modul méretei 42x30 mm. A tápfeszültség és busz csatlakozása ugyanúgy van megvalósítva mint a vezérlőmodulnál. A szenzorokhoz való csatlakozás egy 90°-os tüskesorral van megoldva, így a kiegészítő panelt majd egyszerűen csak rá kell dugni.
5.3 Kiegészítő modulok
20. ábra - Kiegészítő szenzorpanelok
Az előbbiek alapján a szenzormodulok önmagukban csak a kommunikációt biztosítják, az egyes érzékelőket egy külön panelon kell csatlakoztatni hozzájuk. Tesztelési célokra készült LM75-ös hőmérő IC-vel is modul, de az alkatrészenkénti szórással nem voltam elégedett, így végül a Honeywell gyártmányú HIH6131-es [16] kombinált hőmérséklet és páratartalom mérő került beépítésre. A hozzá tartozó áramkör egyszerű, a szenzormodultól a tüskesoron keresztül kap tápfeszültséget illetve ezen a csatlakozón keresztül csatlakozik az I2C buszra.
27
21. ábra - A szenzormodulhoz csatlakoztatva
További kiegészítő a távirányító modulnak nevezett áramkör, amely a szenzormodulhoz csatlakozik. Ennek a feladata a rajta lévő energiatakarékos LCD-vel a növényházban a hőmérséklet kijelzése, továbbá a kezelőgombok segítségével az ajtók állásának a manipulálása. A segítségével lehet üzemközben az ajtókat kinyitni vagy becsukni például karbantartás céljából. úgy hogy ne kelljen a vezérlőmodulon állítgatni.
22. ábra - Távirányító panel
Az utolsó kiegészítő modul, a szélerősségmérőhöz tartozó illesztő áramkör. A szélerősséget
egy egyszerű
átalakításával készítettem.
kínai
forrásból
származó
kézi
szélsebességmérő
28
23. ábra - Szélerősségmérő illesztése a szenzormodulhoz
A működési elve azon alapszik, hogy található benne egy propeller, amelynek a forgó részén elhelyeztek egy apró mágnest, és a készülékházban pedig egy érzékelő tekercset. Ebből az eszközből csak a műanyag ház van felhasználva, és külső elektronika végzi a feldolgozást. Forgás során feszültség indukálódik a tekercsben, és ennek a frekvenciáját méri az eszköz.
24. ábra - Szélerősségmérő illesztő kapcsolási rajza
Ugyanezt az elvet felhasználva, egy kis áramfelvételű rail-to-rail műveleti erősítővel a tekercsen keletkező feszültséget felerősítem kb. 100x erősítéssel, majd a műveleti erősítő kimenetét kapacitív csatolással egy Schmitt trigger inverter bemenetére kötöm, amelynek a bemenetét fél tápfeszültségre húztam ellenállásosztóval, ennek eredményeképp négyszögesíti a műveleti erősítő jelét. Ezt felhasználva a szenzormodul
29 csatlakozóján a mikrovezérlő megkapja interrupt jelként, amelyet frekvencia méréssel vissza tud alakítani szélsebesség értékké.
5.4 IO modul Az IO modul szerepe a rendszerben a különféle végrehajtóegységek vezérlése, illetve néhány általános IO kimenetet biztosítani a külvilág irányába. Így későbbi fejlesztések esetén fel lehet ezeket használni, mielőtt új modult kellene tervezni. A modulból egy rendszerbe több is beépíthető, abban az esetben, ha a növényház felépítése megköveteli.
25. ábra - Az IO modul blokkvázlata
Felépítését tekintve a mikrovezérlő ugyanaz, mint a szenzormodulban, mivel itt sincs túl nagy követelmény a beépített perifériákkal szemben, itt is tartalmaznia kell a CAN modult, illetve mivel szükséges mérnie a 24 V-os tápfeszültséget, ezért rendelkeznie kell AD konverterrel.
5.4.1 Kimeneti fokozat A fóliasátor ajtóit 24 V-os DC motorral rendelkező lineáris egységek mozgatják. A mozgás irányát a motorokra adott feszültség polaritásával lehet megváltoztatni, a lineáris
egység
mozgási
tartományait
végállás-kapcsolók
megszakítják a motor áramellátását végálláshoz érés esetén.
érzékelik,
amelyek
30
26. ábra - Relés motor vezérlés
Az irányváltást a jelenlegi felépítésben nagyáramú relék végzik, mivel ezek az eddigi évek során bizonyították alkalmasságukat, ezért ezek továbbra is beépítve maradnak. Az áramkörnek ezek meghajtását kell megoldania. A relék az autóelektronikában használatos szabványos váltó relék, 12 V-os meghúzó tekerccsel rendelkeznek, és maximum 200 mA-t vesznek fel, és 30 A-t képesek kapcsolni.
27. ábra - Kimeneti fokozat
Mivel biztosítani kell azt, hogy a jelenlegi felépítéssel kompatibilis legyen az új áramkör, ezért a reléket „felülről” kell meghajtani, tehát +12 V-ot kell szolgáltatni a kimeneten a relék kapcsolásához. Ezt áramköri szempontból P csatornás FET-ekkel lehet a legkönnyebben megvalósítani. A kapcsolás szerint a mikrovezérlő az SW vezetéken keresztül hajtja az N csatornás FET-et, aminek hatására, ha H szintet kap, akkor a P csatornás FET Gate-jét lehúzza a földre, így az vezetni kezd és megjelenik a kimeneten a 12 V. Az alkalmazott FET IRFR5505 típusú, amely képes leadni 18 A-t így a feladat szempontjából többszörösen túl van biztosítva, de cserébe olcsón beszerezhető típus. A kimenet üvegcsöves biztosítóval túláram ellen védve van, illetve a kimeneten még található egy védődióda, amely a relé kikapcsolásakor keletkező feszültséglökés ellen véd a megfelelő polaritással.
31
5.4.2 A modul tápegysége Mivel az egész rendszer 24 V feszültségről működik és a relék 12 V működtető feszültségűek, biztosítani kell működtető feszültséget a megfelelő terhelhetőséggel, ezért kapcsolóüzemű tápegységet építettem az áramkörbe. A tápegység egy LM2576-12 típusú IC-vel [17] van felépítve, ez akár 3 A-rel is terhelhető, ha a megfelelő terhelhetőségű induktivitás van mellé építve. A jelenlegi alkalmazásban maximum 1Aes terhelés alatt kell teljesítenie, ezért ide tökéletesen megfelel.
28. ábra - 12V-os tápegység
A 3.3 V-os tápfeszültség egy egyszerű lineáris feszültség stabilizátorral van előállítva abból az okból kifolyólag, hogy a mikrovezérlőn kívül csak a CAN transceiver található a 3.3 V-os ágon. Az összes fogyasztás az adatlapok alapján kb. 15mA környékén alakul, így bőven elegendő hőtermelés és áramfelvétel szempontjából egy 100mA-es stabilizátor, a választásom az egyszerű 78L33-ra eset
29. ábra - Megvalósított IO modul
32 Befoglaló méretei 68x80mm, a modul szélén találhatóak meg a sorkapcsos csatlakozókon tápfeszültség bemenetek, illetve a vezérelt kimenetek, a tüskesorok közül az egyik a működtető program feltöltésére szolgáló JTAG csatlakozó, illetve a bővítő csatlakozó. A tápfeszültség ág és a kimenetek túláram védelmét 5x20mm-es biztosítók végzik. A panel sarkain furathelyek találhatóak a későbbi dobozolás megkönnyítése érdekében.
5.5 Tápegység és akkutöltő A tápegység modul célja az egész rendszer tápfeszültségének előállítása. Biztosítania kell a központi vezérlő, a szenzorok, továbbá az IO modul tápfeszültségét. Biztonsági szempontok szerint hálózati feszültség megszűnése esetére is szolgáltatnia kell a tápfeszültséget az ajtók bezárására (például egy komolyabb vihar esetére, amikor áramszünet lép fel), így a szükséges hogy akkumulátorok legyenek beépítve a rendszerbe. Továbbá akkumulátorok alkalmazásával kisebb teljesítményű tápegység beépítése elegendő, mert az ajtók mozgatásához szükséges magasabb áramerősséget ilyenkor az akkumulátorok biztosítják erre az időre.
30. ábra - Tápegység és akkutöltő
A jelenlegi megoldásban kettő autóakkumulátor soros kapcsolásával van biztosítva a 24 V feszültség a rendszer számára. Az akkumulátorok töltését egy egyszerű akkumulátortöltő végzi amelynek a felügyeletét az IO modul biztosítja.
6. Megvalósítás 6.1 A nyomtatott áramköri lapok megtervezése A kapcsolási rajzok letisztázása után lehetett nekiállni a NYÁK lapok megtervezésének, a fő szempont az volt, hogy csak a szükséges legkisebb méretűek, és könnyen szerelhetőek legyenek az elkészült áramkörök. A felhasznált tervező szoftver az elterjedten használt Altium Designer 10-es verziója volt.
33 Az alkatrészekből amit csak lehetett, SMD kivitelben terveztem a modulokra, passzív alkatrészek a szenzor és az IO modulon 1206-os méretűek, a vezérlő modulon a nagyobb alkatrészsűrűség miatt 0805-ös méretűek, így kényelmesen elférnek. A huzalozás és a furatátmérőket úgy választottam meg, hogy ne számoljanak fel rajzolatfinomsági felárat az áramkör legyártása során. A legvékonyabb vezetősáv szélesség 10 mil és a legkisebb furatátmérő 0.6 mm. Az egyes moduloknál a kapcsolóüzemű tápegységeknél ügyeltem az alkatrészek elhelyezésénél és a vezetősávok rajzolásánál az ide vonatkozó irányelvekre. Az alkatrészeket úgy helyeztem el, hogy a magasabb alkatrészek a felső rétegre kerüljenek, így később a dobozolás egyszerűsödik. Az áramkörök tervezése során hasznosnak bizonyult a NYÁK tervező 3D megjelenítési képessége, így képet lehetett kapni arról, hogy minden alkatrész megfelelően elfér-e.
31. ábra - Az IO modul 3D terve
6.2 Modulok élesztése Az áramkörök összeforrasztása és szemrevételezés után áramkorláttal ellátott tápegységgel ráadtam a tápfeszültséget, és közben mértem a felvett áramerősséget. Normál esetben mindegyik modulnak 50 mA alatti áramot kell felvenniük, el nem indított szoftverrel.
34 Az áramerősség megmérése után ellenőriztem a 3.3 V-os tápfeszültség meglétét és helyességét, majd, ezek után a mikrovezérlőhöz tartozó programozó hardver csatlakoztatása után ellenőriztem hogy „él-e” a mikrovezérlő. Mivel a működtető szoftver a hardverek elkészülésekor még nem állt rendelkezésre, emiatt a különféle perifériákat lépésről-lépésre lehetett csak tesztelni a szoftver írásával párhuzamosan. A szoftver fejlesztésének előrehaladásával sikerült megállapítanom, hogy minden beépített periféria és hardveres funkció a terveknek megfelelően működőképes.
7. Szoftver 7.1 Fejlesztőkörnyezet A felhasznált mikrovezérlő szoftverének a fejlesztéséhez szükséges a megfelelő fejlesztőkörnyezet kiválasztása, feltelepítése. Az STM32-höz léteznek fizetős, „gyári” szoftvercsomagok, csak ezek próba verzióban érhetőek el szabadon letöltésre, így általában néhány fontos funkciójuk nem érhető el, illetve csak erőteljes méretbeli korlátozással hajlandóak fordítani. Ezen okokból maradtam ingyenesen használható megoldásnál. A Cortex-M3-mas mikrovezérlőkhöz többféle ARM-ra portolt GCC fordító található. Az én választásom az általánosan elterjedt, a Mentor Graphics által gondozott Codesourcery G++ Lite verziójára esett [18]. A fejlesztés elején, így a szenzormodulokat működtető szoftvert ebben írtam meg, és ebben lett elkezdve a vezérlőmodul is. Később találkoztam a Coocox IDE nevezetű fejlesztőkörnyezettel [19], és próbaképpen átportoltam a projectet. Használata során kiderült hogy bár néha vannak benne még kiforratlan funkciók, alapjában véve nagyon jól használható és kényelmes fejlesztőkörnyezet. A legnagyobb előnyét akkor láttam meg, amikor bármilyen különféle speciális beállítás nélkül sikerült a Debug üzemmódot használni. A mikrovezérlőre írt szoftvert C nyelven írtam meg, a fejlesztés során próbáltam minél modulárisabb módon szervezni, hogy később könnyen lehessen módosítani, illetve az általam megírt kódot később máshol is fel tudjam használni. Amiből már létezett előre megírt függvény könyvtár, azt próbáltam felhasználni, hogy gyorsabban lehessen haladni a fejlesztéssel. A fájlkezelésnél illetve az ethernet vezérlőnél használtam fel előre megírt könyvtárat. A grafikus kijelzőhöz egy nagyrészt saját magam által írt könyvtárat használok. Az egyes szoftvermodulokat alább foglalom össze, komponensenként bemutatva. Az egyes szoftvermodulokat alább foglalom össze, komponensenként bemutatva.
35
7.2 Programozó hardver Fejlesztés során a futtatható kód feltöltésére több lehetőség kínálkozik ezeknél a mikrovezérlőknél. Az egyik lehetőség a beépített bootloader segítségével UART-on vagy CAN buszon felmásolni, de ilyenkor nagyon korlátozottak a debuggolási lehetőségek. A fejlesztési célokra ilyenkor a célszerű eljárás JTAG-et használni, vagy újabban SWD 3 portot. A fejlesztés során eleinte az OpenOCD szoftver csomaggal használtam egy FT2232-es IC-vel épített USB-s JTAG programozót, de később mikor áttértem a Coocox fejlesztőkörnyezetre, akkor ott már egy olcsó STM32F0Discovery fejlesztőpanelt használtam [20], amellyel lehetőség van külső áramkört programozni. Szerencsére az STM32-es mikrovezérlőknél a JTAG lábakra kivezetve megtalálható az SWD programozáshoz használható kivezetések, így csak egy átalakító szalagkábelt kellett készítenem a használatához.
32. ábra STM32F0 Discovery board (forrás: [21])
7.3 Operációs rendszer Komolyabb beágyazott rendszerek esetén célszerű használni valamilyen beágyazott operációs rendszert a különféle feladatok ütemezésére, segítségével nagyon leegyszerűsödik a rendszer feladatok szervezése. Jelen esetben a választásom az ingyenesen hozzáférhető FreeRTOS operációs rendszerre esett. Az egész rendszerben csak a vezérlőmodulon található operációs rendszer, a szenzormodulokon az egyszerűségük miatt felesleges lenne operációs rendszert használni. Az operációs rendszert jellemzi a moduláris felépítés és a testreszabhatóság, sok mikrovezérlőre készült már el a portolt változata [22]. Jelen esetben STM32-es processzorra már készen 3
Serial wire debug
36 megtalálható volt a működőképest változata. Az elindításához szükséges hogy néhány interrupt vektort átirányítsunk az operációs rendszer számára, majd a megfelelő fordítási paraméterek beállítása után meg kellet írni az egyes taszkokat, és elindítani a feladatütemezőt. A működést alapvetően a következő négy taszk végzi. 7.3.1 Control_Task Feladata a vezérlőmodul fő funkcióinak a működtetése. Ez végzi a többi modul vezérlését a szenzoroktól kapott adatok és a beállított értékek szerint. Működése során ellenőrzi először hogy az érintőképernyő megvan-e nyomva, ha igen, akkor elindítja a menürendszer kezelő függvényt. Továbbiakban, a CAN buszon beérkezett adatoknak megfelelően vezérli az IO modult. Ez a taszk felel grafikus felület működtetetéséért. 7.3.2 Communication task Ez a taszk felel az adatok küldéséért és fogadásáért a CAN buszon. Mivel az egyes modulok úgy működnek, hogy különféle lekérdezésekre válaszolnak csak, maguktól adatokat nem küldenek, ezért ennek a taszknak a feladata az, hogy periodikusan lekérdezgesse a modulokat. További feladata kimenő adat esetén, hogy megfelelő írás parancs kiküldése a szenzor számára az adatokkal. Ennek akkor van szerepe például, amikor az IO modulnak küldi ki az ajtók nyitását vagy zárását, illetve az akkumulátor töltés engedélyezést.
7.3.3 uIP_Task Ez a taszk felel az ethernet csomagok kiolvasásáért az ethernet vezérlőből. Ha volt beérkező csomag, akkor eldönti hogy IP vagy ARP csomag jött, majd ezeket feldolgozza. Abban az esetben ha keletkezett válasz akkor az ethernet vezérlőnek továbbadja a csomagot, amely elküldi a hálózat felé.
7.3.4 uIP_periodic_Task A taszk feladata nyitott TCP kapcsolatok esetén ARP csomagok küldése a hálózatra 500ms ismétlődéssel (TCP keep-alive), illetve 10 másodpercenként az ARP tábla frissítése.
7.4 Fájlkezelés A kijelzőn megjelenített grafikák tárolása a beépített SD kártyán történik, mivel mikrovezérlős környezetben ilyen memória típuson lehet legegyszerűbben nagyobb adatmennyiséget tárolni.
37 A kártyán az elterjedt FAT32-es fájlrendszer található, mivel mikrovezérlővel ez egy viszonylag kis erőforrás igénnyel kezelhető megoldás, és megvan az előnye, hogy fájlokat lehessen kívülről számítógépről rámásolni, ha nincs arra szükség hogy mikrovezérlő írjon a kártyára. A fájlrendszer kezelését a mikrovezérlős körökben a jól elterjedt és bevált FatFS könyvtár végzi [23]. A driver C nyelven íródott, réteges szervezésű. Az adott rendszerhez való portolásához elegendő csak az alacsonyszintű függvényeket a hozzáigazítani az alkalmazáshoz, ebből adódólag gyakorlatilag tetszőleges háttértár típuson működőképes. Konfigurációs lehetőséget biztosít arra, hogy ha kevesebb erőforrással rendelkező mikrovezérlőn alkalmazzák, akkor a nem használt funkciókat, függvényeket ki lehet kapcsolni, ezáltal memóriát lehet spórolni. A réteges felépítését az alábbi ábra szemlélteti
33. ábra - A FatFS réteges szerkezete (forrás: [23])
Az alsó szinten találhatóak meg az alacsonyszintű driverek, jelen alkalmazásban itt szükséges hozzáigazítani a mikrovezérlő SPI busz kezelő függvényeihez, mivel az SD kártya ezen a buszon található meg. Ez az alacsonyszintű működtetés az alábbi öt alapvető függvényre épül disk_initialize() Háttértár inicializálása disk_status() Háttértár státusz lekérdezése disk_read() Egy blokk olvasása disk_write() Egy blokk írása disk_ioctl() Vezérlő parancsok küldése
Ezek a függvények biztosítják az alapvető interfészt a felsőbb szintű funkcióknak, illetve ezek határozzák meg hogy milyen hardvert is kezel a library. Szerencsére STM32-re létezett már előre portolt változat, így elegendő volt a mikrovezérlő kivezetéseit definiáló sorokat hozzáigazítani a jelen áramkörhöz. A driver
38 felasználja a DMA-s átvitelt az SD kártyáról a memóriába történő olvasás során, így használatával nagy sebesség növekedést lehetett észlelni. Az alapszintű driver beállítása után történhet maga a könyvtár használata. A meghajtó inicializálásához elegendő meghívni a disk_initialize(), a fájlrendszer inicializálásához a f_mount() függvényeket. A gyökérkönyvtár megnyitásához lehet használni a f_opendir() függvényt. Mindegyik függvény rendelkezik hibakezeléssel visszatérési értékként, így hiba esetén a megfelelő képet lehet kapni a hibáról és segítséget nyújt az elhárításában. Ezek után tetszőlegesen lehet fájlműveleteket végezni a meghajtón.
7.5 Ethernet kezelés A vezérlőrendszer távoli menedzsmentjét legegyszerűbben ethernet alapú megoldással volt célszerű megoldani. Manapság már nem olyan bonyolult ez a feladat, mivel a sokféle megoldás közül lehet választani. 7.5.1 uip TCP/IP stack Az áramkörbe épített ENC28J60-as ethernet vezérlő meghajtását végzi az uIP TCP/IP stack [24]. Ez a stack az Adam Dunkels által kifejleszett LWIP4 egyszerűsített változata. Sokkal kevesebb RAM memóriát használ fel a működéséhez, cserébe viszont a csomagok összeállítása sokkal bonyolultabban történik, és sok funkció csak korlátozottan működik. A stack működtetéséhez elegendő biztosítani az ethernet vezérlőhöz tartozó csomag küldő és fogadó függvényt. Bejövő adatcsomag esetén ellenőrzi a csomag típusát és annak megfelelően dolgozza fel. Lényegében bejövő csomag esetén meg kell hívni a stack magasabb szintű feldolgozó függvényét. Ennek futása során egyre alacsonyabb szinten feldolgozza, és biztos hogy véges idő múlva visszatért. Visszatérés után az egyetlen feladat azt ellenőrizni, hogy keletkezett-e valamilyen elküldendő ethernetes csomag az adat bufferban, nem nulla adathossz esetén meg kell hívni az ethernet vezérlő csomag küldő függvényét. A jelenlegi alkalmazásban külön operációs rendszer taszk-ként fut az TCP/IP stack. A stack elindításához csak az Ethernet vezérlő alapszintű felkonfigurálása szükséges, ezt minta kód segítségével a C nyelv adottságaiból kifolyólag viszonylag könnyen meg lehetett tenni. Ebben a fázisban van megadva az ethernet illesztőnek a MAC címe, illetve a szükséges IP konfiguráció, mely jelen alkalmazásban statikus IP címet használ, de a stack képes lenne DHCP segítségével saját IP címet kérni is. 4
Lightweight IP
39 7.5.2 Weboldal A megjelenítendő weboldal a mikrovezérlőben van letárolva a belső Flash memóriában. Ebből kifolyólag célszerű volt minimalizálni a weboldal méretét, és célirányos egyszerű weboldalt fejleszteni. HTTP lekérdezés esetén ellenőrzi hogy a kért fájl megtalálható-e a memóriában, sikeres lekérés esetén továbbítja a kliens felé, ellenkező esetben hibakezelésként a szabványos 404-es hibát adja vissza.
34. ábra - A webfelület
A weboldalon alapvetően a rendszerre jellemző szenzorok által mért értékeket láthatjuk, ezek közé tartozik a hőmérséklet, páratartalom, akkumulátor töltöttség, szélerősség, illetve az ajtók állapota Ezek táblázatos formátumban találhatóak meg. A távoli vezérléses funkciókat úgy valósítja meg a webfelület, hogy a beállított határértékek módosítására is lehetőséget biztosít ugyanúgy mint a menürendszerben. Így módosítani lehet hőmérséklet, páratartalom, és szélerősség határértékeket. További funkcióként a webfelületről le lehet állítani az automatikus, időjárás szerinti működést, és a honlapon lévő vezérlő gombokkal lehet az ajtókat manuálisan zárni illetve nyitni.
40 Olyan esetben lehet erre szükség ha valami nagyobb vihar közeleg és emiatt be akarjuk zárni biztonsági okokból az ajtókat. 7.5.3 Webszerver funkciók Az adatok megjelenítését egy CGI 5 alapon működő megoldással végzi. A megjelenítendő HTML oldalra el kell helyezni egy megfelelő szöveges tag-et. Küldés során amikor beolvassa a tag-et, akkor lefuttat egy előre definiált függvényt, amelynek a kimenetét küldi el a kliens felé szöveges formátumban, majd folytatja az oldal további küldését. Ezt a funkciót úgy használom ki, hogy előállítok egy JavaScript adattömböt, amelyet elküldök a kliensnek, majd miután az egész html oldalt megkapta, akkor egy általam írt JavaScripttel frissíti a weblapon található mezőket. Az adatok továbbítása a szerver felé a beágyazott rendszernél megszokott módon lekérdezés segítségével történik. Ez a rész ilyen módon hiányzott a webszerver funkciói
közül,emiatt
kiegészítést
kellett
tenni.
A
lekérdezésnél
a
weboldal.shtm?valtozo=ertek lekérdezéssel lehet a különféle változók értékeinek módosítására. Lekérés esetén a szerver ellenőrzi a cím végén a '?' karakter utáni részt, ebből megfelelő szöveges interpretálással frissíti a hozzátartozó paramétert a rendszerben. Ezt felhasználtam paraméterek beállítására, illetve HTML gombok funkcióinak a megvalósításához. Ezekből látható hogy beágyazott webszerverek esetén az weboldal tartalma szorosan kapcsolódik a megvalósítandó funkciókhoz, így a weboldalt célszerűbb a Flash memóriában tárolni, mert gyakorlatilag csak fejlesztés folyamán alakul ki a végleges változat.
7.6 Grafikus kijelző A kijelzőhöz a gyártó szolgáltatott inicializációs beállításokat, és egy függvényt amivel pixelenként lehetett rajzolni, az összes magasabb szintű grafikus megjelenítést magam írtam meg. A kijelző a mikrovezérlő FSMC (Flexible Static Memory Controller) buszához csatlakozik [12]. A nagy előnye ennek, hogy a kijelzőre íráskor nem a GPIO lábakat kell kezelni, hanem a kijelző egy bizonyos memóriacímen lesz elérhető, így az adat küldés leegyszerűsödik egy pointernek való értékadásra, illetve használhatóvá válik a DMA periféria is a még gyorsabb adatátvitel segítéséhez. Ennek megfelelően a kijelző az alábbiak szerint van memóriacímhez rendelve:
5
Common Gateway Interface
41 #define LCD_BASE ((uint32_t)(0x60000000)) __IO uint16_t * LCD_REG = (uint16_t *) (LCD_BASE); __IO uint16_t * LCD_RAM = (uint16_t *) (LCD_BASE +(1<<17));
Látható hogy más címen található a kijelző memória és regiszter címe, ez a valóságban úgy jelenik meg hogy a RAM-ba íráskor a kijelző Register Select lába magas szinten van, amivel jelezve van hogy adatot kap a kijelző, amikor alacsony, akkor regisztereket címez meg. A kijelző használatához előtte inicializálni kell, ehhez az SSD1289-es kijelző meghajtó IC adatlapja [11] nyújt segítséget. Az alábbi függvényismételt meghívásával lehet konfigurációs regiszterekbe írni beállításokat, így lehet a kijelző méretét, orientációját, címtartományát illetve egyéb jellemzőket beállítani. void LCD_WriteReg(uint16_t LCD_reg_addr, uint16_t LCD_Reg_value) { *LCD_REG=LCD_reg_addr; *LCD_RAM=LCD_Reg_value; }
Ezek alapján konfigurálás után a kijelzőn való megjelenítéshez be lehet állítani a kezdő címet, majd a memória írás parancs után a kijelző a pixelek színkódjának megfelelő színű képpontot jelenít meg, és a címet automatikusan növeli. Így egy címbeállítás után használni lehet a DMA-t nagyobb képek megjelenítéséhez. Leegyszerűsítve az alábbiak szerint történik egy képernyőpont megjelenítése: void LCD_pixel() { LCD_WriteReg(0x004f,xpos); //x cim LCD_WriteReg(0x004e,ypos); //y cim *LCD_REG=0x22; //memoria iras parancs *LCD_RAM=color; //pixel szin }
Ezek alapján meg lehetett írni a komolyabb grafikus ábrázoló függvényeket, amelyekkel összetettebb rajzolást lehet megvalósítani, például vonalak, téglalapok, körök ábrázolása. Mivel a kijelző nem rendelkezik karakter generátorral, ezt szoftverből kellett megvalósítani. Ehhez az ASCII karaktertábla bitmintáit le kellett tárolni a mikrovezérlő Flash memóriájában, és onnan megjeleníteni. Kettő betűtípus közül lehet választani a kijelzőre íráskor, 8x10 pixel és 19x24 pixel méretű közül. A grafikus felületet alkotó képek illetve ikonok az SD kártyán találhatóak meg szabványos .bmp
42 fájl formátumban. A képek kirajzolás a fejlécük értelmezése után pixelenkénti adatmásolással történik a kijelző memóriájába.
7.7 Menürendszer A vezérlőmodulba épített grafikus kijelző megkövetelte, hogy valamilyen átlátható grafikus felületen jelenítsen meg adatokat, a beállítások eléréséhez pedig, menürendszert volt célszerű létrehozni a kezelés megkönnyítése céljából.
35. ábra - A főképernyő
A kijelzőn alaphelyzetben főképernyő látható (35.ábra), amelyen a környezeti változók értékei vannak megjelenítve. A baloldalon látható a külső illetve belső hőmérséklet és páratartalom, szélerősség, akkumulátor feszültség. A bal alsó sarokban található meg a három ajtó kategória állapotjelzője. Zöld színnel jelöli a nyitott állapotot, pirossal a zártat, mellette az egyes ajtók nyitási illetve zárási hőmérsékleti határértéket. A főképernyőn a „MENU” gomb megnyomásával a főmenübe lehet lépni (36.ábra). A menüben a jobbra/balra nyilakkal lehet végiglépni a különböző főbb menüpontok között, és a menü ikonjának megnyomásával lehet belépni az adott almenübe.
43
36. ábra - Főmenü
Egyes fő menüpontokon belül találhatók kiválasztó almenüpontok (37.ábra). Ezeket a menüpontok számának függvényében dinamikusan átméretezi mind a sávok mérete, mind a karakterméret szempontjából.
37. ábra - Kiválasztó almenü
A legalsó szint az egyes paraméterek beállítását szolgálja (38. ábra). Ebből a menüpontból létezik egy illetve két paramétert állító változat. A rendszer felépítése és működése szempontjából az különböző paramétereket számszerűen megadhatóak, így elegendő volt így megoldani a kezelést.
44
38. ábra - Beállító almenü
Az előzőekben felvázolt menürendszer szerkezetileg a 39. ábra szerint épül fel. A főképernyőből csak a főmenübe lehet belépni. Az egyes főmenüpontok alá tartozhat egy almenüpont, vagy közvetlenül a beállító menüpont. Almenü használatával van felépítve a hőmérsékleti határok beállító menüje a három lehetséges ajtócsoport közüli választáshoz. Szélerősség-határ állításánál a főmenüből közvetlen a beállító almenü következik egyetlen változtatható paraméterrel.
39. ábra - A menürendszer felépítése
45
7.8 CAN busz kezelés A rendszer moduljai CAN buszon kommunikálnak egymással. A felhasznált mikrovezérlők tartalmazzák a CAN vezérlőt, így csak a fizikai réteget kell számukra biztosítani a korábban bemutatott kapcsolástechnikával. A mikrovezérlőben lévő CAN vezérlőt indulás után be kell konfigurálni. A CAN buszon a modulok egy előre meghatározott közös baudrate-el kommunikálnak, ezt az inicializálás során lehet beállítani a kívánt értékre. A buszon figyelembe véve a rendszer méreteit és az átvinni kívánt adat mennyiségét bőségesen elegendő 125000 baud körüli sebesség. Ezt az alkalmazott STM32-es mikrovezérlőben az alábbiak alapján lehet kiszámítani [7]:
40. ábra - CAN busz időzítés számítása az STM32F1x szériánál
Feltételezve hogy 24 MHz-es periféria órajel áll rendelkezésre, a 125000 baudos sebesség a fenti képlet alapján az alábbiak szerint áll elő: BRP (előosztó) =7+1, tehát a tq időkvantum 0,3333 µsec, ha az első bitszegmens idejét 15-re (BS1) a másodikat 8ra (BS2) választjuk, akkor az egész bit idő 8 µsec-re áll elő, ami alapján a baudrate 125000. Maga a CAN buszon történő adattovábbítás úgy működik, hogy létre kell hozni egy CanTxMsg típusú struktúrát, amelyben szükséges kitölteni a StdId cím mezőt, a DLC adathosszat, és az adatmezőt az adathosszban jelzett számú bájt típusú értékkel. Ezek után egyszerűen csak meg kell hívni a CAN_Transmit() függvényt, és ezzel az adatot továbbítja a buszra.
46 Beérkező adat fogadásához ellenőrizni kell hogy melyik FIFO-ba érkezett csomag, majd meg kell hívni CAN_Receive() függvényt. Ezután a fogadott csomag hasonló felépítésű struktúrában lesz elérhető. A rendszer működésénél a követelmények alapján megfelelőnek bizonyult az egyszerűbb
lekérdezés-válasz
kommunikáció.
Magasabb
szintű
CAN-buszos
kommunikációt nem valósítottam meg a rendszeren. A kommunikáció ilyen formájában ügyeltem arra, hogy úgy legyen felépítve az adattovábbítás, hogy esetlegesen elvesző csomag esetén se álljon le a rendszer. Az üvegházvezérlő rendszernél létrehoztam egy CAN eszköz cím adatbázist, amelyben az egyes modulok címei találhatóak meg. Ezek alapján az egyes eszközök címei, és a hozzájuk tartozó adatmezők jelentései az alábbi táblázatok alapján alakultak: Modul neve
STDID
DLC
DATA0
DATA1
DATA2
DATA3
Külső pára+hő szenzor
0x91
1
CMD_READ
×
×
×
Belső pára +hő szenzor
0x89
1
CMD_READ
×
×
×
Távirányító modul
0x88
1
CMD_READ
×
×
×
Távirányító modul
0x88
4
CMD_WRITE
InTemp
InTempFract
State
Szélerősség szenzor
0x92
1
CMD_READ
×
×
×
IO_modul
0x93
1
CMD_READ
×
×
×
IO modul
0x93
1
CMD_WRITE
DoorState
Battery_chg
GPIO
3. Táblázat - Az egyes moduloknak küldött CAN csomagok tartalma
A fenti táblázatban látható a moduloknak küldött csomagok CAN adatmezőinek a tartalma. Látható hogy a legtöbb modulnál csak egy egyszerű olvasás kérés található (CMD_READ = 0x01), amelyre általában csak egy környezeti változó a válasz. Némely modulnál adatokat is lehet küldeni, ezt a CMD_WRITE (0x02) paranccsal lehet megtenni, ilyen parancs például a távirányító modulnál a megjelenítendő hőmérséklet a kijelzőn, vagy a LED-ek állapota. Az IO modulnál ilyen módon lehet kapcsolni az ajtókat működtető reléket, illetve az akkumulátor töltőt, valamint a GPIO lábakat. Modul neve
STDID
DLC
DATA0
DATA1
DATA2
DATA3
Külső pára+hő szenzor
0x91
4
OutTemp
OutTempFract
Humidity
HumidityFract
Belső pára+hő szenzor
0x89
4
InTemp
InTempFract
Humidity
HumidityFract
Távirányító modul
0x88
1
ButtonSt.
×
×
×
IO modul 1
0x93
Ubatt
UbattFract
BattChSt
×
Szélerősség szenzor
0x92
Windspeed
×
×
×
4. Táblázat - Az egyes modulok által küldött CAN csomagok adattartalma
Az előbbi lekérdezésekre adott válaszcsomagok felépítését a 4. táblázat tartalmazza. Ezek a CMD_READ parancsra küldött válaszok. Hő és páratartalom mérő 2 darab található a rendszerben, az egyik a növényházon kívüli hőmérsékletet méri, a
47 másik a belsőt. A hőmérséklet és páratartalom esetén az egész rész, illetve a tizedes tört (egy számjegyig) külön bájtban van elküldve. A távirányító modulnál a rajta található gombok megnyomása esetén a gombok állapotát tartalmazza a csomag. IO modulnál az akkumulátor feszültségét illetve az akkutöltő állapotát tartalmazza a csomag.
48
8. Összefoglalás Munkám során létező megoldások alapján és a környezeti adottságokat figyelembe véve felállítottam követelményeket amelyeket a rendszernek teljesítenie kell. Ezen követelmények alapján elkészítettem a rendszertervet amelynek segítségével hardver és szoftver követelményeket tudtam meghatározni. Ezekből kiindulva megterveztem és beüzemeltem a hardver modulokat. A fejlesztés folyamán lépésenként egyre összetettebb feladatokat sikerült megvalósítani a rendszerrel, míg eljutott a követelményekben meghatározott szintre. Ezek alapján a rendszer alkalmassá vált hogy a rendeltetési helyén tudja teljesíteni a célját. A rendszer fejlesztése során hasznos ismeretekre tettem szert mind összetettebb hardverek fejlesztése terén, mind a komplex működtető szoftver megírása területén. A fejlesztés során több nehézséggel kellett szembenézni. Ezek közül az egyik, hogy az eredetileg beletervezett CAN busz meghajtó IC (MCP2555) nem működött 3.3 V-os tápfeszültségről. A kiválasztása során az adatlap ide vonatkozó része felett átsiklottam, ezt a problémát az SN65HVD230-as IC használata oldotta meg, amely lábkompatibilis az előzővel. Továbbiakban vezérlőmodulban használt mikrovezérlő FMSC moduljának inicializációs példakódjában talált hiányosság miatt, /wait jelre vált a kijelzőtől a processzor, amely ilyet nem szolgáltat, emiatt néha befagyasztotta a futást, és a Debug funkció ezt nem tudta kimutatni. Továbbfejlesztés céljából a webfelületen megfelelő minimalista javascript használatával grafikonokat lehetne elhelyezni az elmúlt időszakról, illetve az SD kártyára lehetne naplózás céljából hőmérsékleti adatokat menteni.
49
9. Irodalomjegyzék [1]
Wadsworth EnviroSTEP http://www.wadsworthcontrols.com/envirostep.htm
[2]
Growtronix http://growtronix.com
[3]
RS-485 http://www.interfacebus.com/Design_Connector_RS485.html
[4]
CAN BUS http://www.interfacebus.com/CAN-Bus-Description-Vendors-CanbusProtocol.html http://ww1.microchip.com/downloads/en/AppNotes/00228a.pdf
[5]
Tóth Csaba, Scherer Balázs: Autóipari beágyazott rendszerek CAN – Controller Area Network http://www.mit.bme.hu/oktatas/targyak/vimim344
[6]
Szenzorok árai, adatlapjai (2013. december) http://hu.farnell.com/
[7]
STM32F103VC Reference Manual http://www.st.com/st-webui/static/active/en/resource/technical/document/reference_manual/CD00171190.
[8]
STM32F103VC Datasheet http://www.st.com/st-webui/static/active/en/resource/technical/document/datasheet/CD00191185.pdf
[9]
MCP16301 datasheet http://ww1.microchip.com/downloads/en/DeviceDoc/25004A.pdf
[10]
ENC28J60 datasheet http://ww1.microchip.com/downloads/en/devicedoc/39662a.pdf
[11]
SSD1289 display driver datasheet http://www.gpegint.com/files/library/files/supportpdf/Driver%20IC%20SSD128 9.pdf
[12]
TFT LCD interfacing with STM32 FSMC http://www.st.com/st-web-ui/static/active/en/resource/technical/ document/application_note/CD00201397.pdf
[13]
ADS7843 touch screen controller http://www.ti.com/lit/ds/sbas090b/sbas090b.pdf
[14]
SN65HVD230 CAN transceiver datasheet http://www.ti.com/lit/ds/slos346k/slos346k.pdf
[15]
STM32F103C6 datasheet http://www.st.com/st-webui/static/active/en/resource/technical/document/datasheet/CD00210843.pdf
50 [16]
HIH6131 temperature and humidity sensor http://sensing.honeywell.com/product%20page?pr_id=142040
[17]
LM2576 datasheet https://www.national.com/ds/LM/LM2576.pdf
[18]
Mentor Grapics G++ Lite compiler http://www.mentor.com/embedded-software/sourcery-tools/sourcerycodebench/editions/lite-edition/
[19]
Coocox IDE http://www.coocox.org
[20]
STM32F0 discovery board http://www.st.com/web/catalog/tools/FM116/SC959/SS1532/PF253215
[21]
STM32F0 discovery board photo http://www.jann.cc/_images_big/stm32/STM32F0-Discovery_side.jpeg
[22]
The FreeRTOS project http://www.freertos.org/
[23]
ELM-Chan FatFS http://elm-chan.org/fsw/ff/00index_e.html
[24]
The uIP 0.9 ReferenceManual http://www.cs.tut.fi/~sulo/harjoitustyo/btweb/uip-0_9-refman.pdf
51
10. Függelék
52
53
54
55
56
57
58
59
41. ábra - Az egész rendszer tesztelése deszkamodell formában