Upload
others
View
3
Download
0
Embed Size (px)
Citation preview
Anton Jug
PROGRAMIRLJIV LOGIČNI KRMILNIK NA OSNOVI MIKROKRMILNIKA
Diplomsko delo
Maribor, julij 2009
Diplomsko delo visokošolskega strokovnega študijskega programa
PROGRAMIRLJIV LOGIČNI KRMILNIK NA OSNOVI MIKROKRMILNIKA
Študent: Anton Jug
Študijski program: VS ŠP Elektrotehnika
Smer: Avtomatika
Mentor: viš. pred. mag. Janez Pogorelc
Somentor: doc. dr. Miran Rodič
Maribor, julij 2009
ZAHVALA Zahvaljujem se mentorju mag. Janezu Pogorelcu in somentorju doc. dr. Miranu Rodiču za pomoč in vodenje pri opravljanju diplomskega dela. Prav tako se zahvaljujem podjetju Etra d.o.o., ki mi je ponudilo priložnost za delo in pomoč pri opravljanju diplomskega dela. Hvala tudi moji družini in staršem za oporo, razumevanje in pomoč v času študija.
PROGRAMIRLJIV LOGIČNI KRMILNIK NA OSNOVI MIKROKRMILNIKA
Ključne besede: mikrokrmilnik, programirljiv logični krmilnik, pozicioniranje UDK: 681.521.7:004.42(043.2) Povzetek
Tehnološki razvoj nam prinaša vse zmogljivejše mikrokrmilnike. Vse več je programskih orodij, ki nam omogočajo lažje in učinkovitejše delo z njimi. Da bi zapolnili vrzel v naši ponudbi avtomatizacije, smo so odločili za razvoj programirljivega logičnega krmilnika. Za njegovo jedro smo uporabili osem bitni mikrokrmilnik proizvajalca Microchip. Že na samem začetku razvoja smo ga uporabljali za projekte, kjer so bili PLC sistemi predragi. Z vsako novejšo verzijo pa smo uporabnost krmilnika še povečevali in prilagajali zahtevam. Krmilnik smo uspešno uporabili pri projektu izdelave stroja za ovijanje roba cistern. Naš krmilnik je bil cenovno ugodnejši v primerjavi s komercialnim PLC. Potrebno je bilo zajemati signale inkrementalnega dajalnika in voditi asinhronski pogon s frekvenčnim pretvornikom. Prav tako je bil potreben panel za vnos programov in parametrov. Ustrezen PLC sistem bi bil neprimerno dražji. Kljub kakšni dodatni uri programiranja in testiranje so bili stroški projekta veliko nižji.
MICROCONTROLLER BASED PROGRAMMABLE LOGIC CONTROLLER
Key words: microcontroller, programmable logic controller, positioning UDK: 681.521.7:004.42(043.2) Abstract
Development brings us more and more powerful microcontrollers. Today have many software tools which are more effective and easy to use. In order to fill a gap in our offer of automation systems, we decided for the development of programmable logic controller. For our programmable controller we used eight bit microcontroller from Microchip.
From the beginning of the development we used our programmable controller instead of PLC system for smaller projects. So we achieved lower expenses. With each newer version, we increased the usefulness of controller.
We used controller for automatization of machine for coating the edge of the tanks. Our controller had very favorable price. In this system was necessary to use incremental encoder and AC motor with frequency converter. It was also necessary to use panel for parameterization and entering user programs. PLC system was inappropriately more expensive. Despite additional hours of programming and testing, the project cost much less.
VSEBINA 1. UVOD 1
1.1 Kratek opis poglavij 1 2. RAZVOJ IN IZDELAVA KRMILNIKA K-CPU 3
2.1 Blokovni shemi K-CPU in slike 4 2.2 Microchip PIC mikrokrmilnik 6 2.3 Opto ločeni vhodi in izhodi 7 2.4 Napajalni del 10 2.5 RS232 komunikacija 11 2.6 Programiranje in neposreden dostop 12
3. RAZVOJ IN IZDELAVA PANELA K-PANEL 13 3.1 Blokovna shema K-PANEL-a in slike 14 3.2 Mikrokrmilnik PIC16F876A 16 3.3 LCD prikazovalnik 17 3.4 Ostali sklopi panela 18
4. PROJEKT OVIJANJA ROBA 19 4.1 Opis stroja za ovijanje roba 19 4.2 Blokovna shema in slike stroja za krivljenje roba 21
5. OPIS DELOVANJA K-PANEL-A 25 5.1 Kratek opis K-PANEL-a 25 5.2 Protokol komunikacije za K-PANEL 25 5.3 Opis povezave mikrokrmilnika in LCD prikazovalnika 27 5.4 Tipke K-PANEL-a 28 5.5 Osvetlitev ozadja 28
6. PROGRAM K-PANEL 29 6.1 Kratek opis programa 29 6.2 Opis prekinitev programa za K-PANEL 29 6.3 Funkcije programa K-PANEL 30
7. PROGRAM K-CPU 32 7.1 Kratek opis programa za krmilnik (K-CPU) 32 7.2 Določitev vhodov in izhodov 32 7.3 Prekinitve programa K-CPU 34
7.3.1 Prekinitev Timer 1 34 7.3.2 Prekinitev INT_RB 35 7.3.3 Prekinitev INT_RDA 37
7.4 Komunikacija s modulom K-PANEL 37 7.5 Razne funkcije 38 7.6 Ročno delovanje in iskanje reference 39 7.7 Pripravljenost – nastavitve, programi, števci in izklop 41
7.7.1 Delovanje pripravljenosti in shranjevanje podatkov v EEPROM 41 7.7.2 Števci izdelkov, nastavitve in vnos programov 43 7.7.3 Priprava na izklop 45 7.7.4 Osnovni meni pripravljenosti 46
7.8 Avtomatsko delovanje 47 7.8.1 Kratek opis avtomatskega delovanja 47 7.8.2 Pozicioniranje 48 7.8.3 Ostale funkcije potrebne za avtomatsko delovanje 53 7.8.4 Osnovna main() funkcija 54
8. SKLEP 56 8.1 Potek razvoja in uporaba krmilnika 56 8.2 Uporaba prirejenih krmilnikov 58 8.3 Prihodnost in zaključek 58
9. VIRI 61 10. PRILOGE 62
10. 1 Seznam slik 62 10.2 Seznam preglednic 63 10.3 Naslov študenta 64 10.4 Kratek življenjepis 64 10.5 Priloge 65 Priloga 1: Shema K-CPU 65 Priloga 2: Shema K-PANEL 66 Priloga 3: Algoritmi programa za K-PANEL (1/6) 67 Priloga 4: Algoritmi programa za K-CPU (1/10) 73 Priloga 5: Elektro načrt krmilja (1/10) 83
UPORABLJENI SIMBOLI UDI - nazivna napetost dig. vhoda Uoptoled - nazivna napetost diode optosklopnika UVcc - napajalna napetost mikrokrmilnika Ioptoled - tok diode optosklopnika Ioptoled_max - maksimalni tok diode optosklopnika Iled - tok led diode dig. vhoda Ipulldown_max - maksimalni tok "pull_down" upora dig. vhoda Rvh - upornost predupora diode optosklopnika na dig. vhodu Rpulldown - upornost "pull-down" upora dig. vhoda CTRopto - razmerje vhodnega in izhodnega toka optosklopnika s - razdalja od začetne pozicije do želene – končne pozicije s1 - razdalja pospeševanje s2 - razdalja potovanja s3 - razdalja zaviranja s4 - razdalja približevanja končni poziciji p0 - začetna pozicija p1 - pozicija konca pospeševanja p2 - pozicija konca potovanja p3 - pozicija konca zaviranja p4 - končna poziciji t1 - čas pospeševanje t2 - čas potovanja t3 - čas zaviranja t4 - čas približevanja končni poziciji vmax - maksimalna hitrost vmin - minimalna hitrost vref - hitrost iskanje referenčnega impulza a1 - pospešek a2 - pojemek
UPORABLJENE KRATICE K-CPU - CPU modul krmilnika K-PANEL - uporabniški vmesnik - modul krmilnika PLK - programirljiv logični krmilnik LCD - prikazovalnik s tekočimi kristali DI - digitalni vhod DO - digitalni izhod ENK - enkoder ICSP - In Circuit Serial Programming (serijsko programiranje v vezju) MCLR - Master Clear (glavni reset) LCD - Liquid Crystal Display (prikazovalnik s tekočimi kristali) MM - Micro Master (Siemensov tip frekvenčnega regulatorja) PWM - Pulse Width Modulation (pulzno širinska modulacija)
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 1
1. UVOD
Pri podjetju Etra d.o.o. sem opravljal praktično izobraževanje, kjer sem se že zaposlil
kot absolvent visoko-strokovnega študija. Pri podjetju je ena izmed glavnih dejavnosti
avtomatizacija v industriji, kjer srečujemo širok spekter strojev in proizvodnih linij.
Veliko je povpraševanja za manjše projekte, kjer potrebujemo programirljiv krmilnik z
manjšim številom vhodov in izhodov. Ti so lahko digitalni ali analogni. Prav tako je
dostikrat potreben tudi panel za spremljanje delovanja in vnašanje parametrov.
Komercialni PLC sistem je za manj kompleksne projekte predrag in tudi pogosto
ostane neizkoriščen. Zato smo se odločili izdelati programirljiv krmilnik, ki bi zadostil
našim potrebam in bil znatno cenejši od PLC sistema. Izdelali smo krmilnik na osnovi
Microchipovih mikrokrmilnikov. Krmilnik je sestavljen iz programirljivega logičnega
krmilnika z vhodi in izhodi, ki smo ga poimenovali K-CPU ter panela, ki smo ga
poimenovali K-PANEL. Med seboj pa sta povezana preko RS232 komunikacije.
Izdelan krmilnik smo uporabili pri projektu stroja za ovijanje roba, kjer je bila osnova
pozicioniranje asinhronskega pogona s frekvenčnim regulatorjem. Za povratno povezavo
smo uporabili inkrementalni dajalnik. Za programiranje panela in krmilnika smo uporabili
CCS-ov C programski jezik za Microchipove mikrokrmilnike.
1.1 Kratek opis poglavij
V drugem poglavju smo opisali krmilnik K-CPU. Najprej njegovo jedro na osnovi
mikrokrmilnika PIC18F452. Nato smo opisali optično ločene digitalne vhode in izhode,
napajanje, RS232 komunikacijo in možnosti dostopanja do mikrokrmilnika ter ICSP
konektor za programiranje. Podali smo tudi sheme in izračune za posamezne segmente.
V tretjem poglavju pa smo opisali razvoj in izdelavo panela K-PANEL oz.
njegovih segmentov: mikrokrmilnik PIC16F876A, štirivrstični LCD prikazovalnik ter
ostali sklopi (tipke, krmiljenje osvetlitve, napajanje in komunikacija).
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 2
Četrto poglavje vsebuje opis projekta oz. stroja, na katerem se je uporabil izdelani
programirljivi logični krmilnik s panelom. Poglavje vsebuje opis stroja, slike, blokovne
sheme ter princip delovanja.
V petem in šestem poglavju sta opisana programa za K-PANEL in K-CPU.
Program za K-PANEL je splošni program, saj opravlja le prikazovanje in zaznavanje
pritiska na tipke. Program za K-CPU pa vsebuje krmiljenje, regulacijo, menije za prikaz in
vnašanje nastavitev.
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 3
2. RAZVOJ IN IZDELAVA KRMILNIKA K-CPU
Programirljivi modul smo poimenovali K-CPU V3.0 (slika 2.1). K za krmilnik, CPU
ker se na modulu opravljajo oz. procesirajo vse operacije krmiljenja, regulacije, zajemanje
vhodov in izhodov ter obdelava podatkov za panel. V3.0 ker trenutno izdelujemo tretjo
verzijo krmilnika. Izdelujemo že tudi v5.0, katero smo uspešno testirali in jo bomo začeli
uporabljati. Za shemo celotnega modula glej prilogo 1.
Modul sestavljajo (slika 2. 2):
- Microchipov PIC mikrokrmilnik PIC18F452
- galvansko (z optosklopniki) ločeni vhodi in izhodi
- napajalni del
- RS232 komunikacijska vrata
- priključki za programiranje in neposreden dostop do mikrokrmilnika
Na sliki 2.3 je fotografija modula. V naslednjih podpoglavjih pa smo podrobneje
opisali načrtovanje in izdelavo segmentov krmilnika.
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 4
2.1 Blokovni shemi K-CPU in slike
Najprej smo podali blokovno shemo segmentov K-CPU in pozicijsko blokovno shemo
ter sliko modula.
XTAL 10MHz
16 x DI 14 x DO
DC
+ 5VICSP
PORT A,B,C,D,E
Reset
a11
a22
3a3
4a4
b1
b2
b3
b4
5
6
7
8
PIC 18F452
1614
MAX232
Slika 2.1: blokovna shema K-CPU V3.0
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 5
Dig.izhodi DI 1 - 14
24VDC napajanje
Varovalki 0.63 A
Dig. vhodi skupni -
Reset tipka Dig. vhodi DI 1 - 16
Dig.izhodi skupni +
RS 232 DB9 -Ž
Mikrokrmilnik
Slika 2.2: pozicijska shema K-CPU V3.0
Slika 2.3: mikrokrmilniški modul K-CPU V3.0
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 6
2.2 Microchip PIC mikrokrmilnik
Za K-CPU smo uporabili PIC18F452 v podnožju I/P 40 (glej sliko 2.4). Za
generiranje takta smo uporabili kristal 10 MHz. Nastavili smo PLL in tako dobili takt 40
MHz. Osnovne karakteristike mikrokrmilnika smo podali v tabeli 2.1. S programatorjem
smo ga povezali preko ICSP 10-polnega konektorja, pri katerem uporabimo samo pet
priključkov in sicer za napajanje, MCLR, RB7 in RB6. Dodana je bila še RESET tipka in
LED dioda za signalizacijo nalaganja programa in delovanja. Za neposreden dostop do
vseh vhodno/izhodnih priključkov, smo uporabili 10-polne konektorje za vsaka vrata.
Slika 2.4: razpored pinov PIC18F452
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 7
Tabela 2.1: osnovne karakteristike mikrokrmilnika PIC18F452
Maksimalna delovna frekvenca 40 MHz
Programski pomnilnik 32 kB
16384 instrukcij
Delovni pomnilnik 1536 Byte
EEPROM pomnilnik 256 Byte
Število možnih prekinitev 18
Vhodno izhodna vrata A, B, C, D, E
Časovniki 4
PWM, komparatorji 2
Serijska komunikacija MSSP, USART
Paralelna komunikacija PSP
10-bitni A/D pretvornik 8 kanalov
RESET funkcije, dodatne funkcije POR, BOR, PWRT, OST, LVP, ICSP
Število instrukcij 75
2.3 Opto ločeni vhodi in izhodi
K-CPU kartica ima 16 dig. vhodov in 14 dig. izhodov, ki so galvansko ločeni z
opto sklopniki. Nivo napetosti vhodov je 18V – 32V ter izhodov 12 – 32V. Temu primerno
smo glede na tok opto-sklopnika določili predupore in glede na čas zapiranja bremenske
upore. Prav tako ti upori preprečujejo nedoločeno stanje pinov mikrokrmilnika, kadar so
optosklopniki zaprti (glej enačbe 2.1). Vhodi imajo svojo skupno negativno priključno
sponko (slika 2.5). Izhodi pa svojo skupno pozitivno priključno sponko, ki je varovana s
cevno varovalko (enačbe 2.2 in slika 2.6). Vsi vhodi in izhodi imajo tudi signalizacijo z
LED diodo na TTL strani optosklopnikov.
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 8
Ω= →Ω===
≈⇒=−=−=
Ω= →Ω=−
=−
=
≈⇒<⇒≈
Ω= →Ω=−
=−
=
kRmA
V
I
UR
mAImAmAmAIII
kRmA
VV
I
UUR
mAIIICTR
kRmA
VV
I
UUR
pulldownlestvicaupor
pulldown
Vccpulldown
pulldownledoptoledpulldown
ledlestvicaupor
led
ledVccled
ledoptoledledopto
vhlestvicaupor
optoled
optoledDIvh
2.225002
5
23710
4707.4857
6.15
71
2.2229010
1.124
.
max_
.
.
(2.1)
Slika 2.5: shema digitalnega vhoda
Ω= →Ω===
≈⇒=−=−=
Ω= →Ω=−−
=−−
=
≈⇒<⇒=
kRmA
V
I
UR
mAImAmAmAIII
RmA
VV
I
UUUR
mAIIImAI
pulldownlestvicaupor
pulldown
Vccpulldown
pulldownledoptoledpulldown
ledlestvicaupor
optoled
ledoptoledDIled
optoledoptoledoptoledoptoled
2.225002
5
23710
1809.17613
6.11.15
1315
.
max_
.
max_max_
(2.2)
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 10
2.4 Napajalni del
Napajalni del K-CPU je dokaj enostaven (slika 2.7). Sestavljajo ga varovalka,
zaščitna dioda za zaščito v primeru napačne polaritete priključene napetosti ter povratna
dioda. Varistor ščiti pred prenapetostjo. Napetostni regulator 7805 regulira napetost,
vsebuje pa tudi tokovno in termično zaščito. Zener dioda ščiti pred prenapetostjo na izhodu
regulatorja, blok kondenzatorji preprečujejo oscilacijo regulatorja pri prehodnih pojavih ter
elektrolitski kondenzatorji gladijo napetosti. Na izhodu pa je še led dioda s preduporom za
indikacijo prisotnosti napetosti.
Slika 2.7: shema napajalnega dela
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 11
2.5 RS232 komunikacija
Komunikacijski del kartice (slika 2.9) sestavlja integrirano vezje MAX232 (glej
sliko 2.8), ki s pomočjo zunanjih kondenzatorjev pretvori napetnostne nivoje iz TTL v
RS232, in sicer signala za pošiljanje in sprejem (RX in TX). Dve led diodi pa signalizirata
stanje TTL signalov RX in TX. Z mostičkom je možen priklop napajalne napetosti na pin
9 DB9 priključka. Vezava na DB9 ženskem priključku je za prenos podatkov brez strojne
kontrole prenosa. Signali CTS in RTS so spojeni na tiskanini, prav tako so spojeni DTR,
DTE in CD.
Slika 2.8: integrirano vezje MAX232
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 12
Slika 2.9: shema komunikacijskega dela
2.6 Programiranje in neposreden dostop
Na modulu K-CPU je 10-polni priključek za programiranje ICSP, preko katerega
lahko s pomočjo programatorja kadarkoli naložimo program. Preko ICSP dostopamo do
pinov RB7 (podatkovna linija), RB6 (linija za urin takt), MCLR (linija za programirno
napetost) ter napajanje. Na začetku programiranja se mikrokrmilnik postavi v RESET
stanje. Ko je nalaganje programa končano, se prične izvajati nov program, ki smo ga
naložili.
Prav tako ima pet 10-polnih konektorjev za direkten dostop do vrat mikrokrmilnika.
Vsak konektor ima 8 priključkov določenih vrat (razen PORT A in E, ki imata manj kot 8
vhodno/izhodnih priključkov) ter minus in plus 5V napajalne napetosti. Tako lahko
direktno dostopamo do vrat (PORT) A,B,C,D in E (glej sliko 2.10).
Slika 2.10: konektorji vseh portov in ICSP
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 13
3. RAZVOJ IN IZDELAVA PANELA K-PANEL
Uporabniški vmesnik oz. panel smo poimenovali K-PANEL V3.0. Omogoča nam
prikazovanje podatkov na štirivrstičnem LCD prikazovalniku. Z osmimi tipkami pa nam
omogoča vnašanje podatkov, izbir itd. . Za shemo celotnega K-PANEL-a glej prilogo 2.
Sestavljajo ga :
- mikrokrmilnik PIC16F876A z ICSP programskim priključkom
- RS232 komunikacijska vrata
- LCD prikazovalnik 4x20 znakov s nastavitvijo kontrasta in krmiljeno osvetlitvijo
- 8 tipk
Na sliki 3.1 smo podali blokovno shemo K-PANEL-a. Na slikah 12 in 13 pa sta
fotografiji. V naslednjih poglavjih pa smo podrobneje opisali sklope.
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 14
3.1 Blokovna shema K-PANEL-a in slike
K-PANEL ima manj funkcij in manj zahtevnejše operacije kot K-CPU (glej sliko
3.1). Zato smo uporabili manjši in počasnejši mikrokrmilnik iz Microchipove družine
16Fxx. Za razliko od modula K-CPU, imamo pri panelu elemente na obeh straneh zaradi
same montaže. Na prednji strani (slika 3.2) so tipke in LCD, na zadnji strani pa vsi ostali
elementi (slika 3.3).
Slika 3.1: blokovna shema K-PANEL-a
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 15
Slika 3.2: prednja stran K-PANEL-a
Slika 3.3: zadnja stran K-PANEL-a
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 16
3.2 Mikrokrmilnik PIC16F876A
Je eden izmed predstavnikov srednjega velikostnega razreda 16Fxx družine
Microchipovih osem bitnih mikrokrmilnikov. Je v 28-polnem I/P (glej sliko 3.4) podnožju
s kristalom za urin takt 20Mhz. Program nalagamo preko ICSP konektorja. Osnovne
karakteristike PIC16F876A smo opisali v tabeli 3.1.
Slika 3.4: razpored pinov mikrokrmilnika PIC16F876A
Tabela 3.1: osnovne karakteristike mikrokrmilnika PIC16F876A
Maksimalna delovna frekvenca 20 MHz
Programski pomnilnik 8 kB
Delovni pomnilnik 368 Byte
EEPROM pomnilnik 256 Byte
Število možnih prekinitev 14
Vhodni izhodna vrata (PORT) A, B, C
Časovniki 3
PWM, komparatorji 2
Serijska komunikacija MSSP, USART
Paralelna komunikacija PSP
10 bitni A/D pretvornik 5 kanalov
Reset funkcije, dodatne funkcije POR, BOR, PWRT, OST, LVP, ICSP
Število instrukcij 35
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 17
3.3 LCD prikazovalnik
Uporabili smo DEM 40286 LCD prikazovalnik s štirimi vrsticami po dvajset
znakov. Mikrokrmilnik je z LCD-jem povezan s štirimi podatkovnimi linijami D0 – D3 ter
dvema kontrolnima linijama (ena javlja veljavnost podatkov (E)nable, druga pa če je
podatek ali instrukcija - RS ). Ker vedno pišemo na LCD, smo signal za izbiro pisanja ali
branja RW postavili na '0' in tako določili pisanje (glej sliko 3.5).
LCD ima tudi osvetlitev, ki jo vklopimo s mikrokrmilnikom preko NPN
tranzistorja. Dodali smo še potenciometer za nastavitev kontrasta.
NASTAVITEV
KONTRASTA
VKLOP
OSVETLITVE
MIKROKRMILNIK
PIC16F876A
LCD
D0-D3 R/S E W +5VDC0VDC
Slika 3.5: povezava med mikrokrmilnikom in LCD
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 18
3.4 Ostali sklopi panela
Uporabili smo tudi osem tipk, ki so s "pulldown" upori povezane na mikrokrmilnik.
ICSP in komunikacijska vrata sta opisana v prejšnjem poglavju. Na panelu imamo tudi
RESET tipko.
Panel se napaja iz K-CPU, saj napetostni nivo ustreza. Dodali smo samo zaščito
pred prenapetostjo in reverzno polariteto ter glajenje za manjša nihanja v napajalni
napetosti.
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 19
4. PROJEKT OVIJANJA ROBA
Izdelani programirljivi logični krmilnik smo uporabili pri avtomatizaciji stroja za
ovijanja roba. Ta projekt je bil primeren za naš krmilnik, ker potrebujemo digitalne vhode
in izhode, zajemanje pozicije z inkrementalnim dajalnikom, analogni izhod ter panel. Če bi
uporabili komercialni PLC sistem bi potrebovali :
- CPU enoto
- digitalno vhodno/izhodno enoto
- analogno izhodno enoto
- modul s hitrim števcem
- panel
Ker potrebujemo manjše število digitalnih vhodov in izhodov, zajemanje samo ene
pozicije in generiranje samo enega analognega izhoda, lahko uporabimo izdelani krmilnik.
PLC sistem bi bil v tem primeru dosti dražji. Vhodi in izhodi pa bi bili delno uporabljeni.
V nadaljevanju smo opisali stroj in podali fotografije. Električne sheme krmilja so v
prilogi 5.
4.1 Opis stroja za ovijanje roba
Stroj ovija robove na cisternah različnih premerov in višin. Ovoj cisterne vstavimo v
stroj. Spodnje orodje ima reže s premeri cistern, zgornje orodje pa krivine istih premerov.
Zgornje orodje nato pomikamo navzdol in stiskamo ovoj in zgornji rob se prične ovijati
(slika 4.1 in fotografija na sliki 4.4). Spodnje orodje je fiksirano na podnožje stroja.
Zgornje orodje je pomično in preko matic povezano na štiri vretena. Vse štiri matice
poganjamo oziroma vrtimo z motorjem preko verige in s tem pomikamo zgornje orodje, na
katerega je pritrjen pogon. Motor preko reduktorja poganja verigo. Reduktor ima veliko
prestavno razmerje in ni potrebno uporabljati zavore na motorju.
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 20
Potek pozicioniranja je prikazan na sliki 4.2. Zgornje orodje se pomika z maksimalno
hitrostjo do začetka krivljenja oziroma do roba cisterne. Do roba cisterne se mora hitrost
zmanjšati in nadaljevati z manjšo hitrostjo, s katero se izvaja krivljenje. Ta hitrost se
določa glede na premer cisterne in debelino pločevine, iz katere je cisterna narejena.
začetna
pozicija
začetek
krivljenja
konec
krivljenja
Slika 4.1: shema stroja za krivljenje cistern
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 21
v vračanje v začetno pozicijo
vmax
pomik do začetka krivljenja
vkriv
krivljenje
pozicija
začetna poz. začetka poz. konca
pozicija krivljenja krivljenja
Slika 4.2: potek krivljenja roba
4.2 Blokovna shema in slike stroja za krivljenje roba
Na sliki 4.3 je prikazana blokovna shema krmilja. Fotografiji krmilja in krmilne omare
sta na slikah 4.5 in 4.6 . Krmilje sestavljajo naslednji sklopi :
- stikalo zasilni izklop in tipka RESET za resetiranje zasilnega izklopa (povezani sta
na Preventin modul za zasilni izklop)
- modul za zasilni izklop preverja morebitno aktiviranje zasilnega izklopa in njegov
RESET oziroma potrditev (v primeru zasilnega izklopa – izklopi napajanje krmilja)
- za napajanje smo uporabili Siemensov napajalnik logo power
- za izbiro načina delovanje smo uporabili preklopno stikalo ter tipki za ročni pomik
- induktivna stikala smo uporabili za zaznavanje končnih položajev in referenčno
položaj
- dve tipki smo uporabili za dvoročni vklop, ki sta na svoji konzoli
- panel je preko RS232 komunikacije povezan na K-CPU in je montiran kar na
glavni krmilni omari
- uporabili smo Siemensov frekvenčni pretvornik MicroMaster 440, ki ga krmilimo
z digitalnimi signali in PWM izhodom
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 22
- za pogon smo uporabili trifazni asinhronski motor moči 550W
- pozicijo merimo s inkrementalnim dajalnikom, ki je sklopljen z osjo rotorja
trifaznega motorja
Slika 4.3: blokovna shema krmilja
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 23
Slika 4.4: fotografija stroja
Slika 4.5: fotografija krmilne omare
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 25
5. OPIS DELOVANJA K-PANEL-A
5.1 Kratek opis K-PANEL-a
Program za K-PANEL je splošen in ni namenski, saj izpisuje samo tisto, kar
sprejme po RS232 komunikaciji in pošilja po njej, katera od tipk je pritisnjena.
Vklopi pa tudi osvetlitev za določen čas ob pritisku tipke ali pri spremembi izpisa na
panelu.
Ta program, ki smo ga razvili za panel, bomo lahko uporabljali tudi pri drugih
projektih.
5.2 Protokol komunikacije za K-PANEL
Panel komunicira s K-CPU po RS232 komunikaciji s hitrostjo 38400 baud. Panel
sprejema dve vrsti podatkov, instrukcije in ASCII znake za izpis. Za primer izpisa glej
tabelo 5.1 . Znaki za izpis se prehodno shranijo v polje 4x20 znakov in se ob določeni
instrukciji prenesejo – izpišejo na LCD zaslon.
Za instrukcije smo izbrali vrednosti manjše od 17 oz. 0x11 (HEX) in sicer :
- od 0x00 do 0x03 : izbira vrstice izpisa in postavitev kazalca polja na začetek le-te
- 0x0B : brisanje polja za izpis na LCD
- 0x0C : brisanje LCD prikazovalnika
- 0x0D : prenos – izpis podatkovnega polja na LCD
- 0x0F : K-CPU preverja prisotnost panela oz. testira komunikacijo (odgovor je
0x0A)
- 0x11 : zahteva za RESET panela
Ob detekciji pozitivne stranice na vhodu (pritisnjena tipka) se po komunikaciji pošlje
znak, določen za pritisnjeno tipko (glej tabelo 5.2).
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 26
Tabela 5.1: primer začetka izpisovanja na LCD :
Instrukcija Tekst – ASCII znaki Opis
"0x0F" Test komunikacije
"0x0B" Brisanje podatkovnega polja
"0x0C" Brisanje LCD prikazovalnika
"0x00" Tekst – 20 ASCII znakov Znaki za izpis v prvo vrstico podatk. polja
"0x01" Tekst – 20 ASCII znakov Znaki za izpis v drugo vrstico podatk. polja
"0x02" Tekst – 20 ASCII znakov Znaki za izpis v tretjo vrstico podatk. polja
"0x03" Tekst – 20 ASCII znakov Znaki za izpis v četrto vrstico podatk. polja
"0x0D" Prenos – izpis podat. polja na LCD
Tabela 5.2: ASCII znaki, ki jih pošljemo ob pritisku na tipko
Pritisnjena tipka Poslan ASCII znak
"F1" '1'
"F2" '2'
"F3" '3'
"F4" '4'
"OK" 'o'
"ESC 'e'
"+" 'p'
"-" 'm'
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 27
5.3 Opis povezave mikrokrmilnika in LCD prikazovalnika
Z LCD prikazovalnikom komuniciramo preko šestih I/O linij. Uporabili smo signal
RS (izbira tipa podatka – instrukcija/podatek), enable (njegova negativna stranica nam
določa veljavnost podatkov) ter D0 – D3 (štiri podatkovne linije za prenos podatkov).
Linijo za določanje pisanja ali branja LCD prikazovalnika smo električno povezali na "0"
in s tem za stalno določili pisanje (glej sliko 5.1).
Pripravili smo naslednje funkcije, ki jih uporabljamo za izpisovanje:
- inicializacija LCD prikazovalnika (RESET, nastavitev prenosa, izklop kurzorja,
smer pomikanje kazalca)
- pošiljanje 8-bitnega podatka z dvakratnim 4-bitnim prenosom pri katerem
določimo, če je podatek ali instrukcija
- brisanje LCD – ja
- izbira vrstice za izpis
- pošiljanje znaka (ob vsakem izpisanem znaku se izvede pomik kazalca v desno)
4-bitno podatkovno vodilo
PIC16F876 LCD D0 – D3
LCD RS (instr./podatek)
LCD ENAB. (veljavnost podat.) LCD
"0" LCD R/W (pisanje/branje) 4x20 znakov
LCD TRIM (nastav. kontrasta)
K-PANEL
Osn. plošča Napajanje LCD
Osvetlitev
Slika 5.1: shema povezave med LCD in mikrokrmilnikom
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 28
5.4 Tipke K-PANEL-a
Odločili smo se za osem tipk, ki nam omogočajo izbire menijev, vnose vrednosti,
izbire načina delovanja… Določili smo štiri funkcijske tipke (F1 – F4) in jih postavili pod
LCD prikazovalnik. Izbrali smo še tipki "+" in "-" za vnos vrednosti ter tipki "OK" in
"ESC" za potrditev ali preklic vnosa.
Tipke so z "pull-down" upori priklopljene na vhodne linije mikrokrmilnika (glej
prilogo 2 - shema K-PANEL-a). Kadar je tipka pritisnjena, je na vhodu stanje "1", kadar je
tipka spuščena je preko bremenskega upora stanje "0".
Vhode tipk tipamo intervalno in zaznavamo pozitivno stranico v prekinitvi "timer2"
in sicer vsakih 10 ms. Prehoden pojav pri pritisku tipke traja nekaj milisekund. Če tipamo
vhode tipke v intervalu, ki je večji od 5 ms, preprečimo večkratno zaznavanje stranice pri
prehodnem pojavu pritiskanja ali spuščanja tipke.
Zaznana stranica pritisnjene tipke nato aktivira pošiljanje pripadajočega ASCII
znaka po RS232 komunikaciji (glej tabelo 5.2). S števci zaznavamo, če je tipka pritisnjena
dalj časa. Takrat pošiljamo še več ASCII znakov, dokler ni spuščena.
5.5 Osvetlitev ozadja
Osvetlitev ozadja krmili mikrokrmilnik preko NPN tranzistorja (glej prilogo 2
shema K-PANEL-a). Osvetlitev porablja dokaj veliko toka (200mA – 500mA), zato smo
dodali tudi možnost zunanjega napajanja za osvetlitev.
Osvetlitev se nam vklopi za določen čas ob vsakem pritisku tipke ali vsaki
spremembi izpisa na LCD prikazovalniku. Čas osvetlitve smo določili programsko glede
na "TIMER2".
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 29
6. PROGRAM K-PANEL
6.1 Kratek opis programa
Program za K-PANEL ni zelo obsežen, zato so prekinitve, funkcije in glavni program
v isti datoteki "K-PANEL-16f876a.c". Samo funkcije za LCD smo napisali v ločeno
datoteko "lcd_v2.c". Programu še pripadata datoteki z definicijami "K-PANEL-16f876a.h"
ter CCS-ova priložena knjižnica za mikrokrmilnik "16F876A.h".
Nastavitve se nahajajo na začetku glavnega programa. Nastavitve pripravi čarovnik
za ustvarjanje novih projektov. Prav tako je še nekaj definicij, ki so v pripadajoči datoteki z
definicijami. Te so :
- analogni vhodi : brez
- analogni izhodi : brez
- nastavitve časovnikov : "timer2" (nastavljen na 10ms)
- nastavitve mikrokrmilnika "fuses" – način delovanja : oscilator, zaščita pomnilnika,
časovni stražnik …
- definicija urinega cikla za izračun zakasnitev pri funkciji "delay"
- nastavitve RS232 komunikacije
- ostale definicije : konstante, imena pinov …
6.2 Opis prekinitev programa za K-PANEL
Uporabili smo dve prekinitvi (glej sliko 6.1). Eno uporabljamo za sprejem podatkov
preko serijske komunikacije in s tem povezane operacije. Drugo pa za operacije, ki so
vezane na tipanje vhodov in izvajanje glede na določene čase.
Prekinitev "RDA_isr" se proži ob sprejemu podatka preko serijske komunikacije v
sprejemni medpomnilnik. V prekinitvi se, glede na prejeti kontrolni znak, neposredno
izvajajo naslednje operacije: RESET procesorja, brisanje LCD prikazovalnika, postavljanje
kazalca glede na zahtevano vrstico, shranjevanje ASCII znakov v polje za izpis, aktiviranje
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 30
osvetlitve ozadja. Zahtevnejše operacije se izvajajo posredno preko postavljenih bitov –
zastavic v glavnem programu. Te operacije so: brisanje podatkovnega polja za LCD in
prenos podatkov za izpis na LCD.
V prekinitvi "TIMER2", ki se sproži vsakih 10 ms, se izvaja detekcija pritisnjenih tipk
oziroma stranic na vhodih. Prav tako se izvaja zaznavanje držanja tipke, pri katerem
samodejno pošiljamo znake po serijski komunikaciji v določeni periodi. Poleg tipk je še
"timer" za vklop in izklop osvetlitve prikazovalnika.
Slika 6.1: diagram prekinitev za program K-PANEL
6.3 Funkcije programa K-PANEL
V osnovni datoteki smo kodirali nekaj osnovnih funkcij, ki so nam omogočale lažje in
preglednejše programiranje. Diagram stanja smo podali na sliki 22. Algoritmi programov
so v prilogi 3. Napisali smo naslednje funkcije :
- prizgi_back_led(): vklop osvetlitve in reset časovnika za osvetlitev
- reset_tipk(): brisanje vseh bitov za pritisnjene tipke
- lcd_logo(): izpis osnovnega izpisa na LCD
- polje0(): brisanje podatkovnega polja LCD oz. napolnitev s presledki
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 31
Pripravili smo si tudi datoteko s funkcijami za operiranje z LCD prikazovalnikom. To
so naslednje funkcije :
- LCD_poslji_nib(int1 rs,int8 nib): funkcija pošlje "nibble" na LCD prikazovalnik, s
bitom "rs" pa določamo če je "nibble" del kontrolnega ali podatkovnega znaka
- LCD_poslji(int1 rs, int8 Byte): funkcija pošlje kontrolni ali podatkovni znak na
LCD z uporabo prejšnje funkcije
- LCD_init(): funkcija izvede reset in začetno inicializacijo LCD (nastavitev 4-
bitnega prenosa, izbira font-a za izpisovanje, tip kurzorja … )
- LCD_vr(int8 vrstica): funkcija pošlje ustrezen byte za postavitev na začetek vrstice
LCD-ja za izpisovanje
- LCD_clr(): funkcija pobriše LCD prikazovalnik
- LCD_izpis(int8 znak): funkcija z uporabo LCD_poslji (), pošlje znak za izpis na
LCD
V glavnem programu main() se izvedejo naslednje operacije:
- nastavitev časovnikov in prekinitev
- vklop led diode "OP_LED", ki nam signalizira delovanje K-PANEL-a
- inicializacija LCD prikazovalnika
- brisanje LCD in polja znakov
- neskončna "while" zanka, v kateri se izvaja:
o glede na zaznane pritiske tipke v prekinitvi, pošiljamo ustrezne ASCII
znake preko RS232 serijskih komunikacijskih vrat
o pošiljanje dodatnih ASCII znakov glede na "timer-je", če je tipka pritisnjena
določen čas – držanje tipke
o glede na zaznano zahtevo, izvedemo brisanje polja za izpis na LCD
o glede na zahtevo za prenos (izpis), prenesemo podatke iz polja na LCD
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 32
7. PROGRAM K-CPU
7.1 Kratek opis programa za krmilnik (K-CPU)
Glavna naloga krmilja (program K-CPU) je pomikanje oz. pozicioniranje
zgornjega orodja, v katerem se ukrivlja zgornji rob cisterne. Krmilje omogoča izvajanje
avtomatskega delovanja z dvoročnim vklopom. Prav tako omogoča ročno upravljanje,
referenciranje, vnos nastavitev in programov krivljenja. Program izvaja naslednje naloge :
- ročno in avtomatsko delovanje s posredovanjem preko tipk, ki so priklopljene na
digitalne vhode ter s tipkami K-PANEL-a
- proženje avtomatskega delovanja z dvoročnim vklopom
- zajemanje pozicije z inkrementalnim dajalnikom preko digitalnih vhodov
- krmiljenje motorja s Siemensovim frekvenčnim regulatorjem, ki je s K-CPU
povezan preko digitalnih vhodov in izhodov ter krmiljen z PWM izhodom
- vnos nastavitev, parametrov in programov krivljenja ter spremljanje pozicije in
alarmov preko K-PANEL-a
Pri opisu programa smo si pomagali z diagrami prehajanja stanj in opisom algoritmov z
diagrami poteka. Podali smo le najosnovnejše diagrame stanj. Zaradi obsežnosti programa
smo podali le algoritme najpomembnejših funkcij.
7.2 Določitev vhodov in izhodov
Pri določanju vhodov in izhodov smo bili omejeni le pri vhodih za enkoder in
analognem izhodu. Impulza A in B inkrementalnika smo morali povezati na digitalna
vhoda, ki sta povezana na PORTB mikrokrmilnika, zaradi uporabe prekinitve ob
spremembi stanja na vhodu. To nam omogoča maksimalno hitrost zaznavanja impulzov na
vhodih. Tako smo uporabili vhoda DI10 in DI11. Analogni izhod pa je na voljo pri
digitalnem izhodu DO13 in DO14. Za razpored vhodov in izhodov glej tabeli 7.1 in 7.2 .
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 33
Tabela 7.1: vhodi K-CPU
Vhod Programska definicija vhoda Opis vhoda
DI1 DI_ROCNO Izbirno stikalo - ročni način delovanja
DI2 DI_AVTO Izbirno stikalo - avtomatski način
delovanja
DI3 DI_DOL Tipka ročni pomik dol
DI4 DI_GOR Tipka ročni pomik gor
DI5 DI_MM_OK Frekvenčni regulator pripravljen
DI6 DI_REF Referenčni senzor
DI7 DI_KS_SP Končni senzor spodaj
DI8 DI_KS_ZG Končni senzor zgoraj
DI9 DI_RESET Tipka reset – dodatna opcija
DI10 DI_ENK_A Inkrementalni dajalnik impulz A
DI11 DI_ENK_B Inkrementalni dajalnik impulz B
DI12 DI_ENK_Z Inkrementalni dajalnik impulz Z
DI13 DI_DVV1 Dvoročni vklop prva tipka
DI14 DI_DVV2 Dvoročni vklop druga tipka
DI15 DI_VRATA Senzor tipka
Tabela 7.2: izhodi K_CPU
Izhod Programska definicija izhoda Opis vhoda
DO1 DO_MM_EN Vklop frekvenčnega regulatorja
DO2 DO_MM_REV Izbira smeri vrtenja - regulator
DO3 DO_MM_RES Reset frekvenčnega regulatorja
DO4 DO_ERR Signalna lučka napaka - okvara
K-PANEL smo povezali preko RS232 komunikacijskih vrat. Komunikacijska vrata
so s RS232/TTL pretvornikom povezana na pina C6 in C7. Prav tako preko istega
konektorja napajamo K-PANEL s 5V.
PWM izhodni signal pa povežemo preko sponk DO14 (brez optosklopnika).
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 34
7.3 Prekinitve programa K-CPU
Uporabljamo tri prekinitve in so zajete v datoteki prekinitev. Opravila v prekinitvah
so kratka in nujno potrebna oz. neposredno povezana z vhodi in izhodi. Prikazali smo jih
na sliki 7.1. Algoritmi prekinitev so v prilogi 4. Posamezne prekinitve smo opisali v
naslednjih poglavjih.
Slika 7.1: diagram prekinitev programa K-CPU
7.3.1 Prekinitev Timer 1 Prekinitev uporablja "timer1", ki ga nastavimo z deljenjem osnovnega takta na 13
ms, kar nam zadošča za naslednja opravila :
- splošno namenski "timer" – timer1
- zajemanje vhodov (dvoročni vklop, tipke, končna stikala, frekvenčni regulator, …)
- pošiljanje podatkov iz programskega medpomnilnika panela (glej poglavje 6)
- postavljanje izhodov (signalizacija ter vklop, smer in reset regulatorja)
- generiranje splošne napake
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 35
7.3.2 Prekinitev INT_RB
Prekinitev "INT_RB" se sproži ob spremembi stanja na kateremkoli pinu PORTB.
Zato imamo v tej prekinitvi opravilo, ki mora biti najbolj odzivno in ne sme izgubiti niti
enega impulza na vhodu. To je zajemanje impulzov enkoderja. Inkremente in dekremente
zajemamo s štirikratno ločljivostjo (vsaka stranica impulzov je inkrement ali dekrement).
Glej sliko 7.2.
A B Inkrementi:
1) A pozitivna stranica in B = 0
2) B pozitivna stranica in A = 1
3) A negativna stranica in B = 1
4) B negativna stranica in A = 0
B A Dekrementi:
1) B pozitivna stranica in A = 0
2) A pozitivna stranica in B = 1
3) B negativna stranica in A = 1
4) A negativna stranica in B = 0
Slika 7.2: diagram impulzov za detekcijo inkrementa ali dekrementa
V prekinitvi zajemamo cel PORTB v byte. Preko testiranja bitov izluščimo bita, ki
sta impulza A in B enkoderja. Ta dva bita postavljamo v byte, kjer zaznavamo inkremente
in dekremente. Za nas so bistveni zadnji štirje biti. Operiranje z biti in detekcija sta
prikazana v naslednjem poteku, kjer sta A in B trenutni stanji impulzov, Ap in Bp pa sta
prejšnji stanji iz predhodne prekinitve. Dodane so celoštevilčne vrednosti bitnih vrednosti,
ki so določene glede na prej opisane inkremente in dekremente (glej tabelo 7.3).
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 36
Tabela 7.3: zaznavanje inkrementa in dekrementa
imp.A ↓ ↓imp.B
Postavljanje bitov:
Detekcija inkrementa:
1) 0 0 0 0 1 0 0 0 = 8
2) 0 0 0 0 1 1 1 0 = 14
3) 0 0 0 0 0 1 1 1 = 7
4) 0 0 0 0 0 0 0 1 = 1
Detekcija dekrementa:
1) 0 0 0 0 0 0 1 0 = 2
2) 0 0 0 0 1 0 1 1 = 11
3) 0 0 0 0 1 1 0 1 = 13
4) 0 0 0 0 0 1 0 0 = 4
Pomik bitov desno : 0 →
Nato ta cikel izvršujemo ob vsaki prekinitvi oz. spremembi stanja impulza A ali B.
Po vsaki postavitvi bitov izvedemo detekcijo in pomik bitov, da imamo pripravljena
prejšnja stanja za novo postavitev in detekcijo.
Ob vsaki detekciji inkrementa ali dekrementa to operacijo izvedemo z 32-bitno
spremenljivko, kjer imamo trenutno pozicijo v štirikratni ločljivosti glede na impulze
enkoderja, saj imamo na en impulz AB štiri stranice.
0 0 0 0 A Ap B Bp
0 0 0 0 0 A Ap B
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 37
7.3.3 Prekinitev INT_RDA Ta prekinitev se izvede, kadar je sprejet nov byte v RS232 sprejemni
medpomnilnik. V tej prekinitvi vzamemo samo znak iz sprejemnega medpomnilnika in ga
shranimo v spremenljivko ter si postavimo kontrolni bit, da je bil sprejet nov podatek.
Izvajamo tudi RESET števca kosov v avtomatskem načinu delovanja.
7.4 Komunikacija s modulom K-PANEL
S panela prejemamo podatke preko prekinitve, ki se proži ob sprejemu novega
podatka v sprejemni medpomnilnik.
Na panel pošiljamo podatke preko vmesnega programskega medpomnilnika (glej
tabelo 7.4).
Tabela 7.4: shema programskega medpomnilnika za pošiljanje na K-PANEL
prva vrstica druga vrstica tretja vrstica četrta vrstica
0x01 20 byte ASCII
0x02 20 byte ASCII
0x03 20 byte ASCII
0x04 20 byte ASCII
00 01 - 19 20 20 - 40 41 42 - 61 62 63 - 83
inkrementalni kazalec za
pisanje z nastavitvami
(0x01→00; 0x02→20; 0x03→41; 0x04→62)
kazalec za pošiljanje (inkrement = 3)
28*3 ; 29 → 0x0D
V datoteki "K-PANEL.c" je funkcija "kp_izpis()", ki s pomočjo kazalca za pisanje
piše v medpomnilnik. Kadar funkcija prejme byte vrednosti 0x01 – 0x04, se kazalec
postavi na mesto, kjer se določena vrstica prične. Če znak ni te vrednosti, se njegova
vrednost vpiše v medpomnilnik in kazalec se poveča za ena.
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 38
V prekinitvi timer1 se ciklično pošilja vsebina medpomnilnika na K-PANEL in
tako se osvežuje izpis na panelu. Podatke pošiljamo v paketu po 3 byte, saj ima
mikrokrmilnik v K-PANEL-u 3 byte sprejemnega medpomnilnika. Za pošiljanje
uporabljamo kazalec, ki se povečuje za vrednost 3. Prenos torej izvedemo 28-krat in
devetindvajsetič prenesemo byte 0x0D, kar pomeni izpis iz programskega medpomnilnika
panela na LCD. Celoten prenos vsebine programskega medpomnilnika (celoten izpisa na
LCD) izvedemo v devetindvajsetih prekinitvah Timer1, kar je 377 ms.
7.5 Razne funkcije
V datoteki "mob_rob_fnc.c" imamo tri splošne funkcije. Prva je
"izracun_dej_poz()". Funkcija izvede izračun trenutne pozicije v mm iz impulzov
enkoderja. Obe vrednosti sta globalni spremenljivki. Dejanska pozicija je realnega (float)
tipa, števec enkoderja pa 32 bitna celoštevilčna spremenljivka. Razmerje med veličinama
zapišemo v konstanto.
K_ENK enk_poz) ((float) = dej_poz_mm ⋅
Naslednja funkcija je "set_hitrost (signed int16 hitrosti_in)". Funkcija glede na
določeno hitrost postavi PWM izhod in digitalni izhod za določitev smeri regulatorju.
Vhodno vrednost funkcije najprej limitiramo v območju od -100% do +100%. Najprej
postavimo digitalni izhod za smer. Nato postavimo PWM izhod, ki je absolutna vrednost
od 0 do 1023 glede na želeno hitrost . Pri čemer je 100% - 1023 na PWM izhodu.
Zadnja funkcija je "status_bar()". Ta nam v serijski programski medpomnilnik
pripravi izpis za tretjo in četrto vrstico. V tretjo vrstico izpišemo stanje končnih stikal in
frekvenčnega regulatorja. V četrto vrstico pa dejansko pozicijo v milimetrih na desetinko
točno in hitrost gibanja v procentih.
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 39
7.6 Ročno delovanje in iskanje reference
V datoteki "moh_rob_rocno.c" so funkcije za ročno pomikanje in referenciranje.
Delovanje ročnega načina bomo najprej predstavili z diagramom stanj (glej slika 7.3). Nato
bomo še na kratko opisali funkcije.
Slika 7.3: diagram stanj - ročno delovanje
Prva funkcija je "referenciranje()", ki najprej iz petih lokacij EEPROM-a prebere
vrednost referenčne točke. Nato izpiše, da se izvaja referenciranje, ki ga lahko prekinemo s
tipko "ESC". Referenciranje se izvaja dokler ni končano, oziroma se ne prekine zaradi
izpada regulatorja, aktiviranje končnega stikala, odprtih vrat ali pritiska na tipko "ESC".
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 40
Iskanje reference (referenciranje) se izvaja v petih fazah oziroma statusih (za potek
hitrosti in digitalnih vhodov glej sliko 7.4) :
1. iskanje referenčnega stikala z veliko hitrostjo, ki je zapisana kot konstanta
2. ustavitev gibanja
3. pričetek iskanje ničtega impulza z majhno hitrostjo v drugo smer (ko je najden
ničti impulz, se trenutna pozicija postavi na referenčno vrednost)
4. ustavitev, referenciranje je uspelo
5. izhod iz referenciranja
Vmax
Vref
pozicija
DI
"ničti impulz" referenčni
referenčna točka senzor
Slika 7.4: časovni diagram referenciranja
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 41
Pospeševanje in zaviranje ne izvajamo z mikrokrmilnikom ampak s pospeškom in
pojemkom, ki sta nastavljena na regulatorju. Pospeševanje in zaviranje generiramo samo
pri pozicioniranju v avtomatskem delovanju. Torej pri referenciranju na PWM izhod
generiramo stopničasti prehod hitrosti.
Algoritem funkcije za referenciranje je v prilogi 4.
Funkcija "rocno_bar1()" izpiše v prvo vrstico nastavljeno hitrost za ročni pomik. V
drugo vrstico pa se izpiše stanje vrat. Če so zaprta se izpiše možnost proženja
referenciranja.
Funkcija "rocno_meni()" nam omogoča ročni pomik, če niso aktivirana končna
stikala, in če je frekvenčni regulator pripravljen. Če so vrata zaprta nam omogoča tudi
referenciranje. Hitrost ročnega pomika lahko nastavljamo s tipkama "+" in "-".
7.7 Pripravljenost – nastavitve, programi, števci in izklop
7.7.1 Delovanje pripravljenosti in shranjevanje podatkov v EEPROM
Datoteka "mob_rob_idle.c" vsebuje vse potrebno za zapisovanje oz. vnos
nastavitev, programskih pozicij in parametrov v EEPROM.
V EEPROM shranjujemo 8-bitne in 16-bitne vrednosti v binarni obliki. Float
vrednosti pa zapišemo v desetiški obliki (ASCII niz), zaradi lažjega vnašanja in izračuna.
Razpored oz. določitev uporabe lokacij EEPROM pomnilnika smo podali v tabeli 7.5.
Vnos nastavitev je možen kadar ni izbrano ne ročno in niti avtomatsko delovanje. V
tem režimu je prav tako mogoč pregled in nastavitev števcev, programov ter priprava na
izklop stroja. Delovanje smo podali v diagramu stanj na sliki 7.5. Nato smo opisali
delovanje funkcij, ki jih uporabljamo stanju pripravljenosti.
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 42
Tabela 7.5: razpored EEPROM pomnilniških lokacij
Namembnost Lokacija
EEPROM-a
0
Program krivljenja št. 1
9 10
Program krivljenja št. 2
19
160
Program krivljenja št. 17
169
PROSTO
195 196 197
Pozicija enkoderja (32-bitna vrednost)
198
PROSTO
200 16-bitni števec 1
201 202
16-bitni števec 2 203
232 16-bitni števec 17
233
PROSTO
241 242 243 244
Referenčna točka
245 246 247
Parametri (nastavitve)
pozicioniranja
254
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 43
pripravljenost
idle_meni()
vnos programa
priprava
na izklop
tipka gor in
vsi pogojitipka spuščena
ali manjka pogoj
tipka dol in
vsi pogoji
tipka spuščena
ali manjka pogojizbira
naslednjega
programa
izbira predhodnega
programa
tipka '+'
tipka '-'
vnos nastavitev
preveri geslo
F1
nastavitvegeslo
neprav.
geslo
pravilno
izhod ali vklop
avto oz. ročno
pregled ali
reset števcev
preveri geslo
F4
števci
geslo
neprav.
geslo
pravilno
izhod ali vklop
avto oz. ročno
Slika 7.5: diagram stanj za pripravljenost – nastavitve, programi, števci in izklop
7.7.2 Števci izdelkov, nastavitve in vnos programov
Funkcija "int16 beri_stevec(int8 adresa)" prebere števec oz. 16-bitno vrednost iz
EEPROM. 16-bitno vrednost sestavimo iz dveh lokacij EEPROM-a (zgornji in spodnji
byte). Za shranjevanje 16-bitnih vrednosti smo rezervirali prostor v EEPROM-u od
lokacije 200 do 240.
Funkcija "zapisi_stevec(int8 adresa, int16 w_stevec)" zapiše števec oz. 16-bitno
vrednost v EEPROM. Števec najprej razstavimo za zgornji in spodnji byte in ju zapišemo
na določeni lokaciji. Vsak števec tako zapišemo na dve prej omenjeni lokaciji.
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 44
Funkcija "preberi_nastavitve()" prebere nastavitve za pozicioniranje (maksimalna,
minimalna in hitrosti krivljenja ter razdalja pospeševanja, zaviranja, finega pozicioniranja
ter krivljenja). Ko vrednosti preberemo iz EEPROM-a, jih preverimo. Če odstopajo iz
dovoljenega območja jih nastavimo na privzeto vrednost.
Funkcija "zapisi_nastavitve()" zapiše prej omenjene vrednosti v EEPROM in sicer od
lokacije 246 naprej. Nastavitve so 8-bitne vrednosti, torej zasedajo po eno lokacijo v
EEPROM-u.
Funkcija "zapisi_prg(int8 adresa)" zapiše v EEPROM določen program krivljenja, ki
ga predhodno vnesemo. Program sestavlja deset 8-bitnih vrednosti in zasede 10 lokacij
EEPROM-a. Za shranjevanje programov smo rezervirali lokacije od 0 do 200.
Funkcija "preberi_prg(int8 adresa)" prebere 10 lokacij EEPROM-a, ki predstavljajo
določen program. Iz prebranih vrednosti se izračunajo vrednosti za program krivljenja, ki
se potem shranijo v globalne spremenljivke. Adresa predstavlja zaporedno številko
programa krivljenja.
Funkcija "idle_bar1()" izvede začetni izpis na panel za idle meni.
Funkcija "underline(int8 under_ptr)" postavi kurzor na želeno pozicijo v četrti vrstici,
ki kaže na določeno mesto tretje vrstice, kjer vnašamo oz. spreminjamo številko.
Funkcija "vnesi_prg()" nam omogoča vnos oz. spreminjanje programa. Vnašamo
program, ki smo ga aktivirali – izbrali v osnovnem meniju pripravljenosti "idle_meni()".
Vrednost, ki jo želimo spremeniti izbiramo s tipko "F4" (izhodiščno pozicijo ali pozicijo
krivljenja). Pri poziciji krivljenja še določimo hitrost krivljenja.
Vrednost vnašamo tako, da s tipkama "F1" in "F2" premikamo kurzor in se postavimo
na številko vrednosti, ki jo želimo spremeniti. Številko spreminjamo s tipkama "+" in "-".
Vnos potem potrdimo s tipko "OK" in ga shranimo v EEPROM. S tipko "ESC" pa
prekinemo in prekličemo vnos.
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 45
S funkcijo "vnesi_rt()" vnesemo, oziroma spremenimo pozicijo referenčne točke.
Najprej jo preberemo v ASCII obliki iz EEPROM-a. Vnos oz. spreminjanje vrednosti
izvedemo enako kot pri vnašanju programa (glej funkcijo "vnesi_prg()").
S funkcijo "vnesi_nastavitve()" vnašamo nastavitve. S tipko "F4" izberemo
parameter oz. nastavitev, ki jo želimo spremeniti. Kot zadnji parameter je možno
spremeniti referenčno točko. Vsi parametri so osem-bitne vrednosti, razen referenčne točke
za vnos katere pa imamo funkcijo "vnesi_rt()". Izbrani parameter spreminjamo s tipkama
"+" in "-". S tipko "OK" shranimo spremembe v EEPROM. Tipka "ESC" pa prekine vnos
ter obnovi stare vrednosti parametrov.
Funkcija "int1 preveri_geslo()" zahteva vnos gesla preko panela. Zaporedno
številko gesla izbiramo s tipkama "F1" in "F2". Vrednost izbrane številke pa spreminjamo
s tipkama "+" in "-". Vnos potrdimo s tipko "OK". Vnesena vrednost se potem preveri s
tisto, ki je zapisana v mikrokrmilniku. Če sta vrednosti enaki, funkcija vrne vrednost "1", v
nasprotnem primeru vrne vrednost "0". S tipko "ESC" prekinemo vnos gesla. Gesla ni
možno spreminjati, saj je določeno v samem programu mikrokrmilnika.
Funkcija "pregled_stevcev()" je namenjena samo proizvajalcu stroja. Omogoča
pregled števcev, ki štejejo število izdelkov glede na vsak program. S tem je omogočeno
sledenje delovanju stroja in obrabi orodij glede na program izdelka. Števce pregledujemo s
tipkama "+" in "-". Tipka "ESC" konča pregled števcev, tipka "OK" pa pobriše vrednosti
vseh števcev.
7.7.3 Priprava na izklop Funkcija "izklop()" je nastala iz zahteve proizvajalca, da ne bi bilo potrebno pri
vsakem vklopu naprave ponovno izvajati referenciranje. Funkcija zapiše trenutno pozicijo
v EEPROM in blokira delovanje stroja, da ne bi prišlo do premika po zapisu pozicije v
EEPROM. S tem preprečimo napačno pozicijo ob ponovnem vklopu. Če pride do premika,
je potrebno izvesti referenciranje.
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 46
7.7.4 Osnovni meni pripravljenosti
Funkcija "idle_meni()" izvede preventivni izklop regulatorja, ker jo uporabljamo v
stanju pripravljenosti. Izpiše nam osnovni meni, v katerem lahko izbiramo med
naslednjimi možnostmi :
- "F1" : vnos programov krivljenja
- "F2" : priprava na izklop naprave
- "F3" : vnos nastavitev (potrebno je vnesti geslo)
- "F4" : pregled števcev (potrebno je vnesti geslo)
- "+" / "-" : aktiviramo oz. izberemo program za avtomatsko delovanje ali vnašanje
oz. spreminjanje
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 47
7.8 Avtomatsko delovanje
7.8.1 Kratek opis avtomatskega delovanja
V avtomatskem delovanju izvajamo krivljenje roba cisterne kot je opisano v
podpoglavju 4.1. Točke in hitrosti krivljena so določene v programu, ki ga izbira in
pripravi operater na stroju.
Avtomatsko delovanje je predstavljeno z diagramom stanj na sliki 7.6 . Iz tega je
razvidno, da je osnova delovanja pozicioniranje na določeno točko z določeno hitrostjo.
Zato bomo največ pozornosti namenili prav pozicioniranju. Uporabili smo trapezni profil s
približevanjem. Približevanje moramo uporabiti zaradi odstopanja v regulaciji hitrosti
asinhronskega pogona, predvsem pri zaviranju. Zaviranje pa je najbolj pomembno za
doseganje točnosti pozicioniranja. Zato odstopanja pri zaviranju odpravimo s
približevanjem končni poziciji z minimalno hitrostjo.
Slika 7.6: diagram stanj avtomatskega delovanja
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 48
7.8.2 Pozicioniranje
Delovanje pozicioniranja smo predstavili z diagramom stanj na sliki 7.7. Nato smo
podrobneje opisali funkcijo pozicioniranja, katera izvede pozicioniranje v podano točko z
določeno hitrostjo. Algoritmi so v prilogi 4.
POZICIONIRANJE
določanje faz pozic.
poz.faza=1
pospeševanje
poz.faza=2
potovanje
poz.faza=3
zaviranje
manjkajoči pogoj
ali menjava načina
manjkajoči pogoj
ali menjava načinamanjkajoči pogoj
ali menjava načina
poz.faza=4
fino pozicioniranje
manjkajoči pogoj
ali menjava načina
poz.faza=0
začetek poz.
z minimalno hitrostjo
start
vsi pogojimanjkajoči pogoj
ali menjava načina
poz.faza=5
potrditev uspešnega
pozicioniranja
pomikanje
se je začelo
dosežena poz.
začetek potovanja
dosežena poz.
začetek zaviranja
dosežena poz.
začetek finega
pozicioniranja
želena pozicija
dosežena
pozici.
na želeno
pozicijo s
želeno
hitrostjo
potrditev
uspešnega
poz. ali javlj.
napake
določitev smeri poz.,
izračun razdalj in poz. trap. profila,
pospeška in pojemka
uspešna pozic.
ali napaka
Slika 7.7: diagram stanj za izvajanje pozicioniranja
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 49
Funkcija "void pozicioniraj (float_setpoint_mm, v_max)" izvaja pozicioniranje na
določeno točko podano v mm. Poleg pozicije podamo tudi hitrost pozicioniranja.
Pozicioniranje se izvaja po trapeznem profilu s približevanjem (glej sliko 7.8). Na
diagramu nam oznake pozicije predstavljajo naslednje pozicije :
o poz. 1 : konec pospeševanja oz. začetek potovanja
o poz. 2 : konec potovanja oz. začetek zaviranja
o poz. 3 : konec zaviranja oz. začetek približevanja
o poz. 4 : končna želena pozicija
poz.1 poz.2
Vmax
poz. 3 4-končna poz.
Vmin
pospeševanje potovanje zaviranje približevanje
(t1) (t2) (t3) (t4)
Slika 7.8: diagram trapeznega profila pozicioniranja
s približevanjem v odvisnosti od časa
Podan trapezni profil hitrosti je v odvisnosti od časa. Algoritem poenostavimo tako, da
hitrost izračunavamo glede na doseženo pozicijo (glej sliko 7.9), kjer je korenska odvisnost
hitrosti od pozicije. Podali smo tudi diagram pozicije v odvisnosti od časa (glej sliko 7.10).
Zaradi lažjega določanja procesa krivljenja je za operaterja lažje vnašati razdaljo
pospeševanja in zaviranja, kot pa pospešek in pojemek. Te vrednosti izračunamo iz
podanih vrednosti hitrosti in razdalj po naslednjih enačbah 7.2 in 7.4 .
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 50
poz.1 poz.2
Vmax
poz. 3 4-končna poz.
Vmin
pospeševanje potovanje zaviranje približevanje
(s1) (s2) (s3) (s4)
Slika 7.9: diagram trapeznega profila pozicioniranja s približevanjem
v odvisnosti od pozicije (poti)
poz 4
poz 3
poz 2
poz 1
pospeševanje potovanje zaviranje približevanje
(t1) (t2) (t3) (t4)
Slika 7.10: diagram trapeznega profila pozicioniranja
s približevanjem v odvisnosti od časa
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 51
Funkcija najprej določi smer pozicioniranja. Nato glede na smer pozicioniranja in
nastavljene parametre izračuna pozicije (enačbe 7.1), ki smo jih omenili na začetku. Smer
pozicioniranje je pomembna, saj moramo paziti na predznake veličin, saj hitrost glede na
pozicijo izračunamo s korenom. Nato izračuna pospešek in pojemek glede na hitrosti in
razdalje (enačbi 7.2).
Naslednje enačbe (7.1) uporabimo za izračun pozicij pozicioniranja. Poz4 predstavlja
končno želeno pozicijo, poz0 pa predstavlja trenutno oz. začetno pozicijo. Razdalje s1, s2 in
s3 so podane v parametrih. Najprej izračunamo celotno razdaljo s do želene pozicije. Nato
izračunamo razdaljo s2, ki jo prepotujemo s podano hitrostjo od pospeševanja do zaviranja.
4312
04
sssss
pozpozs
−−−=
−=
323
212
101
spozpoz
spozpoz
spozpoz
+=
+=
+=
(7.1)
323
212
101
spozpoz
spozpoz
spozpoz
−=
−=
−=
Nato izračunamo pospešek in pojemek glede na hitrost (podano v klicu funkcije ) in
razdalji pospeševanja s1 in zaviranja s3 (enačbi 7.2).
3
2max
2min
2
1
2min
2max
1
2...
2...
s
vvapojemek
s
vvapospešek
⋅
−=
⋅
−=
(7.2)
Ko določimo smer pozicioniranja, izračunamo pozicije trapeznega profila in
izračunamo pospešek in pojemek, lahko pričnemo s pozicioniranjem.
Glede na dejansko pozicijo in predhodno izračunanih pozicij trapeznega profila lahko
določimo v kateri fazi pozicioniranja se nahajamo (glej enačbe 7.3). Hitrosti pa
izračunavamo s pomočjo enačb 7.4.
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 52
Pozicioniranje v pozitivno smer - določanje faz pozicioniranja:
1. faza: dej_poz <= poz1
2. faza: dej_poz > poz1 & dej_poz < poz2
3. faza: dej_poz >= poz2 & dej_poz < poz3
4. faza: dej_faza >= poz3
V negativno smer: (7.3)
1. faza: dej_poz >= poz1
2. faz : dej_poz < poz1 & dej_poz > poz2
3. faza: dej_poz <= poz2 & dej_poz > poz3
4. faza: dej_faza <= poz3
Izračun hitrosti glede na določeno fazo pozicioniranja v pozitivno smer:
min
222
max
max
12
min
4_
)_(23_
2_
_21_
vvfazapoz
pozpozdejavvfazapoz
vvfazapoz
pozdejavvfazapoz
=⇒=
−⋅⋅+=⇒=
=⇒=
⋅⋅+=⇒=
⋅
⋅
V negativno smer: (7.4)
min
222
max
max
12
min
4_
)_(23_
2_
_21_
vvfazapoz
pozpozdejavvfazapoz
vvfazapoz
pozdejavvfazapoz
−=⇒=
−⋅⋅+−=⇒=
−=⇒=
⋅⋅+−=⇒=
⋅
⋅
Algoritem za pozicioniranje se prekine (pomikanje se nemudoma ustavi) če:
- ni več aktiven dvoročni vklop
- se pojavi napaka na regulatorju
- je aktivirano končno stikalo
- je aktivirano stikalo vrat (razen kadar se naprava umika v izhodiščni položaj, takrat
ni nevarnega stanja in delavec lahko medtem odstrani cisterno in vstavi novo)
- je zaznana napaka ne regulatorju
- je dosežena želena pozicija znotraj določenih toleranc
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 53
Vsi ti pogoji se preverjajo med pozicioniranjem. Vse prekinitve, razen dosežene
pozicije, nas prisilijo k reševanju problemov v ročnem načinu delovanja.
Med izvajanjem pozicioniranja se izračunava dejanska pozicija v milimetrih in se
prikazuje na panelu poleg želene hitrosti.
7.8.3 Ostale funkcije potrebne za avtomatsko delovanje
Funkcija "void avto_bar1 (int8 druga)" nam v prvo vrstico na panel izpiše, da smo v
avtomatskem načinu delovanja, številko aktiviranega programa in števec kosov. Glede na
vrednost spremenljivke, s katero smo klicali funkcijo, izpiše še stanje pripravljenosti.
Na začetku funkcije "avto_meni()" preberemo izbran oz. aktiviran program iz
EEPROM-a, nato izpišemo trenutno stanje in izvedemo umik v izhodiščno pozicijo. Če
niso prisotne napake oz. so izpolnjeni vsi pogoji za delovanje, smo pripravljeni na
avtomatsko krivljenje, ki ga izvajamo v štirih korakih (v programu smo jih poimenovali
avto_stat oz. statusi avtomatskega delovanja) :
- avto_stat = 0 : preverjanje pogojev in dvoročnega vklopa, če je stanje ustrezno
prehod v status 1
- avto_stat = 1 : izvede se pozicioniranje v pozicijo za pričetek krivljenja z
maksimalno hitrostjo; ko dosežemo pozicijo se izpiše stanje in opravi prehod v
stanje 2
- avto_stat = 2 : se izvede krivljenje do pozicije konca krivljenja s hitrostjo, ki je
podana s programom krivljenja; če se je krivljenje uspešno izvedlo se izpiše stanje
in izvede prehod v status 3
- avto_stat = 3 : po uspešno izvedenem krivljenju se umaknemo v izhodiščno
pozicijo; pri tem ni potreben dvoročni vklop in zaprta vrata, saj operater med
umikanjem lahko zamenja cisterno (ko je umik končan, izvedemo prehod v status
4)
- avto_stat = 4 : krivljenje je končano, povečamo stanje števca kosov ter števca za
sledenje ter izvedemo pripravo na novo krivljenje status 0
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 54
7.8.4 Osnovna main() funkcija
V osnovni "void main (void)" funkciji so osnovne nastavitve mikrokrmilnika ter
klicanje drugih glavnih funkcij glede na izbiro načina delovanja. Delovanje funkcije main()
smo podali v diagramu stanj na sliki 7.11, algoritmi pa so v prilogi 4. Osnovne nastavitve
mikrokrmilnika, ki so bistvene:
- izklop A/D pretvornika
- izklop PSP paralelnega vodila
- izklop SPI serijske komunikacije
- izklop časovnega stražnika
- nastavitev "timer0" – RTCC - interni
- nastavitev "timer1": izbira osnovnega takta in delitev (nam ustreza 13ms)
- nastavitev "timer2": izbira osnovnega takta in delitev; je določena glede na
frekvenco in ločljivost PWM analognega izhoda
- izklop "timer3"
- vklop PWM analognega izhoda
- omogočitev prekinitev:
o TIMER1
o PORTB (sprememba na pinu)
o RDA (sprejem novega podatka s sprejemni medpomnilnik serijske
komunikacije)
o globalna omogočitev proženja prekinitev
Po končanih nastavitvah izvedemo naslednja opravila :
- postavitev PWM izhoda na 0
- nazadnje shranjena dejanska pozicija se prebere iz EEPROM-a
- izpiše se začetni meni
- po izvedeni začetni zakasnitvi iz EEPROM-a preberemo številko nazadnje
aktiviranega programa
- aktivni program preberemo iz EEPROM-a
- preberemo nastavitve oz. parametre iz EEPROM-a
- nato v neskončni zanki glede na digitalna vhoda kličemo funkcije načina delovanja
("rocni_meni()", "avto_meni()", "idle_meni()")
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 55
neskončna zanka
while (1)
avtomatsko delovanje
pripravljenost – idle
vnos nastavitev in programov,
izbira programov …
ročno delovanje
izbira=rocno
izbira≠rocno
izbira=avto
izbira≠avto
izbira≠rocnoin
izbira≠avto
izbira=rocno
ali
izbira=avto
nastavitve mikrokrmilnika,
nalaganje parametrov,
aktivnega programa in pozicije,
začetni izpis
main()
Slika 7.11: diagram stanj main() funkcije
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 56
8. SKLEP
8.1 Potek razvoja in uporaba krmilnika
Razvoj K-CPU krmilnikov smo začeli z verzijo 1. Ta še ni imela ločeni panel
ampak so bile tipke in LCD direktno vezane na krmilnik. To nam je zavzemalo dosti
vhodno/izhodnih linij mikrokrmilnika. Kljub temu smo krmilnik uspešno uporabili pri :
- kontejnerjih za smeti s avtomatskim hidravličnim stiskanjem in zaklepanjem
(Zarja d.o.o.)
- z manjšim prilagoditvenim vezjem za analogni izhod, smo ga uporabili za
pozicioniranje z enosmernim pogonom za razrez formatne pločevine (Alpos
d.d. - cevarna).
- razrez cevi BEWO (Alpos d.d. posebne storitve)
Po prehodni verziji 2 smo razvili K-CPU in K-PANEL verzije 3. Le-to verzijo
smo uporabili pri več projektih. Panel je bil lahko oddaljen, saj bil preko RS232
komunikacije povezan na K-CPU. S tem pa je tudi zasedal manj vhodno/izhodnih linij
mikrokrmilnika in tako smo lahko imeli več vhodov ter izhodov. Uporabili smo ga pri
naslednjih projektih (podani so glede na osnovno nalogo krmilnika):
- pozicioniranje :
o nastavljalnik dolžine za razrez cevi (Alpos d.d. posebne storitve)
o pozicioniranje nastavljalnika za žage za les (Alpos d.d. posebne storitve)
o naprava na ovijanje roba na cisternah (Mohorič s.p.)
o razrez pločevine na mero (SAS s.p.)
o razrez cevi BEWO (Alpos d.d. posebne storitve)
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 57
- zajem analognih in digitalnih vrednosti ter obdelava:
o prikaz hitrosti pogonov na liniji za izdelavo cevi (Alpos d.d. cevarna)
o sortiranje cevi na liniji (Alpos d.d. cevarna)
o kontrola izdelkov in stiskanje (Novem d.d)
- razne krmilne naloge :
o naprava za treniranje konjev (Šeško s.p.)
o testiranje statorjev z merjenjem upornosti (BSH d.d.)
o nadzor ter krmiljenje vzbujanja glavnega pogona valjarna ( Štore Steel)
o signalizacija delovanja proizvodne linije (Novem d.d.)
o naprava za brušenje krožne žage (Cugmajster s.p.)
- regulacija temperatur :
o masažna miza – Kailas d.o.o
Pri uporabi verzije 3 smo se evidentirali možne izboljšave, tako da smo po prehodni
verziji 4 razvili že K-CPU verzije 5. Ta ima naslednje izboljšave glede na verzijo 3 :
- za napajane mikrokrmilnika smo uporabili DC/DC pretvornik proizvajalca
Recom, s čemer smo dosegli manjše izgube pri napajanju in galvansko ločitev
napajanja mikrokrmilnika
- s hitrimi opto sklopniki smo galvansko ločili oba PWM izhoda
- K-CPU verzije 5 ima manjše dimenzije od verzije 3, prav tako so dimenzije
prirejene za uporabo Phoenixovih UM profilov za montažo na letev.
Verzijo 5 smo že uporabili pri naslednjih projektih :
- linija za izdelava aluminijastega profila z letečim odrezom – STS d.o.o.
(pozicioniranje in sledenje točki odreza)
- prikaz temperatur in pretokov Julon Aquaset d.d. (zajem analognih vrednosti,
obdelava in tudi pošiljanje na PC)
- preverjanje pritrjenosti obdelovanca na CNC stroju – Novem d.d. (zajem
analognih vrednosti, obdelava)
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 58
8.2 Uporaba prirejenih krmilnikov
Na zasnovi K-CPU verzije 3 so razvili namenski modul za LED prikazovalnik
16x70 oz. 1160 pik, ki jih krmilimo s pomikalnimi registri. S pomočjo RS232/RS485
vmesnikov pa smo preko komunikacije RS485 povezani s PC, s katerega pošiljamo
podatke za izpis.
Pri SOS klicnem sistemu K-CPU verzije 5 preko vmesnika RS232/RS485 zajema
podatke iz 97 modulov. Po zasnovi so podobni K-CPU. Namesto RS232 imajo RS485
komunikacijo.
Pri nekaterih manjših projektih smo tudi uporabili sam K-PANEL. S pomočjo
manjših prilagoditvenih vezij, smo ga uporabili za prikaz vrednosti analognih ali digitalnih
signalov.
8.3 Prihodnost in zaključek
K-CPU in K-PANEL v takšni zasnovi ne nameravamo razvijati naprej. Edine
možne izboljšave, so RS485 in ETHERNET komunikacija. Vendar to sedaj brez večjih
težav dosežemo z dodatnimi zunanjimi moduli, ki ji lahko priključimo na konektorje za
direkten dostop do mikrokrmilnika.
Pri projektih se vedno bolj pojavljajo zahteve po:
- bolj prefinjenih uporabniških vmesnikih (paneli na dotik)
- obdelavi večjih količin podatkov
- lokalnem arhiviranju in shranjevanju na razne prenosne medije
- zajemu in obdelavi velikih količin podatkov
- prenosu preko ETHERNET komunikacije
V prihodnje pa nameravamo razviti module s 16-bitnim mikrokrmilnikom iz
družine 24F ali celo morda narediti preskok kar na mikrokrmilnik PIC32 iz 32-bitne
družine. Zaradi tipa mikrokrmilnika in zahtev po čim manjših krmilnikih, bo potreben
prehod na SMD tehnologijo.
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 59
Z razvojem K-CPU krmilnikov smo zapolnili vrzel, ki je bila pri manjših projektih.
Tam kjer so prisotni različni tipi signalov in je potreben nek osnovni panel. Največkrat
smo ga uporabili pri projektih, kjer je bilo prisotno pozicioniranje osi ali zajemanje
analognih in digitalnih vrednosti.
Pri pozicioniranju ene osi je potrebno zajemati inkrementalni dajalnik, voditi
regulator pogona ter omogočati pregled oz. vnos parametrov, nastavitev ter raznih
vrednosti. Tukaj je PLC sistem neprimerno dražji in še povrhu ostane neizkoriščen. Za
primer bomo podali dve aplikaciji s približnimi cenami ter ceno naše rešitve:
- enostavna aplikacija za pozicioniranje narejeno s PLC (Simatic S7-300 - CPU
313 s hitrimi števci za enkoder stane 800 EUR in Simatic operator panel, ki
stane 300 EUR)
- za aplikacijo letečega odreza uporabljamo Simotion, katerega cena je 3.700
EUR (pri aplikaciji razreza aluminijastih profilov, kjer so manjše hitrost in
manj zahtevna aplikacija, smo uporabili naš krmilnik)
Naš krmilnik stane približno 200 EUR:
- K-CPU (100 EUR)
- K-PANEL (100 EUR)
- dodatno delo za testiranje krmilnika in odpravljanje morebitnih napak
Prednost imamo pri servisiranju naših krmilnikov. Manjše napake odpravimo brez
večjih težav. Na zalogi imamo večjo količino testiranih krmilnikov. Program lahko
naložimo že na podjetju in krmilnik zamenjamo na napravi.
Večkrat smo uporabljali K-CPU tudi pri zajemanju analognih in digitalnih
signalov. Podatke hkrati obdelamo ter jih pošiljamo preko RS232 komunikacije na PC,
kjer z namenskimi programi omogočimo prikazovanje, obdelavo in arhiviranje. Tudi tukaj
je PLC sistem drag. Samo za prikaz nekaj vrednosti potrebujemo dodatno opremo na PC in
nadzorni sistem. V našem primeru lahko uporabimo obstoječa RS232 komunikacijska
vrata. Uporabimo program, katerega smo razvili sami in katerega jedro ostaja isto.
Spreminjamo le prikaz podatkov. Komunikacijski vmesniki in obdelava podatkov ostajata
bolj ali manj ista.
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 60
Seveda je programiranje v C programskem jeziku nekoliko zahtevnejše in manj
pregledno kot programiranje PLC sistema. Prav tako ni primerljivo spremljanje delovanja
programa na krmilniku. Kajti PLC sisteme spremljajo dodelana programska orodja. Vendar
za marsikatero orodje potrebujemo licenco.
Pri zahtevnejšem programiranju lahko izgubimo prednost cenejšega krmilnika, če je
projekt preveč obsežen. Vendar pa ima spet prednost cenejši krmilnik, kadar imamo
večkrat iste ali podobne projekte. Takrat lahko funkcije, ki smo jih dalj časa razvijali in
testirali, hitro ponovno uporabimo in pridobimo veliko časa pri programiranju.
Predvsem se je to izkazalo pri projektih s pozicioniranjem ali zajemu analognih in
digitalnih vrednosti. Funkcije so bolj ali manj enake. Napisati je treba le namenske
funkcije - predvsem krmilne. Dostikrat lahko ponovno uporabimo funkcije za vnašanje
parametrov, izpis sistemskih vrednosti na panel, komunikacijske protokole itd.
Najmanj učinkovito je delo pri projektih, kjer opravljamo obsežnejše krmilne
naloge. Pri takšnih nalogah je veliko pogojev delovanja. Pri PLC sistemih se večina
serviserjev brez težav priklopi na PLC in hitro najde manjkajoči pogoj, ki onemogoča
delovanje. V našem primeru pa je to potrebno nadomestiti z zelo dobro diagnostiko. Dobra
in obsežna diagnostika pa zahteva veliko programskega dela. Izpisi podrobne diagnostike
na panel pa zasedajo veliko programskega pomnilnika v mikrokrmilniku.
Pri projektu ovijanje roba je kode za K-CPU 2346 vrstic (vključno s knjižnicama
"18F452.h" in "math.h"). V kodi je 1005 programskih vrstic. Preveden program zasede
63% ROM pomnilnika oz. 20kB in uporablja 12% RAM pomnilnika oz. 185 bajtov.
Za K-PANEL imamo 706 vrstic kode (vključno s knjižnico "16F876A.h") od tega
je 306 programskih vrstic. Preveden program zasede 20% ROM pomnilnika oz. 1,6kB.
Uporablja pa 34% pomnilnika oz. 136 bajtov.
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 61
9. VIRI www.microchip.com www.ccsinfo.com www.vishay.com www.st.com www.datasheetarchive.com www.maxim-ic.com www.display-elektronik.de
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 62
10. PRILOGE
10. 1 Seznam slik - 2.1: blokovna shema K-CPU V3.0
- 2.2: pozicijska shema K-CPU V3.0
- 2.3: mikrokrmilniški modul K-CPU V3.0
- 2.4: razpored pinov PIC 18F452
- 2.5: shema digitalnega vhoda
- 2.6: shema digitalnega izhoda
- 2.7: shema napajalnega dela
- 2.8: integrirano vezje MAX232
- 2.9: shema komunikacijskega dela
- 2.1 : konektorji vseh portov in ICSP
- 3.1: blokovna shema K-PANEL-a
- 3.2: prednja stran K-PANEL-a
- 3.3: zadnja stran K-PANEL-a
- 3.4: razpored pinov mikrokrmilnika PIC16F876A
- 3.5: povezava med mikrokrmilnikom in LCD
- 4.1: shema stroja za krivljenje cistern
- 4.2: potek krivljenja roba
- 4.3: blok shema krmilja
- 4.4: fotografija stroja
- 4.5: fotografija krmilne omare
- 4.6: fotografija krmilja
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 63
- 5.1: shema povezave med LCD in mikrokrmilnikom
- 6.1: diagram prekinitev za program K-PANEL
- 7.1: diagram prekinitev programa K-CPU
- 7.2: diagram impulzov za detekcijo inkrementa ali dekrementa
- 7.3: diagram stanj - ročno delovanje
- 7.4: diagram poteka referenciranja
- 7.5: diagram stanj za pripravljenost – nastavitve, programi, števci in izklop
- 7.6: diagram stanj avtomatskega delovanja
- 7.7: diagram stanj za izvajanje pozicioniranja
- 7.8: diagram trapeznega profila pozicioniranja s približevanjem v odvisnosti od
časa
- 7.9: diagram trapeznega profila pozicioniranja z približevanjem v odvisnosti od
pozicije (poti)
- 7.10: diagram trapeznega profila pozicioniranja z približevanjem v odvisnosti
od časa
- 7.11: diagram stanj main() funkcije
10.2 Seznam preglednic - 2.1: osnovne karakteristike mikrokrmilnika PIC18F452
- 3.1: osnovne karakteristike mikrokrmilnika PIC16F876A
- 5.1: primer začetka izpisovanja na LCD
- 5.2: ASCII znaki, ki jih pošljemo ob pritisku na tipko
- 7.1: vhodi K-CPU
- 7.2: izhodi K_CPU
- 7.3: zaznavanje inkrementa in dekrementa
- 7.4: shema programskega medpomnilnika za pošiljanje na K-PANEL
- 7.5: razpored EEPROM pomnilniških lokacij
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 64
10.3 Naslov študenta Anton Jug Stopče 16 3231 Grobelno Tel.: (03) 5794 174 Mob .: 031 613 880 e-mail: [email protected] ; [email protected]
10.4 Kratek življenjepis Rodil sem 13.10.1975 v Celju. Osnovno šolo sem obiskoval v Šentjurju na OŠ
Franja Malgaja. Po končani osnovni šoli sem se vpisal v srednjo tehniško šolo v Celju na smer elektronika.
Leta 1994 sem se vpisal v redni višješolski študij elektrotehnike – smer avtomatika Univerze v Mariboru. Po končanem višješolskem študiju pa sem se leta 1999 vpisal v redni visoko-strokovni študij iste smeri.
V absolventskem stažu visoko-strokovnega študija sem odslužil vojaški rok. Januarja 2004 pa sem redno zaposlil pri podjetju Etra d.o.o. na mesto projektno – razvojnega inženirja.
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 65
10.5 Priloge
Priloga 1: Shema K-CPU
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 67
Priloga 3: Algoritmi programa za K-PANEL (1/6)
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 68
Priloga 3: Algoritmi programa za K-PANEL (2/6)
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 69
Priloga 3: Algoritmi programa za K-PANEL (3/6)
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 70
Priloga 3: Algoritmi programa za K-PANEL (4/6)
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 71
Priloga 3: Algoritmi programa za K-PANEL (5/6)
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 72
Priloga 3: Algoritmi programa za K-PANEL (6/6)
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 73
Priloga 4: Algoritmi programa za K-CPU (1/10)
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 74
Priloga 4: Algoritmi programa za K-CPU (2/10)
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 75
Priloga 4: Algoritmi programa za K-CPU (3/10)
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 76
Priloga 4: Algoritmi programa za K-CPU (4/10)
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 77
Priloga 4: Algoritmi programa za K-CPU (5/10)
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 78
Priloga 4: Algoritmi programa za K-CPU (6/10)
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 79
Priloga 4: Algoritmi programa za K-CPU (7/10)
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 80
Priloga 4: Algoritmi programa za K-CPU (8/10)
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 81
Priloga 4: Algoritmi programa za K-CPU (9/10)
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 82
Priloga 4: Algoritmi programa za K-CPU (10/10)
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 83
Priloga 5: Elektro načrt krmilja (1/10)
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 84
Priloga 5: Elektro načrt krmilja (2/10)
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 85
Priloga 5: Elektro načrt krmilja (3/10)
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 86
Priloga 5: Elektro načrt krmilja (4/10)
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 87
Priloga 5: Elektro načrt krmilja (5/10)
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 88
Priloga 5: Elektro načrt krmilja (6/10)
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 89
Priloga 5: Elektro načrt krmilja (7/10)
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 90
Priloga 5: Elektro načrt krmilja (8/10)
Programirljiv logični krmilnik na osnovi mikrokrmilnika Stran 91
Priloga 5: Elektro načrt krmilja (9/10)