PÉCSI TUDOMÁNYEGYETEM
Természettudományi Kar
Matematikai és Informatikai Intézet
INFORMATIKA ÉS ÁLTALÁNOS TECHNIKA TANSZÉK
Halász Antal - dr. Keresztesi Miklós:
DIGITÁLIS ELEKTRONIKA
Mikroprocesszoros laboratóriumi gyakorlatok
Lektor:
Drommer Bálint
A laboratórium fejlesztésében közreműködtek:
Dárdai Géza
demonstrátor
(2., 4.1. fejezet)
Császár Csutorás Péter
demonstrátor
(3., 4.2. fejezet)
Kovács Péter
demonstrátor
((4.3, 4.4. fejezet)
Pécs, 2003.
Bevezetés
A digitális elektronikus rendszerekben az információt diszkrét jelek reprezentálják. Míg az analóg jelek egy adott intervallumban az idő függvényében minden értéket felvehetnek, a digitális jelek csak meghatározott amplitúdójúak lehetnek. Kiemelt jelentőségűek a bináris digitális jelek. A kettes számrendszerben mindössze két számjegyre van szükség, a 0-ra és az 1-re. Sokkal könnyebb olyan elektronikus áramköröket megvalósítani, amelyek csupán két jelszintet kezelnek. Ez az oka annak, hogy a számítógépek bináris számokkal dolgoznak. Az aritmetikai műveletek visszavezethetők logikai műveletekre, a logikai értékekhez bináris számokat rendelhetünk: az igazhoz az 1-es, a hamishoz a 0-s számjegyet. Egy logikai áramkör bemeneteinek vagy kimenetének logikai értéke lehet 1 (igaz), lehet 0 (hamis).
Elektronikus rendszerekben a logikai értéket feszültség szintek hordozzák. Egy logikai kapu által megvalósított logikai függvény azonban nem egyértelmű, ha a logikai érték és feszültség szintek közötti kapcsolat nincs tisztázva. A hozzárendelés önkényes is lehet, de egy készüléken belül egységesnek kell lennie. Jelen szakaanyagunkban az alábbi összerendelést alkalmazzuk: a logikai 1 értékhez magas (High), a logikai 0 értékhez az alacsony (Low) feszültség szintet rendeljük. A magas feszültség szint +5 V, vagy ennél kicsit kisebb feszültség, míg az alacsony feszültség szint a 0 V-ot, vagy annál kicsit magasabb feszültség szintet jelenti. Ezen hardveres jellemzőket Assambly programmal állítjuk be. Ha magas feszültség szintet akarunk elérni egy rendszerben (pl. 8 bites regiszterben, annak valamelyik bitjén), akkor a Set kulcsszóval a magas, a Clear kulcsszóval az alacsony feszültség szintet programozzuk. Mivel egy elektronikus rendszerben a külvilág zavaró hatásának csökkentésére gyakran földelik a tápegység negatív pólusát, ezért az alacsony (Low) feszültség szint gyakorlatilag föld (GND) potenciált jelent. A fenti összerendelést táblázatosan is összefoglaljuk:
A mikroprocesszorok megjelenését az elektronika látványos fejlődése előzte meg, mintegy kialakítva a µP megalkotásának előfeltételeit. 1948-ban megjelent az elektronikus elven működő erősítő elem a tranzisztor. A Fairchild laboratórium munkatársai felismerték, hogy a planáris technológiával kialakított tranzisztorokat magán a szilícium szeleten is összehuzalozhatják. 1959-ben kidolgozták a szilícium alapú planáris integrált áramköröket. Az amerikai Intel cég a 60-as évek végén már nagy mennyiségben gyártott LSI (nagy integráltsági fokú) áramköröket. Ekkor vetette fel az Intel egyik fejlesztő mérnöke (M. E. Hoff), hogy a számológépekhez a sokféle céláramkör helyett egyetlen, programozható működésű áramkört kellene tervezni és különböző alkalmazásokban ugyanaz az IC dolgozna, csak éppen más és más programot hajtana végre. 1971-ben piacra került az Intel 4004 típusú mikroprocesszora 2300 tranzisztor funkcióval.
Napjainkban elterjedtek az irányítástechnikában a PIC mikro vezérlők. Jellemzőjük a redukált utasításkészlet (RISC processzor), azaz utasításkészletük kevés és egyszerű (bit-, bájt műveletek, konstans és vezérlő utasítások). A memória szervezése Harvard architektúrájú: külön program- és külön adat tárolót használ. Eltérő szélességű adat és programbusz használható. A program- és adat tároló flash EPROM-os, elektronikusan tetszőleges számban törölhető és újraírható.
A mikroprocesszorok megjelenésének és elterjedésének eredményeként több nagyságrenddel megnőtt a berendezésekbe beépíthető komplexitás felső határa. Ezáltal minőségileg új, az eddigiekhez képest sokkal nagyobb teljesítőképességű termékek, termékcsaládok jöttek létre. Jegyzetünk célja, bevezetést nyújtsunk a µP alkalmazásának technikájába. A szükséges Assambly alapismereteket az 1. sz. szakirodalom tartalmazza.
1. PIC 16F873 mikrokontroller (µP)
A mikrocontroller (µP) néhány kiegészítő áramköri elemmel együtt nyomtatott áramköri lapon van elhelyezve. Alkalmazói oldalról tekintve a következő funkcionális egységek találhatók rajta (ábra a következő oldalon):
1.1. Tápfeszültség csatlakozások. A GND és +Ut közé kell kapcsolni a panel működtetéséhez szükséges tápfeszültséget (12 V), ebből stabilizátor áramkör állítja elő a kontroller és kiegészítő áramköreinek 5 V-os tápfeszültségét. Az 5 V és az Ut GND pontja közös, az 5 V terhelhetősége a mikrokontroller tápellátása miatt korlátozott, erről max. 100 mA-es beavatkozók működtethetők.
1.2. Csatlakozás a külvilág felé: RA0, RA1,RA2, RA3, RA4, RA5. A panel tetején található sorkapcsokhoz input (szükség esetén) output eszközöket köthetünk. A fenti csatlakozó pontokat PORTA -nak nevezzük.
1.3. Az RA0 és RA1 két 10 bites A/D konverter bemenetei. A mérendő feszültség + pólusai csatlakoznak az RA0 és/vagy RA1 pontokhoz, a mérendő feszültség negatív pólusát valamelyik GND ponthoz kötjük. A konverzió programozásnak gyakorlásához két potenciométer is található a panelon, amelyek 0 ...5 V feszültség beállítására alkalmasak. Akkor kapcsolódik ez a feszültség az RA0 és/vagy RA1bemenetre, ha a JP1, és/vagy JP2 dugaszolva van. Amennyiben a dugaszokat eltávolítjuk, akkor RA0, RA1 külső digitális jelet fogadhat. Digitális inputként használva, ezt a két bitet is fel kell húzni egy - egy ellenállással +5V-ra, hasonlóan a többihez (RA2, RA3, RA4, RA5).
1.4. Input jelek beadására alkalmas nyomógombok, amelyek az RA2, RA3, RA4, RA5 kontroller lábakhoz csatlakoznak, lenyomott állapotban GND-t, azaz logikai 0 értéket kapcsolnak. A nyomógombok nyugalmi helyzetében az adott kontroller láb logikai 1 értékű. A kontroller a külvilágból is fogadhat digitális input jeleket, ilyenkor ezeket a GND és az RA2, RA3, RA4, RA5 sorkapcsokhoz kötjük.
1.6. A PORT B alapértelmezés szerint kimenetként használatos, az RB0, ..., RB7 hétszegmenses kijelzőhöz csatlakozik és jelzi a port bitjeinek logikai állapotát. A kijelző közös anódú.
1.7. RESET áramkör. a mikroprocesszort alap helyzetbe állítja.
1.8. RS232 csatlakozó: soros vonalon kommunikációt biztosít a mikrokontroller és IBM PC számítógép között. Használata az 1. szakirodalomban található meg, jelen jegyzetben ezt a csatlakozót nem használjuk.
1.9. RS485: a mikrokontroller panelok ezen csatornán felfűzhetők és egymással kapcsolatba léphetnek. Használata az 1. szakirodalomban található meg, jelen jegyzetben nem használjuk.
2. Beavatkozó szervek csatlakoztatása a mikrokontrollerhez
Technikai rendszerek irányításában leggyakrabban alkalmazott beavatkozó szervek a lámpa, DC (Direct Current: egyenáramú) motor, léptető motor, mágnes szelep, ... Vizsgáljuk meg ezek vezérlését mikrokontrollerről.
2.1. Lámpa bekapcsolása
Kapcsoljunk a PORT B nulladik bitjéhez (RB0) 12 V-os izzólámpát. A feladat megoldásához a mikrokontroller nem használt funkcionális egységeit az ábrázolásból elhagyva az alábbi egyszerűsített ábrát kapjuk:
Izzó helyett LED-et is használhatunk
list p=16f873 ;compilernek szóló direktíva
#include „p16873.inc” ;compilernek szóló direktíva
bsf status,5 ;lapozzunk az 1. memória bankba
movfw 0FFh ;mozgassuk W-be az 11111111=FFh számot
movwf trisa ;ezáltal porta minden bitje input
clrf trisb ;portb minden bitje output
movlw 06h ;
movwf adcon1 ;porta digitális input (nem analóg)
bcf status,5 ;lapozzunk vissza a 0. memória bankba
eleje bsf portb,0 ;kapcsoljuk a B port 0. bitjét logikai 1 értékre
goto eleje ;ugorjunk az elejére
end ;vége a programnak
2.2. Lámpa villogtatása
Az összeállíts azonos a 2.1. fejezet ábrájával. A compilernek szóló direktívák is azonosak, ezért a további programokban ezt a részt nem ismételjük meg. Az adatirányt beállító programrész magyarázatát elhagytuk a programból. A villogtató program:
bsf status,5
movlw 0FFh
movwf trisa
clrf trisb
movlw 06h
movwf adcon1
bcf status,5
villog bsf portb,0 ;kapcsoljuk a B port 0. bitjét logikai 1 értékre
call varakoz ;időzítés, kb.0,147 s (órajel 16 MHz)
bcf portb,0 ;kapcsoljuk a B port 0. bitjét logikai 0 értékre
call varakoz ;időzítés, kb.0,147 s (órajel 16 MHz)
goto villog ;ugorjunk a villog címkére
varakoz
v03 decfsz 020h,1 ;dekrementáljuk a rekeszt
goto v03
decfsz 021h,1 ;dekrementáljuk a rekeszt
goto v03
return
end ;vége a programnak
2.3. DC motor bekapcsolása
A motor névleges feszültsége Ut = 12 V, vezéreljük a PORT B első (RB1) bitjéről. Induktív fogyasztóknál a kikapcsolási önindukciós feszültség károsíthatja a meghajtó tranzisztort, védelme érdekében használjuk a panelra épített védődiódát (a COM vezetéket is be kell kötni az ábra szerint).
bsf status,5
movlw 0FFh
movwf trisa
clrf trisb
movlw 06h
movwf adcon1
bcf status,5
forog bsf portb,0 ;kapcsoljuk a B port 0. bitjét logikai 1 értékre, a motor
forog
call varakoz ;időzítés,
bcf portb,0 ;kapcsoljuk a B port 0. bitjét logikai 0 értékre, a motor áll
motor goto motor ;ugorjunk a motor cimkére
varakoz
movlw b’0000 1111’ ;a 2.2. fejezetben alkalmazott időzítést 15-szeresére
növeljük
movwf 020h
v03 decfsz 021h,1
goto v03
decfsz 022h,1
goto v03
decfsz 020h,1
goto v03
return
end
A varakoz szubrutin rövid magyarázata:
.Meghíváskor a work regiszter felveszi a bináris 00001111 értéket.
.A work regiszter tartalmát átírjuk a 020 hexa című rekeszbe
.Dekrementáljuk a 021 hexa című 8 bites rekeszt, míg nulla nem lesz (eltelt idő 192 µs)
.Dekrementáljuk a 022 hexa című rekeszt. Minden egyes dekrementálásnál a 021 hexa rekeszt 256-szor visszafelé léptetjük (eltelt idő 192 x 3 x 256 µs = 147 ms)
.A 147 ms időzítést többszörözzük a 020 hexa című rekesz értékével. Pl. tizenötszörözzük (2205 ms).
2.4. DC motor forgásirány változtatása (jelfogós kapcsolás)
Kis teljesítményű motorok állórésze permanens mágnes, forgórésze tekercselt. Forgásirány változtatáshoz elegendő a tápfeszültség két végét felcserélni, ezáltal megváltozik a motoron áthaladó áram iránya. A gyakorlat igényeit figyelembe véve még szükség van a motor elindítására és megállítására.
A forgásirány váltást J1 jelfogó, a ki-be kapcsolást J2 valósítja meg. A jelfogók tekercsét a PORT B két bitje, az RB0, RB1 működteti. Ha mindkettő árammentes (bcf portb,0 bcf portb,1), akkor a motor áll. Ha J2-t bekapcsoljuk (bsf portb,1), akkor a motor forog. A forgásirányt bcf portb,0 vagy bsf portb,0 állítja be.
Utasítás | J1 | J2 | Motor |
bcf portb,0 bcf portb,1 | áram mentes | áram mentes | áll |
bcf portb,0 bsf portb,1 | áram mentes | meghúz | forog egyik irány |
bsf portb,0 bsf portb,1 | meghúz | meghúz | forog másik irány |
A következő program a motort bekapcsolja, forgat egyik irányban, majd forgat a másik irányban. A motor ezután megáll.
bsf status,5
movlw 0FFh
movwf trisa
clrf trisb
movlw 06h
movwf adcon1
bcf status,5
bcf portb,0
bsf portb,1 ;motor forog, egyik irány
call varakoz ;időzítés
bcf portb,0
bcf portb,1 ;a motor áll
call varakoz ;időzítés
bsf portb,0
bsf portb,1 ;motor forog, másik irány
call varakoz ;időzítés
bcf portb,0
bcf portb,1 ;motor áll
motor goto motor ;ugorjunk a motor címkére
varakoz
movlw b’00011111’
movwf 020h
v03 decfsz 021h,1
goto v03
decfsz 022h,1
goto v03
decfsz 020h,1
goto v03
return
end
2.5. DC motor forgásirány változtatás (elektronikus kapcsolás)
Az RB0 és RB1 pontok a mikrokontrolleres panelon nyitott kollektoros meghajtó tranzisztorokhoz csatlakoznak. Iktassunk be mindkét kollektor vezetékébe egy-egy munkaellenállást (510 ohm) és működtessük 5 V-ról. A munkaellenállások egyben a Schmitt-triggerek felhúzó ellenállásai, az inverter kimenetén logikai 0 érték (L-szint) van. A T1 - T3, valamint a T2 - T4 tranzisztor nem vezet, a motor áll. Programmal állítsuk be a PORT B nulladik bitjét logikai 1 értékre: bsf portb,0. A baloldali Schmitt-trigger bemenete GND-re kapcsolódik, az invertált kimenet nyitja T1 - T3 tranzisztorokat, a motoron áram folyik. A PORT B első bitjét logikai 1 értékre állítva (bsf portb,1) nyit a T2 - T4 tranzisztor és megváltozik a motor forgásiránya. Ha mindkét bitet logikai 1 értékre programozzuk, akkor a tápegység zárlatba kerül T1 ... T4 tranzisztorokon keresztül, ezért ez tiltott állapot. A forgásirány váltó működése táblázatosan:
| Schmitt-trigger bem. kim. | T1 -T3 | T2 - T4 | Motor |
bcf portb,0 bcf portb,1 | 1 0 | nem vezet | nem vezet | áll |
bsf portb,0 bcf portb,1 | bal oldali 0 1 | vezet | nem vezet | forog egyik irány |
bcf portb,0 bsf portb,1 | jobb oldali 0 1 | nem vezet | vezet | forog másik irány |
bsf portb,0 bsf portb,1 | Tiltott állapot ! |
Forgassuk a motort egyik, majd másik irányba!
bsf status,5
movlw 0FFh
movwf trisa
clrf trisb
movlw 06h
movwf adcon1
bcf status,5
bsf portb,0
bcf portb,1 ;motor forog, egyik irány
call varakoz ;időzítés
bcf portb,0
bcf portb,1 ;a motor áll
call varakoz ;időzítés
bcf portb,0
bsf portb,1 ;motor forog, másik irány
call varakoz ;időzítés
bcf portb,0
bcf portb,1 ;motor áll
motor goto motor ;ugorjunk a motor cimkére
varakoz
movlw b’00111111’
movwf 020h
v03 decfsz 021h,1
goto v03
decfsz 022h,1
goto v03
decfsz
return
end
2.6. DC motor fordulatszám szabályozása
A fordulatszám legegyszerűbb formája, ha névleges feszültsége alatt üzemeltetjük, ekkor fordulatszáma kisebb lesz a névleges fordulatszámnál. Hátránya ennek a megoldásnak, hogy a kapocsfeszültség csökkentése jelentősen csökkenti a motor tengelyen leadott nyomatékét. A gyakorlatban ezért inpulzus - szünet arány szabályozással szokás a fordulatszámot változtatni. A szabályozás elve:
A motor csatlakoztatása a mikrokontrollerhez megegyezik a 2.3. fejezetben bemutatott kapcsolással. A T periódus időt a motor mérete, tehetetlensége szabja meg. A laboratóriumban használt kis motorok esetében 10 ms körüli érték, kísérletileg célszerű meghatározni. A motor teljes fordulatszámmal forog, ha tki=0. Az alábbi beállítások fokozatosan csökkenő fordulatszámot eredményeznek:
|
| 020 rekesz |
| 020 rekesz |
| 020 rekesz |
tbe | 7 ms | 00100100 | 4 ms | 00010101 | 1 ms | 00000101 |
tki | 3 ms | 00001111 | 6 ms | 00100000 | 9 ms | 00101111 |
T | 10 ms |
| 10 ms |
| 10 ms |
|
A táblázatban a 020 hexadecimális című rekesz kezdő értékét is megadtuk. A következő program a tbe = 4 ms (00010101) és tki = 6 ms (00100000) impulzus - szünet arányt valósítja meg.
bsf status,5
movlw 0FFh
movwf trisa
clrf trisb
movlw 06h
movwf adcon1
bcf status,5
forog bsf portb,0 ;kapcsoljuk a B port 0. bitjét logikai 1 értékre
call be ;időzítés, kb.4 ms (órajel 16 MHz)
bcf portb,0 ;kapcsoljuk a B port 0. bitjét logikai 0 értékre
call ki ;időzítés, kb.6 ms (órajel 16 MHz)
goto forog ;ugorjunk a forog címkére
be movlw b’00010101’
movwf 020h
v01 decfsz 021h,1
goto v01
decfsz 020h,1
goto v01
return
ki movlw b’00100000’
movwf 020h
v02 decfsz 021h,1
goto v02
decfsz 020h,1
goto v02
return
end
2.7. Gamma típusú léptető motor vezérlése
A léptető motor forgórésze az állórészre kapcsolt áramimpulzus hatására meghatározott szöggel elfordul.
A működtető program algoritmusa: kapcsoljunk feszültséget a PB0 tekercsre, ekkor az áramiránynak megfelelően magához vonzza a forgórész ellentétes mágneses pólusát A forgórész, mint mechanikai rendszer tehetetlensége miatt ezt az állapotot megfelelően időzíteni kell. Ezután PB0-ról lekapcsoljuk a feszültséget és gerjesztjük az óramutató járásával egyezően vagy ellentétesen következő tekercset. A fenti algoritmust folytatva a szerkezetre jellemző szöggel elfordul a tengelyt. A forgásirányt a tekercsek bekapcsolási sorrendje, a fordulatszámot az időzítés mértéke határozza meg. Az időzítés legkisebb értékét kísérletileg kell meghatározni.
bsf status,5
movlw 0FFh
movwf trisa
clrf trisb
movlw 06h
movwf adcon1
bcf status,5
forog bsf portb,0 ;PB0 feszültséget kap, a tengely elfordul
call timer ;időzít
bcf portb,0
bsf portb,1 ;PB1 feszültséget kap, a tengely elfordul
call timer ;időzít
bcf portb,1
bsf portb,2 ;PB2 feszültséget kap, tengely elfordul
call timer ;időzít
bcf portb,2
bsf portb,3 ;PB3 feszültséget kap, a tengely elfordul
call timer ;időzít
goto forog
timer
movlw b’10000000’ ;ezt az értéket változtatva,
szabályozható a fordulatszám
movwf 020h
v02 decfsz 021h,1
goto v02
decfsz 020h,1
goto v02
return
end
2.8. Mágnes szelep vezérlése
Működtető program:
bsf status,5
movlw 0FFh
movwf trisa
clrf trisb
movlw 06h
movwf adcon1
bcf status,5
adagol
bsf portb,0 ;kapcsoljuk a B port 0. bitjét logikai 1 értékre
call varakoz ;időzítés
bcf portb,0 ;kapcsoljuk a B port 0. bitjét logikai 0 értékre
call varakoz ;időzítés
goto adagol ;ugorjunk az adagol címkére
varakoz
movlw b’00001111’
movwf 022h
v03 decfsz 020h,1 ;dekrementáljuk a rekeszt
goto v03
decfsz 021h,1 ;dekrementáljuk a rekeszt
goto v03
decfsz 022h,1 ;dekrementáljuk a rekeszt
return
end ;vége a programnak
2.9. Hangszóró illesztése kimenethez
Program:
bsf status,5
movlw 0FFh
movwf trisa
clrf trisb
movlw 06h
movwf adcon1
bcf status,5
zum bsf portb,6 ;kapcsoljuk a B port 0. bitjét logikai 1 értékre
call frek ;időzítés, kb.4 ms (órajel 16 MHz)
bcf portb,0 ;kapcsoljuk a B port 6. bitjét logikai 0 értékre
call frek ;időzítés, kb.6 ms (órajel 16 MHz)
goto zum ;ugorjunk a forog címkére
frek movlw b’00010101’
movwf 020h
v01 decfsz 021h,1
goto v01
decfsz 020h,1
goto v01
return
end
2.10. Piezo keramikus zümmögő illesztése kimenethez
A zümmögők a meghajtó elektronikát is tartalmazzák, a mikrokontroller csak feszültséget kapcsol rá. Program:
bsf status,5
movlw 0FFh
movwf trisa
clrf trisb
movlw 06h
movwf adcon1
bcf status,5
hang bcf portb,6
goto hang
end
3. Érzékelők csatlakoztatása a mikrokontrollerhez
Nyomógomb, reed relé, fotóellenállás közvetlenül csatlakoztatható a logikai 1 értékre felhúzott portA bemenetre. Ezeket működtetve a processzor lábon a logikai 1 átvált logikai 0-ra. Vízbe merülő elektródás szintérzékelő illesztő elektronikával együtt képes korrekt jelet szolgáltatni.
Tesztelő program:
bsf status,5
movlw 0FF
mov wf trisA
clrf trisB
movlw 06h
movwf adcon1
bcf status,5
teszt movf portA,0 ;mozgassuk az A port tartalmát az akkumulátorba
movwf portB ;mozgassuk az akkumulátor tartalmát a B port bitjeibe
bsf portB,7 ;PortA-n ki nem épített bit törlése a kijelzőn
bsf portB,6 ;PortA-n ki nem épített bit törlése a kijelzőn
bsf portB,1 ;PortA-n logikailag határozatlan bit törlése a kijelzőn
bsf portB,0 ;PortA-n logikailag határozatlan bit törlése a kijelzőn
call varakoz ;ezzel az időzítéssel szemünk érzékeli a törlést
goto teszt
varakoz
v03 decfsz 020h,1
goto v03
decfsz 021h,1
goto v03
return
end
Az érzékelőket működtetve a panelon lévő hétszegmenses kijelző a, b, c, d szegmense világít.
Opto kapu csatlakoztatása a mikrokontrollerhez
Az opto kapu infra LED-del megvilágított infra foto tranzisztort tartalmaz.
Megvilágított állapotban a foto tranzisztor kollektorán logikai 0 értéknek megfelelő feszültség van. Ha mozgó rendszer a fénysugarat megszakítja az U alakú kapu belsejében, akkor a foto tranzisztor kollektorán logikai 1 érték jelenik meg. A foto tranzisztor kollektor köri munka ellenállása a panelon beforrasztott 10 k ohmos bemeneti felhúzó ellenállás.
Program:
bsf status,5
movlw 0FFh
movwf trisA
clrf trisB
movlw 06h
movwf adcon1
bcf status,5
teszt btfss trisA,5 ;vizsgálja trisA 5. bitjét, ha 1, akkor érkezett jel,
;átugorja a következő utasítást
goto teszt
bcf portB,5 ;ha érkezett jel, kijelzi az 5. biten
end
A program a kijelző feleslegesen világító szegmenseit nem oltja ki.
4. Rendszerek irányítása mikrokontrollerrel
Az irányító rendszer a külvilággal érzékelőkön és beavatkozókon keresztül tartja a kapcsolatot. Elemi követelmény az érzékelők és beavatkozók korrekt illesztése az irányító panelhoz, ezt mutattuk meg az előző fejezetekben. Az irányítandó rendszer célirányos működését a mikrokonroller flasch epromjába égetett program biztosítja.
4.1. Közúti kereszteződés lámpáinak vezérlése
A járművek forgalmát a piros, sárga, zöld lámpa irányítja, a megkülönböztetett jármű jelzését az úttestbe épített reed relé (modell szintű közelítés) fogadja. A gyalogos forgalmat a piros és zöld lámpa
A mikrokontroller A portjához csatlakozik az úttestbe épített érzékelő, B portjához az öt lámpa.Az érzékelő egyik pontja GND-re van kapcsolva, a megkülönböztetett jelzésű jármű - modell szinten - permanens mágnest visz magával jeladóként.
Csatlakozzon az érzékelő az RA2 bithez:
A lámpák bekötése:
Program:
eleje
villog1
| bsf movlw movwf clrf movlw movwf bcf bsf bsf movlw movwf call movlw movwf bcf call bsf call decfsz goto bsf bsf movlw movwf call bcf bcf bsf movlw movwf call bcf bsf movlw monwf call goto | status,5 0FFh trisA trisB 06h adcon1 status,5 portB,2 portB,1 7h 020h timer1 b’00000101’ 021h portB,1 timer2 portB,1 timer2 021h,1 villog1 portB,3 portB,0 2h 020h timer1 portB,2 portB,3 portB,4 Ah 020h timer1 portB,4 portB,3 2h 020h timer1 eleje |
;jármű piros ;gyalogos zöld
;az időzítés mértéke, gyalogos átkelés ;timer1 időzítés hívása ;ennyit villog a gyalogos zöld
;gyalogos zöld kikapcsolva
;gyalogos zöld bekapcsolva
;a rekesz dekrementálása ;ha a rekesz tartalma nem nulla ;js bekacsolása, bekapcsolva maradt jp ;gyp bekapcsolása, bekapcsolva maradt jp + js
;időzítés mértéke ;jp + js + gyp együtt világít ;jp kikapcsolása ;js kikapcsolása, gyp tovább világít ;jz bekapcsolása ;jármű átkelés időzítésének mértéke (AH=10D)
;jz kikapcsolása ;js bekapcsolása, gyp tovább világít ;a lámpa kombináció időzítése
|
timer1 v01
timer2 v02
figyel
sarga
villog2
varakoz v03
|
call decfsz goto decfsz goto decfsz goto return
call decfsz goto decfsz goto return btfss goto return
movlw movwf clrf bsf call bcf call decfsz goto goto
decfsz goto decfsz goto return end |
figyel 022h,1 v01 023h,1 v01 020h,1 v01
figyel 022h,1 v02 023h,1 v02
portA,2 sarga
0Fh 025h portB portB,3 varakoz portB,3 varakoz 025h,1 villog2 eleje
026h,1 v03 027h,1 v03
|
;ha a bit 1, nem hajtja végre a köv. utasítást ;megkülönböztetett jelzésű jármű érkezett
;villogások száma
;minden lámpa kikapcsolva ;sárga lámpa be
;sárga lámpa ki
|
Az érzékelő kiolvashatóságának feltétele, hogy a megkülönböztetett jelzésű jármű jeladója az érzékelő felett megfelelő ideig bekapcsolt állapotot idézzen elő. Egy 60 km/h sebességgel haladó jármű 1 µs alatt 0,017 mm utat tesz meg. A fenti programban a figyel szubrutin végrehajtási ideje kb. 1 µs, ezen belül csak 0,25 µs az érzékelõ olvasása. A figyel szubrutint még a TIMER1 vagy TIMER2 aktivizálja, ezért újabb inaktív idõ lép be, kb. 1 µs. Tehát az aktív figyelés 2,25 mikrosecundumonként csak 0,25 µs. A reed relé érzékelési zónája néhány milliméter, a felette tartózkodás ideje eléri a 100 µs-ot is. Ezalatt a program 40-szer megvizsgálja a PORTA megfelelõ bitjét. A reed relé mechanikai tehetetlensége elõnyösen befolyásolja a kiolvasás biztonságát.
Nagyobb sebességû jármûnél növelni lehet a biztonságot elektronikus tároló felhasználásával.
Az SR tároló set bemenete fogadja a reed relé jelét, ezt a tároló tartósan megőrzi és az Input jelzésű pont logikai értéke a PORTA kapcsolt bitjét beállítja logikai 0 értékre. Bármikor kényelmesen ki lehet olvasni és a program elindíthatja a sárga villogást. A tároló működésének feltétele, hogy a jel várakozási ciklusában a reset (R) bemenet logikai 1 értéken (H szinten) legyen. Ezt a pontot (R) a PORTB-ről lehet vezérelni logikai 0 értékkel (L szinttel). Mivel a PORTB meghajtó tranzisztorai nyitott kollektorosak, ezért az R ponthoz +5 V-ra felhúzó ellenállást is be kell kötni. A megkülönböztetett jelzés detektálása után a programnak gondoskodni kell a tároló törléséről: PORTB logikai 1 értéke az R ponton logikai 0 -át eredményez. Ezt a jelet mihamarabb le is kell kapcsolni, hogy a tároló ne kerüljön tiltott állapotba újabb jel fogadásakor.
4.2. Teherlift vezérlése
A teherlift egy felső és alsó szint között szállít munkadarabokat. A járószék a program indításakor felső helyzetben van. Elindul lefelé, az alsó holtponti helyzetben megáll. Az adagoló kigurít egy munkadarabot, az lejtős pályán a járószékbe esik. A járószék elindul felfelé és a felső szintnél megáll. Ebben a helyzetben a járószék alsó ajtaja kinyílik, a munkadarab a felső tárolóba gurul.
Érzékelők:
.Felső és alsó végállás kapcsoló, ezeket a ráfutó liftszekrény zárja.
Beavatkozók:
.Forgásirány váltóról vezérelt motor, amely a liftszekrényt fel, le mozgatja.
.Elektromágneses adagoló.
Az érzékelőket a PORT A fogadja.
.A felső végállás kapcsoló az RA2 bithez csatlakozik
.Az alsó végállás kapcsoló az RA3-hoz van bekötve.
A beavatkozók a PORT B-ről vezérelhetők.
.Motor forgásirány fel: RB0
.Motor forgásirány le: RB1
.Az adagoló elektromágnes az BB2-höz csatlakozik.
A járószéket mozgató motort elektronikus forgásirány váltó vezérli (2.5. fejezet), programozásánál el kell kerülni a tiltott állapotot (bsf portb,0; bsf portb,1).
Program:
bsf status,5
movlw 0FFh
movwf trisA
clrf trisB
movlw 06h
movwf adcon1
bcf status,5
eleje
bcf portB,0
bsf portB,1 ;motor lefelé mozgatja a járószéket
olvas1 btfsc portA,3 ;vizsgálja az alsó kapcsoló állapotát
goto olvas1
bcf portB,0
bcf portB,1 ;a motort leállítja
bsf portB,2 ;bekapcsolja az adagolót
call varakoz ;az adagoló mechanika működési ideje
bcf portB,2 ;adagoló kikapcsolása
bsf portB,0
bcf portB,1 ;motor felfelé mozgatja a járószéket
olvas2 btfsc portA,3 ;felső végállás kapcsoló vizsgálata
goto olvas2
bcf portB,0
bcf portB,1 ;fent megáll, a golyó kigurul
vege goto vege
varakoz
v01 decfsz 020h,1
goto v01
decfsz 021h,1
goto v01
return
end
4.3. Folyadékszint szabályozása
A folyadék szint szabályozás algoritmusa:
1.Megvizsgáljuk az 1. szintérzékelő állapotát, ha az 0, akkor a tartály meg van töltve, a szivattyút kikapcsoljuk.
2.Ha az 1. szintérzékelő állapota 1, akkor a tartályban a folyadék szint a szükséges érték alatt van, a szivattyút kikapcsoljuk.
3.Az 1., 2. tevékenységet ciklikusan ismételjük.
Program:
bsf status,5
movlw 0FFh
movwf trisA
clrf trisB
movlw 06h
movwf adcon1
bcf status,5
eleje
btfsc porta,2
goto ki
bsf portb,0
call varakoz
goto eleje
ki bcf portb,0
call varakoz
goto eleje
end
A folyadék szint érzékelést úszóval működtetett kapcsolóval is megoldhatjuk:
GND
A modell beavatkozó szerve a liftet mozgató motor, amely forgásirány váltó elektronikával van működtetve. A forgásirány váltó bemenetei a PORTB 0. és 1. bitjéről kapnak vezérlő jelet. A PORTB-t outputba kell beállítani:
clrf trisb
A lift szekrény permanens mágnest visz magával és működteti az emeleteken elhelyezett reed reléket, mint érzékelőket. Az érzékelőket a PORTC 0., 1., 2., 3., 4. bitje fogadja. A mikroprocesszoros panelon a PORTC az RS232 és RS485 kommunikáció céljára van lefoglalva, azonban kiemelve ezt az integrált áramkört a processzorhoz csatlakoztathatjuk az emelet érzékelőket. A korrekt működés feltétele, hogy a processzor láb felhúzó ellenálláson keresztül +5V-ra csatlakozzon (logikai 1 állapot) és a reed relé kapcsolja az adott bitet GND-re (logikai 0 állapot). A PORTC inputban működik:
movlw 0FFh
movwf trisc
A lift felhasználója a mikroprocesszoros panel nyomógombjain adja meg, hogy hová kíván eljutni. Ezek a PORTA-hoz csatlakoznak. Ezt a portot is inputba kell állítani:
movlw 0FFh
movf trisa
Mivel a trisa, trisb, trisc az 1. memóriabankban van, ezért az adatirány programozásához előzetesen memóriabankot kell váltani, majd a PORTA, PORTB, PORTC input/output műveletei miatt visszatérünk a 0. memóriabankba.
A vezérlés algoritmusa:
1.Pozícionáljuk a lift szekrényt. Feltétel, hogy a lift a földszint és 4. emelet között legyen. Elindítjuk pl. felfelé. Vizsgáljuk a PORTC bitjeit. Ha bármelyik értéke 0, akkor a motort megállítjuk.
2.PORTA-t megvizsgáljuk, hogy hol van a lift.
3.A felhasználó a lift álló állapotában adhat jelzést, hogy melyik emeletre kíván menni. Csak egy gombot nyomhat meg. A PORTB kerámia zümmögőt is működtethet a gomb megnyomására.
4.PORTC-t megvizsgáljuk, hogy hová kell mozgatni a liftet.
5.PORTA és PORTC összehasonlítása alapján eldöntendő, hogy fel, vagy le mozgassuk a liftet.
6.Elindul megfelelő irányban a motor.
7.Vizsgáljuk PORTA aktuális értékét, ha egyenlő PORTC-vel, a motort leállítjuk.
8.Vissza a 3. pontra.
Megjegyzés: PORTA regiszter 8 bites, de a processzorban csak 6 bit van kiépítve és ebből csak négyet használunk.