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
Indítómotor mikrokontrolleres vezérlése
Szakdolgozat
Gergely István QZKTB3 2015
Eredetiségi nyilatkozat
Alulírott Gergely István (neptun kód: QZKTB3) 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
Indítómotor mikrokontrolleres vezérlé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,
Hallgató aláírása
______________________________________________________________________ 1
Megfelelő rész aláhúzandó 2
Tartalomjegyzék 1.
Bevezetés ................................................................................................................... 5
2.
Az indítómotor........................................................................................................... 6
3.
4.
5.
6.
2.1.
Az indítómotor működésének alapja .................................................................. 6
2.2.
Az indítómotor tulajdonságai ............................................................................. 7
2.3.
Az indítómotor típusai........................................................................................ 8
2.3.1.
Csúszóarmatúrás indítómotor ..................................................................... 8
2.3.2.
Csúszófogaskerekes indítómotor .............................................................. 11
2.3.3.
Kétfokozatú csúszófogaskerekes indítómotor. ......................................... 13
2.3.4.
Menetes tengelyű indítómotor .................................................................. 14
2.3.5.
Váltakozó forgású indítómotor ................................................................. 15
2.3.6.
Lendítőkerekes indítómotor. ..................................................................... 18
A mikrovezérlők ...................................................................................................... 18 3.1.
A mikrovezérlők általános részei, jellemzői [4] .............................................. 19
3.2.
MSP430 mikrokontroller család ...................................................................... 21
3.2.1.
MSP430 mikrokontroller felépítése .......................................................... 22
3.2.2.
Megszakítás, üzemmódok, időzítés .......................................................... 23
Az indítómotor mikrokontrolleres vezérlése ........................................................... 24 4.1.
A mikrokontrollerrel megvalósítható feladatok ............................................... 25
4.2.
A mikrokontrolleres vezérlés felépítése ........................................................... 26
4.3.
A mikrokontroller programozása ..................................................................... 28
A mikrokontrolleres vezérlés hardveres tervezése .................................................. 30 5.1.
Az akkumulátor feszültségének mérése ........................................................... 30
5.2.
További bemenetek tervezése .......................................................................... 36
5.3.
Kimenetek tervezése ........................................................................................ 38
A mikrokontrollert működtető program tervezése .................................................. 40 6.1.
Fejlécek becsatolása, ADC függvény .............................................................. 40
6.2.
Változók deklarálása ........................................................................................ 42
6.3.
Portok beállítása ............................................................................................... 43
6.4.
Timer időzítő és az órajel beállítása ................................................................. 45
6.5.
A főprogram ..................................................................................................... 46 3
6.5.1.
Gyújtás bekapcsolására várakozás ............................................................ 46
6.5.2.
Kuplungpedál lenyomására várakozás...................................................... 48
6.5.3.
Indítógomb lenyomására várakozás.......................................................... 48
6.5.4.
Akkumulátor és behúzó relé vizsgálat ...................................................... 49
6.5.5.
Indítási ciklus ............................................................................................ 51
7.
A program tesztelése szimulátorban ........................................................................ 52
8.
Az áramkör kipróbálása ........................................................................................... 57
9.
Továbbfejlesztési javaslatok .................................................................................... 59
10. Összefoglaló ............................................................................................................ 60 11. Summary.................................................................................................................. 61 12. Irodalomjegyzék: ..................................................................................................... 62 13. Mellékletek .............................................................................................................. 63
4
1. Bevezetés Tanulmányaim során a „Bevezetés az autóelektronikába” című tantárgy keretében ismertem meg a gépjármű indítómotorok felépítését és működését. Az indítómotor működtetéséhez már korábban is készítettek áramköröket, amelyek a helyes működtetést segítették. Manapság a gépjárművek olyan központi vezérlő egységgel rendelkeznek, melyek az indítás folyamatát is ellenőrizni tudják, és az indítási folyamat automatikusan megy végbe. Esetleg az indítómotorok tartalmaznak olyan elektronikus áramköröket, amelyek szintén ellenőrző feladatot látnak el. A mikrokontrollerek működéséről és felépítéséről már korábban megismerkedtem, a „Mikrovezérlők” című tantárgy keretében. A mikrokontrollert sok helyen felhasználják vezérlési feladatok elvégzésére, és innen eredt a dolgozat témája, hogy a mikrokontrollert fel lehet használni az indítómotor működése során. A cél az, hogy az indítás során az indítómotor működését, és az indítás folyamatát egy vezérlő egység figyelje és irányítsa, amit a mikrokontroller valósít meg. A mikrokontroller több hasznos funkciót is el tudjon látni, ami segíti az indítás folyamatát. Ehhez szükség van az indítómotor és a megvalósításhoz használt mikrokontroller bővebb ismeretére. A mikrokontrolleres vezérlés megvalósításához tervezési és programozási feladatokat is meg kell megoldani, valamint magát a vezérlő áramkört is meg kell valósítani és tesztelni.
5
2. Az indítómotor A belsőégésű motorok önmaguktól nem képesek elindulni, valamilyen külső erőforrás szükséges az indításukhoz. Kezdetben csak a kézi erő szolgált az indításhoz, de ez ma is egy lehetőség, például ha a személyautónkban az akkumulátor éppen lemerült. Később sokféle módot találtak a belsőégésű motor beindításához, mint például a sűrített levegős vagy a rugóerős indítás. A legjobb és legelterjedtebb módszer azonban a villamos motorok használata lett. A gyors és kényelmes indításhoz ezek a legalkalmasabbak, azért is, mert a járművökön található akkumulátor segítségével az indításra használt villamos motorok üzemeltethetőek. A belső égésű motor beindításához nagy nyomaték szükséges, mert elég nagy ellenállást kell leküzdeni. Ez az ellenállás függhet a belső égésű motor hengereinek számától és űrtartalmától, a dugattyúk és a csapok súrlódásától, a sűrítési aránytól valamint a kenőolaj minőségétől és a motor hőmérsékletétől. Továbbá növeli az ellenállást minden olyan szerkezet is, ami a motor főtengelyévek kapcsolatban áll, mint például a generátor, hűtővízszivattyú, kenőolajszivattyú. Olyan villamos motor szükséges tehát, amely nagy nyomatékkal indul. Indulás után a terhelőnyomaték csökkenésével növekszik a fordulatszáma, valamint gyorsan fel tudja pörgetni a belső égésű motor főtengelyét az induláshoz szükséges fordulatra. Ezen követelményeknek a soros kapcsolású főáramkörű motor felel meg.
2.1. Az indítómotor működésének alapja A mágneses mezőbe helyezett áramjárta vezető elmozdul, mert a vezetőben folyó áram mágneses teret létesít maga körül. A vezető mágneses tere taszítja az álló mágneses terét, így a vezető elmozdul. Ez az egyenáramú motorok működésének alapja. A mozgatás ereje függ a vezetőben folyó áram erősségétől, a mágneses térben lévő vezető hosszától és a mágneses tér erősségétől. A gyakorlati alkalmazásban a vezető forgó mozgást végez. Egy tengelyen lévő vastestre több hurkot helyeznek el. A kivezetések egy-egy bronzgyűrűhöz kapcsolódnak, amelyekre felfekvő keféken keresztül áramot vezetnek a hurkokba. A mágneses térben így állandó forgó mozgást végez. A munkavégzésre használt egyenáramú motorokban erősebb mágneses tér található, amit gerjesztett pólusokkal érnek el. A forgórész vagy más néven armatúra, szintén vastest, melynek hornyaiban vezetők találhatóak, ezekbe keféken és kommutátor 6
szeleteken keresztül vezetik be az áramot. A forgómozgás közben a vezetőkben feszültség indukálódik. Az indukálódó feszültség iránya ellentétes a motorba irányuló áramot vivő feszültéggel. Ezért ellenfeszültségnek nevezzük és értéke megközelíti a motor kapocsfeszültségét. Továbbá szabályozza a motor áramfelvételét úgy, hogy mindig csak annyi áram folyhat be a motorba, amennyi szükséges hogy, a forgás fennmaradjon, és a fékezőnyomatékot leküzdje. Az üresen járó motor fordulatszáma növekszik, amíg az ellenfeszültség közel megegyezik a kapocsfeszültséggel. Ilyenkor az armatúra áramfelvétele a legkisebb. Terhelés esetén viszont csökken a fordulatszám, és az ellenfeszültség így nő az armatúra árama. A forgásirány változatható az áramirány megfordításával. A soros motorban a gerjesztés és az armatúra sorba van kötve. A motor által felvett áram mindkét részen átfolyik, ezért a tekercseléshez nagyobb keresztmetszetű vezetéket használnak. Ez motor igen nagy nyomatékot tud kifejteni, ezáltal nagyon jól hasznosíthatók a gépjárművek indításához.
2.2. Az indítómotor tulajdonságai A jármű motorjának megindításához nagy nyomatékra van szükség. Ez a nyomaték induláskor hozzávetőleg 20… 30%-kal nagyobb, mint az indítás további szakaszában. Ennek az oka, a már említett ellenállás, amit induláskor le kell győzni az indítómotornak. Ehhez az ellenálláshoz társul még az akkumulátor kapocsfeszültsége is, ami jelentősen hőmérsékletfüggő. Hideg időben, amikor nagy nyomaték kifejtésére volna szükség, az akkumulátor feszültsége alacsonyabb, és a belső ellenállása is megnő. A nagy nyomaték viszont nagy áramigényt jelent. Ez az áramigény egy kisebb kocsin is 100 A feletti indítási áramot jelent. Az ilyen nagy áramerősség kapcsolásához elektromágneses kapcsolót építenek be, amit egy egyszerű nyomógombbal is kényelmesen lehet kapcsolni, hiszen a behúzó tekercs vezérléséhez gyenge áram szükséges. Az
indítómotor
tengelye
fogaskerekes
áttétellel
kapcsolódik
a
járműmotor
főtengelyéhez. Az indítómotor tengelyén egy kis hajtófogaskerék található, ami a járműmotor főtengelyén lévő lendítőkerék fogas koszorújába kapcsolódik. Ezzel a megoldással elfogadható vált az indítómotor mérete. A szokásos áttétel 1 : 8 és 1 : 20 között van. A nagy áttétel miatt azonban nem állhat folyamatos kapcsolatban az indítómotor a jármű motorjának főtengelyével, szét kell kapcsolni őket. A működő belső égésű motor fordulatszáma túl nagy lenne az indítómotor számára. A nagy 7
fordulatszám miatt túl gyorsan forogna az indítómotor forgórésze, ami intenzív kopást és károsodást okozna. Az indítási folyamatot három részre, ütemre osztották. Az első ütem a hajtófogaskerék összekapcsolása a lendítőkerék fogas koszorújával. Ilyenkor az indítómotor nem a teljes indítási áramon működik, nehogy megszaladjon. Ha teljes a kapcsolódás, vagyis a fogas kerek teljesen egymásba nyomultak, akkor kapja meg az indítómotor a teljes áramot. Ez az indítás második üteme. A harmadik ütem akkor kezdődik, ha a belső égésű motor már beindult, ilyenkor tehát szét kell kapcsolni az indítómotort és a főtengelyt. A szétkapcsolás történhet úgy, hogy a hajtófogaskerék önműködően kilép a fogas koszorúból, vagy valamilyen szerkezet segítségével, mint a görgős szabadonfutó szerkezet, vagy a lemezes dörzskapcsoló, ami lehetővé teszi az indítómotor tengelyének független forgását, amíg vissza nem húzódik a fogas koszorúból. Az indítómotor forgórészét a szétkapcsolást követően lefékezik. Mivel a tengelye jól csapágyazott, könnyen forog, így az oldott állapot után is átvihet egy kis nyomatékot, ami miatt van kifutási ideje. Fékezés nélkül pedig, ha esetleg nem sikerült a belső égésű motort beindítani, sokáig kellene várni az újbóli indításhoz. Az indítómotor forgósrészének meg kell állni, mert ha forgás közben kapcsolódik a lendítőkerék fogaskoszorújához, az sérüléshez vezethet.
2.3. Az indítómotor típusai Az indítómotor típusoknál megkülönböztethetünk közvetlenül hajtó indítómotorokat. Az ilyen típusú indítómotorok az akkumulátorból vett teljesítményt minden közbenső tárolás nélkül folyamatosan átadják a belső égésű motor főtengelyének. A közvetlenül hajtó indítómotoroknál a különbség az indítási ütemek megvalósításánál jelentkezik. Létezik
olyan
megoldás,
amikor
egy
lendítőkereket
pörgetnek
meg
nagy
fordulatszámra, kis teljesítménnyel. Ilyenkor a lendítőkerékben tárolt mozgási energia adja le az indításhoz szükséges teljesítményt.
2.3.1. Csúszóarmatúrás indítómotor A csúszóarmatúrás indítómotor állórésze négy pólusból áll. A négy pólus fel van osztva, így kettő behúzó pólus, kettő forgató pólus. A kommutátor felőli oldalon található a kétfokozatú mágnes kapcsoló, ami két lépésben kapcsol. A kapcsolóhídja úgy van kialakítva, hogy az egyik szára rövidebb, mint a másik. Így először a rövidebb szár 8
kapcsolódik az érintkező felülethez, a másik szárat pedig a reteszelés megszűnése után tudja a rugó az érintkező felülethez nyomni. Ezért ezt a kapcsolót, az ilyenfajta kialakítás miatt billenő hídnak nevezik. Az 1. ábra a csúszóarmatúrás indítómotor metszetét ábrázolja.
1. ábra Bosch B jelű csúszóarmatúrás indítómotor metszete forrás [1]
A csúszóarmatúrás elnevezés abból ered, hogy nyugalmi helyzetben a forgórész nincs szimmetriatengelyben a pólusokkal, egy rúgó tartja kihúzva, el van tolva a kommutátor felé. Indításkor azonban behúzódik a pólusok közé. Az indítómotor állórészén három tekercselés található, egy főáramkörű, és két segédtekercselés. A következő 2. ábra az indítómotor nyugalmi állapotát ábrázolja.
2. ábra Bosch csúszóarmatúrás indítómotor áramköre forrás [1]
9
A főáramkörű tekercselés két ellentétes fekvésű pólusra van csévélve és az indítást végzi. A segédtekercselés két részből áll, és együttesen a másik két ellentétes pólusra vannak csévélve. Az egyik része a behúzótekercs, ami főáramkörű, mert sorba van kötve a forgórésszel. A másik része a mellékáramkörű tartótekercs, ez testelve van. A legfőbb feladata a forgórész üzemi helyzetben tartása. Behúzáskor a behúzótekercs és a segédtekercs lassú forgatása biztosítja a hajtófogaskerék és a lendítőkerék fogaskoszorújának egymásba kapcsolódását. A tartótekercsnek még más feladatai is van. Minthogy külön testelődik, független az indítómotor ellenfeszültségétől, helyén tartja a forgórészt, amíg az indítókapcsolót bekapcsolva tartják. Mivel a villamos motorban ellenfeszültség keletkezik, amikor a forgórész forogni kezd, és olyan irányú hogy csökkenti az indítómotor áramát. Ilyen ellenfeszültségnél gyengül a behúzótekercs, és a rugó visszahúzza a forgórész még az indítás befejezése előtt. További előnye a tartótekercsnek hogy állandó mágneses mezője lévén, bizonyos fordulatszámon állandó fordulatra kényszeríti a forgórészt, és az nem pöröghet fel veszélyes fordulatra, valamint a motor sem szalad meg. A csúszóarmatúrás indítómotor indításának első ütemében az indítókapcsoló működtetésével záródik a kapcsolómágnes áramköre. A tekercs behúzza a vasmagot, és a billenőhíd felső szára hozzáér az érintkezőhöz, ami az akkumulátorral van összeköttetésben. Ekkor a billenőhíd alsó szára a hídhoz szerelt zárókilincs reteszelése miatt nem érintheti az indítótekercs csatlakozását. Az akkumulátorból induló áram azonban átfolyik két behúzó segédtekercsen és a forgórészen. A forgórész előrecsúszik, így a hajtófogaskerék és a lendítőkerék fogaskoszorúja csatlakozhat. Miután a forgórész előrecsúszik, kezdetét veszi a második ütem. Előrecsúszáskor ugyanis a kommutátor mellett felszerelt kioldótárcsa felnyomja a zárókilicset, ami a billenőhíd eddig reteszelt alsó részét rányomja az indítótekercs ccsatlakozási érintkezőjére. Az indítómotor teljes indítási áramot kap, és megforgatja a lendítőkereket. Az erőátvitelt a lemezes tengelykapcsoló végzi. A benne található kapcsolólemezek súrlódása közvetíti a forgórész nyomatékát a hajtófogaskeréknek. Az indítómotor nem tud túlterhelődni, mert egy meghatározott nyomaték felett a lemezek egymáson elcsúsznak, valamint ha a gépjármű motorja megakad, vagy a lendítőkerék nagy fordulattal akarná meghajtani az indítómotort, a hajtófogaskerék szabadon foroghat, és
10
nem eshet benne kár. Teljes súrlódás a lemezek között csak akkor jöhet létre, ha már a hajtófogaskerék benyomult a fogaskoszorúba, így kímélődnek a fogak. Ha a belső égésű motor beindul, kezdődik a harmadik ütem. A hajtófogaskerék szabadonfutásáról ismét a lemezes tengelykapcsoló gondoskodik, nehogy a lendítőkerék túlpörgesse a hatófogaskereket. A szabadonfutás úgy történik, hogy amikor a hajtófogaskerék gyorsabban forog, mint az indítómotor tengelye, a hüvelye tovább csavarodik az indítómotor tengelyén és a laposmenet a szorítóanyát visszahúzza. A tengelykapcsoló nyomása lazul, és a lemezek csúszhatnak egymáson. Amikor elengedik az indítókapcsolót, megszakad a mágneskapcsoló áramköre, az indítókapcsoló visszaugrik, bontja az indítómotor áramkörét, és az armatúra a rugó segítségével visszahúzódik a kezdeti helyére.
2.3.2. Csúszófogaskerekes indítómotor
3. ábra Bosch C jelű csúszófogaskerekes indítómotor metszete forrás [1]
Az indítómotor metszetét a 3. ábra mutatja. Ezeknél az indítómotor fajtáknál a hajtófogaskereket
a lendítőkerék fogaskoszorújával
gyakran mechanikai úton
kapcsolják össze. Ezért kapcsolókaros vagy lábkapcsolású indítómotoroknak is nevezik őket.
A
hajtófogaskerék
hüvelye
tengelyirányú
hornyokban
tolódik
el
a
bordástengelyen. Ezáltal a hajtófogaskerék kényszermozgással kapcsolódik bele a
11
lendítőkerék fogaskoszorújába. A 4. ábrán a csúszófogaskerekes indítómotor működését láthatjuk.
4. ábra Bosch C jelű csúszófogaskerekes indítómotor működése forrás [1]
A pedál nyomásával mozgatható a kapcsolókar. A kapcsolókar felső része jobbra mozog. A mozgás során a kapcsolókar az indítómotor kapcsolójának nyomógombját benyomja. Ekkor az indítómotor áramot kap, és teljes nyomatékkal megforgatja a forgórészt. A kapcsolókar alsó, villás kiképzésű vége, még az indítóáram kapcsolása előtt előretolja a hajtóművet a bordástengelyen, és ez által a hajtófogaskereket a lendítőkerék fogazatába nyomja. A villa egy magasperemű tárcsát tol előre, ami összenyomja az előtte lévő rugót. Amikor záródik az indítómotor áramköre, a forgórész első mozdulatakor a rugó hirtelen belöki a hajtófogaskereket a fogaskoszorúba, megelőzve azt, hogy fog fognak ütközzön. A szabadonfutó szerkezet pár fordulat után ékelődik, a hajtófogaskerék pedig meghajtja a lendítőkereket. Mikor a belső égésű motor beindul, és nagy sebességgel próbálna megforgatni a hajtófogaskereket, a szabadonfutó szerkezet önműködően kioldódik, nem viszi magával a forgórészt, így megvédi az indítómotort a károsodástól. A hajtófogaskerék szabadon foroghat, amíg a kapcsolókar az összenyomott rugó erejével vissza nem tolja nyugalmi helyzetbe. A forgórész gyors megállításához a tengely kommutátor felőli végére súrlódó féket építenek be.
12
2.3.3. Kétfokozatú csúszófogaskerekes indítómotor. Nagy teljesítményű nehéz járművek belsőégésű motorjainak indításhoz kétfokozatú csúszófogaskerekes indítómotort használnak. Ezeknél a járműveknél nagy nyomatékot kell átvinni a fogaskerekeknek, és az ilyen nagyteljesítményű indítómotorok szerkezetének nem tesz jó, ha ütésszerűen, hirtelen kapcsolódik össze a hajtófogakerék a jármű fogaskoszorújával. Az indítás tehát ezzel szemben, lágyan, két fokozatban történik. Először lassan betolódik a hajtófogaskerék a fogaskoszorúba, és csak a teljes összekapcsolódás után fejtődik ki az indítás szükséges nagy forgatónyomaték. Az indítómotor és az akkumulátor közvetlen összekötetése, és a teljes indítóáram felvétel is csak a második ütemben történik meg, amikor már megtörtént a fogaskerekek teljes csatlakozása. Ezzel lehet megelőzni az indítómotor komolyabb megszaladásának veszélyét. A kétfokozatú indítómotor elvi kapcsolása az 5. ábrán látható.
5. ábra Bosch kétfokozatú csúszófogaskerekes indítómotor metszete forrás [1]
Miután záródik az indításkapcsoló, áram folyik a toló mágneskapcsoló tartótekercsébe és a vezérlő mágneskapcsoló húzótekercsébe. A vezérlő magneskapcsoló megszakítja a nyugalmi helyzetben lévő lassítótekercs áramkörét. A lassítótekercs áramköre mindig zárva van. Valamint a vezérlő mágneskapcsoló zárja a toló mágneskapcsoló behúzótekercsének kapcsolóját is. Ezen a behúzótekercsen át jut el az áram az akkumulátorból a motor gerjesztőtekercsébe és a forgórészbe. Ez az áram csökkentett erősségű áram, mivel a behúzótekercs előtétellenállásként működik. Miközben az indítómotor lassan forog, a tolómágnes a forgórészen átmenő rúddal előretolja menetes hüvelyével a hajtófogaskereket. A hajtófogaskerék forogva benyomul a fogaskoszorúba. 13
A forgórész és a hajtófogaskerék között a csúszóarmatúrás indítómotorhoz hasonlóan lemezes tengelykapcsoló található, ez biztosítja a két fogazat összekapcsolódását. A tolómágnes kapcsoló csak akkor zárja az indítómotor közvetlen áramkörét, ha a hajtófogaskerék a véghelyzetbe érkezett. Ezzel el lehet kerülni a forgórész megszaladásának a veszélyét. Az indítókapcsoló elengedése után, a toló mágneskapcsoló tartótekercsének áramköre megszakad. A rugó visszahúzza a hajtófogaskereket a fogaskoszorúból. A vezérlő mágneskapcsoló árama is megszűnik, visszaugrik nyugalmi helyzetébe és zárja a lassítótekercs áramkörét. Az indítómotor eközben még lendülete folytán továbbforog és öngerjesztésbe megy át. Az armatúrában indukálódó áram átfolyik a lassítótekercsen, amely mint egy ellenállás, terhelei a forgórészt, és felemészti a forgásból keletkező villamos energiát, így lecsökken a forgórész fordulatszáma.
2.3.4. Menetes tengelyű indítómotor
6. ábra Bosch menetes tengelyű indítómotor metszete forrás [1]
A menetes tengelyű indítómotornál a hajtófogaskerék egy meredek emelkedésű csavarmeneten forogva tolódik a bekapcsolt helyzetbe. Az indítómotor metszetét a 6. ábra tartalmazza. A hajtófogaskerék hüvelyét egy emeltyű mozgatja. A működési vázlat a 7. ábán látható. Indításkor a behúzótekercs és a tartótekercs együttes hatásra behúzódik a mágneskapcsoló vasmagja. Ez magával húzza az emeltyű felső végét, míg az alsó villás 14
vége a rugó segítségével előretolja a hajtófogaskerék hüvelyét. A hajtófogaskerék forogva halad előre, így könnyen kapcsolódik a fogaskoszorúba. Mikor már a hajtófogaskerék kb. 1/3 rész mélységig a fogaskoszorúba nyomult, akkor zárja a mágneskapcsoló hídja az indítómotor áramkörét, a motor megindul és teljesen előrecsavarja a hajtófogaskereket, majd a teljes nyomatékot átadja a fogaskoszorúnak. Ha a fogaskerekek nem tudnak összekapcsolódni, mert fog fogat talál, akkor is előrenyomódik az emeltyű villás vége, összenyomja a rúgót, ami a forgórész megindulásakor belöki a hajtófogaskereket a fogaskoszorúba.
7. ábra Bosch menetes tengelyű indítómotor működése forrás [1]
7. ábra Bosch menetes tengelyű indítómotor működési vázlata forrás [1]
A hajtófogaskerék és a hüvely kapcsolatát görgős szabadonfutó oldja, nehogy károsodjék az indítómotor, amikor már a belső égésű motor beindult. A mágneskapcsoló rugója húzza vissza az indítószerkezetet nyugalmi helyzetbe. A gyors megállásról a forgórész tengelyének kommutátor felőli végén lévő súrlódó fékberendezés gondoskodik, hogy minél előbb el lehessen végezni az újbóli indítást.
2.3.5. Váltakozó forgású indítómotor Nagy lökettérfogatú, egyhengeres motorok indítására készültek. Előnye hogy a nehéz belsőégésű motor is kis indítómotorral és viszonylag kis akkumulátorral indítható. A lendítőkerék lengetésével olyan mozgási energiát halmoz fel, amivel legyőzi a sűrítési nyomást és átforgatja a motort a holtponton. Tehát nagy nyomatékot nem fejt ki közvetlenül az indítómotor a főtengelyre. 15
Szerkezete a csúszófogaskerekes indítómotoréval egyezik meg, annyi különbséggel, hogy hozzáépítettek egy vezérlő elektromágneses szerkezetet, ami a váltakozó forgásirányt vezérli. Az indítómotor metszete a 8. ábrán látható.
8. ábra Váltakozó forgásirányú indítómotor metszete forrás [1]
A szabadonfutó szerkezet nem alkalmazható a hajtófogaskerék és a forgórész tengelye között. Ugyanis a hajtófogaskerék mindkét irányba közvetít forgatónyomatékot. A görgős szabadonfutó helyére egy rugalmas gumibetétes tengelykapcsolót szereltek, ami hatásosan tompítja a lökésszerű erőhatásokat a forgórész és a lendítőkerék között. A forgási irányt két egymástól független gerjesztőtekercselés biztosítja, melyek az indítómotor állórészében vannak. Ha a terhelés elér egy bizonyos mértéket, az indítómotor forgásiránya megváltozik. Az indítómotor áramkörei a következő ábrán látható.
16
9. ábra Váltakozó forgású indítómotor áramkörei forrás [1]
Az Ig indítógomb megnyomására behúzódik az emeltyűt. Az Ik indítókapcsoló az elmozdulás miatt záródik. A b átkapcsoló határozza meg az indítómotor forgásirányát. Az áram vagy az MK1 vagy az MK2 mágneskapcsoló felé folyik. A 9. ábrán először az MK2 mágneskapcsoló zár. Az áram a bal oldali gerjesztőtekercsbe, az A ponton és az armatúrán keresztül jut el a testhez. Forgás közben ellenfeszültség keletkezik, ami emeli az A pont feszültségét, az akkumulátor árama csökken a forgórészben, és a vezérlőkapcsoló áttolódik a c behúzótekercsére. Ez behúz, a b átkapcsoló tekercse megfeszíti a kapcsoló rugóját. Az indítómotornak egyre nagyobb teljesítményt kell leadnia, lassul a forgása, és ezáltal csökken az ellenfeszültség. Az A pont feszültsége csökken, a vezérlőtekercs d tekercs árama nő. A nyitótekercs a vezérlőkapcsolót bontja, az átkapcsoló a feszített rugó hatására átbillen, az indítómotor forgásiránya megváltozik. A folyamat ezután megint ismétlődik, amíg az indítómotor addig forgatja ide-oda a belsőégésű motor lendkerekét, amíg az megindul. Az indítógomb elengedésével a rugó visszahúzza az emeltyűt, a csúszófogaskerék visszaáll az induláskor felvett helyzetbe és az indítómotor megáll. Az indítómotor bármely forgásirányban el tud indulni. Az indítást azonban meg kell ismételni, ha a motor rossz irányba forog
17
2.3.6. Lendítőkerekes indítómotor. A
lendítőkerekes
indítómotorokat
általában
nehéz
járműmotorok
indításához
használják. Ennek oka, hogy a nagyobb motorok indításához nagyobb nyomaték szükséges. Ez növeli az indítómotorok méretét, valamint a táplálásához szükséges akkumulátorok kapacitását, ami nagyobb terhet és gondot okozhat. A lendítőkerekes indítómotorban egy lendítőtárcsát gyorsítanak fel, fogaskerék-áttétel útján. A gyorsítás történhet kézzel, vagy villamos hajtással. Az ilyen indítómotorok előnye a kis súly és méret. A nyomaték átadása történhet közvetlen módon, vagy tengelykapcsolón keresztül. A hajtófogaskerék és a lendítőkerék összekapcsolását egy emeltyűvel végzi. Indításkor, ha a lendítőtárcsa eléri a megfelelő fordulatszámot, az emeltyűt áthúzzák, a lemezes tengelykapcsoló átadja a nyomatékot a hajtófogaskeréknek, ami előrenyomul és összekapcsolódik a fogaskoszorúval. A nyomaték átjut a lendítőtárcsáról a főtengelyre. Amikor a járműmotor beindul, a nagy fordulatszám miatt a hajtófogaskerék gyorsabban kezd forogni, de a tengelykapcsoló szabadonfutóként viselkedik, amíg az emeltyű vissza nem kerül eredeti helyzetébe.
3. A mikrovezérlők A mikrovezérlők vagy más néven mikrokontrollerek kialakulását a mikroszámítégepek és a mikroprocesszorok fejlődése tette lehetővé. A tranzisztorok és az integrált áramkörök megjelenésével egyre kisebb méretű számítógépek jelentek meg. A nagy forradalmi áttörést a mikroprocesszorok hozták meg. Elsőként a Texas Instruments által gyártott TMS 1000 és az Intel cég Intel 4004-es 4 bites processzora jelent meg. Ezt követte az Intel 8008, az első 8 bites mikroprocesszor, valamint több gyártó részéről is jelentek meg sikeres 8 bites processzorok. Később a 8 bites processzorokat felváltották a 16 és 32 bites mikroprocesszorok. A 80-as évek elejére a mikroprocesszorok gyorsan elterjedtek, áruk és méretük pedig egyre csökkent. Megjelentek a személyi számítógépek, a mikroprocesszorok pedig az élet minden területén megjelentek kezdve az szórakoztató iparágtól az űrkutatásig. A mikroszámítógépek fő része a mikroprocesszor, mint ahogyan a következő ábrán is látható.
18
10. ábra Mikroszámítógép felépítése forrás [2]
További elemei a memória, ki-és bemeneti eszközök, és az elemeket összekötő buszrendszer. Hamar rájöttek arra, hogy a mikroszámítógépek nem csak számítástechnikai feladatokra alkalmasak, hanem vezérlési és szabályzási feladatokra is használhatóak. A technika fejlődésével a mikroprocesszor gyártók elkezdték az egy chipes mikroszámítógépek gyártását, a mikrovezérlőket. A mikrovezérlők vagy mikrokontrollerek egyetlen lapkára integrált mikroszámítógépek, melyek egy mikroprocesszorból, memóriákból és a kiegészítő perifériákból áll. A mikrovezérlőket szabályzási és vezérlési feladatokat látnak el. Manapság sok területen és eszközben felhasználják, mint például a háztartási eszközök, gépjárművek, szórakoztató
elektronikai
eszközök,
robottechnika,
telekommunikáció.
Költséghatékonyan látják el a feladataikat, kisméretűek, és alacsony fogyasztásúak. Tervezésük során törekednek, hogy minél kevesebb járulékos alkatrész építsenek be. Ezt úgy érik el, hogy az IC lábait multiplex módon használják fel, vagyis egy lábnak több funkciója lehet. Valamint több perifériát építenek be az IC-be. A nem használt perifériák ki- és bekapcsolhatóak a fölösleges fogyasztások elkerülése miatt.
3.1. A mikrovezérlők általános részei, jellemzői [4] A mikrovezérlők tehát egy chipes áramkörök. A központi vezérlő egysége RISC alapú, vagyis csökkentett utasítás készletű processzor. Ezért nagyrészt hardveres felépítésű, külön program és adat memóriával rendelkezik. A program memória a ROM, ebben tárolódnak a vezérlő utasítások, az adatmemóriában, vagyis a RAM-ban pedig a futás közbeni adatok tárolódnak. Az általános vezérlési feladatokhoz kevés átmeneti adatot kell tárolni, és inkább több a vezérlő utasítás. A processzorhoz általában tartozik egy külső oszcillátor, amely órajelet ad számára, de időmérésre is használható. A mai
19
mikrokontrollerek általában 1 Hz és 100 MHz közötti órajelen futnak és néhány 100 kByte-ig terjedő RAM memóriát tartalmaznak. További gyakran előforduló perifériák: -
számlálók vagy időzítők: külső vagy belső jelek segítségével lehet léptetni
-
watchdog timer: Ez egy időzítő, amely a működtető program lefagyása ellen véd. A program futása közben, bizonyos időközönként le kell nullázni, különben a watchdog áramkör újraindítja a mikrokontrollert, ezáltal talán megszűntetve a lefagyás okát.
-
-
Jelátalakítók: -
Analóg-digitális átalakító (A/D konverter)
-
Digitális-analóg átalakító (D/A konverter)
-
Komporátor: két analóg feszültség összehasonlítására szolgál.
Általában tartalmaznak soros kommunikációs portot, amellyel a programozásuk történhet, de a számítógéppel való kommunikálás is megvalósulhat. További interfészek, buszok: I2C (Inter-Integrated Circuit), CAN (Controll Area Network), Ethernet, USB, párhuzamos port
-
LCD panel, LED kijelző meghajtók, jelgenerátorok
Működésükhöz szükséges tápfeszültség 1,8 V és 5 V között van, áramfelvételük nem több mint 100 mA. Tokozási formájuk mind furat, mind felületszerelt formában megtalálhatóak. Lábszámuk 8-tól kezdődően több száz lehet. A működtető program a mikrokontrollerbe több módon is betölthető. Az egyik eljárás hogy, az IC-t egy külső programozó készülékbe helyezik, és annak a segítségével töltik bele a programot, vagy az IC kivétele nélkül, véglegesen az áramkörbe építve töltik bele a programot. Nagyszámú gyártás esetén egy időben, maszkprogramozással programozzák fel a mikrokontrollereket. A mai eszközöket több ezerszer lehet írni vagy törölni, köszönhetően a Flash alapú memóriáknak. Programozásuk történhet Assambly programnyelven, vagy magasabb szintű program nyelven. Manapság elterjedt mikrokontroller típusok az Intel 8051 (MCS 51 család), PIC mikrovezérlő család, ATmel AVR, ATmega. A továbbiakban az indítómotor vezérléséhez felhasználni kívánt mikrokontrollert mutatom be.
20
3.2. MSP430 mikrokontroller család Az MSP430 mikrovezérlő családot a Texas Instruments fejlesztette ki. Legjellemzőbb tulajdonsága a kis áramfelvétel és fogyasztás valamint az alacsony ára a többi mikrovezérlőhöz képest. Mivel a hasonló árkategóriában lévőkhöz képest 16 bites processzort tartalmaz. Használata egyszerű, hatékony utasításkészlettel rendelkezik, ami segíti a gyors programfejlesztést. Az MSP430 mikorvezérlő családnak több tagja létezik, hasonló felépítéssel, de eltérő specifikációkkal. A következőkben a tanulmányaim során megismert és feladatok megvalósításához felhasználni kívánt G2553 típust mutatom be részletesebben. A típusra jellemző fő paraméterek a következőek: -
16 kB Flash programmemóriával, 512 bájt adatmemóriával, és 256 bájt információs memóriával rendelkezik
-
16 darab I/O kivezetése van, P1 és P2 port
-
2 db Timert tartalmaz, USCI kommunikációs egységet, ami támogatja a hardveres UART-ot, valamint I2C és az SPI használatot
-
Analóg komparátort és analóg-digitális átalakítót tartalmaz (ADC)
-
Gyárilag négy előre beállított frekvenciája van, 1, 8, 12 és 16MHz
11. ábra Az MSP430 G2553 mikrovezérlő lábkiosztása forrás [3]
A mikrovezérlő működéséhez szükséges tápfeszültség szint 1,8 V és 3,6 V között van. A programozáshoz legalább 2,2 V szükséges. A maximális működési sebesség 16MHz eléréséhez 3,3 V feszültséget kell biztosítani. A teljesítményfelvétel nagyon alacsony, aktív módban 230 μA, míg tétlen állapotban 0,5 μA. A lábakra köthető feszültség a tápfeszültség
és
±0,3
V,
bemeneti
áramterhelhetőségük
±2
mA,
kimeneti
áramterhelhetőség ±6 mA.
21
3.2.1. MSP430 mikrokontroller felépítése
12. ábra MSP40 G2553 mikrokontroller felépítése forrás [3]
A 12. ábrán látható, hogy az órajel generátor többféle órajelet szolgáltat. Az MCLK a processzor órajele, míg az ACLK és az SMCLK a perifériák működéséhez szükséges. A processzor 16 bites, órajele 0 és 16 MHz között állítható. Tartalmaz 16 db regisztert, melyek közül négy speciális célt szolgál, ezek a Program Counter, Stack Pointer, Status Register, Constant Generator, a többi pedig általános célra használható. A Brownout Protection figyeli a tápfeszültség leesését, Watchdog timer időközönként megszakítja vagy újraindítja a programot. A mikrovezérlő a beírt programot a 16 Kb flash memóriában tárolja, ez nem felejtő memória, több ezerszer újra lehet írni. A változókat az 512 bájt RAM memóriában tárolja. Található még egy 256 bájt flash információs memória, ami a mikrovezérlő kikapcsolása után is megőrzi az adatokat. A memória címzés és az adatok továbbítása 16 bites buszon történik. A címzés bájtonként vagy szavanként történhet. A perifériák 22
elérése is memóriacímzéssel történik, szintén bájtonként vagy szavanként. Bájtokkal címezhető például a digitális ki- és bemeneti portok regiszterei. A mikrokontroller három forrásból veheti az órajelet. Az első forrás az LFXT1, ami egy alacsony frekvenciájú kristályoszcillátor, a mikrokontroller XIN és XOUT kivezetéseire kell kötni, tipikusan 32 kHz frekvencián működik. A második forrás a VLO, ez a lapkára integrált elemekből álló RC oszcillátor, 12 kHz-es órajelet állít elő, nagyon kis fogyasztású, de nem elég pontos. Szintén RC oszcillátor a digitálisan vezérelt oszcillátor, azaz a DCO. Magasabb frekvencián működik, maximálisan 16 MHz. Ezekből a forrásokból állítja elő a mikrovezérlő a már említett három órajel típust. Az MCLK órajelet a processzor és a rendszer használja. Bármelyik órajelgenerátorral előállítható és leosztható. Az ACLK segédórajel, az egyes perifériák működéséhez választható ki. Forrása lehet a VLO vagy a LFXT1 órajelgenerátor. Az SMCKL az alrendszerek
órajele,
szintén
perifériákhoz
választható,
forrása
bármelyik
órajelgenerátor lehet.
3.2.2. Megszakítás, üzemmódok, időzítés A
mikrokontroller
megszakítás
rendszere
vektoros
rendszerű.
Minden
megszakításjelzőhöz tartozik egy vektor, amit a memória végén lévő táblázatban található. A vektorok sorrendje határozza meg a megszakítás prioritását, vagyis ha egy időben több megszakítás kérelem érkezik, akkor az a megszakítás hajtódik végre először, amelyiknek a vektora magasabb memóriacímen található. A GIE (General Interrupt Enable) általános megszakítás engedélyező bittel a megszakítási rendszer egészében tiltható vagy engedélyezhető. Megszakítás kérésekor a processzor abbahagyja az éppen futó utasítás végrehajtását, a programszámláló PC, és az állapot regiszter SR értéke elmentésre kerül a veremtár tetején. Több prioritás esetén kiválasztódik a legfontosabb. Törlődik a vektorhoz tartozó jelzőbit, a státusz regiszter SR. A vektorból a cím bemásolódik a PC-be, és a processzor elkezdi végrehajtani az utasítást. Ezen műveletek összesen 6 utasítás ciklusba kerülnek. A megszakítás RETI utasítással végződik, ennek hatására az SR és a PC értéke visszakerül a veremtár tetejéről, és minden visszaáll a megszakítás előtti állapotba. Az alacsony fogyasztást különböző energiatakarékos módokkal lehet elérni, melyek jelölése LPMx azaz Low Power Mode. Aktív módban a processzor működi, fut a program és mind a 3 órajel aktív, ez a mikrovezérlő normál módja. Az LMP0 módban a CPU és az MCLK órajel le van tiltva, nem fut a program, de az SMCLK, a DCO és az 23
ACLK órajelek aktívak. Ez a mód akkor hasznos, ha a processzora nincs szükség, de bizonyos perifériáknak magas frekvenciájú órajelre van szüksége. Az LMP1 mód csak abban tér el az előző módtól, hogy a DCO oszcillátor is ki van kapcsolva, ezért ennek az üzemmódnak nincs nagy gyakorlati jelentősége. Az LPM2 üzemmódban a CPU az MCLK mellett az SMCLK órajel is ki van kapcsolva. Szintén nincs nagy gyakorlati jelentősége. Az LMP3 üzemmód az általános alacsony fogyasztású mód. Ilyenkor csak az ACLK aktív, minden le van tiltva. Tipikus felhasználása a futó idő nyilvántartásának egy alacsony frekvenciájú órajellel, vagy a processzor időközönkénti felébresztése alvó állapotból. Az utolsó LPM4 üzemmódban minden oszcillátor és a processzor le van tiltva. Ilyenkor csak külső megszakítás vagy RESET hatására lehet felébreszteni a mikrokontrollert az alvó állapotból. Az energiatakarékos üzemmódokat a STATUS regiszter bitjeivel lehet beállítani. Ha a CPUOFF vezérlőbit ’1’ akkor az MCLK letiltódik. Az OSCOFF bit ’1’ esetén letiltja az LFXT’/VLO oszcillátort és az ACLK-t. AZ SCG0 ’1’ értéke esetén a DCO oszcillátort, míg az SCG1 ’1’ esetén az SMCLK órajelét tiltja le. A mikrovezérlő tartalmaz az időzítésre alkalmas Timer modult. Ez két fő részre osztható, a számláló egységre és Capture/Compare csatornákra. Az utóbbi digitális komporálásra vagy PWM jelek előállítására használható. A számláló 16 bites regisztert tartalmaz. Forrása lehet külső órajel, az ACLK vagy az SMCL órajele.
4. Az indítómotor mikrokontrolleres vezérlése A gépjármű motor indítási folyamata és az indítómotor működése során előfordulhat, hogy az indítás helytelenül megy végbe, vagy egyáltalán nem sikerül a gépjármű motor elindítása. Rosszabb esetben az indítómotor szerkezete is károsodhat. Ennek az egyik oka lehet, hogy a vezető helytelenül végzi el az indítási kísérletet, vagy az indítómotor működése során valamilyen probléma lép fel, ami miatt nem képes a helyes indítási folyamatot megvalósítani. A problémák elkerülésére és a helyes indítás segítésére többféle megvalósítás létezik. Ezek régebben valamilyen relékből és kapcsolókból felépített vezérlő áramkörök voltak, ma már elektronikus áramköröket tartalmazó vezérlő egységek. Ilyen vezérlő egység megvalósítására alkalmasak lehetnek, a mikrokontrollerek is. A mikrokontrollereken belül pedig, a már bemutatott MSP430-as mikrokontrollerek. Előnyük, hogy több vezérlései feladatot is meg tudnak oldani egy időben, azonnal be 24
tudnak avatkozni, ha valamilyen olyan probléma áll fenn, ami az indítás helyességét akadályozná. Megvalósítható velük számláló, időzítő feladatok, hasznos lehet a jelátalakító és feszültségérték összehasonlító funkciójuk.
4.1. A mikrokontrollerrel megvalósítható feladatok Előfordulhat, hogy a jármű vezetője nem észleli, hogy a gépjármű motorja már önállóan működik. Például a korszerű motorok már egész halkan működnek, az utastérben szinte alig hallani a járásukat. Ilyenkor megeshet az, hogy a vezető ráindít az önállóan működő motorra. Ilyen esetben az indítómotor működése közben, az indítómotor tengelyén lévő hajtófogaskeréknek a gyorsan forgó fogaskoszorúval kellene csatlakoznia, ami károsodást okozna az indítómotorban. Ha a belső égésű motor már önálló működésre képes, akkor fontos az indítómotor lekapcsolása. Szintén a fő cél az indítómotor megvédése a mechanikai károsodásoktól. Mivel a belső égésű motor olyan fordulatszámmal működik, amit az indítómotor forgórésze már nem tudna elviselni károsodás nélkül, ezért nem állhatnak állandó kapcsolatban a belső égésű motor működése során. Meg lehet akadályozni a hosszan tartó indítózást. Az indítómotor működése során nagy áramerősséget igényel. A hosszú ideig tartó indítózás során ez az áramerősség egyre növekszik, ami túlmelegedést és károsodást okozhat. Vizsgálni lehet, az indítómotor behúzó reléjének működését. Az indítómotor csak akkor kapja meg a működéséhez szükséges indítási áramot, ha a főérintkező teljes csatlakozása megtörtént, vagyis a behúzó relé rendben működik. Ez azért fontos, mert ha esetleg a relé nem tudja összekapcsolni a főérintkezőket, a rajta hosszabb ideig átfolyó áram tönkreteheti azt. Ha a gépjármű sebességváltója valamilyen sebességi fokozatba van kapcsolva, akkor meg lehetne akadályozni az indítást. Ha a sebességben próbáljuk a járművet elindítani, akkor az indítómotor képes oly mértékben megforgatni a járműmotor főtengelyét, hogy a gépjármű megugrik, ami veszélyes lehet. Valamint könnyebbé is teszi az indítómotor működését, ha sebességváltó le van választva a kuplungpedál kinyomása által, a belső égésű motor főtengelyétől. Manuális sebességváltóknál a tengelykapcsoló pedál benyomásának érzékelése vizsgálható, automata sebességváltó esetén pedig a fékpedál benyomását vizsgálhatjuk. Az
indítás
folyamata
a
mikrokontroller
segítségével
automatizálható,
ami
megkönnyítheti a vezető számára az indítást. Elég lehet, csak egy nyomógomb egyszeri 25
megnyomása, és az indítási folyamat önállóan végbe megy. A mikrokontroller pedig jelezni tudja a vezető felé, ha valamilyen probléma lép fel az indítása során.
4.2. A mikrokontrolleres vezérlés felépítése A mikrokontrolleres vezérlés során, a mikrokontrollert az indítómotor, és az indító jel közé kell kapcsolnunk. Az indításhoz szükséges jelet a mikrokontrollernek kell megkapnia, majd továbbadnia az indítómotornak. Így a bejövő jelek által ellenőrizni tudja, hogy az indítás folyamata helyesen fog-e végbe menni, és fellépett-e valamilyen hiba az indítás során. A rendszer felépítését a következő 13. ábra szemlélteti.
13. ábra Mikrokontrolleres vezérlés vázlata
A mikrokontroller folyamatosan figyeli a bemenetére érkező jeleket, és a gyújtás meglétét. Az indítást egy nyomógomb szolgáltatja. A mikrokontroller figyeli az akkumulátor kapocsfeszültségét. Ebből következtetni lehet a belső égésű motor működeik-e vagy sem, feltételezve hogy a generátor állandó összeköttetésben van a gépjármű motorral és megfelelően működik. Ha a belső égésű motor önálló működésre képes, akkor az meghatja a generátort. A generátor tölteni kezdi az akkumulátort, aminek megemelkedik a feszültség szintje, valamint ellátja a fogyasztókat. A feszültségszint vizsgálatához a mikrokontrollerbe épített A/D (analóg/digitális) átalakítótót lehet felhasználni. Mivel a mikrokontroller digitális eszköz, csak magas és alacsony jelszintet tud megkülönböztetni. Ezek a jelszintek felelnek meg a logikai 1 és 0 értéknek. Ezért az akkumulátor feszültség szintjét digitális 26
jellé kell átalakítani, hogy fel tudja dolgozni a mikrokontroller. Az akkumulátor feszültség szintjét folyamatosan figyelni kell. Ha a feszültség szint egy meghatározott értéket átlép, vagyis egy meghatározott digitális kód értéket vesz fel, akkor mikrokontroller érzékelni tudja, hogy a belső égésű motor önállóan működik vagy sem. Továbbá ha már jár a belső égésű motor, akkor meg lehet akadályozni, hogy az indítómotort működtethessük. Az indító jel kiadása után a rendszer figyeli a főérintkező állapotát, amiből következtetni lehet a behúzó relé állapotára és helyes működésére. Ehhez mérni kell a mikrokontrollernek a jel kiadásától eltelt időtartamot, azaz hogy mennyi idő telik el a vezérlőjel kiadásától, a teljes csatlakozás megtörténéséig. Az indítómotor szerkezeti kialakításából adódóan, a főérintkező két kivezetési pontjához hozzá lehet férni. Az egyik kivezetés az akkumulátorhoz csatlakozik, a másik pontból jut el az akkumulátor árama az indítómotorhoz. Ha ezen utóbbi pont potenciálját vizsgáljuk, abból következtetni lehet, hogy behúzó relé a vezérlőjel kiadása után működésbe lépett-e, és megfelelően összezárta a főérintkező a két kivezetési pontot. Szükség van továbbá a mikrokontroller időzítő funkciójára, hogy a hosszú indítózási folyamatot elkerüljük. Ha nem sikerül beindítani a belső égésű motort, valamilyen meghibásodás miatt, vagy a megszokottnál nagyobb nyomatékra van szükség, például hidegebb időjárási körülmények között, akkor ne terheljük feleslegesen az indítómotort. Sikertelen indítási kísérlet után, lehetőség van, hogy egy kis időre pihentessük az indítómotort, és letiltani annak használatát. A mikrokontroller figyeli, hogy a gépjármű sebességváltója semleges fokozatban van. Ezt manuális váltó esetén a kuplungpedál kinyomásának érzékelésével tehetjük meg, amit egy egyszerű kapcsoló is el tud látni. Automata sebességváltó esetén pedig a semleges fokozat jelét lehet érzékelni és felhasználni, vagy a fékpedál kinyomásának érzékelését, ami szintén egy kapcsolóval megoldható. Ezáltal meg lehet akadályozni annak a lehetőségét, hogy a gépjárművet bekapcsolt sebességi fokozatban próbáljuk elindítani. Mikrokontroller működési feszültsége alacsonyabb, mint a gépjárműben található feszültség tartomány, ezért közvetlenül nem tudunk feszültséget kapcsolni a mikrokontroller bemenetére. Feszültségosztással vagy más módszerrel kell biztosítani az alacsonyabb feszültségszint bevezetését a mikrokontroller bemenetébe. Valamint stabil tápfeszültséget kell biztosítani a mikrokontroller számára.
27
4.3. A mikrokontroller programozása A mikrokontrollerben futó program valósítja meg az elvégzendő feladatokat. A mikrokontrollerrel megvalósítani kívánt feladatok egyszerűsített folyamatábráját a 14. ábrán láthatjuk. A mikrokontroller folyamatosan figyeli, hogy a gyújtás be van kapcsolva, valamint hogy a sebességváltó sebességi fokozatban van. Az indítási ciklus az indítógomb egyszeri lenyomása után indul el. A ciklusban a program először megvizsgálja, hogy a belső égésű motor már önállóan működik-e vagy sem, ezután adja ki az indítási jelet. A kiadott indítási jel után a program megvizsgálja a behúzó relé állapotát, ha az nem megfelelően működik, megszakítja az indító jelet. Folyamatosan figyeli az akkumulátor kapocsfeszültségét, valamint az indítógomb lenyomása óta eltelt időt. Ha a belső égésű motor önálló működésre képes, a mikrokontroller szintén megszakítja az indító jelet, és az indítómotor leállításra kerül. Az indítás tehát automatikusan működik, de csak egy meghatározott ideig próbálkozik a mikrokontroller a gépjármű motor indításával. Egy bizonyos idő eltelte után szünetelteti az indítás lehetőségét egy ideig, majd újra az indítógomb lenyomásával kezdhetjük meg az indítási ciklust.
28
14. ábra Az indítás folyamatábrája
A mikrokontroller programozásához az MSP430 Launchpad fejlesztői kártyát használom fel, ami a 15. ábrán látható. A fejlesztői kártya foglalatában egy MSP340G2553 típusú mikrokontroller található, de egy másik típusú MSP430G2452 mikrokontroller is tartozik a kártyához. A kártya két részre bontható. A felső részen található a programozáshoz és a hardveres nyomon követéshez található egységek. Itt kap helyet az USB csatlakozó, és a mikrokontroller tápfeszültségét ellátó feszültség stabilizátor. A kártya közepén helyezkedik el a 20 pólusú IC csatlakozó. Az IC lábai ki vannak vezetve két oldalra, így könnyen csatlakoztathatóak a külső áramkörök. 29
15. ábra MSP430 Launchpad fejlesztői kártya forrás [6]
A kártya alsó szélén található a RESET gomb, amivel újraindíthatjuk a mikrokontrollert, valamint található egy még egy nyomógomb, és két darab LED, a programfejlesztéshez.
A
kártyához
tartozik
egy
32
KHz-es
kristály,
amit
beforraszthatunk a kialakított helyére, ha külső órajel forrást szeretnénk használni. Továbbá különböző átkötések is szerepelnek a kártyán, ezekkel csatlakozik az emulátor rész a mikrovezérlőhöz, és különböző módokat lehet vele váltogatni. A programot az IAR Embedded Workbench fejlesztőkörnyezetben írom meg. A fejlesztőkörnyezet tartalmaz C/C++ fordítót és debugger, hibakeresési funkciót, valamint több különböző processzor családot támogat. Tartalmaz szimulátort, ahol vizsgálható a program futása, lépésről lépésre, kiolvashatjuk és átírhatjuk a regiszterek tartalmát. A programkódot C programozási nyelvben írom meg.
5. A mikrokontrolleres vezérlés hardveres tervezése A mikrokontrolleres vezérlés kapcsolási rajzát a 4. melléklet tartalmazza. A továbbiakban az egyes egységek, és alkatrészek működését mutatom be.
5.1. Az akkumulátor feszültségének mérése A gépjármű-akkumulátorok feladata a fogyasztókat villamos energiával ellátni, amikor a gépjármű motorja áll. Továbbá az akkumulátor látja el a fogyasztókat abban az esetben is, amikor a jármű motor fordulatszáma olyan alacsony, hogy az általa hajtott generátor nem juttat elég áramot a gépkocsi villamos hálózatába.
30
A gépjárművekben a legelterjedtebb akkumulátor típus a savas vagy ólom akkumulátor. Felépítését tekintve egyszerű, 12V akkumulátor esetén egy műanyagházban hat darab cellát találunk egymástól elkülönítve. Ezekben vannak elhelyezve az ólom és ólomoxid masszát tartalmazó lemezek, az elektródák, és ezeket öleli körül az elektrolit, azaz a hígított kénsav. Az akkumulátorok használata szempontjából a legfontosabb jellemző a tárolóképesség vagy más néven kapacitás, amit amperórákban (Ah) fejeznek ki. Az amperóra értékét úgy kapjuk meg, ha az amperben számított kisütő áramerősségét megszorozzuk az órák számával, amennyi ideig az áramerősséget akkumulátor szolgáltatta. A tárolóképesség nagysága több tényezőtől is függ, mint például a kisütés időtartama,
az
akkumulátor
hőmérséklete,
a
kisütő
áramerősség.
Személygépjárművekben használatos akkumulátorok tárolóképessége 40 Ah-tól akár 100 Ah-ig is terjedhet a jármű motortól függően. Az
akkumulátor
pólusai
között
feszültségkülönbséget
mérhetünk.
Nyugalmi
feszültséget akkor mérhetünk, ha a legutolsó áramfelvétel, vagy töltés óta eltelt legalább 30 perc, és a mérőműszer áramfelvétele elhanyagolhatóan kicsi. Ha az akkumulátort kisütés vagy töltés közben legalább normál áramerősség járja át, akkor üzemi kapocsfeszültséget mérhetünk, ami mindig kisebb, mint a nyugalmi feszültség. A következő táblázat egy 12V-os akkumulátor töltöttségét mutatja a savsűrűség és a nyugalmi feszültségtől függően.
Töltöttség
Savsűrűség (kg/l)
Akkufeszültség (V)
100%
1,265
12,7
75%
1,225
12,4
50%
1,190
12,2
25%
1,155
12,0
0%
1,120
11,9
1. táblázat Akkumulátor töltöttsége [5]
A kifogástalan állapotú, teljesen töltött akkumulátor nyugalmi feszültsége 12,7 V, ez cellánként 2,12 V-ot jelent. Ha az akkumulátor feszültsége 11,9 V vagy kevesebb, az akkumulátor lemerültnek tekinthető. A kisütési határfeszültség 10,5 V, ami cellánként 1,75 V-ot jelent, ha tovább folytatjuk a kisütést, akkor a lemezek tönkremennek. Állandó erősségű normál árammal töltve az akkumulátort, a cella üzemi feszültsége eléri a 2,4 V feszültséget, és ennél a cellafeszültségnél erősen megindul a gázfejlődés. A 31
cellafeszültség 2,4 V-tól kezdve gyorsan növekszik és kb. 2,6 V körüli feszültségen megáll. A gépjárművekben az akkumulátor töltésére és a hálózat táplálására háromfázisú generátort használnak, amit a gépjármű motor hajt meg, ékszíjon keresztül. Előnyük a jó hatásfok, a motor alapjárati fordulatszámán is adnak le teljesítményt, így az akkumulátor töltése már kisebb fordulatszámon elkezdődhet, kis teljesítménytömeg. Az áram az állórészben fejlődik, így kefék nélkül, rögzített kötésekről vezethető el. Nagy fordulatszámon járatható, forgásiránya villamos tekintetben közömbös, csak a ventilátor hajtása határozza meg. Nem igényel kezelést, üzembiztos működés. A 16. ábrán a háromfázisú generátor áramköre látható. Az
állórész
három
csillagkapcsolásban
egymástól
alkalmaznak.
független A
forgórész
fázistekercsből körmös
pólusú,
áll,
melyeket
gyűrű
alakú
gerjesztőtekercsből és két pólusfélből állnak, amelyeket a tekercsre tolják és körmeik egymásba nyúlnak. Általában 12 vagy 6 póluspár van. A háromfázisú áramot 6 darab háromfázisú hídba kapcsolt teljesítménydióda egyenirányítja.
16. ábra A háromfázisú generátor áramköre [1]
A gerjesztőáram előállítását szintén háromfázisú hídkapcsolásban, 3 darab dióda végzi a pozitív oldalon. A diódák megakadályozzák továbbá, hogy az áram iránya megforduljon az akkumulátor és a generátor között. A terhelő áramkör a B+ kapocstól a fogyasztókán, a testen és az akkumulátoron keresztül záródik. A gerjesztés áramköre a D+ kapocstól a feszültségszabályzón, a gerjesztőtekercsen, a testen és végül szintén az akkumulátoron 32
keresztül záródik. Szükség van továbbá az előgerjesztő körre, mert a generátor csak akkor válik öngerjesztővé, ha a feszültsége nagyobb, mint a diódák küszöbfeszültsége. Az előgerjesztő kör az akkumulátor pozitív sarkáról indul, a gyújtáskapcsolón és a töltésjelző lámpán, a szabályzón a gerjesztőtekercsen, a testen, majd az akkumulátoron záródik. A forgórész remanens fluxusa csak nagy fordulatszámon indukálna a diódák küszöbfeszültségénél nagyobb feszültséget. A töltésjelző lámpa áramfelvételekor viszont a remanens fluxus mellett járulékos mágneses tér is keletkezik, ami elegendő ahhoz, hogy kis fordulatszámon is a forgórészben a diódák küszöbfeszültségénél nagyobb feszültség keletkezzen. A feszültségszabályozó feladata a hálózati feszültség állandó szükséges szinten tartása, a változó fordulatszám és terhelés mellett. 12 V feszültségű rendszerekben közelítőleg 14 V-ra állítják be a szabályzót. Ahhoz hogy a mikrokontroller eldöntse, hogy a belső égésű motor önálló működésbe lépett-e az indítás során, az akkumulátor kapocsfeszültségének mérését használjuk fel. Ha az akkumulátor kapocsfeszültsége 14V körüli, akkor feltételezhető, hogy a belső égésű motor már önállóan működik, és az indítómotort le kell kapcsolni. Az akkumulátor kapocsfeszültségének méréséhez a mikrokontroller belső analóg-digitális átalakítóját használjuk fel. Az analóg-digitális átalakítók az amplitúdóban és időben folytonos jelből, időben és amplitúdóban diszkrét jelet állítanak elő, azaz a jel egy meghatározott értéket vehet fel. Az átalakítás általános lépései a jelátalakítás, jelkondicionálás, mintavételezés, kvantálás és kódolás. Működési elvük szerint lehetnek közvetlen analóg-digitális átalakítók, melyek a bemenetre érkező villamos jelet közvetlenül digitális jellé alakítják át. Ezzel szemben léteznek közvetett típusúak, amik a villamos mennyiségét először más mennyiségre alakítják át, ami általában idő vagy frekvencia, és ez után alakítják át digitális jellé. Az MSP430 mikrokontrollerek fokozatos közelítésű analóg-digitális átalakítót tartalmaznak, más néven SAR (Successive Approximation Register) analóg- digitális átalakítót. Visszacsatolt típusú átalakító, a bemeneti jelet egy komporátor segítségével hasonlítja össze a kimenethez tartózó értékkel. Az összehasonlítás ciklikus, vagyis közelítve határozza meg a bemenő jel értéket. A komporátor kimenete határozza meg, hogy a SAR regiszter adott helyi értékű bitje 0 értékű vagy 1 értékű lesz. Ez attól függ, hogy az összehasonlítás kisebb vagy nagyobb feszültséget eredményezett.
33
A mikrokontroller 10 bites átalakítót tartalmaz, tehát az analóg jelet 210 = 1024 elemi értékre
tudja
felbontani.
A
mintavevő-tartó
áramkör
mintavételi
időzítése
programozható, konverzió indítható szoftveresen vagy az időzítő egység kimenő jeleivel. A konverzió órajel forrása is választható, valamint a használható külső és belső referenciaforrás, és van beépített feszültségreferencia, ami lehet 1,5 V, 2,5 V vagy a tápfeszültség. Megvalósítható egycsatornás, ismételt egycsatornás, csatornapásztázó és ismételt csatornapásztázó analóg digitális átalakítás. A digitális jel legnagyobb értéke N=03FFh, ami decimálisan 1023, ha a bemenő jel ≥ VR+-0,5*LSB. Az N a konverzió eredménye, az VR+ a pozitív referencia feszültség, míg az LSB (Least Significant Bit) a legkisebb helyi értékű bit megváltoztatásához szükséges átlagos eltérés a bemeneti értékben. Esetünkben az LSB értéke 3,3 V osztva (210-1)-el, ami 3,23 mV. A digitális jel legkisebb értéke pedig N=0000h, ami decimálisan 0, ha a bemenő jel ≤ VR-+0,5*LSB, ahol a VR- a negatív referencia feszültség. A minimális és a maximális érték között pedig a digitális jel értékét a következőképpen kapjuk meg ahol VIN a bemenő feszültséget jelenti, amit mérni szeretnék:
N
1023 (V IN V R ) VR VR
(1)
A pozitív referencia feszültség a mi esetünkben a tápfeszültség lesz, ami 3,3 V, a negatív referencia pedig a föld potenciál, vagyis 0 V. Mivel az akkumulátor feszültsége ennél sokkal nagyobb érték, ezért meg kell oldani, hogy a megfelelő tartományban legyen a mért feszültég. Ezt egy két ellenállásból álló feszültségosztóval tehetjük meg, amit a 17. ábra mutat.
17. ábra Bemeneti feszültségosztó
34
Az R2 ellenállás egyik pontja csatlakozik az akkumulátor pozitív pólusához. A bemeneti jelet ezen ellenállás másik pontjáról vezethetjük be a mikrokontroller bemenetére. Az akkumulátoron, és így az ellenállásokon eső legnagyobb feszültség értékét 14,5 V vesszük. Ekkor azt szeretnénk, ha az R3 ellenállás két pontja között 3.3 V legyen, ami a mikrokontroller analóg-digitális átalakítójának a végkitérése. Az R2 ellenálláson eső feszültség így tehát 14,5 V – 3,3 V, ami 11,2 V feszültséget ad. Az ellenállások értékét az ohm törvényből adódnak, az áram értékét 1 mA-re állítjuk be, mert a bemenet áramterhelése nem lehet több ±2 mA.
R2
U2
R3
11 , 2V
I
11 , 2 k
(2)
3 ,3 k
(3)
1mA
U3 I
3 , 3V 1mA
Az ellenállások teljesítménye: PR 2 U 2 I 11 , 2V 1mA 11 , 2 mW
(4)
PR 3 U 3 I 3,3V 1mA 3,3 mW
(5)
A szabványos ellenállás sorban nincs 11,2 kΩ értékű ellenállás, helyette 11 kΩ értékűt használunk fel. Mindkét ellenállás 1 % tűrésű 0,6 W teljesítményű fémréteg ellenállás. Azt szeretnénk, ha az akkumulátor feszültsége 13,8 V vagy ettől nagyobb értékű akkor a mikrokontroller ezt úgy érzékelje, mintha a gépjármű motor önállóan működik. Feszültségosztó képletből kiszámolható hogy a mikrokontroller bemenetén ekkor 3,18 V feszültség érték jelenik meg.
U3 U
R3 R3 R2
13 ,8V
3,3 k 3 ,3 k 11 k
3 ,18 V
(6)
Ez a feszültség érték az analóg-digitális konverzió után pedig a következő lesz:
35
N
1023 (V IN V R ) VR VR
1023 3 ,18 V 3 ,3V 0V
985 ,8
(7)
Ezt az értéket felkerekítjük 986-ra, majd átváljuk hexadecimális formába, ami 03DAh érték lesz. Tehát a mikrokontrollernek ezt az értéket kell figyelembe vennie az analógdigitális átalakítás során.
5.2. További bemenetek tervezése Bemeneti jel az indítógomb, a kuplung pedál kinyomását érzékelő kapcsoló, a gyújtás állapotának figyelése és a behúzó relé állapotának figyelése. Ezek mind digitális bemenetként kezelhetőek, mert csak egy bizonyos feszültségszint meglétét kell vizsgálni, vagyis hogy van jel, azaz a bemenet magas szinten van, és hogy nincs jel, azaz a bemenet alacsony szinten van. Kapcsolók esetén ezt úgy oldhatjuk meg, hogy a mikrokontroller bemenetét magas szintre húzzuk, a beépített belső felhúzó ellenállás segítségével. Ilyenkor a bemenet folyamatosan tápfeszültség szinten van, ez a magas szintnek felel meg. A kapcsolóval, vagy a nyomógombbal a bemenetet föld potenciálra kapcsolhatjuk, ez felel meg az alacsony szintnek. A tápfeszültség tehát 3,3 V, a belső felhúzó ellenállás értékét pedig a mikrokontroller adatlapjából kapjuk meg, ami 35 kΩ. A gyújtás meglétének és a behúzó relé állapotának vizsgálatánál már nem ilyen egyszerű a helyzet, mert feszültség értékük eltérő szinten vannak, mint amit a mikrokontroller érzékelni tud. Továbbá az indítózás folyamán, az indítómotor működése okozta nagy áramfelvétel miatt, a feszültségszint változhat. Így ezeket a jeleket optocsatolók segítségével vezetjük be a mikrokontroller bemenetére. Az optocsatoló rajzjele a 18. ábrán látható.
18. ábra Az optocsatoló rajzjele forrás [6]
36
Az
optocsatoló
infravörös
fény
segítségével
biztosít
jelátvitel
különböző
feszültségszinten lévő jelek között. Tartalmaz egy LED diódát, és egy fényérzékelő eszközt, általában fototranzisztort, így a galvanikus leválasztás is létrejön. Az áramkörben TLP521-4 típusú IC-t használok, egy tokozásban 4 db optocsatoló található. Az optocsatoló katalógusa szerint a maximális bemeneti feszültség 24 V, a dióda maximális áramfelvétele pedig 25 mA. A dióda kinyitásához szükséges feszültség 1,15 V, ha a dióda árama 10 mA. A bemeneti korlátozó R4 és R5 ellenállás értékét, a következő képen kaphatjuk meg:
R 4 ;5
12 V 1,15 V
1, 085 k
(8)
10 mA
Az ellenállások teljesítmény: PR 4 ; 5 U I 12 V 10 mA 0 ,12 W
(9)
A szabványos ellenállás sorban 1,1 kΩ értékű ellenállás áll a legközelebb ehhez az értékhez, mindkét ellenállás 1 % tűrésű és 0,6 W teljesítményű. A fototranzisztor kollektorát 3,3 V tápfeszültségre kötjük, az emitterét pedig a mikrokontroller bemenetére kötjük. A mikrokontroller bemenetét alacsony szintre húzzuk, a beépített 35 kΩ ellenállás segítségével. Amikor a LED dióda bemenetére 12 V körüli feszültség jut, a dióda kinyit, aminek hatására a fototranzisztor is kinyit és vezetni fog, a mikrokontroller bemenete 3,3 V-ra, azaz magas szintre kerül. Ellenkező esetben a fototranzisztor nem nyit ki és a mikrokontroller bemenete alacsony állapotban van. A mikrokontroller tartalmaz még egy RESET bemenetet. Ha ez a bemenet aktív állapotban alacsony szintre kerül, a mikrokontrollerben futó program újraindul. Ezt a bemenetet magas szinten tartjuk egy 47 kΩ-os ellenállással. Az ellenállás 1% tűrésű és 0,6 W teljesítményű. Az ellenálláson eső teljesítmény:
PR 1
U
2
R1
( 3 ,3V ) 47 k
2
0 , 23 W
(10)
37
5.3. Kimenetek tervezése A mikrokontroller kimenete szintén digitális, tehát csak magas illetve alacsony állapotot lehet megkülönböztetni. A vezérlés során azt szeretnék, hogy a mikrokontroller az indítás során, az indítómotor behúzó reléjének kapcsoljon áramot, majd ha már nem szükséges az indítómotor működtetése, ezt az áramot kapcsolja ki. A kapcsolandó áram több amper nagyságú lehet, amit közvetlenül nem tud elvégezni a mikrokontroller, mivel a kimenet maximális áramterhelhetősége ±6 mA. Ezért szükség van egy kiegészítő áramkörre, amely relét és tranzisztort tartalmaz. A relé fogja kapcsolni a behúzó relének a működéséhez szükséges áramot, amit az akkumulátor szolgáltat. A relé működtetéséhez szükséges áram, viszont még mindig túl nagy a mikrokontroller számára, ezért szükség van egy tranzisztorra, amit kapcsolóként használunk. Katalógus adatait megnézve, egy 12 V-os gépkocsi relé áramfelvétele kb. 133mA és 150 mA között van. Például egy 12V-os relé, aminek a tekercs ellenállása 80 Ω, és 30 A erősségű áramot tud kapcsolni, az áramfelvétele 150 mA. Egy másik típusú 12 V relé, aminek a tekercs ellenállása 90 Ω, és 50 A nagyságú áramot tud kapcsolni, az áramfelvétele 133 mA. A relé kapcsolásához egy BC337 npn típusú tranzisztort választottam. Az adatlapból kiolvasható, hogy 150 mA kollektor áramnál az áramerősítési tényezője kb. 250. A maximális feszültség, amit kapcsolni tud 50 V, a megengedett legnagyobb kollektor áram 500 mA. A tranzisztor bázisáramát egy ellenállással állítjuk be, így a bázisáram 1 mA lesz, amit a mikrokontroller kimenete el tud viselni. A bázisellenállás értéke:
R8
3V 0 , 7V
2 ,3 k
(11)
1mA
A mikrokontroller kimenetén minimum 3 V mérhető 3,3 V tápfeszültség esetén, a tranzisztor nyitásához pedig 0,7 V szükséges. Szabványos ellenállás sorban 2,2 kΩ értékű létezik. Az ellenállás 1% tűrésű, 0,6 W teljesítményű. Az ellenálláson eső teljesítmény: PR 8 U I 3,3V 1mA 3,3 mW
(12)
38
A relé kikapcsolásakor, a tekercs tulajdonságából adódóan, nagy feszültséglükések keletkeznek. Ezek a feszültséglökések az áram folyásával ellentétes irányúak. Ezért szükség van egy diódára, relével párhuzamosan bekötve, ami megvédi a tranzisztort. A dióda 1N4004 típusú egyenirányító dióda, 400 V feszültséget képes elviselni. A mikrokontrollerben futó program tartalmaz hibajelző funkciókat. Ezek tájékoztatnak, ha az indítás során valami probléma merült fel. A program három esetben jelez, ha nincs kinyomva a kuplung pedál, ha a behúzó relé nem működik megfelelően, és ha az indítási folyamat szüneteltetve van. Erre három kimenetet használunk, probléma esetén magas szintre kerülnek, és mindegyik egy LED diódát működtet. A LED diódák áramfelvétele 20 mA körül van, a nyitásukhoz 2 V szükséges. A LED diódákat szintén a BC337 típusú npn tranzisztorral kapcsoljuk. A tranzisztor bázisellenállása megegyezik az előzőekben kiszámolt értékkel, így R9, R11, R13 értékek megegyeznek. A LED dióda nem működtethető közvetlenül 3,3 V tápfeszültségről, mivel kis feszültség változás esetén is jelentősen megnő az dióda árama. Ezért szükség van korlátozó ellenállásra melynek értéke:
R 10 ;11 ;12
3,3V 2V
65
(13)
20 mA
Az áramkörben 68 Ω értékű ellenállásokat használok, ezek állnak a legközelebb a kiszámolt értékhez. A tűrésük 1%, teljesítményük 0,6 W. Az ellenállásokon eső teljesítmény: PR 8 U I 3,3V 20 mA 66 mW
(14)
A mikrokontroller működéséhez stabil tápfeszültségre van szükség. Ezt egyszerűen egy feszültség stabilizátor IC-vel (Integrált áramkörrel) oldhatjuk meg, amit az gépjármű akkumulátora
táplál.
Az
MSP430
mikrokontroller
megengedett
tápfeszültség
tartománya 1,8 V és 3,6 V között van. Az újraprogramozáshoz 2,2 V szükséges, a maximális működési sebesség eléréséhez, ami 16 MHz órajel frekvenciát jelent, pedig legalább 3,3 V szükséges. A mikrokontroller működtetéséhez az LD111733 feszültség stabilizátort IC-t választottam, ami stabil 3,3 V kimeneti feszültség előállítására képes. Az IC maximális bemeneti feszültsége 15 V, kimeneti áramterhelhetősége 800 mA körül van. A 39
feszültségesés értéke alacsony (Dropout voltage), 800 mA terhelés esetén maximum 1,2 V. Mind a bemeneti és a kimeneti oldalon szűrőkondenzátorok találhatóak, valamint a mikrokontrollert is szűrőkondenzátorral kapcsoljuk földpotenciálra. A legmagasabb hőmérséklet, amit az IC elvisel Top = 150°C, a hődisszipációja pedig PTOT = 12 W A lapka és a tokozás közötti hőellenállás értéke RJC = 3°C/W. A következő képlettel az IC és a környezet közötti hőellenállást (RHA) számolhatjuk ki, vagyis azt, hogy mennyi keletkező hőt kell kompenzálni valamilyen hűtőfelülettel.
R HA
(T op T A ) PTOT
R JC
150 C 30 C
3 C / W 7 C / W
(15)
12 W
6. A mikrokontrollert működtető program tervezése A mikrokontrollert működtető programkód teljes egészében a mellékletekben található. A következőkben a programkód egyes részeit mutatom be, minden nagyobb önálló részegységet külön, a jobb átláthatóság és könnyebb megértés miatt.
6.1. Fejlécek becsatolása, ADC függvény A program első két sora az #include direktívával kezdődik. Ezekkel a direktívákkal tudunk fejléceket becsatolni. A fejlécek tartalmazzák a definíciókat, ezért a becsatolásuk esetén azokat nem kell újra begépelni. Az egyik ilyen fejléc, amit becsatolunk az io430.h fejléc. Ez a fejléc állomány csak feltételes fordítási direktívákat tartalmaz, valójában a kiválasztott mikrokontrollert leíró állomány kerül becsatolásra. A mi esetünkben tehát az io430g2553 kerül becsatolásra. Így a mikrokontroller regisztereire, portjaira, és a portok bitjeire szimbolikus nevekkel tudunk hivatkozni, nem pedig számokkal. A következő fejléc, amit be kell csatolnunk az stdint.h nevű fejléc, ami a később használt unit16_t típust deklarálja. A fejlécek becsatolása után az analóg-digitális konverzió (röviden ADC) elvégzéséhez szükséges ADC_single_meas() függvény következik. Ebben a függvényben történik az ADC inicializálása és az egycsatornás mérés lebonyolítása. Így a főprogramban ezeket nem kell elvégezni, csak meghívjuk a függvényt, ha mérni szeretnénk. A függvény bemenő paramétere unit16_t típusú, ebből az értékből kapja meg a függvény az analóg csatorna számát, azt hogy melyik bemeneten, azaz csatornán végezzük el a mérést. A függvény visszatérő értéke szintén unit16_t típusú, a konverziós eredményét 40
tartalmazza, ezzel tér vissza a függvény, miután elindította a konverziót és megvárta annak a végeredményét. A függvény első sorában töröljük az ENC bitet. Erre azért van szükség, mert az ADC regisztereit csak akkor módosíthatjuk ha ENC=0. A törlést az ADC10CTL0 regiszterben tehetjük meg. Ez egy 16 bites vezérlő regiszter. Ebben a regiszterben állíthatjuk be, hogy milyen referenciaforrást választunk, mi legyen a belső referencia, és beállíthatjuk az ADC mintavételezési idejét. Itt engedélyezhetjük a megszakításkérést, és indíthatjuk el a szoftveresen a mintavételezést és a konverziót. Az ENC bit törlésével letiltjuk a konverzió engedélyezését. A törlést bitenkénti és művelettel végezzük, de előtte komplementálnuk, azaz negálnunk kell az értéket, hogy csak azt a bitet töröljük, amit szeretnénk. Ekkor a logikai és művelet miatt, amelyik bittel szemben 1 érték áll, annak az értéke nem változik. Tehát az ADC10CTL0 regiszternek csak az ENC bitjét nullázzuk ki, vagyis töröljük. Valójában a művelet úgy néz ki, hogy:
ADC10CTL0 = ADC10CTL0 & ~ENC
(16)
De a C nyelvben ezt egyszerűbben is írhatjuk, mint a programban is. Ez a művelet még többször elő fog fordulni, olyan esetben, ahol egy bitet nullázni szeretnénk. A következő sorban, az ENC bit törlése után beállítjuk az ADC10CTL0 regiszterben a mintavételezési időt, bekapcsoljuk az ADC-t, illetve beállítjuk a feszültségreferencia módot. A beállításokhoz a regiszter értékét megengedő vagy kapcsolatba hozzuk a különböző biteket jelentő nevekkel. Az ADC10SHTx bitjeivel állítható be a mintavételezési idő, ami az ADC10CLK vagyis az ADC órajelét szolgáltató órajel 4, 8, 16 vagy 64 óraütése legyen. Jelen esetben 64-et állítunk be, amire ADC10SHT_3 névvel hivatkozhatunk. Az ADC10ON bit ‘1’ értékre állításával engedélyezhetjük az analóg-digitális átalakítást. Az SREFx bitekben állíthatjuk be a referenciaforrást. Az SREF_0 névre hivatkozva, a pozitív referencia VR+ értéke, a tápfeszültség lesz, míg a VR- értéke a föld potenciál. A következőkben a másik 16 bites vezérlő regisztert állítjuk be, az ADC10CTL1 regisztert. Beállítjuk, hogy az ADC órajelét a saját oszcillátora az ADC10OSC biztosítja, amit az ADC10SEL_0 névvel tehetjük meg. Az ADC10OSC egy RC oszcillátor, frekvenciája 5 MHz. Majd az INCx mezőbe beállítjuk a csatorna sorszámát, amelyen mérni szeretnénk. Ezt az értéket az ADC függvény bementő paraméteréből olvassuk ki. 41
Visszatérünk az ADC10CTL0 vezérlő regiszterhez, engedélyezzük a konverziót az ENC bit ’1’ értékre állításával, valamint az ADC10SC bit szintén ’1’ értékre állításával szoftveresen elindítjuk a konverziót. A konverzió elindítása után megvárjuk a konverzió végét. Ezt egy while ciklussal tesszük meg. A BUSY bit értéke jelzi a foglaltságot, ha értéke nem nulla, akkor mintavételezés vagy konverzió zajlik. A while ciklus vizsgáljuk a BUSY bit értékét, a ciklus addig megy, amíg a feltétel igaz. Ha a feltétel nem igaz, vagyis a BUSY bit nulla értéket vesz fel, akkor a ciklusból kilép a program, és a RETURN utasítással visszatérünk a konverzió eredményével. A konverzió eredményét az ADC10MEM 16 bites regiszter tartalmazza. Az eredmény jobbra igazítva kerül beírásra, tehát az alsó 10 bit tartalmazza a konverzió eredményét.
6.2. Változók deklarálása Az ADC függvény után következik a main() függvény meghívása. A mikrovezérlő bekapcsolása és az inicializáló lépések elvégzése után a vezérlés automatikusan átadódik ennek a függvénynek. A void szavak azt jelzik a fordítónak, hogy a main() függvénynek sem bemenő paramétere, sem visszatérési értéke nincs. A main() függvény meghívása után deklaráljuk a változókat. A memóriában tárolókat hozunk létre, és ezekre névvel hivatkozunk. Az első három változó int típusú. Az int típus az integer rövidítése, amely az egész számok típusa. A leallitas nevű változó segítségével vizsgálhatjuk, hogy a belső égésű motort leállítottuk-e. Tulajdonképpen a gyújtáskapcsolót figyeljük. Ha a gyújtáskapcsoló logikai ’1’ állapotból ’0’ állapotba vált át, akkor a leallitas változó értéke 1 lesz, vagyis igaz értékű, azaz megtörtént a motor leállítása. Még itt a deklarálás során beállítjuk a kezdő értékét, ami 1. A második int típusú változó, a nemjar változó. Ezzel a változóval vizsgálhatjuk, hogy a belső égésű motor biztosan nem működik. Értéke, ha 1, akkor a gépjármű motor biztosan nem működik. Előfordulhat, hogy meghibásodás miatt, megszűnik az akkumulátor töltése, a gépjármű motor működése közben, ami esetén az akkumulátor feszültsége 13,8 V alá csökkenne. Ekkor a mikrokontroller úgy érzékelné, hogy a gépjármű motor nem működik, és engedné, hogy működtessük az indítómotort. Bár ritkán fordulhat elő ez az eset, de a programban könnyen meg lehet akadályozni. Viszont ekkor, ha a gyújtás lekapcsolása nélkül áll le a gépjármű motor működése, például „lefullad”, akkor csak a gyújtáslekapcsolása, majd újbóli bekapcsolása után 42
kezdhető meg az indítózási folyamat. A nemjar változó kezdeti értéke 0. A harmadik int típusú változó a toltes nevű változó. Segítségével ellenőrizhetjük, hogy az akkumulátor töltődik, vagyis a kapocsfeszültsége 13,8 V felett van, ekkor a változó értéke 1. A kezdeti értéke 0, ami azt jelenti, hogy az akkumulátor nem töltődik, nincs töltés. Az int típusú változók után két unit_16t típusú változó deklarálása történik. A unit16_t típusú változók 16 bites előjel nélküli egész számok. Az egyik ilyen típusú a data nevű változó. Ebben tároljuk a csatorna számát, amelyik csatornán mérni szeretnénk. Ezt kapja meg az ADC függvény, és végzi el a konverziót. A másik ilyen típus a c nevű változó, ebben tároljuk a számláló aktuális értékét. Alapértéknek nulla értéket állítunk be, hogy a számlálás nullától induljon. A változók deklarálása után letiltjuk a watchdog időzítőt. A watchdog időzítő újraindítja a mikrokontrollert, ha a számlálója túlcsordul. Mivel nincs szükségünk erre, ezért leállítjuk. A leállítást WDTCTL 16 bites regiszterben tehetjük meg. A regiszter véletlen felülírástól védett, a felső bájtba egy jelszót kell írni, amelynek értéke 0x5A hexadecimálisan. Ha írási művelet közben nem ez szerepel a magasabb helyi értékeken, akkor a mikrokontroller hiba miatt újraindul. A WTDHOLD bittel kapcsolhatjuk ki a watchdog időzítőt, a bitet 1 értékre állítjuk.
6.3. Portok beállítása A watchdog időzítő letiltása utáni sorokban állítjuk be a mikrokontroller portjait. Először a P1 portot állítjuk be, majd külön a P2 portot.
Port
Irány
Funkció
Feladat
P1.0
kimenet
digitális
állapotjelzés
P1.1
bemenet
analóg
feszültségmérés
P1.2
bemenet
digitális
gyújtás
P1.3
bemenet
digitális
indítógomb
P1.4
bemenet
digitális
kuplung pedál
P1.5
bemenet
digitális
behúzó relé
P1.6
kimenet
digitális
indító jel
P2.3
kimenet
digitális
hibajelzés
P2.4
kimenet
digitális
hibajelzés
P2.5
kimenet
digitális
hibajelzés
2. Táblázat Portok felhasználása
43
Az előző 2. táblázat összefoglalja, hogy a vezérlés során a portok melyik kivezetését használjuk, és milyen célra. Mind a két port 8 bites, és a hozzájuk tartozó regiszterekkel tudjuk őket beállítani. Az első lépés, amit megteszünk, hogy a P1 port minden bitjének a kimenetét 0 értékre állítjuk, ezzel mindent kikapcsolunk. A P1SEL regiszterrel állíthatjuk be, hogy a port kivezetései digitálisak legyenek, vagy alternatív funkciójú, de alapértelmezettként digitális funkció van beállítva, ezért ezt nem kell megtennünk. A következő sorban a P1.0 és P1.6 kivezetéseket digitális kimenetre állítjuk. A bit értékekre névvel hivatkozunk. A BIT0 név a 0.-ik bitet jelenti, értéke hexadecimálisan 0x00, a BIT6 név pedig a 6.-ik bitet jelenti, értéke hexadecimálisan 0x40. A művelet elvégzéséhez bitenkénti vagy kapcsolatba hozzuk a P1DIR regiszter értékét a BIT0 és a BIT6 értékkel. Ezek után a digitális bementeket állítjuk be. Szintén a P1DIR regisztert állítjuk be, de itt most bitenkénti és kapcsolattal, amely előtt negáljuk a megfelelő bit értékét. A P1.2 bitre a BIT2, a P1.3 bitre a BIT3, a P1.4 bitre a BIT4 a P1.5 bitre pedig a BIT5 névvel hivatkozunk, de negáljuk őket, hogy csak azt a bitet töröljük a regiszterben, ahol ezek a bit értékek előfordulnak. Miután beállítottuk a port irányokat, bekapcsoljuk a belső felhúzást. A mikrokontroller tartalmaz beépített ellenállást, amelyet a bemenet magas szinten vagy alacsony szinten tartására használhatunk fel, külső alkatrész hozzáépítése nélkül. A P1.3 és P1.4 bemenetet azért szeretnék magas szintre állítani, mert ezekre a bemenetekre nyomógombot kötünk. A nyomógomb lenyomásakor a bemenet alacsony szintre kerül. A P1.2 és P1.5 bementeket pedig alacsony szintre szeretnénk állítani, mert ezek kapcsolóként működnek, és az optocsatoló kimenetét is alacsony szinten szeretnénk tartani. .Először a P1OUT regiszterben bitenkénti vagy kapcsolattal 1 értékre állítjuk a megfelelő biteket, ehhez a BIT3 és BIT4 neveket használjuk. Ezzel a P1.3 és P1.4 kivezetést felfelé húztuk, vagyis 1 értéken vannak. A P1.2 és P1.5 kivezetést nem változtattuk, mivel a portok beállításának elején minden kimenetet 0 értékre állítottunk, ezért 0 értéken maradtak Most már csak engedélyezni kell a belső felhúzást, amit a P1REN regiszterben tehetünk meg. Szintén bitenkénti vagy kapcsolattal, és a megfelelő bitek neveivel. Az ADC regiszterében engedélyezzük a hogy a P1.1 kivezetetés analóg bementként szolgáljon. Ehhez az ADC10AE0 8 bites regisztert bitenkénti vagy kapcsolatba hozzuk a BIT1 értékkel. 44
A P1 port beállítása után következik a P2 port beállítása. Hasonlóan, mint a P1 portnál, minden kivezetés kimenetét 0 értékre állítunk. Tehát a P2OUT regisztert 0 értékre állítjuk be. A P2 port három kivezetését használjuk digitális kimenetként. Ezért bitenkénti vagy kapcsolatba hozzuk a P2DIR regisztert, a megfelelő bitek értékeivel. Szintén névvel hivatkozunk a bitek értékeire, melyek a BIT3, BIT4 és BIT5.
6.4. Timer időzítő és az órajel beállítása A mikrokontroller több forrásból veheti az órajelet. A forrás lehet az LFXT1 alacsony frekvenciájú kristályoszcillátor, a VLO nagyon kis fogyasztású oszcillátor és a DCO digitálisan vezérelt oszcillátor. Ha nem végzünk el semmilyen beállítást az órajel szempontjából, akkor a mikrokontroller az alapértelmezett beállításokkal működik. Ekkor az MCLK, azaz a fő órajel forrása DCO lesz, ami kb. 1 MHz működési frekvenciát jelent. Az SMCLK forrása szintén DCO lesz alapértelmezettként, ami az alrendszer órajele. Az ACLK forrása alapértelmezetten LFXT1 lesz. Az ACLK segéd órajel, a perifériákhoz választható ki. Csak akkor működik, ha a kvarckristály be van forrasztva az XIN és XOUT kivezetések közé, vagyis a P2.6 és P2.7 közé, ez szolgáltatja az LFXT1 órajelét, ami egyébként egy 32 KHz-es kristály. Továbbá külső órajel is köthető ezekre a bemenetekre. A kvarckristállyal stabilabb órajelet kapunk, időmérésnél nagy pontosságot lehet elérni. Mivel nincs szükségünk nagy pontosságra időmérésnél, ezért nem használom a kvarckristályt, de például soros kommunikációnál már fontos lenne. Helyette a DCO szolgáltatja az órajelet. A programban tehát csak a Timer időzítőre vonatkozó beállítások találhatóak. A Timer időzítővel fogjuk számolni az eltelt időt, bizonyos esetekben. Az MSP430G2553 mikrokontroller két darab, egyenként háromcsatornás időzítővel rendelkezik, a TIMER0_A3 és a TIMER1_A3. Az időzítéshez a TIMER0_A3 egységet használjuk fel. Az időzítés beállításai a TACTL vezérlő regiszterben végezhető el. Valójában TA0CTL a regiszter pontos neve, de itt kivételesen használható a rövidebb név. A TACTL egy 16 bites regiszter, de nincs mindegyik bitje kiépítve, illetve felhasználva. Ebben a regiszterben tudjuk kiválasztani a számláló jelforrását és az órajel osztási arányát, valamint a számláló üzemmódját, azt hogy folyamatosan számoljon, felfelé számoljon egy adott értékig, vagy felfelé/lefelé számoljon egy adott értékig. Valamint a számláló megszakítás engedélyező és megszakítást jelző bitjeit is ebben a regiszterben találhatjuk meg.
45
A programban bitenkénti vagy kapcsolatba hozzuk a vezérlő regisztert megfelelő bitekkel, amikre nevekkel hivatkozunk. Az MCx bitcsoporttal választhatjuk ki a számlálás üzemmódját. A folyamatos számlálást választjuk ki, amit a 2. üzemmód, ezért az MC_2 nevet írjuk be. Az órajelet 8-cal osztjuk le. A bemenő órajelnek az SMCLK-t választjuk, az alrendszer órajelét. Mivel az alapértelmezett órajel beállítást használjuk, ennek a forrása a DCO, ami 1MHz körüli frekvencián működik. Ezt az órajelet 8-cal leosztjuk 8-cal. A számláló túlcsordulása így a következő értéknél következik be:
T
2
16
8
0 , 524 s
1000000 Hz
(17)
A számláló közel 0,5 másodpercenként csordul túl. A 8-cal való osztást az IDx bitcsoporttal tudjuk beállítani. A legnagyobb osztás kiválasztásához, vagyis a 8-hoz az ID_3 névvel hivatkozhatunk. A jelforrás kiválasztását a TASSELx bitcsoportban végezhetjük el. A forrás lehet TACLK, ACLK, SMLCK vagy INCLK. Az SMLCK kiválasztásához a TASSEL_2 nevet kell beírnunk. Végül a TACLR bittel töröljük a számlálót, a TAR regisztert és nullázzuk a bemeneti osztó számlálóját is.
6.5. A főprogram A főprogram egy végtelen ciklusban fut, mivel nincs más rendszer, aminek vissza lehetne adni a vezérlést. A main() függvény egy része csak egyszer fut le, minden elindításkor, vagy újrainduláskor. Ezek az előzőekben bemutatott programsorok, mint például a változók deklarálása, portok beállítása, időzítő beállítása. A main() függvény másik része pedig állandóan ismétlődik, a ciklusban található programsorok újra és újra végrehajtódnak. A végtelen ciklust egy while() ciklus hozza létre. A ciklus feltétele mindig igaz, mert minden 0-tól különböző érték igaz, ezért mindig lefut. A végtelen ciklusban több ciklus található, ezekkel várakozunk, és vizsgálunk feltételeket.
6.5.1. Gyújtás bekapcsolására várakozás A főprogram elején várakozunk a gyújtás bekapcsolására, vagyis a P1.2 láb magas szintre kerülésére. Mivel ez a láb alacsony szintre van húzva. A gyújtás bekapcsolása nélkül nem használhatjuk az indítómotort. A gyújtáskapcsolók esetén ez megoldott, mivel a gyújtás ráadása után a kulcsot tovább fordítva indítózhatunk. Ebben a vezérlésben viszont az indítógomb el van választva a gyújtás kapcsolásától, függetlenek 46
egymástól. A gyújtás figyelését egy olyan while() ciklus végzi, aminek a ciklusmagja üres, nem csinál semmit. A ciklus addig várakozik, amíg a feltétele igaz, azaz a bemenet 0 szinten van. Ekkor a P1IN értéke 0, BIT2 értéke 1. A logikai és kapcsolatuk értéke 0, ha ezt negáljuk, akkor 1 éréket kapunk, ami igaz érték, a while() ciklus mindig le fog futni. Ha viszont a P1IN értéke 1 lesz, mert a gyújtást bekapcsoljuk, akkor kilép a program a while() ciklusból, mert a feltétele nem teljesül, értéke nem 1. A ciklusból kilépve ellenőrizzük, hogy a gépjármű motor biztosan nem jár, működése le volt állítva előzőleg a gyújtás kikapcsolása által. Ugyanis, ha valamilyen hiba folytán az akkumulátor töltése megszűnik a motor működése közben, akkor azt mikrokontroller úgy érzékelné, hogy a motor nem jár. Ezt a leallitas változó értékének vizsgálatával tehetjük meg. Ha a leallitas változó értéke 1, akkor a nemjar változó értéke legyen szintén 1. Ismét egy while() ciklus következik, addig ismétlődik a ciklusmagja, amíg a gyújtás be van kapcsolva. Tulajdonképpen arra vár, hogy kikapcsoljuk a gyújtást, de közben újra és újra elvégzi a parancsokat. Ha a ciklus feltétele már nem igaz, akkor következik egy 20 ms-os pergésmentesítő késleltetés. A hardveres tervezésnél nem volt szó a pergésmentesítésnél, mert ezt szoftveresen végezzük, így kevesebb alkatrészt kell beépíteni. Hardveresen ezt ellenállás és kondenzátor segítségével oldhatnánk meg. A pergésmentesítés abból adódik, hogy a kapcsolók és nyomógombokban lévő fémérintkezők összezáródáskor, kicsit pattognak egymáson. Digitális áramköröknél, ez a pattogás másodpercenként több millió impulzust is jelenthet. Ezt a jelenséget nevezzük pergésnek vagy prell-nek. A pergésmenetesítést tehát úgy oldjuk meg, hogy a nyomógomb, vagy kapcsoló lenyomása és felengedése után várunk egy kicsit, amíg a pergés folyamata lezajlik. A várakozáshoz késleltető eljárás használunk, amihez meghívjuk a gyári késleltető függvényt. Az órajel 1 MHz, így a késleltetést 1 μs értékekben adhatjuk meg. A késleltetés után ismét egy while() ciklus következik, hasonlóan az előzőhöz, ez is a gyújtás kikapcsolására várakozik, viszont ennek a ciklusmagja üres, csak akkor lép tovább a program, ha a ciklus feltétele teljesül. A feltétel teljesülése után a kimeneteket visszaállítjuk alaphelyzetbe. Ezeket logikai és kapcsolattal végezzük el úgy, hogy negáljuk a bit értéket, hogy csak azt a bit értéket töröljük, nullázzuk, amelyiket szeretnénk. A kimenetek kikapcsolása után pedig a leallitas változó értékét 1 értékre állítjuk, ezzel jelezve majd, hogy a gyújtást kikapcsoltuk, és a gépjármű motor működése leállt. 47
6.5.2. Kuplungpedál lenyomására várakozás A gyújtás bekapcsolása után, a gyújtás while() ciklusában várakozunk a kuplung pedál lenyomására. Az indítás csak akkor kezdődhet, ha a gyújtás be van kapcsolva és a kuplung pedál be van nyomva, ami a P1.4 bemenet alacsony szintbe állítását jelenti. A P1.4 bemenet alaphelyzetben magas szintre van húzva, és a nyomógomb lenyomásakor kerül alacsony szintre. A lenyomást egy while() ciklus figyeli. A feltételében a BIT4 értéke 1, a P1IN értéke szintén 1, mert magas szintre van húzva a bemenet. A két érték logikai és kapcsolata igaz. A feltételben még figyeljük a gyújtás állapotát, így és kapcsolatba hozzuk a kuplung pedál állapotával. Ezzel biztosítjuk, hogy ha a gyújtást kikapcsoljuk, a program ki tudjon lépni ebből a ciklusból. A ciklusban, amíg várakozunk a kuplung pedál lenyomására, hibajelzést küldünk ki a P2.5 kimeneten. Valójában ez egy figyelmeztető jelzés a gépjármű vezetőnek, hogy ha indítani szeretne, akkor be kell nyomni a kuplung pedált. Egy feltételben vizsgáljuk, hogy a nemjar változó értéke 1, mert csak akkor kell figyelmeztető jelzést kiadni, ha a motor biztosan nem működik önállóan. Ha a változó értéke 1, akkor a P2.5 kimenetet logikai vagy kapcsolattal 1 értékre állítjuk. Ellenben a P2.5 kimenetet nullázzuk. A kuplung pedál lenyomása után kilépünk a lenyomásra várakozó ciklusból, és egy újabb while() ciklusba lépünk. Ez a ciklus addig ismétlődik, amíg a kuplung pedált fel nem engedjük. A ciklus feltétele tehát arra vár, hogy a P1.4 bemenet ismét 0 értékre kerüljön, és a feltétel értéke 0 legyen. A ciklusban először kikapcsoljuk a kuplung kinyomására figyelmeztetést, vagyis a P2.5 kimenetet kinullázzuk. Majd várakozunk az indítógomb lenyomására. A kuplung pedál felengedése után a gyújtáskapcsoló felengedéséhez hasonlóan, egy pergésmentesítő késleltetés következik. Ezután egy while() ciklus jön, ami szintén üres ciklusmaggal rendelkezik, arra vár, hogy a kuplungpedált felengedjük, azaz a P1.4 bemenet ismét 1 értékre kerüljön. A feltétel teljesülése után egy újabb pergésmenetesítő késleltetés következik.
6.5.3. Indítógomb lenyomására várakozás Miután a gyújtás be van kapcsolva, és a kuplungpedált benyomtuk, a mikrokontroller arra várakozik, hogy megnyomjuk az indítógombot. A várakozás egy while() ciklusban történik. A ciklusmagja üres, nem csinál semmit, azonban ha a ciklus feltétele nem igaz, akkor kilép a program a ciklusból, és a ciklus utáni sorokat hajtja végre. A feltételben
48
vizsgáljuk, hogy az indítógomb, ami a P1.3 kivezetés, milyen logikai szinten van. Továbbá a gyújtás és a kuplungpedál állapotát is vizsgáljuk a feltételben, mert ha esetleg a gyújtást kikapcsoljuk, vagy a kuplungpedált felengedjük, akkor is ki tudjon a program lépni a ciklusból. A P1.3 kivezetés alaphelyzetben magas szinten van, a felhúzó ellenállás miatt. Az indítógomb lenyomásakor alacsony szintre kerül, hasonlóan a kuplung pedál érzékelésénél, ami a P1.4 kivezetés. A feltételben tehát igaz értéket ad, a P1IN regiszter logikai és kapcsolata a BIT3 értékkel. Az indítógomb megnyomásakor a P1IN regiszter 0 szintre kerül, és már nem teljesül a feltétel, mert az és kapcsolat BIT3 értékkel 0 értéked ad. Így kilépünk a ciklusból, és megkezdődik az indítás. A while() ciklus után egy feltétel vizsgálat következik. Az feltételben még egyszer megvizsgáljuk, hogy az indítógomb le van-e nyomva. Az indítógomb lenyomására várakozásakor a while() ciklusból akkor is kilép a program, ha a kuplung pedált felengedjük, vagy a gyújtást kikapcsoljuk. A ciklusból kilépve a program automatikusan végrehajtja az utasításokat, amik már az indítást végzik, még ha nem is szeretnénk indítani, vagyis ha nem nyomtuk meg az indítógombot. Ezt elkerülve egy if feltételben megvizsgáljuk, a P1.3 bemenet állapotát. Ha a nyomógomb le van nyomva, akkor a P1.3 bemenet alacsony állapotba kerül. Logikai és kapcsolatba hozva a P1IN regiszter értékével, ami alapból 1 értéken van, a kapcsolat 0 értéket ad. Tehát a feltétel teljesül, és a program folytatódik az indításhoz szükséges sorok végrehajtásával. Ellenben az indítási rész nem kerül végrehajtásra. A program végrehajtja az indításhoz szükséges sorokat, majd egy pergésmentesítő késleltetés következik. Ezután egy while() ciklusban várakozik, hogy felengedjük az indítógombot. Ennek a while() ciklusnak sincs ciklusmagja, nem hajt végre semmit, csak várakozik. A feltétel akkor teljesül, amikor a nyomógombot felengedjük, a P1.3 bemenet ismét magas szintre kerül. Ekkor már a P1IN regiszterrel logikai és kapcsolatba hozva, a ciklus feltétele nem teljesül, mert az és kapcsolat értéke igaz, tehát a ciklusból kilép a program. A ciklus után még egy pergésmentesítő késleltetés következik, majd visszatérünk az indítógomb megnyomására várakozó while() ciklusba, és a program várakozik a következő megnyomásra.
6.5.4. Akkumulátor és behúzó relé vizsgálat Az indítógomb egyszeri megnyomása után tehát kezdődik az indítási folyamat. Az első lépés az, hogy megmérjük az akkumulátor kapocsfeszültségét. Ebből következtetve arra, hogy a gépjármű motor már önállóan működik-e vagy sem. A data nevű 49
változónak átadjuk az analóg csatorna számát, amelyen a mérést el szeretnénk végezni. Jelen esetben az első csatornán mérünk, tehát az INCH_1 értéket küldjük el az ADC függvénynek. Ekkor meghívjuk a programkód elején lévő ADC függvényt. A függvény lefut, és az ADC10MEM regiszterben eltárolja a mérés eredményét. Ezt az eredményt egy if feltételben vizsgáljuk meg. Ha az ADC10MEM értéke kisebb, mint 13,8 V, ami a mikrokontroller számára hexadecimálisan 0x3DA értéket jelent, akkor a toltes nevű változó értékét 0 értékre állítjuk. Továbbá a működés vizsgálat szempontjából a P1.0 kimenetet magas szintre állítjuk, ezzel jelezve, hogy az akkumulátor nem töltődik. Ha az ADC10MEM értéke nagyobb, mint 13,8V, akkor a toltes változó értékét 1 értékre, a P1.0 kimenetet pedig alacsony szintre állítjuk. Az akkumulátor feszültségének mérése után, meg kell vizsgálni, hogy a motor már önállóan jár-e. Ezt szintén egy if feltételben vizsgáljuk. A feltételben megvizsgáljuk, hogy a toltes változó értéke 0, valamint a nemjar változó értéke 1. A feltételeket és kapcsolatba hozzuk, mert mind a két feltételnek teljesülnie kell az indításhoz. Ha nem teljesül a feltétel, akkor a program az indítójel P1.6 és az akkumulátor töltését jelző P1.0 kimenetet alacsony szintre állítja. Ha a feltétel teljesül, vagyis az akkumulátor nem töltődik, és a belső égésű motor „biztosan nem jár”, akkor a mikrokontroller kiadja az indítójelet az indítómotornak, vagyis a P1.6 kimenet magas szintre kerül. Ezután egy késleltetés következik. Meg kell vizsgálni, hogy az indítójel kiadásától számítva, egy bizonyos időn belül megtörténik-e az indítómotorban az érintkezők összekapcsolása, vagyis hogy a behúzó relé megfelelően működik, és kapcsolni tudja az indítómotor forgórészének a nagy áramot. A késleltetés idejét 1 másodpercre állítjuk, hogy teszteléskor érzékelni tudjuk a működést. A késleltetést egy feltétel vizsgálat követi. Egy if feltételben vizsgáljuk a behúzó relé állapotát. Ha rendben működik, a P1.5 bemenet magas szintre kerül, és a P1IN regiszterrel és kapcsolatba hozva a feltétel teljesül. Ekkor a behúzó relé hibájára vonatkozó figyelmeztetést, a P2.4 kimenetet alacsony állapotra állítjuk, és következhet az indítási ciklus. Ha viszont valamilyen hiba miatt, a P1.5 bemenet alacsony állapotba marad, a késleltetés lejárta után is, akkor nem történik meg az indítás. Az indítójelet, azaz P1.6 kimenetet kikapcsoljuk, valamint a behúzó relé hibára figyelmeztetést, a P2.4 kimenetet magas szintre kapcsoljuk. Ezek után a program visszatér és az indítógomb lenyomására várakozó while() ciklusba.
50
6.5.5. Indítási ciklus A behúzó relé működésének ellenőrzése után, a program belép egy while() ciklusba. Ez a ciklus végzi tulajdonképpen az indítást. A ciklus feltétele több változó és bemenet értékét figyeli. A ciklusból akkor lép ki a program, ha a toltes nevű változó értéke nem 0, azaz a gépjármű motor önálló működésre képes. Továbbá ha a c változó értéke, ami a számlálást végzi, túllép egy bizonyos értéket, mert a mikrokontroller nem hagyja, hogy túl sokáig indítózzunk. A ciklusból akkor is kilép a program, ha a behúzó relé bemenete, a P1.5 bemenet, alacsony állapotba kerül, ha a kuplung pedált felengedjük, és ha a gyújtást kikapcsoljuk. A ciklus első lépés az, hogy megvizsgálja a számláló egységet. Ha számláló regiszter, a TAR túlcsordul, akkor a TAIFG megszakítást jelző bit 0 értékről 1 értékre billen át. A TAIFG bit a timer blokk TACTL 16 bites vezérlőregiszterében található. A túlcsordulás esetünkben kb. 0,5 másodpercenként történik meg. A túlcsordulást tehát egy if feltételben vizsgálja. Ha a TAIFG bit értéke 1, akkor a bit értékét 0-ra állítjuk, vagyis visszabillentjük. A számláló értékét, a c változó pedig növeljük eggyel. A számláló egység vizsgálata után az akkumulátor állapotát vizsgálja a ciklus. Ehhez ismét meg kell mérni az akkumulátor kapocsfeszültségét. Újra átadjuk a data nevű változónak az analóg csatorna sorszámát, majd meghívjuk az ADC függvényt. Ezután egy feltételben vizsgáljuk az ADC10MEM regiszter értékét. Ha kisebb, mint 0x3DA, akkor a toltes nevű változó értéke legyen 0, valamint a P1.0 kimenet legyen magas szinten. Ellenben a toltes nevű változó értéke legyen 1, és a P1.0 kimenet legyen alacsony szinten. A while() ciklus addig ismétlődik, amíg a toltes nevű változó 1 értékű nem lesz, vagy a számláló le nem jár. Továbbá a behúzó relé megfelelően működik, valamint a kuplung pedál lenyomva van és a gyújtás be van kapcsolva az indítás alatt. A ciklusból kilépve az első lépés az indító jel kikapcsolása. A P1.6 kimenet tehát alacsony állapotba kerül. A TAIFG bitet kinullázzuk. Egy if feltételben vizsgáljuk a toltes változó értékét. Ha a változó értéke 0, akkor a nemjar változó értéke legyen 1, mert a belső égésű motor nem működik önállóan. Ha viszont a toltes változó értéke 1, akkor a nemjar változó értéke legyen 0, ezzel jelezve, hogy a belső égésű motor önállóan működik. A toltes változó vizsgálata után, a számláló értékének vizsgálata következik. Szintén egy if feltételben vizsgáljuk, hogy a c változó értéke egyenlő-e egy bizonyos értékkel. Jelen esetben ez az érték 20. Ez azt jelenti, hogy a TAIFG bit 0,5 másodpercenként 51
billen be, és növeli a c változó értékét. A c változó 10 másodperc múlva éri le a 20 értéket. Az indítás tehát 10 másodpercig tart, majd a számláló lejárta után az indító jel kikapcsolásra kerül. Tehát ha a c változó elérte a 20 értéket, akkor a hosszan tartó indítózásra figyelmeztető jelzés bekapcsolódik, ami a P2.3 kimenet, ez magas szintre kerül. Ezután egy késleltetés következik. A késleltetés idejét 20 másodpercre állítom be. A késleltetés lejárta után, a nemjar változó értékét 1 értékre állítjuk, a P2.3 kimenetet pedig alacsony szintre kapcsoljuk, ezzel megszüntetve a hosszan tartó indítózásra való figyelmeztetést. A feltétel vizsgálata után pedig nullázzuk a számlálót, vagyis a c változó értékét 0 értékre állítjuk, ezzel befejezve az indítási folyamatot.
7. A program tesztelése szimulátorban A szimuláció során megfigyelhető a program működése, és ez által ellenőrizhető a mikrokontroller helyes működése. A szimulátort az IAR Embedded Workbench fejlesztőkörnyezet tartalmazza. A debugger hibakeresési opció közül választhatjuk ki a FET debuggert-t (Flash Emulation Tool), ami a hardveres nyomonkövetést végzi, valamint választhatjuk a Simulator-t. Ez utóbbit választva, van lehetőségünk vizsgálni a program futását lépésről lépésre. Léptethetjük a programot manuálisan, ilyenkor az a program eszköztárában egy „Next Statement” nevű elemére kattintva, a szimulátor a programkód következő sorára ugrik, és végrehajtja azt. A programot futtathatjuk automatikusan is. Ezt a Debug menü Autostep elemében állíthatjuk be. A késleltetési időt, vagyis azt, hogy milyen időközönként lépjen a következő programsorra a szimulátor, milliszekundumban állíthatjuk be. A View menüpontban kiválasztható a Watch funkció. Ilyenkor egy ablakban, az egyes regiszterek értékét figyelhetjük meg, valamint írhatjuk át az értéküket. A következő ábra a megfigyelt regisztereket mutatja.
19. ábra Szimulátorban megfigyelt regiszterek
52
Figyeljük a P1 és P2 port kimeneti regiszterét, a P1 port bemeneti regiszterét, az analógdigitális átalakító ADC10MEM regiszterét, ami a konverzió értékét tárolja hexadecimális formában. Valamint figyeljük az időzítő egység TA0CTL regiszterét, ahol a számláló bebillenését figyeljük, amikor ugyanis a TAIFG bit 0 értékről 1 értékre vált át. A szimuláció közben a P1IN az ADC10MEM valamint a TA0CTL regiszter értékét kell majd módosítani, hogy a bizonyos állapotokat előidézzünk a mikrokontroller működése során. A TA0CTL regiszter értékét 1 értékre fogjuk átírni, bizonyos időközönként, így biztosítva a számláló működését. Az ADC10MEM regiszterbe 0 értéket, valamint 0x3DA nagyobb értéket írok majd. Az egyszerűség miatt 0xFFF értéket, vagyis a maximális mérhető feszültség értékét, ami 14,5 V jelent. A P1IN regiszterbe írható értékeket a következő 3. táblázat tartalmazza.
Bemenet
P1IN Regiszter értéke
Alaphelyzet
0x18
Gyújtás
0x1C
Gyújtás + Kuplung
0x0C
Gyújtás + Kuplung + Indítás
0x04
Gyújtás + Kuplung + Behúzó relé
0x2C
3. Táblázat P1IN regiszter értékei a különböző állapotokban.
A P1OUT regiszternél értékeit a 4. táblázat tartalmazza. Alaphelyzetben a regiszter értéke 0x18, mert az indító gomb és a kuplung pedál bemenet magas szintre van húzva. Ezen kívül két állapot jelenhet meg.
Kimenet
P1OUT Regiszter értéke
Alaphelyzet
0x18
Uakku <13,8 V
0x19
Indítás és Uakku <13,8 V
0x59
4.Táblázat P1OUT regiszter értékei a különböző állapotokban.
A P2OUT regiszter értékei pedig az 5. táblázat tartalmazza. Az alaphelyzetben a regiszter értéke itt is 0.
53
Kimenet
P2OUT regiszter értéke
Kuplungra benyomására figyelmeztetés
0x20
Behúzó relé hiba
0x10
Az előző két állapot együtt
0x30
Hosszan tartó indítózásra figyelmeztetés
0x04
5. Táblázat P2OUT regiszter értékei a különböző állapotokban
A szimuláció induláskor a main() függvénytől indul. A programot manuálisan léptetem, a „Next Statement” elemmel. A main() függvény után a deklarálódnak a változók, és megkapják a kezdőértéküket. Ezután a watchdog időzítő letiltása jön, majd a P1 port beállítása. A P1.3 és P1.4 bemenet belső felhúzása miatt a P1OUT regiszter értéke 0x18 lesz, ez az alaphelyzet. A P1 port után a P2 port beállítása következik, majd az időzítő egységet állítja be a program. Mielőtt továbblépnénk, a P1IN regiszter értékét át kell írni 0x18-ra, ez jelenti az alaphelyzetet. Az ADC10MEM értéke 0, ami azt jelenti, hogy az akkumulátor feszültség 13,8 V alatt van. Az időzítő beállítás után továbblépve a gyújtás bekapcsolására várakozó ciklusba kerülünk. A P1IN regiszter értékét átírva 0x1C-re, a várakozó ciklusból kilép a program, és megvizsgálja a leallitas változó értékét. Ha leallitas értéke 1, akkor a nemjar változó értéke is 1 lesz. Továbblépve a kuplung benyomására várakozó ciklusba kerülünk. Ha a nemjar változó értéke 1, akkor a kuplung benyomására figyelmeztető kimenet magas szintre kerül, ez a P2.5 kivezetés. A P2OUT regiszter értéke tehát 0x20. Ahhoz, hogy a program kilépjen ebből a ciklusból, a P1IN regiszter értéket át kell írni 0x0C-re. Ekkor a kuplung benyomásra figyelmeztetés megszűnik, azaz a P2OUT regiszter értéke ismét nulla lesz. A program most az indítógomb lenyomására várakozik egy while() ciklusban. A P1IN regiszter értékét 0x04-re változtatva a ciklusból kilép a program és továbbléphetünk az indítás folyamatához. Először egy feltétel vizsgálat következik, megvizsgálja a program, hogy a P1.3 bemenet alacsony szinten van-e, és csak ekkor folytatódik az indítás. A vizsgálat után továbblépve meghívjuk az ADC függvényt, majd egy feltételben a program megvizsgálja az ADC10MEM regisztert értékét. Mivel az értéke 0-ra van állítva, a toltes nevű változó értéke 1 lesz, a P1.0 kimenet pedig magas szintre kerül. Ekkor a P1OUT regiszter értéke 0x19. A feltételből továbblépve, újabb feltétel következik. A program megvizsgálja, hogy a toltes nevű változó értéke 1, és a nemjar változó értéke 0. Ha ezek teljesülnek, továbblépünk az indításhoz. Ezután a P1.6 kimenet magas szintre 54
kerül, mert kiadjuk az indítójelet. A P1OUT regiszter értéke 0x59 lesz. A továbblépéshez a P1IN regiszter értékét átírom 0x2C-re. Ez azt jelenti, hogy a nyomógombot már felengedtük, és a behúzó relé működik. Következik egy 1 másodperces késleltetés, majd a behúzó relére figyelmeztető kimenet újbóli nullázása után belépünk az indítást végző while() ciklusba. A ciklusban először az időzítő egység TA0CTL regisztere kerül ellenőrzésre, hogy bebillent-e 1 értékre, majd az akkumulátor feszültség mérése következik egymás után ismétlődve. Az ADC10MEM regiszter értékét átírva 0xFFF értékre a program kilép a ciklusból. A toltes nevű változó értéke 1 lesz, a P1.0 és P1.6 kimenet alacsony szintre kerül, tehát a P1OUT regiszter értéke 0x18 lesz. A TAIFG bit kinullázódik, a nemjar változó értéke pedig 0 lesz, ha a toltes változó értéke nem 0. Továbblépve a program megvizsgálja a c változó értékét. Mivel a számlálót nem léptettük, értéke kisebb, mint a beállított határérték, így nem kerül sor a késleltetésre, ez a rész kimarad, ellenben nullázódik a c változó értéke. A pergésmentesítés után a program ismét az indítógomb lenyomására várakozó ciklusba kerül. A P1IN regiszter értékét átírom 0x1C-re, ez azt jelenti, hogy a kuplung pedált felengedjük, csak a gyújtás bemenet van magas szinten. A program kilép a ciklusból, de nem végzi el az indítást, mivel a következő lépés egy feltétel, ahol azt vizsgáljuk, hogy az indítógomb alacsony szinten van-e. Mivel magas szinten van, a felengedett kuplung pedállal együtt, a pergésmentesítő sorok után ismét a kuplung lenyomására várakozó while() ciklusba ugrik a program. Innen továbblépve már nem kerül magas szintre a kuplung benyomására figyelmeztető kimenet, mert a nemjar változó értéke 0, így a P2OUT regiszter értéke marad 0. Ha ismét indítani akarunk, és benyomjuk a kuplung pedált, azaz a P1IN regiszter értékét 0x04-re írom át, az ADC10MEM értéke pedig 0xFFF, azaz a belső égésű motor működik, az indítózás nem megy végbe, mert a mért érték nagyobb, mint 0x3DA. A toltes nevű változó értéke pedig 1 lesz. Szintén nem teljesül az indítási folyamat, ha ismét ugyanígy próbálkozunk, de az ADC10MEM értékét 0-ra írjuk át. Az akkumulátor feszültség mérésnél ugyan tovább lép a program, de a toltes és a nemjar változó együttes vizsgálata esetén a nemjar változó értéke nem egyenlő 1 értékkel. Ezért a program visszaugrik az indítógomb lenyomására várakozó while() ciklusba. A gyújtást kikapcsolva, minden visszaáll az alaphelyzetbe. Ehhez a P1IN regiszter értékét 0x1C-re kell átírni. A program kilép az indítógomb lenyomására várakozó ciklusból, valamint nem várakozik a kuplung lenyomásra sem. A pergésmentesítések után minden használatban lévő kimenetet 55
alacsony állapotba állít a program a biztosra menve, majd a leallitas nevű változót 1 értékre állítja, hiszen a gyújtás kikapcsolásával a gépjármű motor leállításra kerül. Ismét a program elején várakozunk a gyújtás bekapcsolására a while() ciklusban. A szimuláció során még két fontos esetet kell megvizsgálni. Egyrészt amikor a behúzó relé nem működik helyesen, valamint az indítás nem sikerül egy meghatározott időn belül. A behúzó relé helytelen működésének esetét úgy érhetjük el, hogy az indítógomb lenyomása után a P1IN regiszter értékét nem 0x2C értékre változtatjuk, hanem 0x0C-re. Ilyenkor a P1.5 bemenet alacsony szinten marad, ami azt jelenti a behúzó relé nem hajtotta végre az érintkező híd összekapcsolását. A programban tehát eljutunk addig a lépésig, amikor az indítójelet kiadjuk a P1.6 kimenet magas szinte állításával, és lezajlik az 1 másodperces késleltetés. Ez után egy feltétel vizsgálja, hogy a P1.5 bemenet magas szinte van-e. Mivel a feltétel nem teljesül, az indítási folyamat nem megy tovább. Az indítójelet a program kikapcsolja, azaz a P1.6 kimenetet alacsony szintre állítja. A behúzó relé hibára figyelmezető kimenet pedig magas szintre kerül, ami a P2.4 kimenet. A P2OUT regiszter értéke 0x10. A program visszalép az indítógomb lenyomására várakozó ciklusba, de eközben a P2OUT regiszter értéke nem változik, addig, amíg a következő indításkor a behúzó relé működése megoldódik, vagy a gyújtást ki nem kapcsoljuk. A hosszan tartó indítózás esetének megvalósításához, az indítási ciklusban a TAIFG bitet nekünk kell bebillenteni 0 értékről 1 értékre. Ehhez a TA0CTL regiszter értékét kell folyamatosan átírni 1 értékre, miután nullázódik. Az indítás belső while() ciklusában először mindig a TAIFG bit ellenőriződik le, azután az akkumulátor feszültségének mérése történik meg. Az indítózással 10 másodpercig próbálkozik a mikrokontroller. Mivel kb. 0,5 másodpercenként billen be a TAIFG bit, ezért a számláló 20-ig számol. Ezt az értéket a szimuláció miatt kisebb értékre, 5-re állítom. Így a ciklus során kevesebb alkalommal kell átírni a regiszter értékét. Tehát miután átírom a TA0CTL
regiszter
értékét
1-re,
a
feltétel
vizsgálatakor
teljesül,
hogy
a
TA0CTL_bit.TAIFG értéke 1, ezután a TAIFG bit értéke nullázódik, így a TA0CTL regiszter értéke is nulla lesz. A számláló pedig növekszik egy értékkel. Ha a számláló értéke eléri az 5-öt, vagyis a c változó értéke 5 lesz, a while() ciklusban a feltétel már nem teljesül, ami az lenne, hogy c értéke kisebb, mint 5. A ciklusból kilép a program, az indítójelet pedig kikapcsolja, vagyis P1.6 kimenet alacsony szinte kerül. Továbblépve a TAIFG bit nullázódik, valamint a következő feltételben a nemjar változó értéke 1 lesz, mert a toltes változó értéke 0. Ezután következik a számláló értékének vizsgálata. A 56
feltétel teljesül, mert a c változó értéke egyenlő a beállított értékkel, jelen esetben 5-tel. Így a feltételben lévő sorok végrehajtódnak. Az első utasítás a hosszan tartó indítózásra figyelmeztetés bekapcsolása. Ekkor a P2.3 kimenet magas szintre kerül, a P2OUT regiszter értéke 0x08. Ez után egy 20 másodperces késleltetés következik. Továbblépve a nemjar változó értéke 1 értékre állítódik, valamint a P2.3 kimenet alacsony szintre kerül, kikapcsolva a hosszan tartó indítózásra figyelmeztetést. Így a P2OUT regiszter értéke ismét 0 lesz. A feltételből kilépve, a c változó nullázásával a számláló értéke nullázódik. A program visszalép az indítógomb lenyomására várakozó ciklusba. A szimulátorban még teszteltem, hogy ha a belső indítási while() ciklusban szereplő feltételek valamelyike nem teljesül az indítás közben, akkor a program kilép az indítási ciklusból, és kikapcsolja az indító jelet. Ilyen például, ha a behúzó relé bemenete, a P1.5 bemenet alacsony állapotba kerül, ha kuplung pedált felengedjük, azaz a P1.4 bemenet magas szintre kerül. Továbbá ha a gyújtást kikapcsoljuk, vagyis a P1.2 bement alacsony szintre kerül. A mikrokontroller működése során nem kerül végtelen ciklusban, a ciklusokból való kilépési feltétel mindenhol megvan.
8. Az áramkör kipróbálása A mikrokontrolleres vezérlés áramkörét próbapanelen állítottam össze, a hardveres tervezés során választott alkatrészekből. A megépített áramkör az 5. mellékleten látható. A gyújtáskapcsolót és a behúzó relét egy-egy kapcsoló helyettesíti. A kapcsolókkal lehet a 12 V körüli feszültséget az optocsatoló bemenetére kapcsolni, ezzel előidézve azt az állapotot, amikor a gyújtás be van kapcsolva, illetve a behúzó relé megfelelően működik. A kuplung pedált, és az indítógombot pedig nyomógombok helyettesítik. A hibajelző és figyelmeztető kimenetekre LED diódák vannak kötve, így könnyen látható a kimenet állapota. A P1.6 kimenetre, ami az indítójelet adja ki, egy 12 V-os gépkocsi relét kötöttem. A relé 40 A áramerősséget tud kapcsolni, a tekercsellenállását megmérve 82,9 Ω értéket kaptam. A relé áramfelvétele 14 V körüli feszültségen közel 190 mA. Ekkora áramerősséget még tud kapcsolni a tranzisztoros kimenet. Az áramkör bemenetére feszültségforrást kapcsoltam, aminek az értékét 12 V és 14 V között tudtam változtatni. A bemenetre 12,75 V-ot kapcsolva, a feszültségstabilizátor kimenetén 3,27 V mérhető. Ez a feszültség biztosítja a mikrokontroller tápellátását, valamint ez a feszültség lesz az ADC pozitív referencia feszültsége. A feszültségosztó kimenetén 2,86 V mérhető.
57
A gyújtást helyettesítő kapcsolót bekapcsolva, az első LED kigyullad, figyelmeztetve a kuplung pedál benyomására. A kuplung pedált helyettesítő gombot nyomva tartva, az első LED kialszik. Ekkor az indítógombot egyszer megnyomva, a relé bekapcsol, amit egy kattanó hang is jelez. Növelve az áramkörbe bemenő feszültséget, 13,91 V esetén a feszültségosztó kimenetén 3,19 V mérhető. A relé ekkor elenged, szintén egy kattanást lehet hallani. Ennél az értéknél a mikrokontroller már nem adja ki az indítójelet a kimeneten, tehát az indítómotort nem működtethetjük. A kuplung pedál nyomógombját még nyomva tartva, ismét megnyomom az indító gombot, de a relé már nem kapcsol, tehát nem engedi a mikrokontroller az indítómotort működtetni. A bemenő feszültséget visszaállítva 12,75 V értékre, szintén nem reagál a mikrokontroller az indítási próbálkozásra. Ezután a gyújtást kikapcsolva, majd újra bekapcsolva, ismét kigyullad az első LED, ami azt jelenti, hogy a mikrokontroller várja a kuplungpedál lenyomását, és az indítógomb megnyomását. Most a behúzó relét helyettesítő kapcsolót kikapcsolom, ami azt jelzi majd, hogy a behúzó relé nem megfelelően működik majd. Az mikrokontroller kiadja a jelet a kimeneten, a relé bekapcsol, de 1 másodperc után kikapcsol. Ezután a második LED világít, ami a behúzó relé hibát jelzi. Ha a behúzó relé kapcsolóját visszakapcsolom, és újból indítani próbálok, a hibajelzés megszűnik. Ha indítás során nem növelem a bemenő feszültséget 13,8 V érték felé, kb. 10 másodperc múlva, a relé kikapcsol, és a harmadik LED gyullad ki. Ekkor a mikrokontroller a hosszan tartó indítózásra figyelmeztet. A LED kb. 20 másodperc után alszik el. Eközben a mikrokontroller nem érzékeli a bemeneti jelek változását. Miután a LED elaludt, újból próbálkozhatunk az indítással. A működés alatt, még teszteltem, hogy indítózás közben, a kuplungpedált helyettesítő nyomógombot felengedve, vagy a behúzó relét és a gyújtást helyettesítő kapcsolót kikapcsolva, a relé azonnal kikapcsol.
58
9. Továbbfejlesztési javaslatok A behúzó relé működését csak villamos szempontból vizsgáltuk, a mikrokontroller csak azt figyeli, hogy az indítójel kiadása után az érintkező híd összekapcsolja-e a két érintkezőt, ezáltal az indítómotor megkapja-e a működéséhez szükséges áramot. A rendszer nem figyeli, hogy az emeltyű vagy tolóvilla elmozdul, és a hajtófogaskerék megfelelően csatlakozik a fogaskoszorúval. Erre megoldás lehet, hogy figyeljük a hajtófogaskerék helyzetét egy induktív érzékelővel. Az induktív érzékelőt a hajtófogaskerék fölé elhelyezve, vizsgálni lehet az elmozdulást. Az induktív érzékelő kapcsolóként működik, ha a környezetébe fém tárgyat helyezünk. A program tehát abban változna, hogy a kiadott indító jeltől kezdve nem csak az eltelt időt számolná a mikrokontroller, hanem az induktív érzékelő jelét is figyelné. Az érzékelő 12 V feszültségen is működik, tehát könnyen illeszthető a rendszerbe. Az állapotjelzésre és hibajelzésre LED diódákat használtam. A mikrokontrollerhez köthető LCD kijelző, ami által ezek a jelzések sokkal egyértelműben és közvetlenebbül továbbíthatóak a gépjármű vezető számára. Az LCD kijelzőhöz szükség lenne soros porti kommunikációra és a kommunikáció időzítésére pontosabb órajelre, amihez a 32 KHz-es kvarckristályt lehetne felhasználni. A programban nem használtam fel az energiatakarékos üzemmódot. Ezt olyan esetben lehetne felhasználni, amikor a programnak nincs fontos feladata, és csak várakozik egy bizonyos jelre. Így a mikrokontroller alvó állapotba kerül, és tovább csökkenthető az áramfelvétele. Az indítás automatizáltsága miatt akár a korszerű start-stop rendszer is megvalósítható a mikrokontrollerrel. A start-stop rendszer során, ha a gépjármű álló helyzetben van, egy jelhatásra, ami általában a sebességváltó semleges helyzetbe kapcsolása, a gépjármű motor működése leállítódik, majd egy bizonyos jel után, ami legtöbbször a kuplung pedál benyomása, a gépjármű motor automatikusan indítódik. Ezzel a módszerrel csökkenteni lehet az a gépjármű üzemanyag felhasználását. Továbbá megvalósítható a kulcsnélküli indítás, ahol a gyújtáskapcsoló helyett, csak az indítógomb megnyomásával indítható az autó. Ehhez szükség van egy jeladóra, ami ha az utastérbe kerül, akkor a rendszer érzékel, és engedélyezi az indítást.
59
10.Összefoglaló Az indítómotorok a gépjármű belsőégésű motorjának indítására használt egyenáramú motorok, mivel a belső égésű motor önmagától nem képes önálló működésre. A helytelen használat és az indítómotor meghibásodása miatt az indítás helytelenül, vagy egyáltalán nem mehet végbe, ezáltal akár károsodhat az indítómotor szerkezete. Manapság már elterjedtek az olyan elektronikus eszközök, amelyek figyelik az indítás folyamatát
vagy
mikrokontrollerek,
automatikusan amelyek
elvégzik
hasonlítanak
a
azt.
Ilyen
célra
alkalmasak
mikroszámítógéphez,
és
a
vezérlési
feladatokat megoldására alkalmasak. A mikrokontrollerrel egy automatikus indítási folyamot sikerült megvalósítani. Továbbá olyan feladatokat, mint a ráindítás megakadályozása, az indítómotor lekapcsolása, ha a belső égésű motor már önállóan működik. A vezérléshez MSP430G2553 típusú mikrokontrollert használtam. Az indítási folyamat egy nyomógomb egyszeri megnyomása után indul el. Meg kellett oldani a bemeneti jelek illesztését a mikrokontrollerhez, valamint a kimeneti jel illesztését az indítómotorhoz
és
a
tápfeszültség
biztosítását.
A
feladatok
megvalósítására
felhasználtam a mikrokontroller analóg-digitális átalakítóját és időzítő funkcióját. A programot C nyelven írtam meg. A főprogram egy végtelen ciklus, ami több ciklusból áll, ezek valósítják meg a bemeneti jelre várakozást, és az indítási ciklust. A program helyes működését a fejlesztői környezet szimulátorában teszteltem le. A szimulátorban soronként lehet futtatni a programot, valamint a regiszterek értéket lehet figyelni és módosítani. A szimulálás után, a próbapanelen megépített áramkör is kipróbálásra került, ahol az előforduló feszültség értékeket tápegység, valamint a jelváltozásokat kapcsolók biztosították. A rendszer tovább fejleszthető a hajtófogaskerék vizsgálatával, a
figyelmeztető
jelzések
közvetlenebb
megjelenítésével,
az
energiatakarékos
üzemmódok használatával, vagy a start-stop esetleg a kulcsnélküli indítás funkcióval.
60
11.Summary The starter motor for starting an internal combustion engine vehicle DC motors, since the internal combustion engine itself is not capable of independent operation. Due to the incorrect starting and the malfunction of the starter motor, the starting process takes place wrongly or does not take place, so the starter motor’s stucture can be damaged. Nowadays there are electronic devices that check the starting process or they can automate it. Suitable for this purpose microcontrollers, that are smiliar to the microcomputers, and are suitable for solving control tasks. With the microcontroller, an automatic starting process has been achived, and tasks such as prevent starting when the engine operates or switching off the starter motor when the engine operates independetly. To control the system, I used a MSP430G2553 microcontroller. The starting process starts by pressing a button at once. I had to solve the different input and output signals connections and the supply power to the microcontroller, To realize the tasks, I used the microcontroller inne analog-digital converter, and the timer function. The program was written in C program language. The main program is an endless cycle, which contains more cycle. These cycles constitute the input signal expectation, and the starting cycle. The correct operation of the program was tested in simulator of development environment. The simulator can run the program line by line, as well as the registers can be monitored and their values can be modified. After teh simulation, the circuit was tried in test panel as well. The occuring voltage and the changing signals were ensured by supply voltage and switches. The system can be developed by examining the pinion, the direct display of alerts, using of low power modes or startstop function or keyless staring.
61
12.Irodalomjegyzék: 1. Tömössy M. Jenő Frank György: Autóvillamosság Műszaki könyvkiadó, Budapest, 1974. 2. MCS 51 family megtekintés dátuma: 2014.04.05. http://mazsola.iit.uni-miskolc.hu/DATA/segedletek/8051/index 3. MSP430 G2x53 Datasheet letöltés dátuma: 2014.04.05. http://www.ti.com/lit/ds/symlink/msp430g2553.pdf 4. Mikrokontroller – Wikipédia megtekintés dátuma: 2014.04.05. http://hu.wikipedia.org/wiki/Mikrokontroller 5. Ólom akkumulátor GYIK megtekintés dátuma: 2014.09.30. http://www.panelectron.hu/akkumulator_gyik.html 6. 2500.MSP430_2D00_LaunchPad.jpg letöltés dátuma: 2014.09.30. http://e2e.ti.com/cfs-file.ashx/__key/communityserver-blogs-componentsweblogfiles/00-00-00-06-66/2500.MSP430_2D00_LaunchPad.jpg
62
13.Mellékletek
1. Melléklet: Programkód 1. rész 63
2.Melléklet: Programkód 2. rész 64
3. Melléklet: Programkód 3. rész
65
4. Melléklet: Kapcsolási rajz
66
5. melléklet Az áramkör összeállítva
67