KRMILNIK VBRIZGA GORIVA BENCINSKIH...
Transcript of KRMILNIK VBRIZGA GORIVA BENCINSKIH...
UNIVERZA V LJUBLJANI
Fakulteta za elektrotehniko
Iztok Vatovec
KRMILNIK VBRIZGA GORIVA
BENCINSKIH MOTORJEV
DIPLOMSKO DELO UNIVERZITETNEGA ŠTUDIJA
Mentor: doc. dr. Boštjan Murovec
Ljubljana, september 2010
Zahvala
Zahvaljujem se mentorju doc. dr. Boštjanu Murovcu za pomoč, strokovne
nasvete ter potrpeţljivo pregledovanje diplomskega dela.
Zahvaljujem se druţini za spodbudo in podporo v času mojega šolanja.
Zahvaljujem se Frankotu Petelinu, ker me je naučil osnov mehanike in delovanja
motorjev z notranjim zgorevajem.
V spomin Jožetu Vrabcu
- - i
Povzetek
Diplomsko delo opisuje izdelavo nastavljivega krmilnika vbrizga za bencinske
motorje z notranjim zgorevanjem. Krmilnik je zasnovan okoli 8-bitnega
mikrokrmilnika PIC18F458 ter električnega vezja, ki skrbi za napajanje, vhodno in
izhodno prilagoditev signalov ter komunikacijo z namiznim računalnikom.
Uporabniški vmesniški program z grafičnim uporabniškim vmesnikom deluje v
okolju Microsoftovih oken in omogoča realno-časovno spremljanje delovanja
motorja in nastavitev parametrov krmiljenja vbrizga goriva.
Zasnova predstavljenega krmilnika se opira na obstoječ odprtokodni krmilnik
vbrizga goriva Megasquirt. Podobnost med krmilnikoma omogoča koriščenje
pomoči, ki jo nudi cvetoča mednarodna skupnost uporabnikov krmilnika
Megasquirt. Predstavljen krmilnik je v celoti zasnovan tako, da ga je mogoče
idelati v samogradnji.
Delo je razdeljeno v dva sklopa. V prvem delu so podane osnove delovanja
bencinskih motorjev, priprava zmesi in problem krmiljenja vbrizga. Drugi del se
osredotoči na zgradbo in delovanje krmilnika ter njegovo praktično uporabo.
Klučne besede:
bencinski motor, motor z notranjim zgorevanjem, elekronski vbrizg goriva, zmes
goriva in zraka, vbrizgalna šoba
- - ii
- - iii
Abstract
The work within the scope of this thesis is a realization of a controller for
Electronic Fuel Injection (EFI) for the internal combustion gasoline engine. The
controller is based on the PIC18F458 8-bit microcontroller manufactured by
Microchip Inc. The electric circuit around the microcontroller consists of the
power stage which powers the various integrated circuits on the circuit bord and
feeds the reference voltage source used by the engine sensors. The printed
circuit bord also carry the circuitry for adapting signals derived from the engine
sensors, the output stage which powers the injectors and rellays and the circuitry
for enabling serial RS232 comunication with a personal computer. A Grafic user
interface program enables the user to monitor in real-time the running of the
engine where the presented EFI controller is employed and to change the
parameters of the embaded program performing the calculaion of the injection
time, which directly cooralates to the formming of the desired air- fuel mixture.
The presented controller is based on the popular open-source EFI controller
known as Megasquirt, but several changes were made. The featured fuel
injection controller uses a microcontroller from another manufacturer. A new, two
layer, circuit bord was developed, which facilitates a DIY realization and lower
the manufacturing costs. Changes to the controll algorithm itself and the circuitry
were made, which made possible the use of two stage throttle possition
potentiometer. When throtle open angle is used as the engine load signal, the
use of a two stage potentiometer gives a better controll of the air-fuel mixture.
Last, the size of the volumetric eficiency table, which carry the informattion of the
engine characteristics, was also incresed from the original 8x8 to 12x12. This
bigger size offers more tunning potential, but retains the simplicity offered by
small tables. On the circuit bord provision for further upgrades is made in the
form of spare input and otput chanels.
- - iv
The thesis consists of two major parts. The first part introduce us to some basics
of gassolin internal combustion engines, the problem of suplying an adecuate air-
fuel mixture at all stages of work of an engine and how EFI works in order to
provide the engine with the correct mixture. The seccond part is about the
construction and working of our EFI controller, a brief overview of the user
program and an evaluation of the mounting and performance of the controller in a
car.
Keywords:
gasoline engine, internal combustion engine, electronic fuel injection, air-fuel
mixture, fuel injector
- - v
Kazalo
1 Uvod ................................................................................................................1
2 Motorji z notranjim zgorevanjem ......................................................................5
2.1 Zgradba bencinskih motorjev ..................................................................6
2.2 Delovanje bencinskih motorjev ...............................................................8
2.2.1 Štiri taktni cikel .............................................................................9
2.2.2 Oprema motorja .........................................................................15
3 Priprava zmesi zraka in goriva ......................................................................25
3.1 Teoretično mešalno razmerje in faktor λ ...............................................25
3.1.1 Vpliv zmesi .................................................................................26
3.1.2 Mešalno razmerje v različnih območjih delovanja motorja .........28
3.2 Uplinjač ..................................................................................................31
3.3 Sistemi vbrizga bencina ........................................................................33
3.3.1 Zgodovinski razvoj .....................................................................33
3.3.2 Boschevi sistemi vbrizga ............................................................34
3.4 Merjene veličine in senzorji ...................................................................41
3.4.1 Merjenje vstopajoče zračne mase ............................................ 41
3.4.2 Merjenje ostalih veličin ..............................................................45
3.5 Aktuatorji ...............................................................................................49
3.6 Elektronska krmilna enota ....................................................................52
4 Realizacija programabilnega krmilnika vbrizga goriva ..................................55
4.1 Strojna oprema .....................................................................................55
4.1.1 Mikrokrmilnik ..............................................................................55
4.1.2 Elektronsko vezje ......................................................................57
4.2 Programska oprema .............................................................................65
4.2.1 Krmilni program .........................................................................66
4.2.2 Uporabniški program .................................................................80
5 Meritve ..........................................................................................................93
5.1 Vgradnja sistema vbrizga goriva ...........................................................94
5.2 Rezultati meritev ...................................................................................99
6 Sklepne ugotovitve ......................................................................................103
- - vi
Priloga 1: Električna shema krmilnika ...............................................................105
Priloga 2: Tiskano vezje ....................................................................................113
Priloga 3: Krmilni program .................................................................................116
Literatura ...........................................................................................................157
Viri slik ...............................................................................................................159
- - vii
Seznam slik
Slika 1: Prerez štiritaktnega bencinskega motorja .................................................6
Slika 2: Delovni cikel štiritaktnega motorja ..........................................................10
Slika 3: Krmilni diagram štiritaktnega motorja ......................................................10
Slika 4: Sistem za dovod goriva pri elektronskem vbrizgu goriva ........................15
Slika 5: Vodno hlajenje ........................................................................................17
Slika 6: Sesalni trakt bencinskega motorja ..........................................................18
Slika 7: Izpušni sistem s katalizatorjem ...............................................................21
Slika 8: Baterijski vţig ..........................................................................................23
Slika 9: Vpliv zmesi na moč in specifično porabo ................................................26
Slika 10: Tvorba škodljivih izpušnih plinov glede na vrednost faktorja λ .............27
Slika 11: Zgradba uplinjača .................................................................................31
Slika 12: Direktni vbrizg bencina (ang. Gasolin Direct Injection - GDI) ...............40
Slika 13: Senzor zračnega tlaka proizvajalca Freescale semiconductors ...........42
Slika 14: Delno odprt Boschev senzor volumskega pretoka (levo) in masnega
pretoka zraka (desno) ...............................................................................43
Slika 15: Senzorja pozicije dušilne lopute z enojnim območjem (levo) in
z dvojnim območjem (desno) ....................................................................44
Slika 16: Zgradba in izhodna karakteristika senzorja z dvojnim območjem ........45
Slika 17: Induktivni senzor z zobatim kolesom ....................................................46
Slika 18: Temperaturna senzorja z NTC uporom ................................................47
Slika 19: Ogrevana λ-sonda ................................................................................48
Slika 20: Izhodni karakteristiki sirokopasovne(levo) in
običajne λ-sonde (desno) .........................................................................49
Slika 21: Elektromagnetna vbrizgalna šoba ........................................................50
Slika 22: Elektronska krmilna enota predstavljenega sistema za vbrizg goriva. ..55
Slika 23: Mikrokrmilnik s kristalom .......................................................................56
Slika 24: Napajalno vezje ....................................................................................57
Slika 25: Vezje serijske komunikacije ..................................................................59
Slika 26: Vezji za prilagoditv signala potenciometra dušilne lopute (levo) in
- - viii
senzorja temperature motorja (desno) .....................................................60
Slika 27: Vezji za prilagoditev signala λ-sonde (levo) in detekcijo napetosti
akumulatorja (desno) . ...............................................................................60
Slika 28: Vezje za prilagoditev signalov iz različnih tipov
senzorjev hitrosti vrtenja motorja ……………………………………………62
Slika 29: Izhodna stopnja za pogon vbrizgalnih šob ............................................64
Slika 30: Vezji za vklop relejev gorivne črpalke (levo) in
LED diode za prikaz delovanja (desno) ....................................................65
Slika 30: Osnovna zgradba krmilnega programa ................................................70
Slika 31 : Glavna zanka krmilnega programa ......................................................73
Slika 32: Glavno pogovorno okno programa Pictune ..........................................80
Slika 33: Pogovorno okno z osnovnimi nastavitvami ...........................................83
Slika 34: Izračun parametra Potrebno gorivo ( REQ_FUEL) ...............................84
Slika 35: Pogovorno okno z nastavitvami obogatitev zmesi ............................... 85
Slika 36: Tabela volumskega izkoristka motorja ..................................................87
Slika 37: Umerjanje karakteristike volumetričnega izkoristka ..............................89
Slika 38: Okno za generiranje konverziske tebele senzorja tlaka .......................91
Slika 39: Okno za generiranje konverziske tebele senzorja temperature ............91
Slika 40: Notranjost vozila z merilnikom mešalnega razmerja (v ospredju) in
krmilnikom vbrizga goriva (spodaj desno) ................................................93
Slika 41: Originalni sesalni kolektor z uplinjačem (levo) in modificirani kolektor
z vbrizgalnima šobama in dušilno loputo (desno) ....................................94
Slika 42: Montaţa širokopasovne λ-sonde .........................................................95
Slika 43: Dušilna loputa s potenciometrom. Viden je tudi gorivni vod. ...............95
Slika 44: Senzor, namenjen meritvam temperature vstopajočega zraka,
nameščen znotraj zračnega filtra. ...........................................................96
Slika 45: Senzor temperature motorja. ..............................................................97
Slika 46: Relejna plošča v motornem prostoru. .................................................97
Slika 47: Graf gibanja merjenih veličin med voţnjo z vgrajenim uplinjačem ....100
Slika 48: Graf gibanja merjenih veličin med voţnjo testnega avtomobila z
vgrajenim sistemom za vbrizg ................................................................101
- - ix
Seznam tabel
Tabela 1: Teoretična mešalna razmerja goriv .....................................................25
Tabela 2: Primerjava izbranih programabilnih krmilnikov vbrizga goriva .............53
- - x
- - 1
1 Uvod
Kmalu po izumu parnega stroja na začetku 19. stoletja, so ljudje začeli razmišljati
o cestnega vozilu. Zgodnji poizkusi so imeli parni pogon in različne pozicije
motorja, kotla in različne konfiguracije koles. Vendar je šele pojav
kompaktnejšega motorja z notranjim zgorevanjem ob koncu 19. stoletja
omogoču izdelavo tako imenovanih kočij brez vprege, nekakšnih prvih
avtomobilov.
Do leta 1910 je avtomobil ţe dobil svojo moderno podobo. Ottov motor, ki je v
svoji bistveni zasnovi ostal nespremenjen vse do danes, je v dobrem stoletju
doţivljal razvoj in izboljšave, ki so mu omogočile, da je ostal v koraku s časom
izpolnjujoč nove in nove zahteve, ki mu jih je postavljala zgodovina.
Ena takih izboljšav je tudi uvedba vbrizga goriva z šobami, kot zamenjava za
uplinjač, ki je pred tem opravljal pomembno nalogo priprave zmesi zrak-gorivo,
katera poganja bencinske motorje z notranjim zgorevanjem. Prvi sistemi so se
pojavili med drugo svetovno vojno za potrebe vojaške industrije in so se po vojni
razširili tudi v osebne avtomobile [1].
Pred izumom polprevodniških elektronskih elementov so bili sistemi vbrizga
goriva izključno mehanski. Dragi in relativno kompleksni so izjemoma opravičili
vgradnjo v osebna vozila. Stroge zahteve glede porabe, izpustov in zanesljivosti
delovanja v kombinaciji z zmoţnostmi in niţjo ceno elektronskih komponent,
predvsem modernejših integriranih vezij, so pripeljala do neizogibnega;
elektronska vezja so najdla pot v naše avtomobile. Eden prvih načinov uporabe
elektronskih komponent je bil prav elektronski vbrizg goriva (ang:Electronic Fuel
Injection –EFI).
Škodljiv vpliv izpušnih plinov na ljudi in okolje je glavni vzrok za sodobne zahteve
po majhni porabi, bolšemu izkoristku motorjev in s tem povezana stroga merila
- - 2
glede izpustov škodljivih plinov. Stroţja merila in uvedba katalizatorja sta prisilila
proizvajalce avtomobilov k dokončni opustitvi uplinjačev in izključni uporabi
elektronskih sistemov vbrizga goriva [2].
Čeprav na zahodnih trgih praktično ne moremo kupiti novega serijskega
avtomobila z uplinjačem, je v uporabi še vedno določeno število vozil, ki
elektronskega vbrizga goriva nimajo, zaradi česar ne izpolnjujeho današnjih
norm o dovoljenih izpustih. Taka vozila bodo morala biti s časom oz. moţno
spremembo zakonodaje iz prometa odstranjena.
Avtomobil je kot tak, ţe zdavnaj izgubil izključno vlogo osebnega transporta in
tako poznamo tudi avtomobile za “prosti čas”. Če iz te skupine izvzamemo
sodobne avtomobile, kateri seveda ţe ustrezajo vsem veljavnim normam lahko
skupino tako imenovanih hobi avtomobilov v grobem razdelimo v dve podskupini.
To sta skupini vozil za udejstvovanje v motošportu in skupina vozil, ki
predstavljajo tehnično dediščino.
Vozila, ki so namenjena izključno športnemu udejstvovanju so izvzeta iz pravil, ki
veljajo za navaden promet, vsaj kar se tiče izpustov. Bodoče niţanje dopustnih
mej izpustov njihovih lastnikov navadno ne skrbi. Podobno velja za starodobna
vozila, ki niso podvrţena merilom katere izpolnjujejo sodobni avtomobili.
Omenjeni skupini še zdaleč ne pokrijeta celotnega spektra ljubitelskih vozil,
bodisi ker jih lastniki ţelijo uporabljati tako za občasno športno udejstvovanje kot
za osebni transport, ali ne dosegajo starostne meje ali redkosti, ki je potrebna za
vpis v register starodobnih vozil oziroma vozil, ki predstavljajo tehnično
dediščino. Lastnikom teh avtomobilov ne preostane drugega, kot avtomobil tako
predelati ali posodobiti, da izpolnjuje obvezujoča merila cestnega prometa. V
mnogih primerih je to tudi vgradnja elektronskega sistema vbrizga goriva.
- - 3
Z nekaj iznajdljivosti je mogoče elektronski sistem vbrizga goriva, ali še bolje
elektronski sistem krmiljenja motorja, iz serijskega avtomobila novejše
proizvodnje vgraditi v starejše tipe avtomobilov, ki so bili originalno opremljeni z
uplijačem. Kljub temu je večinoma bolj smotrno poseči po namenskih sistemih za
naknadno vgradnjo, katerih je na trgu precej. Tak sistem je navadno zasnovan
bolj prilagodljivo kar olajša priredbo na določen tip motorja.
V diplomski nalogi smo si zadali cilj razviti in preizkusiti različico elektronskega
krmilnika vbrizga, ki bo enostaven za vgradnjo in nastavitev, poleg tega bo
poceni in z moţnostjo izdelave v samogradnji z manjšim predznanjem
elektrotehnike in mehanike.
V prvem delu naloge je opisano delovanje bencinskega motorja z notranjm
zgorevanjem, kar je ključno za razumevanje delovanja krmilnika vbrizga. Sledi
predstavitev problematike krmiljenja vbrizga goriva, način delovanja elektronskih
krmilnikov vbrizga, spoznavanje z elektromehanskimi elementi takega sistema in
primerjava izbranih namenskih elektronskih sistemov vbrizga s poudarkom na
krmilnikih, ki so prisotnih na trgu.
Drugi del naloge opisuje našo izvedbo krmilnika, ki je potomec odprtokodnega
krmilnika Megasquirt [3], ki sta ga razvila Bruce Bowling in Al Gripo in je prav
zaradi svoje odprtosti, prilagodljivosti in predvsem cene doţivel neverjeten uspeh
v svetu. Predstavljeno je elektronsko vezje krmilnika, krmilni algoritem in grafični
vmesnik, ki nam omogoča spremljanje delovanja in nastavitev krmilnih
parametrov. Nadalje sta predstavljena vgradnja in preizkus krmilnika v s
starejšem tipu avtomobila.
- - 4
- - 5
2 Motorji z notranjim zgorevanjem
Motorji z notranjim zgorevanjem so stroji, ki kemično energijo goriva spreminjajo
v mehansko delo. Značilno zanje je, da gorivo skupaj z oksidantom, največkrat je
to zrak, zgori v delovnem prostoru motorja. Kemična energija goriva se spreminja
v toplotno, ta pa se zaradi povečanja zgorevalnih tlakov spreminja v mehansko
energijo [5, 6].
Poznamo:
- batne motorje, pri katerih tlak plinov, ki nastane pri zgorevanju, pritiska na
bat, ki poganja motorno gred,
- turbinske motorje, kjer nastali tlak plinov vrti lopatasto kolo rotorja,
- tokovne motorje, ki delujejo na osnovi reakcijskega učinka iztekajočih plinov.
Razen nekaterih opuščenih poizkusov s turbinskih motorjem so pri motornih
vozilih batni motorji edina zastopana vrsta motorjev z notranjim zgorevanjem.
Drugi dve vrsti motorja se uporabljajo v letalstvu.
Batne motorje lahko delimo glede na različnie kriterijie, od katerih navedimo
naslednja:
a) po načinu vžiga gorljive zmesi:
- bencinski oz. motorji z Ottovim ciklom delovanja, kjer vţigalna naprava s
pomočjo iskre sproţi vţig,
- dizelski motorji, kjer se gorivo vţge ob vbrizgu , ko pride v stik z zrakom,
ki je bil predhodno segret s komprimiranjem,
b) po načinu delovanja:
- štiritaktni motorji, pri katerih se delovni proces izvede v štirih gibih bata,
- - 6
- dvotaktni motorji, ki poterbujejo za en delovni proces samo dva giba bata.
Poznamo tudi hibridne motorje, ki imajo lastnosti dizelskega in bencinskega
motorja ter rotaciske batne motorje, katerih najbolj uspešen predstavnik je
Wanklov motor. V avtomobilih se je najbolj uveljavil štiritaktni bencinski motor in
dizelski motor, ki je zaradi svoje manjše porabe prevladujoč pogon v
transportnem cestnem prometu. Dvotaktni motorji pa se zaradi svoje
enostavnejše zgradbe uporabljajo predvsem za pogon ročnih obdelovalnih
strojev in manjših dvokolesnikov kjer nizka poraba ni zelo pomembna.
Osredotočili se bomo na štiri-taktne bencinske motorje z notranjim zgorevanjem
z ročično gredjo.
2.1 Zgradba bencinskega motorja
Zgradbo bencinskega motorja prikazuje slika 1.
Slika 1: Prerez štiritaktnega bencinskega motorja
(vir: www.automotive-ilustrations.com)
- - 7
Dele in sklope, ki sestavljajo batni motor z notranjim zgorevanjem delimo na:
a) mirujoče, ki dajo motorju obliko in sluţijo gibljivim delom kot vodila in
leţišča. Sem spadajo:
- blok motorja ali posamezen valj,
- glava motorja,
- ročično ohišje,
- oljno korito,
- pokrovi,
- tesnila in
- vijačni alementi.
b) gibljive, h katerim prištevamo:
- ročični mehanizem, ki ga setavljajo:
- bat z batnimi obrčki in sornikom,
- ojnica in
- ročična gred z vztrajnikom.
- krmilni mehanizem, ki je sestavljen iz:
- odmične gredi s pogonom,
- dročnikov, drogov in ventilskih vzvodov in
- ventilov z vzmetmi in vodili.
c) opremo motorja, ki jo sestavljajo vse dodatne naprave, ki s svojim
delovanjem vplivajo na delovanje motorja. Pod opremo štejemo:
- naprave za dovod goriva, ustvarjanje zmesi in odvod izgorjenih plinov,
- napravo za mazanje,
- hladilni sistem in
- sistem vţiga.
- - 8
Napravo za dovod goriva iz gorivnega rezervoarja predstavljjo črpalka in gorivni
vodi. Gorljiva zmes bencina in zraka se ustvari s pomočjo uplinjača ali sistema
vbrizga goriva. Zmes se uvede v sesalni kolektor, ki jo pripelje do posameznih
valjev. Izpušni plini se odvajajo skozi izpušni kolektor in izpušno cev v zadnji del
avtomobila.
2.2 Delovanje štiritaktnega bencinskega motorja
Delovni proces poteka med stalno spremembo prostornine v valju motorja.
Spremembo prostornine izvede bat, ki potuje po valju od spodnje mrtve lege,
SML (ang.-bottom dead center- BDC), do zgornje mrtve lege, ZML ( ang. top
dead center- TDC), ter obratno. Razdaljo med eno in drugo mrtvo lego
imenujemo gib, ali hod bata, prostornino med legama pa delovna prostornina
valja.
Delovna prostornina motorja je seštevek delovnih prostornin posameznih valjev.
Enemu gibu bata pribliţno ustreza en takt ali faza motorja. Glede na število
gibov, ki jih opravi bat za en delovni proces, razlikujemo dvotaktne in štiritaktne
motorje. Pri dvotaktnih motorjih se deovni proces izvede v dveh gibih bata in
enem vrtljaju motorne gredi, pri štritaktnem pa v štirih gibih in dveh vrtljajih gredi.
Valj s spodnje strani hermetično zapira premični bat, z zgornje strani pa glava
motorja. Nepropustnost zagotavljajo batni obročki, ki potujejo skupaj z batom in
tesnijo ob steno valja, ter z zgornje strani ventili, ki tesno nasedejo na
pripadajoča sedišča v glavi. Zaradi gibanja bata po valju se spreminja
prostornina valja, hkrati pa se spreminjata tlak in temperatura plinov v valju. Pri
gibanju bata navzdol od ZML do SML se prostornina veča, tlak pa se zmanjšuje.
Če je v tej fazi sesalni ventil odprt, se bo zaradi podtlaka valj polnil s sveţo
zmesjo.
- - 9
Pri gibanju bata od SML do ZML se prostornina se pri tem zmanjšuje in tlak
narašča. Če je pri tem izpušni ventil odprt, se bo vsebina valja iztisnila iz motorja.
Sledi, da procese v valju reguliramo z ventili, zaradi česar morata biti ročični in
krmilni mehanizem v sinhroni medsebojni povezavi. Mehaniki temu pravijo, da
sta ta dva mehanizma “v fazi”.
2.2.1 Štiri taktni cikel
Teoretično traja vsaka faza ali delovni takt en gib bata. Za štiritaktno delovanje,
sestavljeno iz štirih faz, to pomeni štiri gibe: izmenično po dva od ZML do SML in
dva od SML do ZML. Motorna gred bo pri tem opravila dva obrata.
V resnici pa se faze ne ujemajo popolnoma z gibi batov, ampak so nekatere
daljše, druge pa krajše. To je potrebno zaradi kinematike plinov in mehanskih
mej hitrosti odpiranja ventilov, saj se le ti ne odprejo nenadno, ampak potrebujejo
določen čas, da doseţe popolno odprtje [4]. Razliko ustvarja krmilni mehanizem
s svojim predčasnim odpiranjem in zakasnelim zapiranjem ventilov. Sledi, da
traja delovni proces več kot štiri gibe bata, gred pa se v tem času zavrti za več
kot 720°.
Faze ali takti si v štiritaktnem bencinskem motorju sledijo po naslednjem vrstnem
redu (slika 2):
- sesalni takt ali polnitev,
- komprimiranje ali stiskanje,
- delovni tak, v katerem prie do vţiga zmesi in ekspanzije plinov,
- izpuh z izrivanjem zgorelih plinov.
- - 10
Slika 2: Delovni cikel štiritaktnega motorja (http://www.antonine-education.co.uk)
Sesanje
Ob premiku bata od ZML proti SML, se ustvari podtlak (od 0,8 do 0,9 bar), ki ob
odprtem sesalnem ventilu povzroči polnjenje valja z zmesjo zraka in goriva. Ko
doseţe bat konec svoje poti, to je SML, se sesanje konča in ventil se zapre.
V krmilnem diagramu (slika 3) vidimo, da takti niso identični z gibi bata.
Slika 3: Krmilni diagram štiritaktnega motorja
- - 11
Odpiranje sesalnega ventila se prične preden gre bat skozi ZML. V tem času se
zaključuje izpuh in izpušni ventil se zapira. Zapre se nekoliko po ZML, kar
pomeni, da sta krajši čas delno odprta oba ventila, tako izpušni kot sesalni, kar
imenujemo prekrivanje. Le-to pripomore k polnjenju valja na dva načina.
Iztekajoči izpušni plini ustvarjajo za seboj podtlak, ki pomaga pri začetnem
polnjenju valja. Zgoden začetek odpiranja sesalnega ventila zagotavlja tudi, da
bo ventil dovolj odprt, ko bo bat začne svojo pot navzdol.
Tudi zapiranje sesalnega ventila ni končano pri SML, temveč kasneje, ko se bat
ţe giblje proti ZML. Zakasnelo zapiranje ventila pripomore k polnitvi valja zaradi
vztrajnosti pritekajoče zmesi, saj so fazne spremembe pri motorjih z notranjim
zgorevanjem izredno hitre. Posamezna faza pri hitrosti vrtenja 3000 obr/min traja
le okrog stotinko sekunde, kar nakazuje na nezanemarljiv vpliv termodinamičnih
lastnostih zraka; vztrajnosti, stisljivosti in celo razširjanja valovanj, na polnjenje
valjev in delovanje motorja.
Delovanje motorja v sesalnem taktu lahko primerjamo z delovanjem zračne
črpalke in zanj podamo volumski izkoristek, to je razmerje med delovno
prostornino valja in volumnom zraka pri normalnem tlaku, ki je vstopil v valj:
enačba (2.1):
100V
V[%]
d
zV (2.1)
Vz označuje volumen vsesanega zraka, Vd pa delovno ali gibno prostornino valja.
Ker je za vstop zmesi goriva in zraka v motor na razpolago malo časa, se
pogosto, z namenom povečanja specifične moči motorja, za boljše polnjenje
uporablja kompresorski polnilnik nameščena pred sesalni kolektor. S tem skoraj
odpravimo padec moči ob voţnji na visokih nadmorskih višinah kjer je gostota
zraka niţja.
- - 12
Komprimiranje
Ko se sesalni ventil ob koncu sesalnega takta zapre, je bat ţe preko SML na poti
navzgor. Prostornina v valju se zmanjšuje in bat stiska (komprimira) zmes goriva
in zraka. Ko doseţe bat ZML, je vsa zmes ki je vstopila v valj skozi sesalni takt,
stisnjena v majhen prostor v glavi motorja, ki mu pravimo zgorevalna komora ali
kompresijski prostor. Prostornina komore je pri bencinskih motorjih nekje od 6 do
12 krat manjša od celotne prostornine valja. To razmerje prostornin imenujemo
statično kompresijsko razmerje motorja, katerega izračun podaja enačba (2.2)
c
cd
V
VV (2.2)
Vc označuje prostornino zgorevalne komore, Vd pa delovno ali gibno prostornino
valja.
Zaradi zmanjšanja prostornine se povečata tlak in temperatura zmesi. S
stiskanjem se molekule goriva in zraka zbliţajo, kar poveča vnetljivost in hitrost
zgorevanja, zato se s povečanjem kompresiskega razmerja poveča tlak pri
zgorevanju in s tem moč ter izkoristek motorja.
Velikost stiskanja oziroma kompresijskega razmerja ε je omejena. Odvisna je od
vrste goriva, saj zmes pri komprimiranju ne sme preseči določene temperature
saj drugače pride samovţiga zmesi in klenkanja motorja. Višina temperature in
tlaka samovţiga je odvisna od vrste goriva. Odpornost goriva na samovţig zarani
stiskanja označujemo z oktanskim številom. Z razvojem tehnologije so goriva
pridobivala na oktanskem številu in s tem omogočila izdelavo motorjev z višjim
mehanskim kompresijskim razmerjem. Sodobni motorji imajo tako kompresijska
razmerja okrog 10:1.
Konec stiskanja označuje vţig zmesi z iskro, ki jo odda električna svečka
nekoliko pred ZML bata.
- - 13
Ekspanzija –delo
Delovni takt se prične z vţigom komprimirane zmesi zraka in goriva. Točka vţiga
je postavljena pred ZML, zaradi časa ki je potreben za vţig zmesi v zgorevalnem
prostoru. Hitrost gorenja zmesi bencina in zraka je v pogojih, ki vladajo v komori
okvirno med 25 m/s in 30m/s. Ker ţelimo, da zmes zgori v območju ZML bata, ko
je prostornina najmanša, moramo hitrost gorenja upoštevati in sproţiti vţig
občutno prej.
Razliko v stopinjah zasuka motorne gredi med točko vţiga in ZML imenujemo
predvţig. Idealna točka vţiga se z obrati in polnitvijo motorja spreminja, zato
predvţig prilagajamo delovni točki motorja. Tako je za nizke obrate dovolj le
kakih 5°-8° predvţiga, pri visokih obratih in največji polnitvi pa 25°-35° ali več.
Na idealen kot predvţiga vplivajo tudi oblika komore in drugi dejavniki, zato se
krivulje predvţiga med motorji razlikujejo. Za proţenje iskre skrbi sistem vţiga, ki
glede na delovno točko motorja sprememija kot predvţiga. Mehanske sisteme
vţiga so zamenjali elektronski, zato je ve večina krmilnikov vţiga integrirana v
skupno enoto z krmilnikom vbrizga goriva.
Po vţigu nastane zgorevanje, ki se iz kompresijskega takta podaljša v
ekspanzijski takt. Zaradi predvţiga zgori večina zmesi takoj po ZML. Tlak pri
zgorevanu močno naraste in ustvari silo na bat, ki se giblje navzdol, s čimer
opravlja delo, ki se preko ojnice in ročične gredi prenese iz motorja.
Motor delo oddaja samo v delovnem taktu, medtem ko se za sesanje,
komprimiranje in kasnejši izpuh delo troši. Bat se giblje od ZML proti SML, pri
čemer se prostornina v valju povečuje. Zaradi povečanja prostornine padeta tudi
temperatura in tlak zgorelih plinov. Tlak izpušnih plinov je ob koncu delovnega
takta, ko se odpre izpušni ventil, le še 3 do 4 bare nad atmosferskim,
temperatura pa okoli 900°C.
- - 14
Izpuh
Izpušni ventil se odpre preden bat doseţe SML. To je potrebno zaradi več
razlogov. Poleg razbrementitve ročičnega mehanizma in zmanjšanja termične
obremenitve s tem povečamo razpolovţljiv čas za izpuh plinov. Ker je pritisk
zgorelih plinov še vedno občutno nad atmosferskim, dobimo močan tok dimnih
plinov ţe preden mora bat opravljati delo z izrivanjem le teh. Predčasno odprtje
tako zmanjša izgube zaradi izpodrivanja dimnih plinov [7].
Ob ZML je večina izpušnih plinov ţe izrinjenih. Ostaja majhna količina le-teh, ki
zaseda prostor zgorevalne komore. Ta ostanek plinov redči sveţo zmes, ki
prihaja z ţe odprtega sesalnega ventila in s tem manjša moč motorja. Ob
določenih dejavnikih nam uspe tudi to ostajajočo količino izpušnih plinov
odstraniti s podtlakom, ki se pojavi v izpušnem kanalu zaradi vztrajnosti
odtekajočih izpušnih plinov in zaradi valovnih pojavov znotraj izpušnega sistema.
Izpušni ventil se zapre za točko ZML in tako zaključi izpušni takt. Medtem se
sesanje in nov delovni cikel ţe ţačneta
Spremenljivo krmiljenje ventilov
Ker vztrajnost plinov igra večjo vlogo pri visoki vrtilni hitrosti motorja, ko so
posamezne faze časovno krajše, se z obrati spreminja idealni reţim krmiljenja, v
smislu točk odpiranja in zapiranja ventilov glede na poloţaj bata. Pri niţjih obratih
so bolj ugodi krajši časi odprtja ventilov in manjša prekrivanja, pri višjih pa daljši z
zapoznelim zaprtjem in daljša prekrivanja okrog ZML.
Iz tega sledijo kompromisi pri izbiri najugodnejših parametrov krmilja, saj motor
deluje skozi širok spekter vrtljajev. Taţavo delno odpravljajo sodobni sistemi
krmiljenja, ki prilagajajo čase odpiranja glede na trenutne vrtljaje in
obremenjenost motorja. Izvedbe sistemov spremenljivega krmiljenja ventilov se
med proizvajalci razlikujejo. Honda uporablja sisteme V-tech, VTI in VVTI.
Porsche imenuje svoj sistem VarioCam, BMW pa Valvetronic [5].
- - 15
2.2.2 Oprema motorja
Motor za svoje delovanje potrebuje vrsto sistemov in naprav, ki so navadno
nameščene v njegovi neposredni okolici ali so nanj pritrjene.
Dovod goriva
Za dovod goriva skrbi bencinska črpalka, ki črpa gorivo iz gorivnega rezervoarja.
Pri sistemih vbrizga goriva je to navadno električna črpalka potopnega (znotraj
rezervoarja) ali zunanjega tipa, medtem ko ima večina avtomobilov, opremljenih
z uplinjačem, mehansko črpalko nameščeno na motorju. Tlak dovoda se močno
razlikuje. Vbrizg goriva zahteva od 3 do 5 bar nadtlaka, medtem ko je za
uplinjaču tlak goriva niţji, le okrog 0,3 bar nad atmosferskim.
Od črpalke potuje gorivo po dovodu – cevi, do motorja, kjer je vod priključen na
uplinjač, ali v primeru sistema vbrizga, na regulator pritiska goriva (slika 4).
Slika 4: Sistem za dovod goriva pri elektronskem vbrizgu goriva
Regulator nadzoruje pritisk v gorivnem vodu, na katerega so pričvrščene gorivne
šobe. Višek goriva se, kadar gre za sistem s cirkulacijo, vrača po drugem vodu
nazaj v rezervoar. S stalno cirkulacijo goriva se odpravi segrevanje goriva v
motornem prostoru in s tem nevarnost njegovega uplinjanja.
- - 16
Gorivo je močno hlapljivo, zaradi česar se v rezervoarju nabere večja količina
lahkih oglikovodikov. Da se prepreči uhajanje hlapov v atmosfero, rezervoar
zapira pokrov z enosmernim ventilom, ki omogoča zraku vstop, preprečuje pa
uhajanje bencinskih hlapov na prosto. Izanačevanje nadtlaka v rezervoarju je
izvedeno preko oddušnika in cevi, ki vodi hlape v posebebno posodo z aktivnim
ogljem. Dno posode je zračeno v atmosfero, bencinske hlape iz rezervoarja pa
absorbirajo ogljene granule. Kadar motor deluje, se oglikovodikovi hlapi iz granul
sproščajo in so postopoma uvedeni v sesalni trakt preko ventila.
Mazanje motorja
Vsi sodobni avtomobilski motorji se podmazujejo tlačno, za kar skrbi oljna
črpalka, ki olje črpa iz oljnega korita in ga preko filtra dovaja v glavni oljni kanal.
Olje po manjših kanalih teče do gibljivih delov motorja in jih podmazuje.
Dovajanje olja pod pritiskom povzroči, da se le-to vrine med drsne površine
leţaja in s tem ustvarja t.i. mokro trenje, kar drastično zmanjšuje obrabo in
izgube.
Hlajenje motorja
Od celotne energije, ki jo daje zgorevanje zmesi v motorju, se je le kaka tretjina
pretvori v koristno delo. Ostale dve tretjini odpadea na toploto , ki jo iz motorja
odvedemo skozi izpušno cev in hladilno napravo.
Pri obratovanju motorja nastane v valju temperatura preko 2000°[5]. Močno
toplotno obremenjeni so bat, stene valja in glava motorja z ventili. Ti deli se
intenzivno hladijo sicer bi se motor pokvaril.
Naloga hlajenja je odvajanje odvečne toplote, kar prepreči njeno kopičenje in
ustvarja potrebno obratovalno temperaturo motorja. Poznamo zračno in vodno
hlajenje. Čeprav je v preteklosti več avtomobilskih proizvajalcev uporabljalo
zračno hlajenje (Volkswagen, Porsche, Škoda,..), so sedaj vsi avtomobili in
- - 17
večina ostalih vozil, oremljeni z vodnim sistemom hlajenja (slika 5), saj je prehod
toplote iz kovinskih delov v vodo dosti boljši kakor v zrak.
Slika 5: Vodno hlajenje (vir: www.automotivecoolingservices.co.uk)
Znotraj vodotesnega plašča, ki obdaja valj in glavo, kroţi hladilna tekočina;
navadno je to zmes vode in etilen glikola oz. snovi, ki preprečuje zmrzovanje
tekočine pri nizkih zunanjih temperaturah. Tekočina odvaja toploto s sten valja in
glave ter se pri tem segreva, zaradi česar se ji zmanša gostota kar jo dvigne v
zgornji del motorja. Od tam jo vodi cev do hladilnika, ki mu je zagotovljen
neposreden zračni tok. V hladilniku se voda ohlaja, gosti in spušča na njegovo
dno kjer je spet preko cevi speljana nazaj v motor. Za povečanje hladilnega
učinka je v tokokrog vključena vodna črpalka.
Za regulacijo temperature in hitro ogretje motorja na delovno temperaturo, okrog
90 °C skrbi termostat. Če se vozilo ne giblje z zadostno hitrostjo, je naravni
zračni tok skozi hladilnik premajhen za uspešno hlajenje, zato je za hladilnik
nameščen ventilator, ki se vklopi če temperatura hladilne tekočine preseţe
določeno mejo.
Poznamo odprte in zaprte hladilne sisteme. Pri zaprtih, ki so zaradi svojih
prednosti preteţno v uporabi, se s segrevanjem v hladilnem sistemu ustvari
nadtlak, ki zagotavlja, da tekočina ne zavre znotraj temperaturnih mej
- - 18
normalnega delovanja motorja. 150 kPa tlaka tako omogoča vrelišče okrog
120 °C.
Poleg osrednjega sistema hlajenja, ki skrbi za odvajanje odvečne toplote
proizvedene z zgorevanjem zmesi, poznamo še dodatne sisteme hlajenja
motornega ali menjalniškega olja in sisteme hlajenja vstopajočega zraka, kar
uporabljajo prisilno polnjenih motorji, saj pride z dvigom tlaka tudi do
nezaţelenega dviga temperature.
Dovod zraka
Motorja zahteva stalen dotok sveţega zraka. Potrebe po zraku se skozi območje
delovanja motorja močno spreminjajo. Zrak vstopa skozi zračni filter, ki
preprečuje vstop umazaniji in prašnim delcem in s tem ščiti motor pred pretirano
obrabo. Zajem zraka je nameščen tako, da v motor vstopa hladen zunanji zrak
saj je ta gostejši od segretega zraka pod motornim pokrovom.
V sesalni trakt bencinskega motorja z notranjim zgorevanjem je nameščena
dušilna loputa, s katero voznik preko stopalke za plin uravnava moč motorja. Pri
avtomobilih z uplinjačem je dušilna loputa vgrajena v sam uplinjač. Večina
osebnih avtomobilov ima centralno dušilno loputo s progresivnim delovanjem,
medtem ko je pri športnih avtomobilih moč najti posamezne dušilne lopute za
vsak valj posebej, kar omogoča večji maksimalni pretok in hitrejše odzive
motorja. Sistem dovoda zraka prikazuje slika 6.
Slika 6: Sesalni trakt bencinskega motorja
- - 19
Do posameznih valjev je zrak speljan preko sesalnih cevi ali sesalnega
kolektorja. Cevi so večinoma izdelane s postopkom litja iz aluminija ali posebne
plastične mase. Materijal mora imeti dobro toplotno prevodnost in temperaturno
obstojnost, oblika pa mora poskrbeti za enakomerno porazdelitev zraka med
posamezne valje. Gretje kolektorja je lahko izvedeno na več načinov, s
prehodom toplote iz glave motorja, s pretokom hladilne tekočine skozi plašč
kolektorja, z električnim grelcem ali z bliţino izpušnega kolektorja. Ogrete
sesalne cevi preprečujejo kondenzacijo goriva na stenah in s tem povezano
nepopolno zgorevanje. Sesalne cevi so pritrjene na glavo motorja, kjer zrak
nadaljuje svojo pot skozi sesalne kanale in mimo ventilov v valj.
Sistem dovoda zraka mora zagotavljast tesnenje, saj lahko v nasprotnem
primeru v motor vdira zrak mimo dušilne lopute, kar povzroča zvišanje vrtljajev v
prostem teku, ali vdor zraka mimo senzorja pretoka, kar povzroči nepravilno
izmero količine vsopajočega zraka in s tem nepravilno razmerje zmesi zrak-
gorivo.
Odvod izpušnih plinov
Izpušne pline, ki nastanejo pri zgorevanju, zberemo s pomočjo izpušnega
kolektorja, pritrjenega na glavo motorja. Zaradi močne termične obremenitve,
temperarura plinov je okvirno 900°C, je izpušni kolektor izdelan iz temperaturno
obstojnega materiala. Izpušni kolektor mora bit zatesnjen, saj predčasno
uhajanje izpušnih plinov povzroča hrup, če pa plini pridejo v notranjost vozila
lahko resno ogrozijo zdravje potnikov.
Motor povzroča med svojim delovanjem hrup. Še posebno glasen je izpuh in
zlahka presega vrednosti, ki so človeku potencijalno škodljive. Zato je uporaba
dušilnikov zvoka na vozilih, vključenih v cestni promet, obvezna. Poznamo dve
vrsti dušilnikov:
- - 20
- absorpcijske, kjer se zvočna energija v porozni negorljivi snovi, ki vpija zvok,
pretvori v toplotno. Ta vrsta dušilnikov spada med nizke filtre, saj so
učinkoviti pri frekvencah nad 500 Hz.
- reflekciske, ki so sestvljeni iz resonatorjev, torej iz komor in cevi, ki so
nameščene v vrsti (zaporedma) – nizkofrekvenčni filter, ali ob strani
(odcepno) - visokofrekvenčni filter .
Dušilniki zvoka so lahko izdelani tudi kot kombinacija absorpcijskega in
refleksnega dušilnika. Zaradi velikosti, montaţe, dušilnih lasnosti in pretočnosti v
današnjih avtomobilih najpogosteje najdemo izpušni sisteme z dvemi ali celo
tremi posameznimi dušilniki.
Dušenje zvoka je nujno, vendar se pri tem v sistemu ustvarja nadtlak, ki
zmanjšuje moč motorja. Izpušni sistem z dušilniki vedno predstavlja določen
kompromis med glasnostjo in negativnim vplivom na moč motorja. Prav tako je
vpliv dolţin in presekov cevi na polnjenje valjev znaten, zato je načtovanje
najugodnejšega izpušnega sistema zapleten postopek.
Izpušni sitem vključuje tudi naprave za zmanjševanje emisij škodljivih izpušnih
plinov; predvsem oglikovega dioksida (CO), nazgorjenih oglikovodikov (HC) in
dušikovih oksidov (NOx). Glavno vlogo pri zmanjševanju škodljivih emisij ima
izpušni katalizator (slika 7).
- - 21
Slika 7: Izpušni sistem s katalizatorjem (vir: http://hdabob.com)
Ta ima valjasto ali ovalno obliko in je nameščen za izpušnim kolektorjem pred
prvim dušilnikom zvoka. V notranjosti katalizatorja je monolitno keramično
satovje na katero je nanešena plast ţlahtne kovine (platina, paladium), katera pri
zniţani temperaturi sproţi oksidacijo CO in HC ter hkratno redukcijo NOx , s
čimer drastično zniţuje izpuste teh škodljivih plinov v okolje.
Za pravilno in trajno delovanje katalizatorja mora bit izpolnjenih več pogojev.
Katalizator mora biti ogret na delovno temperaturo nad 300 °C, hkrati pa ne sme
preseči temperature 1000 °C za dalj časa, saj se njegove katalitične sposobnosti
nepopravljivo zmanjšajo. Prekoračitev temperatur preprečimo z natančno
regulacijo zmesi zrak-gorivo, kar zagotavlja tudi zadostno razmerje kisika v
izpušnih plinih, ki je pogoj za pravilno delovanje modernih tripotnih katalizatorjev.
Senzor koncentracije kisika (λ-sonda) je nameščen pred katalizatorjem. Ta
pošilja informacijo o vsebnosti kisika v izpušnih plinih krmilniku vbrizga, ki po
potrebi prilagodi količino vbrizganega goriva. Zaradi natančne in hitre regulacije,
- - 22
ki jo zahteva moderni tripotni katalizator, je postala uporaba elektronskega
sistema vbrizga nujna [2]. Poleg katalizatorja se za zmanjševanje škodljivih
izpustov koristi recirkulacija izpušnih plinov (ang. exhaust gas recirculation-
EGR), kjer deleţ izpušnih plinov uvajamo v sesalni trakt motorja.
Sistem vžiga
Pri motorjih sistema Otto vţge segreto in stisnjeno zmes goriva in zraka
električna iskra, ki preskoči med elektrodama vţigalne svečke. Vţig se zgodi ob
točno določeni poziciji bata, zato je sisem vţiga tako kakor krmilni mehanizem
ventilov, v sinhronizirani povezavi z ročično gredjo.
Vţigalna naprava mora zagotoviti iskro, ki je dovolj močna, da hitro vţge zmes
goriva in zraka v pogojih, ki vladajo v zgorevalnem prostoru. Tlak, temperatura in
kvaliteta zmesi vplivajo na vţigalno napetost, ki je pri konvencionalnih sistemih
vţiga v rangu od 20 kV do 30 kV z okvirno energijo 40 mJ [5].
Vţigalna tuljava pretvori nizko enosmerno pulzirajočo napetost v pulzirajočo
visoko napetost, ki po visokonapetostnih kablih potuje, do vţigalne svečke v glavi
motorja. Pri starejših bateriskih sistemih vţiga je bila vţigalna tuljava samo ena.
Iskra je bila do posameznih svečk pripeljana s pomočjo dodelilnika z rotorjem.
Slednji se je postopoma upuščal v prid uporabe vţigalnih tuljav z več odcepi ali
še bolje s posamičnimi vţigalnimi tuljavami, ki so nameščene neposredno na
vţigalno svečko (ang. coil on plug). Slednje omogočajo tudi višje vţigalne
napetosti in energije iskre, povzročajo manj elektromagnetnih motenj in
odpravljajo dolgo visokonapetostno povezavo, kar poveča zanesljivost delovanja.
Električno shemo baterijskega vţiga prikazuje slika 8.
- - 23
Slika 8: Baterijski vţig (vir: [6] )
Primarno navitje vţigalne tuljave je na eni strani priključeno na pozitivno sponko
avtomobilskega akumulatorja, druga stran navitja pa je preko prekinjevalnika, ki
je vgrajen v dodelilnik, povezana na električno maso. Kadar je prekinjevalnik
sklenjen teče skozi primarno navitje enosmerni tok, ki v jedru tuljave ustvari
magnetno polje.
V trernutku vţiga prekinjevalnik prekine povezavo, kar povzroči zmanjšanje
magnetnega polja v jedru tuljave. V navitjih se ob tem inducira napetost, ki je
sorazmerna številu ovojev navitja in hitrosti spremembe magnetnega polja v
jedru tuljave. V sekundarnem navitju je ta napetost dovolj visoka, da povzroči
preskok iskre na svečkinih elektrodah, kar vţge zmes v valju. Vzporedno z
prekinjevalnikom je vezan kondenzator, ki preprečuje iskrenje na
prekinjevalčevih kontaktih.
Uporaba prekinjevalnika omejuje velikost toka skozi primarno navitje tuljave in s
tem največjo energijo in napetost iskre. Poleg tega so elektrode prekinjevalnika
podvrţene močni obrabi zaradi toka, ki teče skoznje in zahtevajo pogosto
servisiranje. Izboljšavo predstavlja tranzistorski vţig, kjer je prekinjevalnik
- - 24
zamenjan s tranzistorskim stikalom, odmikač v obliki grebenaste gredi, ki
kontakte sklapljala v trenutkih vţiga, pa je zamenjan z induktivnim, halovim ali
redkeje z optičnim dajalnikom pulzov. Ta v točki vţiga pošlje signal
tranzistorskemu vezju, ki prekine tok skozi navitje vţigalne tuljave.
Predvţig se spreminja predvsem v odvisnosti od hitrost vrtenja in obremenitve
motorja. Sprva je bila regulacija izvedena mehansko s centrifugalnim in
podtlačnim regulatorjem, ki sta prav tako vgrajena v dodelilnik. Mehanska
regulacija predvţiga se je upustila v prid elektronskemu krmiljenju, ki omogoča
večjo natančnost, ponovljivost in poljubne oblike krivulj predvţiga. Dajalnike
pulzov znotraj dodelilnikov so zamenjali induktivni senzorji, ki berejo pozicijo
direktno z gredi motorja, kar odpravlja mala nihanja točke vţiga, ki so posledica
zračnosti v pogonu dodelilnikov.
Avtomobilski električni sistem
V vozilu je mnoţica električnih naprav. Sistem vţiga potrebuje električno energijo
za svoje delovanje, motor zaţenemo z električnim zaganjačem. Velik porabnik
električne energije je tudi elektronski sistem vbrizga goriva s krmilnim
računalnikom, električno črpalko in elekromagnetnimi šobami. Poleg sistemov, ki
jih potrebuje motor za svoje delovanje, je tu še mnoţica ostalih porabnikov
električne energije. Osvetlitev, naprave za aktivno in pasivno varnost ter naprave
za udobje potnikov, so vse večje ali manjše porabnice električne energije, pri
čemer se potrebe z modernizacijo vozil še povečujejo.
Vir električne energije je akumulator, ki porabnikop dovaja enosmerno napetostjo
z nazivno vrednostjo 6 V, 12 V ali 24 V. V avtomobilih večinoma najdemo 12V
sisteme v teţjih transportnih vozilih pa 24 V oz. deljene 12 V in 24 V sisteme. Da
se akumulator ne izprazni skrbi generator napetosti, v obliki alternatorja ali
dinama, ki ga najdemo v starejših avtomobilih. Generator ţene motorna gred,
polnilna napetost pa je regulirana na vrednost, ki je nekoliko višja od napetosti
akumulatorja, kar zagotavlja konstantno polnjenje.
- - 25
3 Priprava zmesi zraka in goriva
Motorji z notranjim zgorevanjem proizvajajo moč z zgorevanjem zmesi goriva in
zraka. Ker je gorivo tekoče, ga je potrebno predhodno upliniti in mu primešati
pravo količino kisika. V bencinskih motorjih ima razmerje zraka in goriva izjemen
vpliv na kvaliteto zgorevanja, s tem pa na izkoristek in splošno delovanje motorja.
3.1 Teoretično mešalno razmerje in faktor λ
Teoretično mešalno razmerje (ang.: stoichometric air-fuel ratio) imenujemo
masno razmerje zraka in goriva, ki teoretično omogoči popolno zgorevanje
določenega goriva. Teoretično idealno mešalno razmerje se razlikuje glede na
vrsto goriva, kar podaja tabela 1.
Gorivo Teoretično
mešalno
razmerje
Bencin 14,7:1
Zem. plin 17,3:1
Propan 15,7:1
Etanol 9:1
Metanol 6,5:1
Vodik 34,3:1
Dizel 15:1
[10]
Za bencin je razmerje enako 14,7:1, saj za popolno zgorevanje 1 kg bencina
potrebujemo 14,7 kg zraka. Če razmerje izrazimo volumsko to znaša okvirno
10000 litrov zraka za vsak liter bencina.
- - 26
S faktorjem λ (lambda) označujemo razmerje med zrakom, ki vstopa v motor in
zrakom, ki je teoretično potreben za popolno zgorevanje uvedenega goriva.
G
Z
m
m
7,14 (3.1)
Kadar je λ = 1, je dovedena zmes v teoretično idealnem razmerju. Če je v zmesi
več goriva kot ga določa teoretično mešalno razmerje, pravimo da je zmes
bogata (λ ≤ 1) , če je goriva manj, je zmes revna (λ ≥ 1).
3.1.1 Vpliv zmesi
Oglejmo si, kakšen vpliv ima razmerja zraka in goriva na moč, specifično porabo
goriva in izpuste škodljivih plinov [1].
Slika 9: Vpliv zmesi na moč in specifično porabo
- - 27
Slika 10: Tvorba škodljivih izpušnih plinov glede na vrednost faktorja λ
Motor proizvede največjo moč, kadar je zmes nekoliko bogata (λ = 0,95 – 0,85),
najboljši izkoristek pa doseţe pri 10 % do 20 % pribitku zraka (λ = 1,1 -1,2).
Tudi vpliv na emisije škodljivih plinov je znaten. Če je v zmesi višek goriva, se bo
v izpuhu povečala količina nezgorelih oglikovodikov (HC). Zaradi pomankanja
kisika bo tudi nastanek oglikovega monoksida (CO) večji kot sicer. Pri dobrem
zgorevanju obe vrednosti padeta, vendar je takrat zaradi visokih temperatur
zgorevanja tvorba dušikovih oksidov (NOx) najvišja. Z grafa lahko razberemo, da
je za zmanjšanje skupne količina škodljivih emisij najugodnejša zmes s pribitkom
zraka, kar so s pridom izkoriščali za zmanjševanje škodljivih emisij avtomobilov
pred uvedbo katalizatorja [2].
V tripotnem katalizatorju se kisik, ki je vezan z dušikom, sprosti (redukcija) in
oksidira molekule oglikovega monoksida ter nezgorelih oglikovodikov. Zato so ob
uporabi katalizatorja, emisije škodljivih plinov najniţje, kadar je zmes v
teoretičnem idealnem razmerju ali λ = 1. Poleg tega je za ohranjanje katalitičnih
sposobnosti nujno, da zmes od teoretičnega razmerja ne odstopa preveč ali za
dalj časa. V nasprotnem primeru bi, zaradi povečane količine nezgorelih
- - 28
oglikovodikov v izpušnih plinih, temperatura znotraj katalizatorja narasla kar bi
trajno škodovalo njegovim katalitičnim sposobnostim.
Da je zgorevanje optimalno ne zadostuje le pravo razmerje reagentov, ampak
tudi, da je zmes kar se da homogena, kar je pogojeno tudi z dobrim uplinjanjem
goriva. Gorivo vstopa v zračni tok v obliki kapljic; manjše kot so le-te hitreje in
laţje se bo gorivo uplinilo.
3.1.2 Mešalno razmerje v različnih območjih delovanja motorja
Stopalka za plin je povezana z dušilno loputo, ki uravnava pretok vstopajočega
zraka in s tem moč motorja. Masni tok zraka izdatno varira s spremembo hitrosti
vrtenja in obremenitvijo motorja, zato mora tudi pretok goriva slediti tem
spremembam, če hoče ohraniti ţeleno razmerje med zrakom in bencinom. To
prilagajanje količine dodanega goriva vstopajočemu zraku je osnovna naloga
sistema za distribucijo goriva.
Ker mešalno razmerje vpliva na moč in izkoristek, je odstopanje od teoretično
idealnega razmerja v določenih reţimih deovanja motorja zaţeleno. Oglejmo si
kdaj in zakaj je temu tako.
Zagon in segrevanje motorja na delovno temperaturo
Kadar je ob zagonu motor hladen, se začetna zmes zraka in bencina na svoji poti
osiromaši. Gorivo, ki vstopa v zračni tok v manjših ali večjih kapljicah, se pri niţjih
temperaturah počasneje uplinja. Poleg tega je ob hladnem motorju kondenzacija
goriva na stenah sesalnega trakta povečana. Gorivo se odlaga na hladne stene
sesalnega kolektorja, vsisnega kanala, ter na stene valja in zgorevalne komore.
- - 29
Osiromašena zmes se teţje vţge, kar povzroča teţave pri zagonu motorja. Da se
to prepreči, mora imeti sistem za distribucijo goriva moţnost obogatitve zmesi ob
hladnem vţigu.
Slabše uplinjanje in povečano kondenziranje goriva na stenah sesalnega trakta
traja vse dokler se motor ne segreje na zadostno temperaturo. Dober sistem za
distribucijo goriva zato v tem času dovaja obogateno zmes in tako kompenzira
osiromašenje zmesi, ki je vzrok moţnih zastojev in slabega pospeševanja
hladnega motorja.
Prosti tek in nizka obremenitev
Kadar motor doseţe delovno temperaturo morajo sistemi za distribucijo goriva, ki
dovajajo gorivo v sesalni kanal, poskrbeti, da je zmes v teoretično idealnem
mešalnem razmerju.
Moderni sistemi direktnega vbrizga v teh primerih močno zmanšajo količino
vbrizganega goriva, kar občutno zmanjša porabo. Ţal je to moţno le pri
direktnem vbrizgu goriva v valj, saj lahko le pri tem načinu vbrizga doseţemo
plastno razporeditev goriva znotraj zgorevalnega prostora (ang.: stratified
charge). Vţig je še vedno zanesljiv, kljub temu, da je skupna količina goriva
močno zmanjšana.
Polna obremenitev
Pri polni obremenitvi so pri klasičnem sistemu distribucije goriva in pri sistemu z
direktnim vbrizgom pogoji znotraj zgorevalne komore v grobem enaki. Ker pri
polni obremenitvi zahtevamo od motorja predvsem to, da odda največjo moţno
moč, je ţelena tudi obogatitev zmesi.
Pospeševanje in pojemanje
Kadar se zmes tvori v sesalnem traktu, je uplinjanje goriva močno odvisno tudi
samega tlaka znotraj sesalnih cevi. V končnem delu vsisnega kanala (v bliţini
- - 30
ventilov) se med delovanjem motorja ustvari tanka plast goriva, ta se drţi sten
sesalnega kanala, njena debelina pa je odvisna od tlaka v cevi.
Nabrano gorivo se izloča iz dotekajoče zmesi, oziroma v njo oddaja preseţek
goriva, zato ob spremembi tlaka v sesalni cevi, ki je posledica spremembe v
odprtju dušilne lopute, pride do vpliva na razmerje zraka in goriva v zmesi.
Ob prehodnih pojavih, kot sta pospeševanje in pojemanje, je zaţeljeno, da
sistem za distribucijo te vplive upošteva in mešalno razmerje prilagodi. Ob
pospeševanju tlak v sesalni cevi naraste in film se odebeli, kar povzroči
osiromašenje zmesi. Da to prepreči in dodatno obogati zmes v času, ko je
potrebna maksimalna moč, sistem za distribucijo goriva ob pospeševanju dovaja
obogateno zmes. Obogatitev se postopoma zmanjšuje dokler se debelina
gorivne plasti ne prilagodi novim tlačnim razmeram. Obratno je pri odvzemu
plina. V tem primeru je priporočljivo, da sistem za distribucijo goriva, dokler traja
prehodni pojav, dovaja nekoliko osiromašeno zmes.
Zaviranje z motorjem
Ob zaviranju vozila z motorjem, v primerih kot je voţnja po klancu navzdol, se pri
modernih sistemih vbrizga dotok goriva prekine. To omogoča določen prihranek
goriva in ščiti katalizator pred pregretjem, zaradi nezgorelih oglikovodikov, ki so
produkt nepopolnega zgorevanja.
Če povzamemo, je naloga sistema za distribucijo goriva, da vstopajočemu zraku
primeša gorivo v ţelenem mešalnem razmerju. Večinoma je to razmerje blizu
teoretičnemu, vendar je v prehodnih pojavih odstopanje v prid moči, porabi, ali
drugemu kriteriju zaţeleno.
Za bencinske motorje poznamo dva osnovna tipa sistemov distribucije goriva, ki
tvorijo zmes v sesalnem traktu motorja. To so sistemi z uplinjačem in sistemi
- - 31
vbrizga goriva. Moderne sisteme z direktnim vbrigom bencina, kjer se zmes tvori
v delovnem prostoru motorja, srečamo v bencinskih motorjih zadnje generacije.
3.2 Uplinjač
Uplinjač vse od rojstva Ottovega motorja skrbi za tvorbo vnetljive zmesi zraka in
goriva. Osnovni princip delovanja se je spreminjal vse do pojava Maybachovega
uplinjača z razpršilno šobo in difuzorjem [1]. Ta način razpršitve goriva se je
izkazal za najbolj uspešnega in se je nadalje razvil v razne tipe in oblike
uplinjačev.
Slika 11: Zgradba uplinjača (vir: www.shoptalkforums.com)
Uplinjači delujejo po Venturijevem principu. Ta pravi, da s povečanjem pretoka,
tlak v zračnem toku pade. Zoţitev - difuzor v grlu uplinjača povzroči podtlak, ki
črpa gorivo iz plovčeve komore. Gorivo teče skozi glavno šobo in skozi njeno
ustje, ki je nameščeno na najoţjem delu difuzorja, vstopa v zračni tok v obliki
drobnih kapljic.
- - 32
Gorivo se popolnoma uplini šele v sesalni cevi pod vplivom toplote in zniţanega
tlaka. Povečanje zračnega pretoka poveča podtlak v difuzorju, kar poveča pretok
goriva. Tako uplinjač poskrbi za ohranjanje mešalnega razmerja, ki ga v grobem
določa glavna šoba pri spremembi pretoka zraka.
Sprememba v zračnem pretoku je tako velika, da sama odvisnost med pretokom
zraka skozi difuzor in pretokom goriva skozi glavno šobo ne more obdrţati
enakega mešalnega razmerja skozi celotno območje delovanja motorja. Zato je
poleg glavne šobe najti v uplinjačih tudi dodatne podsestave, ki vplivajo na zmes.
Poleg glavne šobe, je tako na večini uplinjačev moţna menjava več ostalih delov,
ki vplivajo na njegovo delovanje v različnih reţimih delovanja motorja. Izravnalna
šoba, mešalna cev, šoba prostega teka in premer difuzorja vse vplivajo na
končno karaktristiko uplinjača. Tudi drugače zasnovani uplinjači, recimo uplinjači
z zasunom in šobno iglo, imajo moţnost prilagajanja mešalnega razmerja.
Večina uplinjačev ima tudi napravo za obogatitev zmesi med pospeševanjem in
napravo za obogatitev pri hladnem zagonu motorja.
Nastavitev uplinjača je moţna po območjih, večioma treh, ki se med seboj
nekoliko prekrivajo. Čeprav je natančnost prilagoditve uplinjača na karakteristiko
motorja omejena, je v preteklosti, ko so bile zahteve po nizkih emisijah in dobrem
izkoristku manjše, zadostovala. Uplinjači so dolga leta dobro sluţili svojemu
namenu.
Velika teţava uplinjača je prilagajanje na spremembe v gostoti zraka, ki
nastopajo zaradi temperature in zračnega pritiska. Še posebno se teţave
pojavijo pri voţnji na velikin nadmorskih višinah, kjer je zrak redkejši in uplinjač
posledično zalaga motor s prebogato zmesjo. Pomanjkljivost uplinjača je tudi
teţavnost izvedbe povratnozančne regulacije na podlagi vsebnosti kisika v
izpušnih plinih. Klasičen uplinjač je zato nezmoţen obdrţati zmes v ozkem
območju okrog teoretično idealnega mešalnega razmerja, ki ga zahtevajo
- - 33
katalizatorji. Nekatere teţave rešijo kompleksni elektronski uplinjači, vendar jih
obilica komponent dela nezanesljive in drage za vzdrţevanje.
3.3 Sistemi vbrizga bencina
Vbrizg goriva ima številne prednosti pred uplinjači, zato so z napredkom in
pocenitvijo sistemi vbrizga uplinjač skoraj popolnoma izpodrinili.
3.3.1 Zgodovinski razvoj
Prvi sistem vbrizga goriva je za motor z ţarilno glavo razvil H. A. Stuart. Kasneje
je Robert Bosch sistem izpopolnil in adaptiral za uporabo na dizelskem motorju z
notranjim zgorevanjem.
Prvi sistemi vbrizga bencinskih motorjev so bili prilagojeni dizelski sistemi. V
osebnem avtomobilu se je tak sistem pojavil leta 1952. To je bil mehanski sistem
z direktnim vbrizgom v valj. Kasneje se je direktni vbrizg opustil v prid vbrizgu v
sesalno cev [11].
Glavni element mehanskega sistema vbrizga je bila visokotlačna črpalka, gnana
z motorne gredi. Vbrizg je bil sinhroniziran z motorjem in je dovajal en odmerjen
vbrizg na cikel, za vsak valj.
Prednosti sistema sta bili drobnejša razpršitev goriva in boljša nastavljivost, kar
se je kazalo v večji moči in boljšem izkoristku. Naprava je bila zaradi zapletenosti
draga in je zahtevala redno vzdrţevanje. Sistem se tako ni uveljavil kot resen
konkurent uplinjaču, kar se tiče uporabe v osebnih avtomobilih, ampak se je
uspešno uporabljal v avtomobilskem motošportu.
- - 34
Leta 1956 je Bendix predstavil prvi komercijalni elektronski sistem vbrizga
imenovan Elektrojector. Na trgu se je pojavil leta 1958 v nekaterih Chryslerjevih
modelih, vendar je zaradi teţav in nezanesljivosti bil kasneje umaknjen iz
uporabe. Pravice za patent Elektrojectorja je odkupil nemški prizvajalec Bosch in
sistem dalje izpopolnjeval.
Leta 1967 se je na trţišču pojavil prvi avtomobil, opremljen z elektronskim
sistemom vbrizga proizvajalca Bosch. Sistem je imel elektronski krmilnik,
elektromagnetne brizgalne šobe, glavni merilnik obremenitve motorja, pa je bil
senzor pritiska zraka v sesalni cevi, zaradi česar se je imanoval D-Jetronic.
Robert Bosch (1861 – 1942) in kasnejša druţba Robert Bosch GmbH sta bila od
samih začetkov avtomobilizma vodilna v razvoju raznih avtomobilskih
podsistemov. Tu predvsem izpostaviljamo Boscheve sisteme vţiga in sisteme za
vbrizg goriva, katerih nenehen razvoj je pomembno prispeval k razvoju
bencinskega motorja, do današnja stopnje.
Večina evropskih avtomobilov je opremljena prav z Boschevimi sistemi vbrizga
goriva, vţigom ali kombinacijo obojega. Tudi velika večina ostalih sistemov
krmiljenja, ki so vgrajeni v serijske avtomobile širom sveta, bazira na Boschevi
tehnologiji.
3.3.2 Boschevi sistemi vbrizga
Ker je bil proizvajalec Bosch od začetka vodilni v razvoju sistemov vbrizga, nam
kronološki pregled nekaterih Boscevih sistemov poda dobro predstavo o poteku
razvoja na tem področju.
- - 35
Sistemi s kontinuranim vbrizgom
To druţino sistemov vbrizga goriva so pri Boschu razvijali vzporedno z
elektronskimi sistemi vbrizga. Prvi kontinuirani sistemi vbrizga so bli popolnoma
mehansko-hidravlični brez elektronskih komponent, kasnejše izvedbe pa so bile
izbolšane z elektronsko regulacijo zmesi.
K-Jetronic se je na trgu pojavil leta 1973. Srce sistema je dodelilnik za gorivo z
merilno loputo. Kadar se pretok zraka poveča, se loputa v stoţčastem ohišju
dvigne, kar poveča pretok goriva do šob, ki gorivo vbrizgavajo neprekinjeno, iz
česar tudi izvira poimenovanje. Gibanju lopute nasprotuje gorivo pod pritiskom, ki
je reguliran glede na delovno območje motorja. Kontrolni pritisk uravnava
regulator glede na temperaturo motorja. Če je motor mrzel je kontrolni pritisk
zmanjšan, merilna loputa se za določenem pretok zraka dvigne višje kot sicer in
sistem dovaja obogateno zmes.
Leta 1976 so sistem nadgradili z λ-sondo in elektronskim krmilnikom, ki je s
pomočjo elektromagnetnega ventila moduliral kontrolni pritisk. S tem je K-
Jetronic postal prvi sistem vbrizga s povratnozančno regulacijo zmesi in je s tem
omogočal uporabo tripotnega katalizatorja.
Neslednjo stopnjo v razvoju kontinuiranih sistemov vbrizga je predstavljal KE-
Jetronic. Od predhodnika se loči po elektronski regulaciji zmesi, z
elektrohidravličnim aktuatorjem na dodelilniku goriva. Naloga osnovnega
spreminjanja količine vbrizganega goriva ostaja v domeni mehanskega merilnika
pretoka zraka, medtem ko je regulacija zmesi glede na razne reţime delovanja
motorja (vţig, ogrevanje na delovno temperaturo, pospeševanje,...) in informacijo
iz λ-sonde prepuščena elektronskemu krmilniku. Ta dobiva podatke o motorju iz
senzorjev, ki so enaki senzorjem, ki se uporabljajo v Boschevih elektronskih
sistemih vbrizga.
- - 36
Sistem je zgrajen tako, da je sposoben osnovnega krmiljenja vbrizga, kljub
popolni odpovedi elektronskega dela sistema. Zaradi tega je sistem zelo
zanesljiv in so z njim opremljali avtomobile višjega cenovnega razreda.
Z napredkom elektronskih sistemov vbrizga, ki so postali cenejši, bolj prilagodljivi
in so omogočali boljši nadzor nad zmesjo, je uporaba mehanskohidravlični
sistemov zamrla.
Elektronski sistemi s pulznim vbrizgom
D-Jetronic
Je bil prvi elektronsko krmiljen sistem vbrizga, ki ga je na trg poslal Bosch.
Večtočkovni vbrizg se vrši s pomočjo elektromagnetnih vbrizgalnih šob, ki gorivo
vbrizgavajo prekinjajoče. Pritisk goriva v dovodu je konstanten, zato je pretok
skozi šobe odvisen le od časa odprtja ektromagnetnega ventila znotraj vbrizgalne
šobe.
Namenski senzorja pritiska pretvori spremembo pritiska v sesalnem kolektorju v
sprembo induktivnosti, ki vpliva na dolţino pulza vbrizga, preko elektronskega
vezja znotraj krmilnika.
Posamezen pulz vbrizga sproţi signal iz sistema vţiga. Tako se pogostost pulzov
veča z naraščanjem obratov motorja, njihova dolţina pa z večanjem tlaka v
kolektorju oziroma obremenitvijo. S tem je zagotovljena osnovna odvisnost med
pretokom zraka in količino vbrizganega goriva.
Korekcijo osnovne dolţine pulza, ki vpliva na mešalno razmerje, določi
elektronski krmilnik na podlagi podatkov iz senzorjev nameščenih na motorju.
Senzorji priskrbijo informacijo o temperaturi vstopajočega zraka, poziciji dušilne
- - 37
lopute in temperaturi motorja. Tako se glede na območje delovanja motorja (vţig,
segrevanje, pospeševanje,...) določi ţeleno mešalno razmerje.
Za kompenzacijo sprememb v zračnem tlaku ima senzor pritiska vgrajeno
brezzračno kapsulo. Dimenziska sprememba kapsule, ki nastane ob spremembi
zunanjega zračnega tlaka, vpliva na izhodno vrednost senzorja pritiska.
L-Jetronic
Naslednji elektronski sistem vbrizga, ki ga je razvil Bosch je bil L–Jetronic.
Pomembno spremembo predstavlja senzor volumskega pretoka zraka. Ta
elektronskemu krmilniku pošlje informacijo o količini vstopajočega zraka. Z
upoštevanjem temperaturnih in tlačnih vplivov na specifično gostoto, krmilnik iz
volumskega pretoka preračuna masni pretok vstopajočega zraka ter iz tega,
količino goriva, ki bo tvorila ţeleno mešalno razmerje.
Ker je meritev pretoka zraka direktna, se sistem avtomatsko prilagodi
spremembam volumetričnega izkoristka motorja, ki so bodisi posledica obrabe,
ogljenih oblog, sprememb v krmiljenju ventilov ali predelav.
Drugi senzorji beleţijo pozicijo dušilne lopute, vrtilno hirost motorja, temperaturo
zraka in motorja, ter zunanji zračni tlak. Na podlagi pridobljenih informacij
elektronski krmilnik določa potrebno trajanje pulza vbrizga. Pogostost pulzov je,
kot pri predhodniku, vezana na hitrost vrtenja motorja.
L-Jetronic je, kakor predhodni boschevi sistemi vbrizga, opremljen z ventilom za
dodatni zrak, ki glede na temperaturo motorja in pretečen čas od trenutka vţiga
poveča hitrost prostega teka pri hladnem motorju.
Ta sistem vbrizga je ostal dolgo v uporabi in doţivel nadgradnje tako
elektronskega krmilnika kot uporabo dotatnih senzorjev, ki so omogočali nove
funkcije. Med drugim je bila dodana zaprtozančna regulacija s pomočjo λ-sonde
- - 38
in recirkulacija izpušnih plinov, kar je omogočalo niţanje količine izpustov
škodljivih plinov.
LH-Jetronic
Leta 1982 je Bosch predstavu novo izpeljanko elektronskega sistema vbrizga.
Od predhodnika se razlikuje v uvedbi senzorja masnega pretoka, kot zamenjavo
za senzor volumskega pretoka zraka. Novost je tudi pulznoširinsko krmiljen ventil
prostega teka.
Ker senzor obremenitve motorja meri masni pretok, je s tem ţe v osnovi
zagotovljeno prilagajanje na spremembe v gostoti zraka zaradi tlaka in
temperature.
M-Motronic
Novost tega sistema je elektronska krmilna enota opremljena z mikrokrmilnikom.
Analogni signali senzorjev se pretvorijo v digitalne vrednosti s pomočjo analogno
digitalnega pretvornika in se vodijo do mikrokrmilnika, kjer teče krmilni algoritem.
Izhodi mikrokrmilnika se ojačajo v močnostni izhodnji stopnji, ki krmili razne
elektromehanske aktuatorje.
Uporaba mikrokrmilnika je omogočila realizacijo novih krmilnih funkcij in
enostavnejšo zdruţitev sistema vbrizga in sistema vţiga v skupni sistem
krmiljenja motorja. Sistem se je postopoma nadgrajeval in posodabljal, do
sodobnega sistema sekvenčnega večtočkovnega vbrizga z elektronsko kontrolo
navora (ME-Motronic) in sistema direktnega vbrizga bencina (MED-Motronic).
Mono-Jetronic
Je elektronsko krmiljen enotočkovni sistem vbrizga. Glavna komponenta sistema
je centralna enota vbrizga, ki je, podobno kakor enojni uplinjač, pritrjena na vrh
sesalnega kolektorja. Zmes se med posamezne valje razporedi s pomočjo
sesalnega kolektorja.
- - 39
Podatek o pretoku zraka se izračuna na podlagi poznane karakteristike
volumetričnega izkoristka motorja in informacije o kotu odprtja dušilne lopute in
hitrosti vrtenja. Ostali senzorji merijo temperaturo zraka in hladilne tekočine,
vsebnost kisika v izpušnih plinih (λ-sonda), ter pozicijo avtomatskega menjalnika
in klimatske naprave, če spadata v opremo vozila.
Tudi ta sistem vbrizga uporablja mikrokrmilnik, kar poenostavi prilagoditev
delovanja različnim aplikacijam in implementacijo novih funkcij. Sistem je bil
razvit kot cenejša alternativa večtočkovnim sistemom vbrizga, kar je omogočilo
uvedbo elektronskega vbrizga v avtomobilih niţjega cenovnega razreda.
Sistemi direktnega vbrizga bencina
Prvi sistemi vbrizga na bencinskih motorjih so bili mehanski sistemi direktnega
vbrizga. Ker takratna tehnologija ni bila zmoţna zadovoljivo odpraviti tehničnih
teţav, ki so posledica visokih tlakov in kratkih časov vbrizga, se je direktni vbrizg
kljub svojim prednostim opustil.
Sodobni sistemi direktnega vbrizga bazirajo na elektronskih sistemih krmiljenja
motorja. Gorivo se dovaja direktno v valj preko posebnih elektromagnetnih
vbrizgalnih šob. Časi pulzov vbrizga so močno skrajšani glede na klasične
sisteme vbrizga. Količina dovedenega goriva se regulira s trajanjem in tlakom
vbrizga. Gorivo s tlakom od 5 MPa do 12 MPa dovaja visokotlačna mehanska
črpalka.
- - 40
Slika 12: Direktni vbrizg bencina (ang. Gasolin Direct Injection - GDI)
(vir:www.motiontrends.com)
Direktni vbrizg goriva v valj ponuja nove moţnosti manipulacije zmesi, kar vodi
do nekaterih prednosti, ki jih imajo sistemi direktnega vbrizga pred klasičnim
načinom tvorbe zmesi zunaj delovnega prostora motorja. Najpomembnejša je
moţnost nehomogene plastne razporeditve zmesi v zgorevalnem prostoru.
Pri plastni razporeditvi je bogatejša, dobro gorljiva, zmes omejena na prostor v
bliţini vţigalne svečke, ostali delovni prostor pa zaseda zelo osiromašena zmes,
zrak ali recirkulirani izpušni plini. To omogoča občutne prihranke pri porabi goriva
kadar je motor le delno obremenjen in celo krmiljenje navora brez uporabe
dušilne lopute, kar zmanšuje črpalne izgube motorja.
Direktni vbrizg bencina omogoča zmanjšanje povprečne porabe in izpustov
toplogrednih plinov do 25 % [1], kar je izjemnega pomena v času, ko je
omejenost zalog fosilnega goriva in negativni vpliv toplogrednih plinov na okolje
postala očitna.
- - 41
3.4 Merjene veličine in senzorji
Krmilnik vbrizga konstantno spremlja delovanje motorja in temu primerno krmili
aktuatorje. Senzorji merijo fizikalne veličine, jih pretvarjajo v električne signale in
tako elektronskemu krmilniku priskrbijo potrebnim informacije. Merjenih veličin in
pripadajočih senzorjev je v avtomobilu mnogo in njihovo število narašča. V
naslednjem poglavju so predstavljeni le tisti, ki so bistveni za nadaljnje
razumevanje delovanja predstavljenega krmilnika.
3.4.1 Merjenje vstopajoče zračne mase
Sistem vbrizga goriva ohranja ţeleno mešalno razmerje s prilagajanjem količine
vbrizganega goriva zračni masi, ki vstopa v motor. Zato je meritev masnega
pretoka zraka primarnega pomena. Masni pretok lahko merimo posredno ali
neposredno, za kar je na voljo več tipov senzorjev.
Zračni tlak v sesalni cevi
Absolutni zračni tlak v sesalni cevi merimo s senzorjem tlaka. Le-ta meri zračni
tlak v določenem razponu odvisno od aplikacije. Za atmosfersko polnjene
motorje zadošča razpon od 15 kPa do vrednosti, ki za 10 % do 20 % presega
normalni zračni tlak 101,3 kPa. Pri prisilno polnjenem motorju mora biti razpon
večji, saj mora merilno območje presegati najvišje tlake polnjenja. Uporabljajo se
senzorji z območjem od 20 kPa do 250 kPa ali celo do 400 kPa.
- - 42
Slika 13 : Senzor zračnega tlaka proizvajalca Freescale semiconductors
(vir: www.freescale.com)
Senzorju dovajamo referenčno napetost 5 V. Izhodna napetost je linearno
odvisna od absolutnega zračnega tlaka, ker je referenčni tlak pri uporabljenem
senzorju vakum. Senzor je temperaturno kompenziran.
Tlak v sesalni cevi in masni pretok v motor nista premosorazmerna, saj se
sposobnost črpanja skozi delovno območje motorja spreminja. Masni pretok se
izračuna posredno. Iz podatka o tlaku v sesalni cevi, podatka o vrtilni hitrosti
motorja in znane črpalne karakteristike motorja (volumski izkoristek v odvisnosti
od vrtilne hitrosti in zračnega tlaka), se določi volumen vstopajočega zraka. Iz
znanega volumna ali volumskega pretoka se preko specifične gostote s
temperaturno korekcijo izračuna masa vstopajočega zraka oziroma masni pretok.
Volumski pretok zraka
Namenski senzor volumskega zračnega pretoka je vpeljal Bosch na sistemih
vbrizga L-Jetronic. Značilno zanj je posebno oblikovano ohišje z vzmeteno
loputo, ki jo odkloni zračni tok. Na loputo je pritrjen potenciometer, ki glede na kot
zasuka daje informacijo o volumskemu pretoku. Ta se preko koregirane
specifične gostote zraka pretvori v masni pretok vstopajočega zraka.
- - 43
Masni pretok zraka
V sredini cevastega ohišju znanega preseka, skozi katerega teče vstopajoči zrak,
je pritrjen platinast upor v obliki ţice ali na substrat naparjenega filma. Skozi
merilni upor teče krmiljen električni tok in ga segreva toliko, da je njegova
temperatura za 100 °C višja od temperature vstopajočega zraka.
Slika 14: Delno odprt Boschev senzor volumskega pretoka (levo) in masnega
pretoka zraka (desno)
(vir: www.swedishautoparts.com)
Povečanje zračnega pretoka upor močneje ohlaja in tok skozenj se poveča.
Električni tok teče skozi kalibriran upor, zato se sprememba zračnega pretoka
odraţa v spremembi padca napetosti na tem uporu, kar predstavlja izhod
senzorja. Izhodna napetost je nelinearno odvisna od masnega pretoka zraka
skozi senzor.
Ker je meritev masnega pretoka direktna, kompenzacija temperaturnih in tlačnih
vplivov ni potrebna. Senzor je razvil proizvajalec Bosch in se v izpopolnjeni
različici vgrajuje še sedaj.
Pozicija dušilne lopute
Senzor pozicije dušilne lopute je namensko izdelan vrtljivi potenciometer v
plastičnem ohišju. Pritrjen je na zunanji strani ohišja lopute, os lopute pa je
povezana z osjo potenciometra.
- - 44
Senzor ima tri priključke, enega za maso, enega za referenčno napetost in enega
za sredinski odcep, ki predstavlja izhod senzorja. Maksimalen kot zasuka je
okrog 90°. Izhodna napetost je linearno odvisna od kota odprta in se giblje v
območju med 0 V in referenčno napetostjo 5 V.
Slika 15: Senzorja pozicije dušilne lopute z enojnim območjem (levo) in z dvojnim
območjem (desno)
(vir: http://apps.bosch.com.au)
Informacija o kotu odprtja dušilne lopute se navadno uporablja za določanje
delovnega območja motorja, kot so pospeševanje, pojemanje ali prosti tek. V
nekaterih sistemih, med njimi je tudi Mono-Jetronic, pa je pozicija lopute glavni
podatek o obremenjenosti motorja.
V teh primerih se masni pretok izračuna posredno. Na podlagi poznane motorne
karakteristike volumskega izkoristka v odvisnosti on kota odprtja dušilne lopute in
motornih vrtljajev je mogoč izračun volumskega pretoka, iz tega pa je preko
koregirane specifične gostote moţen izračun masnega pretoka vstopajočega
zraka.
Ker je v primerih, ko je senzor pozicije lopute glavni indikator obremenitve
motorja, potrebna velika resolucija pri majhnih kotih odprtja dušilne lopute, je v
nekatere senzorje vgrajeni dvosledni potenciometer. Prva sled pokriva območje
zasuka od 0° do 23°, druga pa zasuke od 17° do 90°. Tak senzor ima dva
izhoda.
- - 45
Slika 16: Zgradba in izhodna karakteristika senzorja z dvojnim območjem
3.4.2 Merjenje ostalih veličin
Vrtilna hitrost motorja
Podatek o vrtilni hitrosti je nujen za izračun zračne mase ki vstopa v delovni cikel,
kadar se le-ta izračuna posredno iz volumskega izkoristka motorja. Prav tako se
vrtilna hitrost upošteva kadar je meritev masnega pretoka zraka direktna, saj
krmilnika ne zanima pretok, temveč količina oziroma masa, ki v posamezen cikel
vstopa.
Sistem vţiga na bencinskem motorju proizvaja pulze, katerih gostota je
sorazmerna vrtilni hitrosti. S šetjem le-teh skozi znano časovno obdobje dobimo
zanesljiv podatek o dejanski vrtilni hitrosti motorja. Pri starejših sistemih vţiga s
prekinjevalnikom, pulze zajemamo s priključka primarnega navitja na vţigalni
tuljavi. Če je dodelilnik opremljen s halovim ali induktivnim senzorjem in
pripadajočim rotorjem, pulze zajemamo na izhodu senzorja.
- - 46
Novejši motorji so opremljeni z namenskimi induktivnimi senzorji. Tak senzor v
kombinaciji s posebnim zobatim kolesom, pritrjenim na motorno gred prikazuje
slika 17.
Slika 17: Induktivni senzor z zobatim kolesom
(vir: http.//forums.audiworld.com)
Kadar mimo induktivnega senzorja potuje kovinski zob, se magnetni fluks skozi
navitje poveča, kadar pa mimo potuje reţa se flux zmanjša. To povzroči
induciranje izmenične napetosti na kontaktih senzorja. Frekvenca inducirane
napetosti je premo sorazmerna vrtilni hitrosti motorja.
V uporabi so različna zobata kolesa. Taka, katerim na določeni poziciji manjka en
zob, lahko poleg hitrosti vrtenja, dajejo tudi informacijo o absolutni poziciji
motorne gredi.
Temperatura
Za potrebe krmiljenja vbrizga je elektronski sistem opremljen z dvema
temperaturnima senzorjema. En meri temperaturo hladilne tekočine (ang. coolant
temperature), drugi pa temperaturo zraka, ki vstopa v motor (ang. intake air
temperature).
- - 47
Senzorja sta realizirana z NTC upori (ang.: negative temperature coeficient) v
medeninastem ali plastičnem ohišju z dvema priključkoma. Upornost senzorja z
dvigom temperature pade, odvisnost pa je nelinearna.
Slika 18: Temperaturna senzorja z NTC uporom
Zunanji zračni tlak
Ker se specifična gostota zraka spreminja tudi s spremembo v zunanjem
zračnem tlaku, mora krmilnik v izračunu vstopajoče zračne mase, ta vpliv
upoštevati. V ta namen se uporablja senzor zunanjega zračnega tlaka.
Senzor je soroden tistemu, ki se uporablja za merjenje tlaka v sesalni cevi,
vendar z oţjim merilnim območjem (od 60 kPa do 115 kPa). V nekaterih
izvedbah sta senzor pritiska in senzor temperature zraka integrirana v skupno
ohišje.
Koncentracija kisika v izpušnih plinih
Koncentracija kisika v izpušnih plinih (ang.: exhaust gas oxigen), ki se meri s
pomočjo λ-sonde, je pokazatelj razmerja zraka in goriva v zmesi in s tem tudi
kvalitete zgorevanja. Keramični merilni element deluje po Nernstovem principu in
je zaprt v prepusten kovinski plašč, ki ga ščiti pred termičnimi in mehanskimi
poškodbami ter sluţi za montaţo.
- - 48
Slika 19: Ogrevana λ-sonda (vir: www.rickscarline.com)
Senzor je nameščen v izpušnem sistemu pred katalizatorjem, kjer so izpušni plini
še dovolj vroči, da senzor ogrejejo na delovno temperaturo 350 °C. Nekatere
izvedbe senzorja so dodatno električno ogrevane in delujejo ţe pri temperaturi
izpušnih plinov nad 150 °C.
Izhodna napetost je odvisna od koncentracije kisika v izpušnih plinih. Odvisnost
je izrazito nelinearna. Za bogate zmesi je izhodna napetost senzorja nekoliko
pod 1 V, za zmesi, ki imajo preseţek zraka, pa je izhod pribliţno 0 V.
Stopničasta karakteristika senzorja dopušča regulacijo zmesi le v teoretično
idealnem mešalnem razmerju, ko je λ=1. Če ţelimo regulacijo zmesi v poljubnem
mešalnem razmerju je nujna uporaba širokopasovnega senzorja, katerega
karakteristika je bolj poloţna in omogoča meritve zmesi s faktorjem λ od 0,7 do
neskončnosti.
- - 49
Slika 20: Izhodni karakteristiki sirokopasovne(levo) in običajne λ-sonde (desno).
Uporaba širokopasovnega senzorja zaheva poseben krmilnik, medtem ko
običajen tip senzorja sam generira izhodno napetost.
3.5 Aktuatorji
Elektronski krmilnik vbrizga vpliva na delovanje motorja preko elektromehanskih
aktuatorjev, med katerimi so zagotovo najpomembnejše vbrizgalne šobe.
Vbrizgalne šobe
Vbrizgalna šoba elektronskih sistemov vbrizga je poseben elektromagnetni ventil,
ki v sesalno cev motorja vbrizga gorivo pod sistemskim tlakom. Gorivo se na
konici šobe razprši v drobne kapljice, nekakšno meglico, zaradi česar je
uplinjanje dobro. Curek goriva je stoţčaste oblike, kot razpršitve pa se razlikuje
glede na izvedbo.
Na zgornjo stran vbrizgalne šobe je dovedeno gorivo pod sistemskim tlakom,
katerega uravnava regulator pritiska. Tlaki dovoda goriva so pri elektronskih
sistemih vbrizga okoli 300 kPa.
- - 50
Šoba deluje na principu ventila ki ga odpre solenoid. Kadar skozi tuljavo
elektromagneta steče enosmerni tok, nastalo magnetno polje premakne
armaturo solenoida. Ta dvigne iglo z leţišča in gorivo pod pritiskom iztopa skozi
drobne luknjice na konici šobe. Kadar na kontaktih vbrizgalne šobe ni napetosti,
notranja vzmet potisne konico igle na svoje leţišče, kar prepreči uhajanje goriva.
Slika 21: Elektromagnetna vbrizgalna šoba
(vir: www.northamptonmotorsport.com)
Če se tlačna razlika med dovodom in konico vbrizgalne šobe ne spreminja, je
pretok goriva skozi šobo konstanten in odvisen le od notranjih dimenzij. Z
upoštevanjem količine goriva, ki skozi šobo steče med njenim odpiranjem in
zapiranjem, lahko količino dovedenega goriva uravnavamo s spremembo časa
odprtja šobe, česar se posluţujejo elektronski krminiki vbrizga.
Ker se tlak v sesalni cevi spreminja z obremenitvijo motorja, se spreminja tudi
tlačna razlika med dovodom goriva in konico šobe, kar vpliva na volumski pretok
skoznjo. Kjer je moţno, se temu izognemo z uporabo regulatorja pritiska goriva,
ki je opremljen s priključkom za tlak v sesalni cevi. Sprememba tlaka znotraj
- - 51
sesalne cevi vpliva na pritisk dovoda goriva tako, da je padec tlaka čez
vbrizgalno šobo konstanten, kar zagotovi tudi konstanten pretok.
.
Gorivna črpalka
Električna črpalka začne v gorivni vod dovajati gorivo še preden motor
zaţenemo. Delovanje črpalke za gorivo je navadno povezano z glavnim stikalom.
Ko s ključem ”damo kontakt”, se črpalka vklopi, pritisk v sistemu naraste in motor
lahko zaţenemo.
Črpalka neprenehoma deluje ves čas delovanja motorja in kadar motor s
stikalom zaustavimo, preneha delovati tudi črpalka za gorivo. Problem nastane,
kadar zaradi prometne nesreče ali okvare motor preneha delovati, glavni kontakt
pa je še vedno sklenjen. Če je pri tem poškodovan sistem za dovod goriva, lahko
delujoča črpalka močno poveča uhajanje goriva, kar zelo poveča nevarnost
vţiga.
Zaradi tega delovanje črpalke krmili elektronski krmilnik sistema za vbrizg in
kadar zazna, da se je motor ustavil, črpalko izklopi kljub sklenjenemu kontaktu na
glavnem stikalu avtomobila.
Ventil prostega teka
Kadar je motor hladen, se zaradi povečane viskoznosti olja, ki ga podmazuje
izgube zaradi trenja povečajo. Hladen motor v prostem teku teţko ohranja
enakomerno delovanje in lahko se zaustavi.
Da se to prepreči in se hkrati motor hitreje ogreje na delovno temperaturo, so
motorji opremljeni z napravo za dvig hitrosti prostega teka ob hladnem motorju.
Najpreprostejša oblika naprave, ki jo srečamo na starejših sistemih vbrizga je
zračni ventil z zasunom. Zasun je pritrjen na bimetalno roko katero greje grelna
ţica povezana z glavnim stikalom. S pretečenim časom od vţiga motorja se
- - 52
bimetalna roka vse bolj odklanja kar postopoma prekine pretok zraka skozi ventil,
kateri zaobide dušilno loputo.
Novejše izvedbe ventila so krmiljene s strani elektronske krmilne enote sistema
za vbrizg in so lahko enostopenske ali pa zvezno zmanjšujejo pretok dodatnega
zraka.
3.6 Elektronska krmilna enota
Elektronska krmilna enota so moţgani sistema za vbrizg goriva. Na podlagi
podatkov, ki jih dobijo iz senzorjev, nameščenih na motorju, krmilijo aktuatorje in
tako vplivajo na delovanje motorja.
Prve elektronske krmilne enote so delovale na podlagi analognih signalov.
Prvotno so bile zgrajene iz diskretnih elektronskih komponent, kasneje pa je vse
večja integracija omogočala raalizacijo enakih in novih funkcij na enakem ali celo
manjšem prostoru trend ki ga zasledimo še danes.
Pravo revolucijo je predstavljala uvedba mikrokrmilnikov in s tem povezan
prehod na digitalno obravnavo signalov. Z uporabo mikrokrmilnika je prilagajanje
krmiljenja spremembam ali novim aplikacijam laţje in v veliko primerih zadostuje
le sprememba parametrov krmilnega algoritma, brez dodatnih posegov v sistem
vbrizga goriva.
Pri tovarniških elekronskih krmilnikih vbrzga je moţnost poseganja v programsko
opremo in krmilne parametre omejena. Zaradi tega je prilagoditev teh
elektronskih krmilnikov spremembam na motorju ali novim aplikacijam v
nekaterih primerih nemogoča ali ne izpolnjuje uporabnikovih ţelja.
- - 53
Zanimanje za predelave avtomobilov, še posebno za predelave pogonskega
agregata, je bilo zmeraj veliko, zato ne čudi pestra ponudba izvenseriskih (ang:
aftermarket) krmilnikov vbrizga goriva. Na trgu lahko izbiramo iz mnoţice
programabilnih elektronskih krmilnikov vbrizga raznih cenovnih razredov, ki lahko
krijejo različne uporabnikove zahteve. V spodnji tabeli je za primerjavo zbranih
nekaj izvenseriskih elektronskih krmilnikov vbrizga goriva s pripadajočimi
specifikacijami in okvirno ceno.
Naš
krmilnik Megasquirt
I Megasquirt
II DTA S40 DTA S60
SDS EM-4
Haltec E6X
Elecromotive TEC3
izhodi vbrizg
2 (PŠM) 2 (PŠM) 2 (PŠM) 2 4 1 4 ali 2 8 (PŠM)
izhodi ostalo
prosti tek, črpalka g., 3 x LED, 4 x prosti
prosti tek, črpalka g., 3 x LED,
prosti tek - ( koračno), črpalka g., 3 x LED
(prosti tek) črpalka g., obratomer, menj. luč, ventilator,
prosti tek, črpalka g., obratomer, menj. luč, tlak poln., poz. odm., vent., ... 3 x prosti
doplačilo: prosti tek, rpm vklop, ...
prosti tek- regulacija, črpalka, obratom., ventilator,
2x pšm poljubno
prosti tek, črpalka g., obratomer, waste gate, 4 x poljubno
krmilj. vžiga
ne (možno s sprem.)
možno da (do 6x) da (2x) da (4x) ne da
(2 ali 4x) da (8x)
vhodi
tlak polnj., temp. zrak,
atm.tlak - (ob zagonu),
temp. mot., pozicija d.l., nap. akumul.
lambda
tlak polnj., temp. zrak,
atm.tlak - (ob zagonu),
temp. mot., pozicija d.l., nap. akumul.
lambda
tlak polnj., temp. zrak,
atm.tlak - (ob zagonu),
temp. mot., pozicija d.l., nap. akumul.
lambda
tlak polnj., temp. z., atm.tlak - (ob zag.), temp. m., temp. olja, tlak olja, tlak gor.,
TPS, nap. aku. lambda,
hitrost kol. 2x prosta
tlak polnj., temp. z., atm.tlak - (ob zag.), temp. m., temp. olja, tlak olja, tlak gor.,
TPS, nap. aku. lambda
hitrosr kol. 2x prosta
tlak pol., temp. zr, atm. tlak-(ob zag.) temp. m.,
TPS nap. aku. lambda,
tlak poj., temp. z, atm.tlak- (ob zag.)
temp.m. TPS
nap. ak. lambda, hitrost k.
tlak polnj., temp. zrak, atmos. tlak , temp. mot., pozicija d.l., nap. aku., lambda,
knock sens.
zajem hitrosti vrtenja
iz sist. vžiga, induktivno, hall. sonda
iz sist. vžiga, induktivno, hall. sonda
iz sist. vžiga, induktivno, hall. sonda
induktivno induktivno, hall. son.
iz sist. vžiga
indukt., hall. s., optično
induktivno
velikost tabele
12x12 8x8
(12x12) 12x12 ali
16x16 16x16 16x16
64x38 - ne
interpolira
16x16 16x16
Data loging
ne ne
(možno z pren. rač.)
ne (možno z pren. rač.)
ne da ne da da
povezava z osebnim
rač. RS232 RS232
RS232, CAN
USB, CAN
USB, CAN
ne - priložen
prog.
USB, CAN
USB, CAN
cena 70€ 140€
(240€ sest.) 180€
(300€ sest.) 610€ 950€ 730€ 1400€ 1500€
Tabela 2: Primerjava izbranih programabilnih krmilnikov vbrizga goriva (kratica PŠM pomeni pulznoširinsko modulacijo krmilne napetostii)
- - 54
Vsi sodobni elektronski krmilniki uporabljajo mikrokrmilnik na katerem teče
krmilni algoritem. Večina jih omogoča povezavo z osebnim računalnikom in
spremljanje delovanja motorja ter spremembo krmilnih parametrov s pomočjo
programa z grafičnim uporabniškim vmesnikom.
Razvoj izvenseriskih elektronskih krmilnikov sledi razvoju krmilnikov, ki jih serisko
vgrajujejo v avtomobile. Kakor pri tovarniških tudi pri teh, uporabo 8 bitnih
mikrokrmilnikov spodrivajo zmoglivejši 16 in 32 bitni mikrokrmilniki, ki omogočajo
krajše čase procesiranja in realizacijo kompleksnejših krmilnih funkcij.
- - 55
4 Realizacija programabilnega krmilnika vbrizga goriva
Vezje elektronske krmilne enote je zaprto v aluminijasto ohišje, ki ga ščiti pred
mehanskimi poškodbami in preprečuje širjenje elektromagnetnih motenj. Krmilno
enoto preko dveh konektorjev poveţemo s sistemi nameščenimi v vozilu, 37
pinski DB konektor poskrbi za napajanje, povezavo s senzorji, relejem gorivne
črpalke in ventilom prostega teka. Povezavi z vbrizgalnimi šobami je namenjen 4
pinski močnostni konektor. 9 pinski DB konektor sluţi za povezavo z osebnim
računalnikom.
Slika 22: Elektronska krmilna enota predstavljenega sistema za vbrizg goriva
4.1 Strojna oprema
4.1.1 Mikrokrmilnik
Vezje krmili mikrokrmilnik PIC18F458, podjetja Microchip Technology Inc [12].
Izbrali smo ga zaradi ugodnega razmerja med zmogljivostmi in ceno ter
poznavanja te druţine mikrokrmilnikov.
- - 56
Lastnosti mikrokrmilnika:
- ohišje PDIP s 40 priključnimi sponkami,
- 32 kB programskega polnilnika,
- 1536 B delovnega pomnilnika (SRAM),
- 256 B EEPROM-a,
- do 10M izvedenih operacij v sekundi (MIPS),
- osem 10-bitnih AD pretvornikov,
- 1,2 ali 4 PWM kanali,
- 33 prosto programabilnih vhodno/izhodnih linij,
- 2 8-bitna in 2 16-bitna časovnika/števca,
- 3 zunanje prekinitvene sponke,
- programiranje v vezju preko 2 linij.
Najvišja priporočena hitrost delovanja je 40 MHz, za kar smo se tudi odločili. V ta
namen je na vezju vgrajen 10MHz kristal. Kristalova frekvenca se mnoţi s
pomočjo fazno sklenjene zanke (PLL - Phase Locked Loop) kar ustvari 40 MHz
programsko uro.
Slika 23: Mikrokrmilnik s kristalom
- - 57
4.1.2 Elektronsko vezje
Krmilnik je izdelan na dvoplastni tiskanini. Uporabljeni so SMD (ang.: surface
mount device) in klasični (ang.: through hole) elementi. S tem smo zmanjšali
število lukenj v tiskanini kar z dvoplastno izvedbo lajša domačo izdelavo. Za
odvajanje odvečne temperature, ki jo proizvajajo močnostni elementi, skrbi
hladilno rebro.
Vezje funkcionalno razdelimo na štiri dele: napajanje, seriska komunikacija, ter
vhodni del in izhodni del.
Napajalno vezje
Sistem napaja enosmerna napetost avtomobilskega električnega sistema, z
nominalno napetostjo 12 V, vendar realna napetost večine sistemov napajanja
niha (od 10 V do 14 V) glede na stanje baterije, obremenjenost sistema, vrtljaje
motorja itd. Ta napetost je previsoka za napajanje mikrokrmilnikain senzorjev,
zaradi česar je v sistem dodano napajalno vezje (slika 24).
Slika 24: Napajalno vezje
- - 58
Osnova napajalnika je regulator enosmerne napetosti, ki napatorst
avtomobilskega električnega sistema zniţa na predpisanih 5 V. Uporabili smo
regulator L7805 [13] , ki je sposoben zagotoviti do 1 A toka.
Za glajenje napetosti je na izhodu regulatorja dodan par kondenzatorjev: 22 μF
tantalov in 100 nF keramični. Na mikrokrmilnik je dobljena napetost 5 V
privedena preko 0,5 A varovalke (Polyswitch). Za zagotovitev stabilnost
delovanja je v neposredni bliţini mikrokrmilnika dodaten par keramičnih
kondenzatorjev, ki povezuje napajalne sponke.
Referenčna napetost 5 V je še dodatno stabilizirana s pomočjo dveh 1 μH tuljav
in dveh kondenzatorjev. Do senzorjev jo vodimo preko skupnega 37 pinskega
konektorja in priključnega kabla.
Seriska komunikacija
Mikrokrmilnik ima za potrebe seriske komunikacije namenjena dve sponki,
označeni z RX in TX.
Komunicija z osebnim računalnikom poteka po protokolu RS-232, ki predpisuje
pozitivne in negativne napetosti signala z absolutnimi vrednostimi od 5 V do
15 V, kar pa mikrokrmilnik s svojim napajanjem ne more zagotoviti. Kot vmesnik
nastopi namensko integrirano vezje MAX232 [14], ki skrbi za napetostno
prilagoditev signalov (slika 25).
- - 59
Slika 25: Vezje serijske komunikacije
Krmilnik z računalnikom poveţemo preko D-sub 9 pinskega DB konektorja in
kabla. Če računalnik nima RS232 seriskega priključka uporabimo USB/RS232
adapter.
Vhodna prilagoditev signalov
Na analogni vhod mikrokrmilnika moramo pripeljati napetostni signal v območju
od 0 V do 5V enosmerne napetosti. Uporabljeni senzorji se med seboj razlikujejo
po principu delovanja zato se tudi prilagoditvena vezja med njimi razlikujejo.
Uporovni senzorji, kakršna sta senzorja za temperaturo zraka in temperaturo
motorja, so posamično vezani v napetostne delilnike z upori z znano upornostjo.
Nanje je priključena referenčna napetost Vref. Kadar se ob spremembi fizikalne
veličine spremeni tudi upornost senzorja, se to odraţa v spremembi izhodne
napetosti napetostnega delilnika, kar predstavlja uporaben signal. Pred vstopom
mikrokrmilnik je signal filtriran z nizkoprepustnim filtrom prvega reda (RC člen),
kateri omili morebitna hitra nihanja v napetosti signala.
Senzorja pozicije dušilne lopute in tlaka v sesalni cevi, delujeta na principu
potenciometra, napajanega z Vref (5 V). Izhodni signal je napetost med 0 V in Vref.
- - 60
Tudi tu gre signal pred vstopom v mikrokrmilnik skozi nizkoprepustni filter
(slika 26).
Slika 26: Vezji za prilagoditv signala potenciometra dušilne lopute (levo) in
senzorja temperature motorja (desno)
Lambda sonda sama generira izhodno napetost zato ne potrebuje napajanja.
Njen signal prav tako vodimo do mikrokrmilnika skozi nizkoprepustni filter.
Napetost avtomobilskega električnega sistema je previsoka za analogni vhod
mikrokrmilnika, zato jo zmanjšamo z pomočjo napetostnega delilnika (slika 27).
Slika 27: Vezji za prilagoditev signala λ-sonde (levo) in detekcijo napetosti
akumulatorja (desno)
Vrtenje motorja se detektira s pomočjo pulzov. Kot izvor pulzov lahko uporabimo
sistem za vţig, Hallov senzor s pripadajočim rotorjem z okni, ali induktivni senzor
z zobatim kolesom. Ker je v vezju omogočena uporaba vseh treh izvorov,
- - 61
moramo pravo prilagoditev signala omogočiti z izbiro povezave, ki je izvedena z
dvema skočnikoma (ang.:jumper). Vezje prikazuje slika 28.
Kadar pulze dobivamo s sistema za vţig, odgovarjajoči pin na konektorju (32),
označen z tach in, poveţemo s primarnim navitjem vţigalne tuljave (priključek 1).
V tem primeru prilagoditveno vezje skrbi za zaščito vhoda mikrokrmilnika pred
morebitnimi napatostnimi špicami, za kar poskrbi optični sklopnik, in za filtriranje
visokofrekvenčnih motenj z vhodnim filtrom. Na mesto običajne dijode D3
vgradimo Zenerjevo dijodo z visoko prebojno napetostjo (22 V ali 24 V) .
Zenerjeva dijoda je priključena obratno kot običajna. Če med delovanjem
uporabniškega programa opazimo občasne skoke v prikazani hitrosti vrtenj, do
20 000 obr/min ali več, moramo Zenerjevo dijodo zamenjati z tako, ki ima večjo
prebojno napetost (36 V).
- - 62
Slik
a 2
8: V
ezje
za
pri
lag
od
ite
v s
igna
lov iz r
azlič
nih
tip
ov s
en
zo
rje
v h
itro
sti v
rte
nja
moto
rja
- - 63
Enako vezje uporabimo tudi kadar pulze dobimo s pomočjo Hallove sonde ali
optičnega dajalnika impulzov, vendar je v tem primeru priporočena izpustitev
obeh dijod (D2 in D3) na vhodu v vezje, kakor tudi obeh kondenzatorjev (C15 in
C16). Vhodno filtriranje ob uporabi Hallove sonde ni potrebno, ker v signalu ni
prisotnih toliko motenj, kot če pulze dobivamo direktno iz sistema za vţig.
Pazljivi moramo biti na vrednost upora R14 na vhodu v vezje. Priporočena
vrednost je 390 Ω vendar moramo paziti, da se med delovanjem ne segreje
pretirano, kar storimo tako, da upornost postopoma povečujemo dokler njegova
delovna temperatura ni v mejah normale (pod 60 °C).
Kadar pulzi, ki predstavljajo podatek o hitrosti motorja prihajajo iz induktivnega
senzorja moramo s pomočjo skočnika izbrati del vezja, ki je namenjeno
prilagoditvi signala iz induktivnega senzorja.
Induktivni senzor ob vrtenju zobatega kolesa proizvaja izmenični signal
spremenljive ampitude in frevence, proporcionalne hitrosti vrtenja motorja in
številu zob zobatega kolesa. Ker tak signal ni primeren za detekcijo pulzov z
mikrokrmilnikom, je v elektronski krmilnik vgrajeno vezje za pretvorbo izmenične
napetosti v zaporedje kvadratnih pulzov.
Vezje za prilagoditev signala induktivniega senzorja ima dva trimer
potenciometra. Z R54 nastavljamo napetost točke prehoda, navadno 0 V, z R43
pa histerezo, tu je priporočena izbira maksimalne upornosti.
Izhodno vezje
Tudi ta del vezja razdelimo na več funkcionalnih sklopov. Najpomembnejša je
izhodna močnostna stopnja, ki poganja vbrizgalne šobe. Slika 29 prikazuje
enega od dveh izhod krmilnika, ki poganjata vbrizgalne šobe.
- - 64
Slika 29: Izhodna stopnja za pogon vbrizgalnih šob
Izhodne signale mikrokrmilnika ojača integrirano vezje MC34151P (U4) [15],
katero poganja izhodne FET tranzistorje IRFZ34 (Q9, Q10) [16]. Vbrizgalne šobe
so ves čas delovanja motorja priključene na pozitivno napetost avtomobilskega
električnega sisteme (12 V), tok skozi njihovo navitje steče, ko jih izhodna
stopnja kermilnika poveţe z električno maso vozila. Tok je omejen na 14 A, s
pomočjo emitorskega upora (R41, R42 = 0,05 Ω) in tranzistorjev Q5 in Q6.
Ker je v vbrizgalnih šobah navitje solenoida, se ob izklopih inducira napetost, ki
lahko poškoduje tranzistorje na izhodu krmilnika. Da to preprečimo je končna
stopnja opremljena z zaščitnima diodima D6 in D7 (SF34) [17], inducirani tok pa
se steka v maso preko tranzistorjev Q11 in Q12 (TIP42C) [18].
Krmilnik omogoča tudi uporabo modernejših vbrizgalnih šob z nizko upornostjo
navitja (<3 Ω). Moč na takih šobah je potrebno omejiti, kar doseţemo z
pulznoširinsko modulacijo dovedene napetosti.
Za zaščito izhodnih tranzistorjev pred napetostnimi sunki, ki nastanejo zaradi
induktivnosti navitij vbrizgalnih šob, je izhodna stopnja opremljena z dodatnim
delom vezja. Med preklopi mikrokrmilnik preko Q7 in Q8 vklopi tranzistorja Q3 in
Q3 (TIP125) [19], ta pa navitja vbrizgalnih šob sklopita s pozitivno napetostjo
električnega sistema.
- - 65
Črpalka za gorivo in ventil prostega teka se vklapljata s pomočjo relejev, katere
prav tako krmili elektronska krmilna enota. Releja sta nameščena zunaj krmilne
enote. Relejski navitji sta ob sklenjenem glavnem stikalu priključeni na pozitivno
napetost avtomobilskega električnega sistema, tranzistorski stikali (Q13, Q14) s
tokovno omejitvijo znotraj krmilne enote pa posamezni navitji relejev sklenta z
maso, s čemer začneta releja prevajati tok.
Elektronska krmilna enota je opremljena tudi s tremi LED diodami, katere
označujejo razne reţime delovanja. Zelena dioda sveti, kadar poteka vbrizg
goriva, rdeča označuje obogatitev ob pospeševanju, rumena pa sveti dokler
motor ne doseţe delovne temperature.
Slika 30: Vezji za vklop relejev gorivne črpalke (levo) in LED diode za prikaz
delovanja (desno)
4.2 Programska oprema
Programsko opremo predstavljenega elektronskega krmilnika vbrizga goriva
delimo na dva dela. Prvi del je krmilni program, ki teče na mikrokrmilniku in
upravlja s sistemom za vbrizg goriva (koda se nahaja v prilogi). Drugi del je
uporabniški program, nameščen na osebnem računalniku, ki omogoča povezavo
s krmilnikom vbrizga, nadzorovanje delovanja motorja in spreminjanje krmilnih
parametrov.
- - 66
4.2.1 Krmilni program
Krmilni program je shranjen v programskem pomnilniku mikrokrmilnika. Zapis v
programskem pomnilniku, ki je bliskovitega (ang.:flash) tipa, se za razliko od
delovnega pomnilnika RAM (ang.: Random Acess Memory), ohrani tudi ko
mikrokrmilnik nima napajanja.
V programski pomnilnik zapisujemo s programatorjem, ki mikrokrmilnik poveţe z
osebnim računalnikom. Zapis v programski pomnilnik uporabljenega
mikrokrmilnika je moţen tudi brez programatorja med delovanjem znotraj ciljnega
vezja
Predstavljen krmilni program je napisan v zbirniku (ang.:asembler): uporabljeno
razvojno okolje je Mikrochipov programski paket MPLAB 7.6. Razvoj
mikrokrmilniškega programa v zbirniku rezultira v kompaktni, hitri in pomnilniško
varčni kodi. Razhroščevanje je potekalo s programatorjem/razhroščevalnikom
ICD2 [20].
Izračun količine goriva
Krmilni algoritem izračuna trajanje pulza vbrizga, ki je proporcionalno količini
vbrizganega goriva. Pri tem upošteva naslednje:
- zakon o idealnih plinih,
- izmerjene veličine (hitrost vrtenja, tlak v sesalni cevi, temperatura zraka,...),
- nastavljene parametre (REQ FUEL, volumski izkoristek, pretok šob,..).
Zakon o idealnih plinih
Za naše potrebe smatramo zrak za idealen plin, za katerega velja enačba (4.1),
ki povezuje količino zraka z njegovim tlakom, volumnom in temperaturo [8]:
- - 67
TRnVp (4.1)
Kjer je:
p tlak, V prostornina, n št. molov (1 mol = 6,023x1023 molekul), R plinska konstanta (=8,3143510 J/mol K), T absolutna temperatura Izpeljimo:
TR
Vpn (4.2)
Masa snovi je premosorazmerna njeni količini:
MTR
VPMnm (4.3)
Kjer M označuje molsko maso snovi, v našem primeru zraka, izraţeno v g/mol.
V enačbo (4.3) vključimo še volumski izkoristek in oznake veličin, katere srečamo
v našem primeru, s čimer dobimo naslednje:
IAT
ZRAKVALJMAPVE
ZRAKTR
MVpm (4.4)
Oznake pomenijo:
mZRAK masa zraka, ki je vtopila v valj, ηVE volumski izkoristek pri določenih obratih in odprtju lopute, pMAP tlak v sesalni cevi, VVALJ delovna prostornina valja, MZRAK molska masa zraka, TIAT temperatura zraka v sesalni cevi (podana v °K).
Plinska konstanta (R) in molska masa zraka (MZRAK ) sta konstanti, zato ju lahko
zdruţimo v eno vrednost.
- - 68
Z znano maso zraka, ki vstopi v delovni cikel, lahko določimo potrebno količino
goriva, ki zadosti ciljnemu mešalnemu razmerju.
Parameter REQ FUEL
REQ FUEL (ang.: Required Fuel – potrebno gorivo) nosi informacijo o pretoku
skozi odprte vbrizgalne šobe in delovni prostornini motorja. Njegova vrednost
označuje čas trajanja pulza vbrizga, izraţenega v ms, ki zadosti teoretično
idealnemu mešalnemu razmerju pri 100 % volumskemu izkoristku polnjenja
enega valja s tlakom v sesalni cevi 100 kPa, temperaturi zraka 21 °C in
normalnem zunanjem zračnem tlaku (101,3 kPa).
REQ FUEL izračunamo s sledečo enačbo.
VBRGORINJ
ZRAKVALJ
NTMR
V60000FUEL_REQ (4.5)
Kjer je:
60000 je število milisekud v eni minuti, VVALJ delovna prostornina valja podana v ccm ρZRAK spec. gostota zraka pri 21 °C in normalnem zračnem tlaku (1,2 kg/m3), ρGOR specifična gostota goriva pri 21 °C (bencin: 0,76 kg/l), ΦINJ pretok šob, podan v ccm/min, TMR teoretično mešalno ramerje goriva (bencin: 14,7), NVBR število vbrizgov na delovni cikel.
Povezavo med specifično gostoto, tlakom in temperaturo zraka podaja enačba
(4.6).
IAT
MAPZRAK
T
13,273
325,101
p2929,1T,p (4.6)
- - 69
Izračun trajanja vbrizga
Vrednost parametra REQ_FUEL se zapiše v programski pomnilnik
mikrokrmilnika med nastavitvijo krmilnika vbrizga. Med delovanjem motorja
krmilni algoritem izračuna dolţino pulza vbrizga na podlagi sledeče enačbe:
OPENMAPVEPV tPEpFUEL_REQt (4.7)
Faktor E vsebuje zmnoţek vseh obogatitev zaradi zagona, ogrevanja ter
korekcije glede na vrednost lambda in atmosferski tlak. S P prištejemo
obogatitev, ki je potrebna pri pospeševanju, tOPEN pa je čas, ki ga vbrizgalna
šoba potrebuje za svoje odprtje.
Zgradba krmilnega programa
Kodo krmilnega programa delimo na tri funkcijske bloke (slika 30) in sicer:
- inicializacijo,
- glavno krmilno zanko, v kateri se vrši izračun dolţine pulza vbrizga in
- prekinitvene rutine, ki se izvajajo med prekinitvami glavne zanke. Določena
prekinitvena rutina se izbere glede na vzrok prekinitve, ki je lahko notranji
(časovnik, A/D konverzija, komunikacija) ali zunanji (signal iz senzorja hitrosti,
komunikacija).
- - 70
Slika 30: Osnovna zgradba krmilnega programa
Inicializacija
Ob vklopu ali ponovnem zagonu (ang.: reset) pride do inicializacije, med katero
se dodelijo vhodi in izhodi mikrokrmilnika, nastavijo časovniki in prekinitve, ter
dodelijo začetne vrednosti spremenljivkam shranjenim v delovnem pomnilniku
(data RAM). Prepišejo se tudi vrednosti nastavitvenih parametrov iz
programskega v delovni pomnilnik.
Pred zagonom motorja se preko senzorja za tlak v sesalni cevi, izvede tudi
meritev atmosferskega tlaka. Po inicializaciji se prične izvajanje glavne
programske zanke.
Glavna krmilna zanka
Med delovanjem krmilni program teče v neskončni zanki. Krmilni algoritem
dolţino pulza vbrizga določa na podlagi podatkov iz senzorjev nameščenih na
motorju in nastavitvenih parametrov. Signali senzorjev so večinoma analogni,
prilagoditvena vezja v krmilniku pa poskrbijo, da so napetosti na vhodih
- - 71
mikrokrmilnika od 0 V do 5 V. Analogne vrednosti je potrebno pred uporabo v
izračunih pretvoriti v digitalne, za kar skrbi vgrajeni analogno-digitalni pretvornik.
Rezultat pretvorbe je 8-bitna vrednost, ki se shrani v delovni pomnilnik
mikrokrmilnika.
Za pomnenje zadnjih izmerjenih vrednosti je nemenjenih osem 8-bitnih registrov
v delovnem spominu, ki jih v nadaljevanju imenujemo spremenljivke:
-BARO; izhodna vrednost senzorja zunanjega zračnega tlaka,
-TPS1; izhodna vrednost senzorja pozicije dušilne lopute pri senzorju z enojnim
območjem ali izhodna vrednost prvega območja pri dvoobmočnem senzorju,
-TPS2; izhodna vrednost drugega območja pri dvoobmočnem senzorju pozicije
dušilne lopute,
-MAP; izhodna vrednost senzorja tlaka v sesalni cevi,
-MAT; izhodna vrednost senzorja temperature vstopajočega zraka,
-CLT; izhodna vrednost s senzorja temperature motorja
-EGO; izhodna vrednost λ- sonde in
-BATT; izhodna vrednost napetostnega delilnika za detekcijo napatosti
avtomobilskega električnega sistema.
Številska vrednost merjene fizikalne veličine, izraţena v izbrani fizikalni enoti,
navadno ne sovpada z vrednostjo, ki jo dobimo z A/D pretvorbo senzorjevega
signala, zato je potrebno dobljeno vrednost prevesti z vpogledno tabelo. Taka
tabela ima 256 vrednosti fizikalne veličine, ki odgovarjajo 256 moţnim
vrednostim izhoda senzorja.
Krmilni program uporablja šest vpoglednih tabel, shranjenih v programskem
pomnilniku:
-BAROFACTOR; iz katere se glede na vrednost spremenlivke BARO določi
korekcijo za zunanji zračni tlak, ki je shranjena v spremenljivki BAROCORR,
-KPAFACTOR; s katero se glede na vrednost spremenljivke MAP določi zračni
tlak v sesalni cevi izraţen v kPa in shrani kot spremenljivka KPA,
- - 72
-THERMFACTOR; preko katere iz vrednosti shranjeni v spremenljivki CLT
dobimo temperaturo motorja, izraţeno v °C, povečano za 40 °C in shranjeno v
spremenljivki COOLANT,
-AIRDENFACTOR; s katero se glede na vrednost spremenljivke MAT določi
korekcija glede na spremembo v gostoti zraka AIRDEN ter tabeli
-TPS1FACTOR in TPS2FACTOR, ki se uporabljajo v primeru dvoobmočnega
senzorja pozicije dušilne lopute za določitev vrednosti odprtja lopute, ki je
shranjena v spremenljivki TPS.
Glavna zanka, katere bločni diagram prikazuje slika 31, se prične z določitvijo
popravka glede na predhodno izmerjeni atmosferski tlak iz tabele
BAROFACTOR. Sledi določitev tlaka v sesalni cevi (KPA) s pomočjo vpogledne
tabele KPAFACTOR.
- - 73
Slika 31 : Glavna zanka krmilnega programa
- - 74
V naslednjem programskem bloku se glede na podatek iz senzorja temperature
motorja (CLT), preko vpogledne tabele THERMFACTOR, določi temperatura
motorja (COOLANT). Dobljena vrednost je enaka dejanski temperaturi, povečani
za 40 °C, saj se tako izognemo računanju z negativnimi vrednostimi temperature.
Nato se glede na temperaturo zraka (MAT) iz tabele AIRDENFACTOR določi
temperaturna korekcija gostote zraka (AIRDEN). Sledi izračun hitrosti vrtenja
motorja na podlagi časa pretečenega med posameznimi pulzi iz senzorja hitrosti
motorja.
Če je hitrost vrtenja manjša od 300 obr/min, krmilnik smatra, da motor
zaganjamo in določi dolţino pulza vbrizga le glede na temparaturo motorja
oziroma hladilne tekočine. V tem primeru se zanka tu zaključi in se izvajanje
programa nadaljuje na začetek glavne zanke.
Kadar je hitrost vrtenja motorja zadostna, krmilnik smatra, da je motor ţe zagnan
in program nadaljuje z izračuni obogatitev zmesi v sledečem programskem
bloku. Prva se izračuna obogatitev ob segrevanju motorja na delovno
temperaturo (WARMCOR). V vpogledni tabeli WWU shranjeni v programskem
pomnilniku so procentualne vrednosti obogatitev, ki odgovarjajo desetim
različnim vrednostim temperature motorja. Vrednosti so nastavljive s pomočjo
uporabniškega programa, dejanska vrednost obogatitve pa se izračuna z
interpolacijo glede na temperaturo motorja, med dvema sosednjima vrednostima
iz tabele, ki odgovarjata dvema temparaturi motorja najbliţjima temperaturnima
točkama. Kadar temperatura motorja preseţe najvišjo tabelirano temperaturo
(70 °C), obogatitve zmesi iz tega naslova ni (obogatitev = 100%). Med
segrevanjem motorja sveti rumena LED dioda na boku krmilnika.
Sledi določitev obogatitve po zagonu, ki se prišteje obogatitvi ob segrevanju. Po
zagonu je vrednost te obogatitve največja in se s pretečenimi delovnimi cikli
postopoma zmanšuje. Najvišja vrednost in trajanje sta uporabniško nastavljiva.
- - 75
Naslednji blok predstavlja obogatitev pri pospeševanju oziroma osiromašenje pri
pojemanju (TPSACCEL). Za apliciranje obogatitve pri pospeševanju mora biti
izpolnjen pogoj, da je hitrost odpiranja dušilne lopute nad določeno. Obogatitev
se, kakor je razvidno iz enačbe (4.7), prišteje osnovni dolţini pulza vbrizga.
Sestavljata jo dva dela. Osnovna vrednost obogatitve ob pospeševanju se
interpolira na podlagi hitrosti odpiranja lopute in vrednosti vnešenih v tabeli
TPSAQ. Ta vrednost se nato koregira na podlagi temperature motorja.
Temperaturna korekcija je dvojna, faktorska in prišteta. Obe korekciji sta dobljeni
z interpolacijo glede na temperaturo motorja iz dveh nastavljivih vrednostih
korekcije pri −40 °C in 70 °C.
Kadar pride do obogatitve zaradi pospeševanja, se sprva dolţini pulza vbrizga
doda celotna vrednost obogatitve. S pretečenim časom pa se začetna vrednost
postopoma zmanjšuje. S tem se poskuša posnemati potek in koregirati
prehodnegi pojav, ki nastopi pri spremembi tlaka v sesalni cevi. Če ni prekinjena,
bo obogatitev ob pospeševanju trajala izbrani čas. Označuje jo rdeča LED dioda.
Kadar je hitrost zapiranja lopute večja od določene, bo krmilnik prekinil morebitno
obogatitev med pospeševanjem. Če je ob tem hitrost vrtenja motorja enaka ali
večja od 1500 obr/min, krmilnik zmes osiromaši za procentualno vrednost
nastavljivo znotraj uporabniškega programa.
Z uporabo λ-sonde nam krmilnik omogoča povratnozančno regulacijo zmesi
glede na vsebnost kisika v izpušnih plinih. Do regulacije pride ob izpolnitvi večih
pogojev: v uporabniškem programu mora biti regulacija omogočena, temperatura
in hitrost vrtenja motorja pa morata biti nad uporabniško določeno. Korekcija
zmesi poteka po stopnjah. Hitrost spremembe korekcije, dovoljena višina
korekcije ter ciljna izhodna napetost λ-sonde so tudi poljubno nastavljive.
V sledečem programskem bloku pride do določitve volumskega izkoristka
polnjenja valjev (spremenljivka VECURR), ki odgovarja trenutni točki delovanja
- - 76
motorja. Krmilnik omogoča izbiro med določanjem volumskega izkoristka glede
na hitrost vrtenja in tlaka v sesalni cevi (ang.: speed/density mode), ali glede na
hirtost vrtenja in kota odprtja lopute (alpha/N mode). V slednjem primeru je
priporočljiva uporaba senzorja pozicije dušilne lopute z dvojnim območjem, ki
omogoča večjo ločljivost pri majhnih kotih odprtja. Krmilnik podpira tak tip
senzorja proizvajalca BOSCH s št. oznako 0 280 122 201 [21].
Volumski izkoristek je določen v 144 točkah, za 12 vrednosti hitrosti vrtenaja in
za 12 vrednosti tlaka v sesalni cevi ali pozicije dušilne lopute, ki so razporejene
čez celotno območje delovanja motorja. Iz tabele se prikličejo štiri (dva para)
vrednosti volumskega izkoristka, ki pripadajo vrednostim za hitrost in tlak, ki sta
dejanski hitrosti vrtenja in tlaku v sesalni cevi najbliţje. Z interpolacijo glede na
hitrost, se iz para vrednosti volumskega izkoristka pri spodnji vrednosti tlaka
določi ena, iz para pri višjem tlaku, pa druga vrednost volumskega izkoristka. Iz
doblenega para se z interpolacijo glede na dejanski tlak v sesalni cevi, oziroma
kot odprtja dušilne lopute, določi končna vrednost volumskega izkoristka.
Sledi delni izračun dolţine pulza vbrizga (spremenljivka PW). Mnoţenje poteka
med pari 8-bitnih števil, ki so izbrani tako, da se izognemo morebitnemu prelivu
(ang.: overflow) zmnoţkov, zaokroţevanje rezultatov poteka na koncu. Prične se
z zdruţitvijo vseh poprej izračunanih obogatitev v spremenljivko GAMMAE.
Parameter REQ_FUEL (shranjen v spremenljvki REQFUEL) se pomnoţi z
izračunanim volumskim izkoristkom (VECURR), tlakom v sesalni cevi (KPA) in
obogatitvami (GAMMAE), kakor je določeno v enačbi (4.7). V primeru
volumskega izkoristka določenega na podlagi hitrosti vrtenja in kota odprtja
dušilne lopute se iz izračuna izpusti faktor pMAP.
V naslednjem bloku kode se določi korekcija časa odpiranja vbrizgalnih šob
glede na napatost akumulatorja. Tudi tu je točen čas odpiranja določen z
interpolacijo med dvema skrajnima vrednostima.
- - 77
Sledi končni izračun dolţine pulza vbrizga, kjer se predhodno izračunani delni
vrednosti prišteje še morebitna obogatitev ob pospeševanju in koregiran čas
odpiranja vbrizgalnih šob. Izvajanje programa se nadaljuje na začetku glavne
zanke, ki jo krmilnik preteče pribliţno 1500 krat na sekundo.
Prekinitve
Ob prekinitvi mikrokrmilnik glede na izvor prekinitve, ki ga označuje
odgovarjajoča zastavica (ang.: flag) v namenskem registru, izbere med
naslednjimi prekinitvenimi rutinami.
Časovna prekinitev
Časovnik glavne ure sproţi prekinitev ob vsakem preteku ene desetinke
milisekunde (0,1 ms). V prekinitveni rutini pride do beleţenja pretečenega časa
od vklopa krmilnika. Informacija o pretečenem času je shranjena v 8-bitnih
registrih v delovnem pomnilniku mikrokrmilnika.
Ob vsaki časovni prekinitvi pride najprej do inkrementiranja registra, ki šteje
desetinke milisekunde. Kadar je vrednost v tem registru enaka 10 se register
zbriše in se inkrementira vrednost v registru namenjenemu milisekundam. Kadar
je vrednost tega registra enaka 100 se tudi ta pobriše, ter se inkrementira
register namenjen desetinkam sekunde (100 ms = 0,1 s) in tako dalje do štetja
sekund, katerim sta namenjena dva registra, kar omogoča beleţenje časa preko
18 ur.
Znotraj te prekinitvene rutine se poleg beleţenja časa vršijo še druge naloge. Ker
je regulacija trajanje posameznega pulza vbrizga natančna na desetinko
milisekunde, se ob vsaki časovni prekinitvi vrši tudi krmiljenje vklopa in izklopa
izhodnih stopenj, ki poganjajo vbrizgalne šobe, ter beleţenje pretečenega časa
pulza vbrizga. Do vklopa posamezne izhodne stopnje pride, če je bil predhodno
nastavljen ukaz o vklopu, do katerega lahko pride v prekinitveni rutini ob signalu
iz senzorja hitrosti vrtenja motorja.
- - 78
Ob vklopu posamezne izhodne stopnje se prične beleţenje časa trajanja pulza
vbrizga, ki se ob kasnejših časovnih prekinitvah primerja z izračunano dolţino
pulza vbrizga. Kadar vrednosti sovpadata, se posamezen pulz vbrizga preneha.
Med delovanjem šob sveti zelena LED dioda.
Ob uporabi vbrizgalnih šob z nizko upornostjo navitja moramo moč, dovedeno le-
tem omejiti. To naredimo s primerno nastavitijo krmiljenja vbrizgalnih šob v
uporabniškem programu. V tem primeru je ob začetku pulza vbrizga na šobe
pripeljana polna moč, kar zagotovi najhitrejše moţno odpiranje, kasneje pa se
moč omeji s pulznoširinsko modulacijo krmilne napetosti. Frekvenca modulacije
je 25 kHz .
Znotraj časovne prekinitve se vrši tudi kontrola hitrosti vrtenja motorja. Če
krmilnik zazna, da je motor zaustavljen se zaradi varnosti nemudoma prekine
delovanje črpalke za gorivo in vbrizgalnih šob.
Mikrokrmilnik ima vgrajen 10-bitni analogno digitalni pretvornik, katerega krmilni
program ciklično preklaplja med sedmimi analognimi vhodi na katere so pripeljani
signali iz senzorjev. Zamenjava vhoda se vrši vsako drugo milisekundo, v
naslednji milisekundi pa pride do začetka A/D pretvorbe. Na ta način je
upoštevan čas, ki je potreben za pravilen zajem napetosti ob preklopu vhoda
(ang.: acquisition time).
Prekinitev ob detekciji pulza iz senzorja hitrosti vrtenja motorja
Znotraj te prekinitvene rutine se vrši pomnenje časa, ki preteče med dvema
detektiranima pulzoma in brisanje temu namenjenega registra.
Inkrementira se tudi register za beleţenje delovnih ciklov motorja, kateri se
uporablja pri določitvi obogatitve po zagonu in regulaciji glede na vsebnost kisika
v izpušnih plinih.
- - 79
Odvisno od načina detekcije hitrosti vrtenja se število prekinitvenih pulzov na
obrat motorne gredi razlikuje. Glede na to in ţeleno število ter način razporeditve
pulzov vbrizga (hkratni ali izmenjujoči) znotraj enega cikla delovanja, se ukaţe
vbrizg na posameznem izhodu.
Prekinitev ob opravljeni A/D konverziji
Ob zaključeni konverziji se izračuna povprečje med novo in staro vrednostjo
izmerjene veličine. Rezultat se shrani v delovni pomnilnik kot aktualna vrednost
meritve.
Prekinitvi zaradi serijske komunikacije
Serijska komunikacija z osebnim računalnikom poteka po protokolu RS-232 s
hitrostjo 9600 bit/s in povzroča dve vrsti prekinitev glavne programske zanke: ob
prejeti besedi in ob oddani besedi.
Ukazi iz računalnika prihajajo v posameznih 8-bitnih besedah, ki vsebujejo ASCII
kodirane črke, ki predstavljajo različne ukaze:
A – pošlji realnočasovne spremenljivke po txport-u,
V – pošlji nastavitvene konstante (vrednosti iz vpoglednih tabel in ostale
konstante) po txport-u,
W +”pozicija”+”nova vrednost” – zamenjaj vrednost nastavitvene konstante na
naslovu “pozicija” z vrednostjo “nova vrednost”,
B – shrani vrednosti nastavitvenih konstant iz delovnega v programski pomnilnik,
C – test komunikacije
O – shrani nove vrednosti tabele BAROFACTOR v programski pomnilnik
K – shrani nove vrednosti tabele KPAFACTOR v programski pomnilnik
D – shrani nove vrednosti tabele AIRDENFACTOR v programski pomnilnik
T – shrani nove vrednosti tabele THERMFACTOR v programski pomnilnik
Programska koda vključuje tudi podrutine, katere se kličejo med izvajanjem
krmilnega programa.
- - 80
4.2.2 Uporabniški program
Uporabniški program Pictune deluje v operacijskem sistemu Microsoft Windows
XP. Izvorna koda je napisana v programskem jeziku VisualBasic.Net, ki je del
razvojnega okolja Microsoft VisualStudio 2009 Express [22]. Program ima
grafični uporabniški vmesnik in je namenjen realnočasovnemu spremljanju
delovanja motorja in spreminjanju parametrov krmiljenja vbrizga. Ker je
predstavljen krmilnik po zgradbi in delovanju potomec odprtokodnega krmilnika
vbrizga goriva Megasquirt si lahko pri nastavitvah pomagamo z navodili za
uporabo le-tega [23].
Ob zagonu programa imamo moţnost izbire med slovenskim in angleškim
jezikom. Po izboru jezika se prikaţe glavno pogovorno okno (slika 32).
Slika 32: Glavno pogovorno okno programa Pictune
- - 81
V osrednjem delu pogovornega okna je v dveh vrstah razporejenih osem
številčnic prikazovalnikov, ki po izgledu spominjajo na okrogle analogne
prikazovalnike. Z njih lahko uporabnik, med delovanjem in ob vzpostavljeni
komunikaciji s krmilnikom odčita vrednosti karakterističnih veličin, ki nosijo
informacijo o delevanju motorja in sistema za vbrizg goriva.
Na koncih skale vsakega prikazovalnika je napisana najmanjša in največja
vrednost prikazovane veličine, vmesne vrednosti pa so označene s črticami.
Uporabnik lahko določi trenutno vrednost prikazovane veličine glede na odklon
igle ali iz numeričnega zapisa v sredini stevilčnice, kjer stoji tudi oznaka merske
enote. Nad številčnico je napis, ki označuje kaj posamezen prikazovalnik
prikazuje in sicer:
- Hitrost motorja je podana v številu obratov motorne gredi v eni minuti,
- Odprtost lopute je izraţena v odstotkih odprtja dušilne lopute,
- Trajanje vbrizga označuje čas trajanje posameznega pulza vbrizga v ms,
- Pulzno razmerje je trajanje pulza vbrizga izraţeno v odstotkih glede na čas
trajanja enega delovnega cikla motorja,
- Tlak v kolektorju prikazuje vrednost absolutnega zračnega tlaka znotraj
sesalne cevi v kPa,
- Temp. zraka prikazuje temperaturo zraka, ki vstopa v motor, podano v °C,
- Temp. motorja prikazuje trenutno temperaturo motorja v °C
- Vol. Izkoristek podan v procentih je volumski izkoristek motorja v trenutni
točki delovanja, kakor ga je določil krmilnik.
Poleg okroglih prikazovalnikov je na dnu glavnega pogovornega okna grafični
prikaz koncentracije kisika v izpušnih plinih, ki ga meri λ-sonda. Vrednost faktorja
λ je prikazana s številom obarvanih okroglih polj, kar spominja na prikazovalnike
z vrsto LED diod. Vseh polj je štirideset, polovica se jih obarva zeleno, druga
polovica pa rdeče. Polja se obarvajo postopoma, od leve proti desni, glede na
napetost na izhodu λ-sonde. Začetek vrste je pri napetosti 0 V, sredina pri
nastavljeni ciljni napetosti senzorja, navadno je to kadar je λ =1, in konec pri
- - 82
dvakratni ciljni napetosti senzorja. Območje zelenih polj označuje dovajanje
osiromašene zmesi goriva in zraka, obarvanje rdečih polj preko sredine vrste, pa
dovajanje zmesi s pribitkom goriva.
V orodni vrstici glavnega pogovornega okna najdemo zavihke s povezavami do
ostalih pogovornih oken. Izbiramo lahko med: Datoteka, Nastavitve, Umerjanje,
Komunikacija, Orodja in Pomoč.
Datoteka
Pod tem zavihkom najdemo povezave Odpri, Shrani, Shrani kot in Izhod. S
klikom na Izhod zapustimo uporabniški program, prve tri povezave pa odprejo
standardizirana pogovorna okna za upravljanje z datotekami. Nastavitve
parametrov, ki smo jih izvedli v programu shranimo v poljubno poimenovano
datoteko preko pogovornega okna Shrani kot ali v trenutno aktivno datoteko z
izbiro povezave Shrani. Iz shranjene datoteke lahko nastavitve prikličemo preko
pogovornega okna Odpri. Program odpira in shranjuje podatke v datoteke s
končnico .ps.
Nastavitve
Pod zavihkom nastavitve so povezave do pogovornih oken za nastavitve
konstant, obogatitev in tabele volumetričnega izkoristka.
Konstante
Z izbiro povezave Konstante se odpre pogovorno okno prikazano na sliki 33, ki
nam omogoča spremeinjanje osnovnih nastavitev delovanja vbrizga goriva.
- - 83
Slika 33: Pogovorno okno z osnovnimi nastavitvami
Nastavitev parametra Potrebno Gorivo (ang.: Reqired Fuel), ki nastopa v enačbi
(4.7) in nosi informacijo o prostornini motorja in pretoku vbrizgalnih šob,
izvedemo preko posebnega pogovornega okna (slika 34), ki se odpre s potrditvijo
gumba Izračunaj.
- - 84
Slika 34: Izračun parametra Potrebno gorivo ( REQ_FUEL)
Vanj vpišemo vrednosti za delovno prostornino motorja, število valjev, pretok šob
in ţeleno mešalno razmerje. Po izračunu pogovorno okno zapremo z gumbom
Zapri. Nova vrednost se samodejno vnese v tekstovno polje Potrebno gorivo.
Hkrati se posodobi tudi vrednost v tekstovnem polju Vrednost za krmilnik, ki je
vrednost parametra Potrebno gorivo prilagojena številu šob in načinu vbrizga.
V pogovornem oknu Nastavitve konstant nastavljamo tudi način krmiljenja
vbrizgalnih šob. Pri uporabi šob z nizko upornostjo je nujna omejitev toka skozi
navitje, zato v tekstovno polje Pulzno razmerje PŠM vpišemo vrednosti manjše
od 100 %, priporočena [23] začetna vrednost je 75 %. Vklop pulznoširinske
modulacije je potrebno zakasniti, saj tako doseţemo krajše čase odpiranja.
Priporočena vrednost je 1 ms. Obe vrednosti postopoma zmanjšujemo vse
dokler ne opazimo poslabšanja delovanja motorja v prostem teku.
Če uporabljamo vbrizgalne šobe z visoko upornostjo, tokovna omejitev ni
potrebna zato v polje Pulzno razmerje PŠM vpišemo vrednost 100 %, zakasnitev
vkopa pulznoširinske modulacije pa naj bo 25,4 ms.
- - 85
Znotraj okvira Krmiljenje šob izbiramo način krmiljenja med Hitrost-Tlak in Kot
lopute-Obrati. V prvem primeru bo obremenitev motorja določena na podlagi
tlaka v sesalni cevi, v slednjem pa glede na kot odprtja dušilne lopute.
Sledi izbira števila posameznih pulzov vbrizga v enem delovnem ciklu motorja,
izbira načina vbrizga; hkratni (simultani) vbrizg ali izmeničen (alternirajoč) vbrizg
dveh izhodnih kanalov za pogon šob, izbira tipa motorja (štiritaktni ali dvotaktni)
ter izbira števila valjev in števila vgrajenih vbrizgalnih šob.
Pogovornem okno omogoča še nastavitve tipa uporabljenih senzorjev, zgornjo
temperaturno mejo delovanja ventila prostega teka ter vklop korekcije glede na
spremembo zunanjega zračnega tlaka.
Obogatitve
To pogovorno okno (slika 35) omogoča uporabniku nastavitve obogatitev v razlih
reţimih delovanja motorja.
Slika 35: Pogovorno okno z nastavitvami obogatitev zmesi
- - 86
Ob zagonu motorja se dolţina pulza vbrizga določi glede na trenutno
temperaturo motorja z interpolacijeo med trajanjem pulza pri temperaturi −40 °C
in 75 °C. Slednja naj bo od 3 do 5 krat manjša od prve [23]. Za uspešen zagon
motorja ti dve vrednosti ne smeta odstopati več kot 0,5 ms od optimalnih.
Po uspešnem zagonu začne delovati obogatitev Po zagonu. Vrednost obogatitve
naj bo od 25 % do 45 % trajanje pa od 100 do 250 delovnih ciklov.
Obogatitev v fazi ogrevanja nastavljamo v desetih točkah za različne temperature
motorja. Vrednost obogatitve naj se postopoma zmanjšuje z naraščanjem
temperature. Za temperaturo motorja −40 °C je primerna obogatitev navadno v
rangu od 160 % do 180 % [23], za temperaturo motorja 70 °C pa le še 100 %,
kar pomeni, da ni dodatne obogatitve.
V okviru Regulacija izpušnih plinov izbiramo tip λ-sonde, ciljno napetost senzorja,
spodnjo temperaturno in hitrostno mejo vklopa regulacije ter hitrost in največjo
dovoljeno spremembo osnovne dolţine pulza vbrizga. Hitrost regulacije določimo
z višino posamezne spremembe in številom pretečenih delovnih ciklov med
spremembami dolţine pulza vbrizga.
Obogatitev med pospeševanjem je določena glede na hitrost spremembe v kotu
odprtja dušilne lopute. Ob pospeševanju se osnovni dolţini pulza vbrizga, ki je
izračunana glede na delovno točko motorja, prišteje dodaten čas trajanja pulza,
kateri se postopoma zmanšuje skozi nastavljiv čas trajanja obogatitve. Dodatek
je določen za štiri hitrosti odpiranja: 2 V/s, 4 V/s, 8 V/s in 15 V/s. V literaturi [23]
priporočene začetne vrednosti dodatka po tem vrstnem redu so 1 ms, 4 ms, 8 ms
in 15 ms. Spodnjo mejo hitrosti spremembe odprtja nastavimo dovolj visoko, da
ne bo prišlo do obogatitev ob počasnih spremembah ali celo zaradi šuma v
signalu senzorja pozicije dušilne lopute (priporočene vrednosti okrog 1 V/s).
- - 87
V tem kontekstu je potrebna še nastavitev dodatka k obogatitvi ob pospeševanju
pri hladnem motorju. Tu nastavljamo dva parametra faktorski, izraţen v %, s
katerim je osnovna obogatitev pomnoţena, in prištet, izraţen v ms. Okvirne
vrednosti so 150 % in 2 ms [23].
Če ţelimo lahko ob pojemanju (“odvzem plina”), zmes nekoliko osiromašimo.
Priporočene so vrednosto od 20 % do 30 % [23].
Tabela volumetričnega izkoristka
Vrednosti volumetričnega ali volumski izkoristeka motorja urejamo s pomočjo
tabele prikazane na sliki 36. Polja v tabeli se obarvajo v skladu z vnešeno
vrednostjo, kar nam je nekoliko v pomoč pri nastavitvah.
Slika 36: Tabela volumskega izkoristka motorja
Izkoristek je mogoče nastaviti v 144 točkah za 12 vrednosti hitrosti vrtenja
motorja in 12 vrednosti tlaka v sesalni cevi, kadar je izbran krmilni način
- - 88
hitrost-tlak, ali 12 pozicij dušilne lopute če je izbran način kot lopute-obrati.
Vrednosti hitrost vrtenja in tlaka (ali pozicije lopute) so poljubno nastavljive od
0 obr/min do 25500 obr/min ter on 0 kPa do 255 kPa (oziroma 100 %), vendar je
edino smiselno izbrati tak razpon vrednosti, ki odgovarja dejanskemu območju
delovanja motorja.
Volumetrični izkoristek je izraţen v %. V tabelo lahko vnašamo vrednosto od 0 %
do 255 %. Volumetrični izkoristek ponazarja stopnjo polnjenja delovne
prostornine motorja z zrakom pod normalnim zračnim tlakom 101,3 kPa. Z
Večanjem stopnje odprtja dušilne lopute se veča tudi tlak v sesalni cevi in s tem
tlak polnjenja valjev, zato bo naraščal tudi volumski izkoristek motorja. Vpliv
hitrosti vrtenja na potek volumskega izkoristka pa bo diktirala predvsem zgradba
motorja. Višek je doseţen pri hitrosti vrtenja, kjer je tudi navor največji.
Natavitve tabele volumskega izkoristka pričnemo z spreminjanjem vrednosti v
osnovni ali kaki prej izdelani tabeli. Vedno pričnemo z nastavitvami v območju
prostega teka in preidemo na druga območje šele kadar motor deluje zadovoljivo
v prostem teku. Pri nastavitvi tabele si najlaţje pomagamo z meritvami vrednosti
faktorja λ in s spremljanjem delovanja motorja.
V vseh pogovornih oknih moramo za pošiljanje spremenjenih parametrov v
pomnilnik krmilnika to potrditi z gumom Pošlji v MK. Seriska povezava med
osebnim računalnikom in krmilnikom vbrizga mora pri tem delovati.
Umerjanje
Pod zavihkom Umerjanje najdemo povezavo Volumetrični izkoristek, katera
odpre pogovorno okno na sliki 37.
- - 89
Slika 37: Umerjanje karakteristike volumetričnega izkoristka
V levem delu okna se nahaja šest okroglih in en vrstični prikazovalnik merjenih
veličin. Z njihovo pomočjo spremljamo delovanje motorja, ko je komunikacija z
krminikom vzpostavljena. Desno zgoraj je na črni podlagi tridimenzionalen prikaz
ravnine, ponazorjene z mreţo, razpeto med posamezne vrednosti
volumetričnega izkoristka, kakor so bile poprej vnešene v tabeli.
Spodnja črta predstavla os x z vrednostimi hitrosti vrtenja motorja, leva črta pa os
y z vrednostimi tlaka v sesalni cevi oziroma stopnjo odprtja dušilne lopute. Višina
posamezne točke na ravnini (os z) je odvisna od pripadajoče vrednosti
volumetričnega izkoristka.
Po ravnini drsita dve točki, rdeč kriţec in zelen krogec. Zelena točka označuje
trenutno delovno točko motorja, rdečo točko pa premikamo s pomočjo kurzorskih
tipk (←,↑,→,↓). Kadar ţelio vrednost volumetričnega izkoristka v določeni točki
spremeniti, se z rdečim kriţcem pomaknemo v ţeleno pozicijo. S tipkama PgUp,
- - 90
PgDn, vrednost spremenimo za +1 % in −1 %, tipki Home in End pa povročijo
spremembo vrednosti za + 5 % in −5 %.
Pozicija in vrednost izkoristka v obeh točkah je zapisana tudi alfanumerično v
črnem kvadratu desno spodaj.
Spremembe pošljemo v pomnilnik mikrokrmilnika s pritiskom na tipko Enter.
Komunikacija
Ta zavihhek omogoča izbiro povezave Nastavitve, ki odpre pogovorno okno za
vzpostavitev serijske komunikacije med osebnim računalnikom in krmilnikom
vbrizga. V tekstovnem polju izberemo med ponujenimi COM porti. Povezavo še
preizkusimo in z gumbom Preizkusi.
Orodja
Pod orodji so povezave do štirih pogovornih oken za generiranje vpoglednih
(konverzijskih) tabel, ki jih krmilni program uporablja za pretvorbo signalov iz
senzorjev v fizikalne veličine.
V pogovorno okno MAP tabela (slika 38) vnesemo vrednosti absolutnega
zračnega tlaka pri napetosti na izhodu senzorja 0 V in 5 V. Vrednosti za nekatere
pogostejše senzorje tlaka izvemo s potrditvijo na gumb F1, za ostale pa
pregledamo specifikacije senzorja. Tabelo KPAFACTOR generiramo in zapišemo
v pomnilnik mikrokrmilnika s potrditvijo gumba Pošlji v MK. Pogovorno okno, ki
se odpre s povezavo Tabela barometrčne korekcije, je na pogled enako vendar z
njim generiramo tabelo BAROFACTOR, ki jo krmilni program uporablja za
določitev korekcije glede na zunanji zračni tlak.
- - 91
Slika 38: Okno za generiranje konverziske tebele senzorja tlaka
Tebelo THERMAFCTOR, ki jo krmilni program uporablja za pretvorbo
nelinernega izhoda napetostnega delilnika v katerem je vključen termistorski upor
za merjenje temperature motorja generiramo v oknu Senzor temperature motorja
(slika 39).
Slika 39: Okno za generiranje konverziske tebele senzorja temperature
V polja vpišemo tri upornosti uporabljenega senzorja pri treh različnih
temperaturah, ter vrednost upora v napetostnem delilniku vhodnega vezja.
Posodobljeno konverzijsko tabelo zapišemo v krmilnikov pomnilnik z gumbom
Pošlji v MK. Pogovorno okno Senzor temperature zraka se na pogled ne razlikuje
od prejšnjega ampak je namenjeno generiranju tabele AIRDENFACTOR, s
katero krmilnik določi korekcijo glede na temperaturo zraka.
- - 92
- - 93
5 Meritve
Za potrebe preizkušanja in opravljanja meritev smo predstavljen krmilnik vbrizga
vgradili v osebni avtomobil Renault 4 TL specijal. Avtotomobil je bil izdelan leta
1980, poganja ga vrstni štiritaktni bencinski motor s štirimi valji, delovno
prostornino 845 cm3 in močjo 25 kW. Sistem za vbrizg goriva je bil na ţeljo
lastnika vgrajen le začasno, zato je bila vgradnja kolikor mogoče
poenostravljena.
Merilnik
Meritve vsebnosti kisika v izpušnih plinih so bile opravljene z merilnikom
mešalnega razmerja LM-1 proizvajalca Innovate Motorsport [24]. Merilnik
uporablja širokopasovni λ-senzor LSU-4.2 proizvajalca Bosch, ima tekočekristalni
prikazovalnik mešalne ga razmerja ali λ faktorja, moţnost priklopa štirih poljubnih
dodatnih senzorjev (hitrost vrtenja, tlak v kolektorju, temperatura,...) in notranji
pomnilnik, ki omogoča do 44 minut beleţenja izhodnih signalov uporabljenih
senzorjev (ang.: data logging). Natančnost meritev mešalnega razmerja znaša ±
0,01 λ.
Slika 40: Notranjost vozila z merilnikom mešalnega razmerja (v ospredju) in
krmilnikom vbrizga goriva (spodaj desno)
- - 94
5.1 Vgradnja sistema vbrizga goriva
Vgradnja sistema za vbrizg je zahtevala predelave opreme motorja. Ker je bil
avtomobil originalno opremljen z uplinjačem, je bilo potrebno le-tega nadomestiti
z dušilno loputo in v sesalni trakt namestiti šobe za vbrizg goriva. V originalni
sesalni kolektor smo zato izvrtali dve luknji, v kateri smo z varjenjem pričvrstili
ţelezni puši, ki sluţijo za sedišča vbrizgalnima šobama (slika 41).
Slika 41: Originalni sesalni kolektor z uplinjačem (levo) in modificirani kolektor z
vbrizgalnima šobama in dušilno loputo (desno)
Na vrh šob je pričvrščen gorivni vod z regulatorjem tlaka goriva. Gorivo pod
tlakom dovaja električna gorivna črpalka, nameščena v bliţini dodatnega,
prenosnega, gorivnega rezervoarja v prtljaţniku avtomobila. Gorivo je pred
vstopom v gorivni vod filtrirano z namenskim filtrom, kar preprečuje nesnagi
zamašitev vbrizgalnih šob. Sistem za dovod goriva je kroţnega tipa, zato višek
dovedenega goriva odteka v rezervoar po povratnem vodu.
Zaradi konfiguracije sesalnih kanalov (sesalna cev se v motorni glavi razdeli na
dva kanala – ang.: siamesed ports) sta vbrizgalni šobi le dve. Vsaka dovaja
gorivo enemu paru valjev. Preizkusili smo dva para šob z različno pretočnostjo.
Prve, s pretočnostjo 158 cm3/min, so se izkazale za nezadostne pri višjih vrtljajih
- - 95
(nad 4500 obr/min) in polni obremenitvi motorja, drugi par s pretočnostjo 214
cm3/min pa je zmogel dovajati zadostno količino goriva pri polni obremenitvi do
priporočene hitrostne meje motorja (6000 obr/min).
Motor smo opremili s senzorji, ki krmilniku omogočijo pridobivanje potrebnih
informacij. Izbran je bil hitrostno-tlačni način krmiljenja. Obremenitev motorja se v
tem primeru določi na podlagi podatka o absolutnem tlaku v sesalni cevi (ang.:
Manifold Absolute Pressure - MAP), ta prihaja iz senzorja tlaka vgrajenega v
relejno ploščo v motornem prostoru in povezanega s sesalim kolektorjem preko
gumijaste cevi.
Hitrost vrtenja motorja se določa na podlagi frekvence pulzov iz sistema za vţig.
To smo naredili tako, da smo prekinjevalec v razdelilniku vţiga povezali z
vhodom tach in (glej prilogo 1), vhodno prilagoditveno vezje signala senzorja
hitrosti vrtenja (slika 28) v krmilniku pa smo spremenili v skladu z napotki na
strani 62 (R14 = 680 Ω, D3 = Zener 36 V).
V izpušno cev je bila na odaljenosti okrog 50 cm od motorne glave vgrajena
prirobnica z navojem, v katero smo privili širokopasovno λ-sondo (slika 42).
Slika 42: Montaţa širokopasovne λ-sonde
- - 96
Ostali senzorji na motorju so bili potenciometer za pozicijo dušilne lopute
(slika 43) ter dva temperaturna senzorja, eden znotraj zračnega filtra za meritev
temperature vstopnega zraka (slika 44), drugi namenjen temperauri motorja
montiran tako, da je v direktnem kontaktu z motorno glavo (slika 45).
Slika 43: Dušilna loputa s potenciometrom. Viden je tudi gorivni vod.
Slika 44: Senzor, namenjen meritvam temperature vstopajočega zraka,
nameščen znotraj zračnega filtra.
- - 97
Slika 45: Senzor temperature motorja.
Električne povezave iz senzorjev, vbrizgalnih šob in gorivne črpalke smo z
krmilnikom povezali preko terminalov na dodatni relejni plošče v motornem
prostoru. Na relejni plošči (slika 46) so rele za vklop gorivne črpalke, rele ventila
za dodatni zrak (neobstoječ v tem primeru), varovalke ter tlačni senzor. Šibkejši
signali so do krmilnika, ki je nameščen v potniški kabini, speljani preko
večţilnega signalnega kabla, zaključenega s 37 pinskim D-sub konektorjem,
povezave vbrizgalnih šob in krmilnika so izvedene s kabli s presekom vodnika
1,5 mm2.
Slika 46: Relejna plošča v motornem prostoru.
- - 98
Za nastavitve krmilnih parametrov smo uporabili prenosni računalnih in
predstavljen uporabniški program. Izbran je bil hitrostno-tlačni način krmiljenja.
Ker smo uporabili šobe z visoko upornostjo navitja (16 Ω) tokovna omejitev s
pulznoširinsko modulacijo napetosti ni bila potrebna. Izkazalo se je, da moramo
zaradi posebne konfiguracije sesalnih kanalov in le dveh vbrizgalnih šob,
dovedeno gorivo razdeliti na dva vbrizga na delovni cikel. Tako smo uspeli
doseči enakomernejšo porazdelitev goriva med valji, kar je imelo za posledico
mirnejši tek motorja.
Avtomobil smo s pravilno delojočim sistemom zagnali po nekaj poskusih z
različnimi vrednostmi trajanja vbrizga ob zagonu. Po nastavitvi motorne
karakteristike (tabela VE) v območju prostega teka smo prešli na nastavitve
karakteristike v ostalih reţimih delovanja. Pri tem smo si pomagali z meritvami
mešalnega razmerja ob voţnji z avtomobilom. Med umerjanjem karakteristike
volumetričnega izkoristka smo povratnozančno regulacijo na podlagi faktorja λ
izključili ter nastavili vrednosti v tabeli volumetričnega izkoristka tako, da je bilo
mešalno razmerje v celotnem območju delovanja čim bliţje teoretično idealnemu.
Nato smo povratnozančno regulacijo znova omogočili.
Vrednosti obogatitev zmesi ob ogrevanju motorja na delovno temperaturo smo
nastavili v skladu s priporočili (180 % obogatitve pri −40 °C) vendar pravilnosti
nastavitev ni bilo mogoče v celoti preizkusiti zaradi previsokih zunanjih
temperatur.
Zahtevnejša se je izkazala nastavitev obogatitve pri pospeševanju. Ciljna
vrednost faktorja λ med pospeševanjem je bila 0,85, katero nam ni uspelo
popolnoma zagotoviti. Priporočene začetne vrednosti so se izkazale za previsoke
(λ = 0,6), zato smo jih zmanšali za četrtino, kar je mešalno razmerje med
pospeševanjem pribliţalo ciljni vrednosti. Na ţalost se je s tem nekoliko povečalo
kratkotrajno začetno osiromašenje ob hitrem odprtju dušilne lopute, ki nam ga ni
uspelo popolnoma odpraviti. Za optimalno nastavitev obogatitve med
- - 99
pospeševanjem bi potrebovali več poskusnih voţenj, med katerimi bi z vozilom
pospeševali z različnimi hitrostmi odpiranja dušilne lopute.
Delovanje testnega avtomobila z vgrajenim sistemom za vbrizg goriva smo
preizkusili v voţnji v mestu in krajšimi voţnjami na hitri cesti. Avtomobil je tudi z
hladnim motorjem zaneslivo vţigal. Nekoliko moteča je bila le odsotnost ventila
za dvig prostega teka hladnega motorja. Motor je brezhibno deloval v vseh
reţimih, razen med močnim pospeševanjem, ko je bila, zaradi neoptimiziranih
nastavitev obogatitve med pospeševanjem, dovedena zmes preveč obogatena.
Povratnozančna regulacija mešalnega razmerja je delovala brezhibno, med
enakomerno voţnjo je bila zmes v ozkem območju okrog teoretično idealnega
(λ = 1). Opazno je bilo tudi povečanje maksimalne moči motorja zaradi
zamenjave uplinjača z notranjim premerom 28 mm z dušilno loputo z večjim
notranjim premerom (40 mm).
Večino uporabljenih delov sistema vbrizga smo dobili na avtomobilskem odpadu
ter jih prilagodili našim potrebam. Cena vgradnje je bila temu primerno nizka;
brez vštetih stroškov za izgradnjo krmilnika (70 €) je znašala pribliţno 100 €.
5.2 Rezultati meritev
Meritve mešalnega razmerja med voţnjo v različnih reţimih delovanja smo
opravili pred in po vgradnji sistema za vbrizg. Zabeleţene podatke iz merilnika
LM 1 smo analizirali v programu LogWorks2 [25].
Graf na sliki 47 prikazuje časovni potek λ faktorja, hitrosti vrtenja (RPM), tlaka v
sesalnem kolektorju (MAP) ter temperatur motorja (CLT) in vstopnega zraka
(IAT) med voţnjo po hitri cesti. Motor je ogret, hitrost vrtenja je konstantna, tlak v
kolektorju pa se spreminja v odvisnosti od obremenitve.
- - 100
Slik
a 4
7: G
raf g
iban
ja m
erje
nih
ve
ličin
me
d v
oţn
jo z
vg
raje
nim
up
linja
če
m
- - 101
Slik
a 4
8: G
raf g
iban
ja m
erje
nih
ve
ličin
me
d v
oţn
jo te
stn
eg
a a
vto
mob
ila z
vg
raje
nim
sis
tem
om
za
vb
rizg
- - 102
Iz meritev je razvidno, da pri testnem avtomobilu z vgrajenim uplinjačem mešalno
razmerje močno niha v območju osiromašene zmesi, vrednosti faktorja λ so od
1,2 do 1,5.
Po vgraditvi in sistema za vbrizg, nastavitvi krmilnih parametrov in vključeni
regulaciji glede na vrednost λ smo ponovno opravili testno voţo med katero smo
opravljali meritve faktorja λ, tlaka v kolektorju in hitrosti vrtenja motorja.
Temperatur tokrat nismo beleţili, vendar so bile primerljive z temperaturami
predhodne meritve pri ogretem motorju. Časovni potek izmerjenh vrednosti je
prikazan na grafu na sliki 48.
Razvidno je, da so izmerjene vrednosti mešalnega razmerja bliţje teoretično
idealnemu. V časovnem poteku je opazen padec vrednosti fektorja λ ob hitrem
povečanju obrementve motorja (porast tlaka v kolektorju). Ob pospeševanju
krmilnik za določen čas obogati dovedeno zmes, da bi kompenziral prehodni
pojav pri pospeševanju ter zagotovil največjo moč. Ob enakomerni voţnji brez
obogatitve zaradi pospeševanja so se izmerjene vrednosti faktorja λ gibale v
oţjem območju okoli λ = 1, kar potrjuje pravilno delovanje povratnozančne
regulacije.
- - 103
6 Sklepne ugotovitve
Elektronski sistem vbrizga goriva omogoča natančnejše krmiljenje dovajanja
goriva in tvorbo kvalitetnejše zmesi goriva in zraka v primerjavi z uplinjačem in
starejšimi sistemi za vbrizg goriva. Povratnozančna regulacija mešalnega
razmerja glede na vsebnost kisika v izpušnih plinih ohranja mešalno razmerje v
ozkem območju okrog teoretično idealnega, kar je pogoj za uporabo tripotnih
katalizatorjev izpušnih plinov.
Predstavljeni krmilnik vbrizga goriva smo preizkusili v kombinaciji s sistemom za
vbrizg, ki smo ga vgradili v starejši avtomobil, kjer je deloval po pričakovanjih. To
potrjuje tezo, da vgradnja elektronskega sistema vbrizga goriva omogoča
uporabo katalizatorja izpušnih plinov tudi v vozilih, ki z njim niso tovarniško
opremljena.
Krmilnik je po lastnostih primerljiv s komercijalnimi krmilniki vbrizga nizkega in
srednjega cenovnega razreda, vendar je končna cena zaradi moţnosti izdelave v
samogradnji niţja. Moţnost za nadaljni razvoj krmilnika so v dodatnih krmilnih
funkcijah, predvsem moţnost krmiljenja sistema za vţig, kar bi omogočilo popolni
nadzor nad delovanjem motorja. Uporabniški program je mogoče izboljšati z
novim, intuitivniejšim uporabniškim vmesnikom in dodatnimi orodji za olajšanje
nastavljanja krmilnih parametrov.
- - 104
- - 105
Priloga 1: Električna shema krmilnika
Mik
rokrm
ilnik
s k
rist
alom
- - 106
Prilagoditvena vezja signalov iz senzorjev
- - 107
Pri
lagodit
ven
o v
ezje
za
razl
ične
tipe
sen
zorj
ev h
itro
sti
vrt
enja
moto
rja
- - 108
Izhodno v
ezje
za
krm
ilje
nje
vbri
zgal
nih
šob
- - 109
Izhodna
vez
ja L
ED
dij
od
in r
elej
ev g
ori
vne
črpal
ke
in v
enti
la p
rost
ega
tek
a
- - 110
Nap
ajal
no v
ezje
- - 111
Vezje serijske komunikacije
Konektorja
- - 112
Prosti izhodi
- - 113
Priloga 2: Tiskano vezje
Zgornja plast povezav tiskanega vezja (merilo1:1)
- - 114
Spodnja plast povezav tiskanega vezja (merilo1:1)
- - 115
Postavitev elementov (merilo1:1)
- - 116
Priloga 3: Krmilni program
;**********************************************************************
;**
;** P I C S Q U I R T - 2010 - V1.0
;**
;**********************************************************************
LIST P=18F458, F=INHX32 ;directive to define processor
;and file format
radix dec
#include <P18F458.INC> ;processor specific variable definitions
;**********************************************************************
;Configuration bits
__CONFIG _CONFIG1L, _CP_OFF_1L
__CONFIG _CONFIG1H, _HSPLL_OSC_1H ;HS crist. 10Mhz x 4X PLL = 40Mhz
__CONFIG _CONFIG2L, _BOR_OFF_2L & _BORV_25_2L & _PWRT_OFF_2L
__CONFIG _CONFIG2H, _WDT_OFF_2H ;Watch dog timer OFF
__CONFIG _CONFIG4L, _STVR_ON_4L ;stack under-overflou ;reset ON
;**********************************************************************
#define tblsize 0x0c
#define indxsize 0x0b ;tbl size -1 12x12 tbl -> 11=b
#define nVar .212 ; number of program mem variables
#define nrow .4 ;nVar/64
#define wwuaddr 0x194
#define tpsdotaddr 0x0a ;0x610a - does not change with tblsize
#define tpsaqaddr 0x19e
#define kparengeaddr 0xc0 ;0x60c0
#define rpmrengeaddr 0xb4 ;0x60b4
;**********************************************************************
#define fuelp PORTD,5
#define idle PORTD,6
#define sled PORTB,2
#define aled PORTB,3
#define wled PORTB,4
#define inject1 PORTC,2
#define inject2 PORTD,4
#define fbd1 PORTD,0
#define fbd2 PORTD,1
;defining control bit field variables in 'squirt'
#define inj1 squirt,0 ;0=no squirt 1=squirt
#define inj2 squirt,1 ;0=no squirt 1=squirt
#define sched1 squirt,2 ;0=nothing scheduled
;1=scheduled to squirt
#define firing1 squirt,3 ;0=not squirting 1= squirting
#define sched2 squirt,4 ;
#define firing2 squirt,5 ;
;defining Engine control-status variables in bit field 'engine'
#define running engine,0 ;0=engine not runing 1=runing
#define crank engine,1 ;0=engine not cranking
;1=cranking
#define startw engine,2 ;0=not in start-up enricement
;1=in start-up enrichment mode
#define warmup engine,3 ;0=not in warm up 1=in warm up
#define TPSAEN engine,4 ;0=not in TPS acceleration mode
;1=TPS accel. mode
#define TPSDEN engine,5 ;0=not in deceleration mode
;1=in deceleration mode
#define mapaen engine,6 ;0=not in map acceleration mode
;1= in MAP deceleration mode
- - 117
;defining look-up tables start adresses
#define BAROFACTOR 0x70
#define KPAFACTOR 0x71
#define THERMFACTOR 0x72
#define AIRDENFACTOR 0x73
#define TPS1FACTOR 0x74
#define TPS2FACTOR 0x75
#define INVERSETPS1 0x76
;************temporary _variables************
group1 udata_acs 0x00
tmp1 res 1
tmp2 res 1
tmp3 res 1
tmp4 res 1
tmp5 res 1
tmp6 res 1
tmp7 res 1
tmp8 res 1
tmp9 res 1
tmp10 res 1
tmp11 res 1
tmp12 res 1
tmp13 res 1
tmp14 res 1
tmp15 res 1
tmp16 res 1
tmp17 res 1
tmp18 res 1
tmp19 res 1
;******LININTERP_variables****************
imen res 1
stev res 1
;************Free to use******************
reserve_1 res 1
n64burn res 1
COUNTER res 1
COUNTER_HI res 1
;********* 16DIV_variables***************
div_repeat res 1
;*********16DIV_and_32DIV_variables**************
C0 res 1
C1 res 1
C2 res 1
C3 res 1
EXT_H res 1
EXT_L res 1
WRD_H res 1
WRD_L res 1
LUK_H res 1
LUK_L res 1
;*********control variables***********************
;RAM Variables - Ordered List for RS232 realtime download
secl res 1 ;low seconds - from 0 to 255, then rollover
squirt res 1 ;Event variable bit field for Injector Firing
engine res 1 ;Variable bit-field to hold engine current status
baro res 1 ;Barometer ADC Raw Reading - KPa (0 - 255)
tps1 res 1 ;Throttle Position Sensor 1 ADC Raw Reading –
;counts, represents 0 - 5 volts
tps2 res 1 ;Throttle Position Sensor 2 ADC Raw Reading –
;counts, represents 0 - 5 volts
map res 1 ;Manifold Absolute Pressure ADC Raw Reading - KPa
tps res 1 ;not an AD value but computed from tps1 and tps2
mat res 1 ;Manifold Air Temp ADC Raw Reading
clt res 1 ;Coolant Temperature ADC Raw
batt res 1 ;Battery Voltage ADC Raw Reading - counts
ego res 1 ;Exhaust Gas Oxygen ADC Raw Reading - counts
- - 118
egocorr res 1 ;Oxygen Sensor Correction
aircor res 1 ;Air Density Correction lookup - percent
warmcor res 1 ;Total Warmup Correction - percent
rpm res 1 ;Computed engine RPM - rpm/100
pw res 1 ;injector squirt time in 1/10 ms (0 to 25.5 ms)
tpsaccel res 1 ;Acceleration enrichment - percent
barocor res 1 ;Barometer Lookup Correction - percent
gammae res 1 ;Total Gamma Enrichments - percent
vecurr res 1 ;Current VE value from lookup table - percent
bspot1 res 1 ;Blank Spot 1
;Calculation Variable
pwcalc res 1 ;Computed pulse width- move into var. PW at squirt
pwrun1 res 1 ;Pulsewidth timing variable - from 0 to 25.5ms
pwrun2 res 1
pw2 res 1 ;the other pw comparison (injector #2)
kpa res 1 ;MAP value in units of KPa
coolant res 1 ;Coolant temperature in Degrees F plus 40 (allows
;-40 degress to fit in integer)
;Engine RPM -> RPM = 6000/(ncyl * (rpmph - rpmpl))
rpmph res 1 ;High part of RPM Period
rpmpl res 1 ;Low part of RPM Period
rpmch res 1 ;Counter for high part of RPM
rpmcl res 1 ;Counter for low part of RPM
old_rpm1 res 1 ;last rpm value (for odd-fire)
;Previous ADC values for computing derivatives
ltps1 res 1 ;Throttle Position Sensor 1 ADC last Reading
ltps2 res 1 ;Throttle Position Sensor 2 ADC last Reading
lmap res 1 ;Manifold Absolute Pressure ADC last Reading
lvref res 1 ;Unused
lmat res 1 ;Manifold Air Temp ADC last Reading
lclt res 1 ;Coolant Temperature ADC last Reading
lbatt res 1 ;Battery Voltage ADC last Reading
lego res 1 ;Last EGO ADC reading
;Global Time Clock
mms res 1 ;0.0001 second update variable
ms res 1 ;0.001 second increment
tenth res 1 ;1/10th second
sech res 1 ;high seconds - rollover at 65536 secs (1110.933
;min = 18.51 hours)
tpsaclk res 1 ;TPS enrichment timer in 0.1 second resolution
egocount res 1 ;Counter value for EGO step - incremented every
;ignition pulse
asecount res 1 ;Counter value for after-start enrichment counter
igncount res 1 ;Ignition pulse counter
altcount res 1 ;Alternate count selector
tpsaclkcmp res 1 ;Comparison value for TPS acceleration time –
;from lookup table
tpsfuelcut res 1 ;TPS Fuel Cut (percent)
;SCI parameters/variables
txcnt res 1 ;SCI transmitter count (incremented)
txgoal res 1 ;SCI number of bytes to transmit
txmode res 1 ;Transmit mode flag
rxoffset res 1 ;offset placeholder when receiving VE/constants
adsel res 1 ;ADC Selector Variable
adtmp res 1 ;temporary used on adc
last_tps res 1 ;TPS reading updated every 0.1 seconds
;**************************************************
; Flash Configuration Variables here - variables can be downloaded via serial link
; VETABLE and Constants
; "VE" is entry point, everything is offset from this point
;**********************************************************************************
udata 0x100
VE res 144 ;144 bytes for VE Table
- - 119
cwu res 1 ;Crank Enrichment at -40° C
cwh res 1 ;Crank Enrichment at 75° C
awev res 1 ;After-start Warmup Percent enrichment add-on value
awc res 1 ;After-start number of cycles
wwu res 10 ;Warmup bins(fn temp)
tpsaq res 4 ;TPS acceleration amount (TPSDOT) in 0.1 ms units
tpsacold res 1 ;Cold acceleration amount (at -40°C) in 0.1 ms
tpsthresh res 1 ;Accel TPS DOT threshold
tpsasync res 1 ;TPS Acceleration clock value
tpsdq res 1 ;Deacceleration fuel cut
egotemp res 1 ;Coolant Temperature where EGO is active
egocountcmp res 1 ;Counter value where EGO step is to occur
egodelta res 1 ;EGO Percent step size for rich/lean
egolimit res 1 ;Upper/Lower EGO rail limit
req_fuel res 1 ;Fuel COnstant
divider res 1 ;IRQ divide factor for pulse
alternate res 1 ;Alternate injector drivers
injopen res 1 ;Injector Open Time
injocfuel res 1 ;PW-correlated amount of fuel injected during
;injector open
injpwm res 1 ;Injector PWM duty cycle at current limit
injpwmt res 1 ;Injector PWM mmillisec time at which to
;activate
battfac res 1 ;Battery Gamma Factor
rpmk res 1 ;Constant for RPM = 6.000/ncyl -downloaded
rpmk_1 res 1
RPMRANGEVE res 12 ;VE table RPM Bins for 2-D interpolation
KPARANGEVE res 12 ;VE Table MAP Pressure Bins for 2_D interp.
config11 res 1 ;Configuration for PC Configurator
config12 res 1 ;Configuration for PC Configurator
config13 res 1 ;Configuration for PC Configurator
primep res 1 ;Priming pulses (0.1 millisec units)
RPMOXLIMIT res 1 ;Minimum RPM where O2 Closed Loop is Active
fastidle res 1 ;Fast Idle Temperature
VOLTOXTARGET res 1 ;O2 sensor flip target value
ACMULT res 1 ;Acceleration cold multiplication factor
BLANK res 6 ;Extra Slots to make up 64 bytes total
; Placeholder for FLASH programming code
group2 udata 0x200
TBLBURNER res 256 ;Sensor look-up tables are copied here
;for programing
; CONFIG11 Bit Definitions (this is used for PC Configurator Only - not ;used in embedded
code)
; CONFIG11:
; Bit 0-1 = MAP Type
; 00 = MPX4115AP
; 01 = MPX4250AP
; 10 = User-defined
; 11 = User-Defined
; Bit 2 = Engine Stroke
; 0 = Four Stroke
; 1 = Two Stroke
; Bit 3 = Injection Type
; 0 = Port Injection
; 1 = Throttle Body
; Bit 4-7 = Number of Cylinders
; 0000 = 1 cylinder
; 0001 = 2 cylinders
; 0010 = 3 cylinders
; 0011 = 4 cylinders
; 0100 = 5 cylinder
; 0101 = 6 cylinders
; 0110 = 7 cylinders
; 0111 = 8 cylinders
; 1000 = 9 cylinders
; 1001 = 10 cylinders
; 1010 = 11 cylinders
- - 120
; 1011 = 12 cylinders
; CONFIG12 Bit Definitions (this is used for PC Configurator Only - not used in embedded
code)
; CONFIG12:
; Bit 0-1 = COOL Sensor Type
; 00 = GM
; 01 = User-defined
; 10 = User-defined
; 11 = User-Defined
; Bit 2-3 = MAT Sensor Type
; 00 = GM
; 01 = Undefined
; 10 = Undefined
; 11 = Undefined
; Bit 4-7 = Number of Injectors
; 0000 = 1 Injector
; 0001 = 2 Injectors
; 0010 = 3 Injectors
; 0011 = 4 Injectors
; 0100 = 5 Injectors
; 0101 = 6 Injectors
; 0110 = 7 Injectors
; 0111 = 8 Injectors
; 1000 = 9 Injectors
; 1001 = 10 Injectors
; 1010 = 11 Injectors
; 1011 = 12 Injectors
;
; CONFIG13 Bit Definitions
; CONFIG13:
; Bit 0 = Odd-fire averaging
; 0 = Normal
; 1 = Odd-Fire
; Bit 1 = O2 Sensor Type
; 0 = Narrow-band (single wire 14.7 stoch)
; 1 = DIY-WB (Stoch = 2.5V, reverse slope)
; Bit 2 = Control Stategy
; 0 = Speed-Density
; 1 = Alpha-N
; Bit 3 = Barometer Correction
; 0 = Enrichment Off (set to 100%)
; 1 = Enrichment On
; Bit 4 = TPS type
; 0 = Single track
; 1 = Double track
;
;**********************************************************************
;Reset vector
;This code will start executing when a reset occurs.
begin code 0x0000
goto Main ;go to start of main code
;**********************************************************************
;High priority interrupt vector
;This code will start executing when a high priority interrupt occurs
;or when any interrupt occurs if interrupt priorities are not enabled.
interupt code 0x0008
btfsc INTCON,TMR0IF,0
goto TIMERROLL ;timer0 is main clock
btfsc INTCON,INT0IF,0
goto DOSQUIRT ;external interupt-ignition
btfsc PIR1,ADIF,0
goto ADCDONE ;A/D conversion complete
btfsc PIR1,TXIF,0
goto IN_SCI_TX ;SCI transmission complete,transmitter empty
btfsc PIR1,RCIF,0
- - 121
goto IN_SCI_RCV ;SCI receiver full
retfie FAST
main code 0x0100
Main
;*********************************************************
;Initialization and main loop
;********************************************************
ClearRAM
;set up port data-direction registers
clrf PORTA
movlw b'11111111' ;AN0=TPS,AN1=TPS2, AN2=MAP,
;AN3=Vref, AN4=MAT,
movwf TRISA,0
clrf PORTB
movlw 0xE3 ;b'11100011' ;INT0 =COIL, RB2=sled, RB3=aled,
;RB4=wled, RB5-RB7=serial progaming
movwf TRISB
movlw 0x04 ;b'00000100' ;set inj 1 OFF (inverted output)
;movlw b'00000000' ;set inj 1 OFF
movwf PORTC
movlw 0xBB ;b'10111011' ;RC2/CCP1=inj1, RC6/TX/CK = TX,
;RC/RX/DT = RX
movwf TRISC
movlw 0x10 ;b'00010000' ;set inj2 OFF (inverted output)
;movlw b'00000000' ;set inj 2 OFF
movwf PORTD
movlw 0x80 ;B'10000000' ;RD0=fbd1, RD1=fbd2, RD2=spark1,
;RD3=spark2, RD4/ECCP1=inj2,
;RD5=fuelp, RD6=idle
movwf TRISD
clrf PORTE
movlw 0x07;b'00000111' ;RE0/AN5=CLT, RE1/AN6=BAT,
;RE2/AN6+7=ego,
movwf TRISE
;Set up the Real-time clock Timer0
;movlw b'01000001' ;8bit, 1:4 prescaler- 40MHz/4/Prescaler
;=2.5MHz
movlw b'01001000' ;8bit, no prescaler- 10MHz/4= 2.5MHz
movwf T0CON ;4Mz durring tests so =1MHz
movlw 0x9c ;0x06 for 0.1ms when 40Mh clock with PLL,
;0xC1 =193 for 10Mh with prescaler 1:4, ;0x06 without
prescaler, 0x9C for 4MHz
movwf TMR0L
movlw b'01110000' ;unmask TMR0 and INT0 interrupts
movwf INTCON
movlw b'10000100' ;INT0 ext. interrupt (coil) on faling edge
movwf INTCON2
bsf T0CON,7 ;start timer0
;Set up PWM for the inj1 (curent limit mode)
movlw 0x64 ;PWM freq 25 kHz
movwf PR2
movff injpwm,CCPR1L ;Set duty cicle
movlw b'00000100' ;Timer ON, prescaler 1:1 for 10Mhz
movwf T2CON
;Set up PWM for the inj2 (curent limit mode)
movff injpwm,ECCPR1L ;Set duty cicle
;Set up SCI port- USART
movlw 0x19 ;0x40 for 40MHz or 10 MHz, 0x19 for 4 MHz
movwf SPBRG ;setting baud rate to 9600bit/s
- - 122
movlw b'10011000'
movwf RCSTA
movlw b'00100100' ;if Fosc=10MHz or 4MHz:TXSTA<2>=1
movwf TXSTA
bsf PIE1,RCIE ;enable receive interrupt
bcf PIE1,TXIE ;disable transmit interrupt
;Set up and enable interrupts
movlw b'10000100' ;disable pull-ups, TMR0 high priority
movwf INTCON2
bsf PIE1,ADIE ;enable A/D int.
bcf RCON,7 ;disable priority int. levels
movwf T2CON
movlw b'01110000' ;enable all unmasked interrupts
movwf INTCON
;Set up RAM variables
clrf TBLPTRU
clrf mms
clrf ms
clrf tenth
clrf secl
clrf sech
;movlw 0xff
clrf squirt
movlw 0x32
movwf pw
clrf engine
clrf rpmph
clrf rpmpl
clrf rpm
clrf old_rpm1
movlw 0x00
movwf pwcalc
movwf pw
movwf pw2
clrf pwrun1
clrf pwrun2
movlw 0xff
movwf last_tps
clrf egocount
movlw 0xBB
movwf baro
movwf map
movwf mat
movwf clt
movwf tps
movwf batt
movlw 0x64
movwf aircor
movwf vecurr
movwf barocor
movwf warmcor
movwf egocorr
movwf tpsfuelcut
clrf gammae
movlw 0x46
movwf map
movlw 0x65
movwf baro
clrf tpsaccel
clrf adsel
clrf igncount
; Fire up the ADC, and perform one conversion to get baro value
movlw b'01000001' ;left justify, Fosc/64 for 40MHz,
- - 123
;movlw b'00000001' ;left justify, Fosc/32 for 4MHz,
movwf ADCON1
movlw b'10010001' ;Fosc/64 for 40MHz Fosc/16 for 4Mh,chanel AN2, ADON
movwf ADCON0
bcf PIE1,ADIE ;disable A/D interrupt
bcf PIR1,ADIF ;clear A/D interrupt flag
movlw 0x80 ;set timer1 count fot A/D aqusition time
movwf TMR1L
movlw 0x01 ;start timer1
movwf T1CON
waitaqt
btfss PIR1,TMR1IF
goto waitaqt
bcf PIR1,TMR1IF
bcf T1CON,TMR1ON ;stop timer1
bsf ADCON0,GO ;start A/D conversion
waitbaro
btfss PIR1,ADIF
goto waitbaro
bcf PIR1,ADIF
movff ADRESH, baro ;store baro value
****baro***
;turn on al interrupts
bsf PIE1,ADIE
bsf INTCON,GIE ;enable interrupts
;load the constants (VE table,..) from flash to RAM- program uses RAM values
lfsr FSR0, 0x100 ;VE teble start address
;***FSR0***
movlw 0x60
movwf TBLPTRH
movlw 0x00
movwf TBLPTRL
movlw nVar ;number of variabbles
movwf tmp1
LOAD_CONSTANTS
tblrd*+
movf TABLAT,0
movwf POSTINC0
;incf TBLPTRL
decfsz tmp1,1,0
goto LOAD_CONSTANTS
clrf tmp1,0
;load the flash programing routine into RAM
DONE_LOAD_BURN
;**********************************************************************
;**
;** prime pulse- Shot out one priming pulse of lenght PRIMEP
;**
;**********************************************************************
movlb 0x01 ;bank1 selected
movf primep,0
bz LOOPER ;branch if primep is zero
movwf pw,0 movwf
pw2,0
bsf fuelp,0 ;start fuel pump
clrf pwrun1,0
clrf pwrun2,0
bsf sched1,0
bsf inj1,0
bsf sched2,0
bsf inj2,0
bsf running,0
- - 124
;**********************************************************************
;** M A I N E V E N T L O O P
;**********************************************************************
LOOPER
;**********************************************************************
;** Correction factor lookup table access
;**
;** Perform table lookup for barometer and air density correction
;** and performs coolant temperature conversion from counts to °C
;**
;** All tables are pre-computed for all 256 different values
;** and stored in flash
;**********************************************************************
banksel config13 ;bank1 selected
call TPSCOMP,1
NaMap
movlw BAROFACTOR
movwf TBLPTRH,0
movf baro,0,0
movwf TBLPTRL,0 ;barometer correction gamma
tblrd*
movf TABLAT,0,0
movwf tmp11,0
movlw KPAFACTOR
movwf TBLPTRH,0
movf map,0,0
movwf TBLPTRL,0 tblrd*
movf TABLAT,0,0
movwf kpa,0 ;manifold air preasure in kPa
btfsc config13,3 ;check if barometer corection in use
bra NaBaroUse
movlw 0x64 ;if not use 100 for barometer correction
movwf barocor,0
bra CltCalc
NaBaroUse
movf tmp11,0,0
movwf barocor,0
CltCalc
movlw THERMFACTOR
movwf TBLPTRH,0
movf clt,0,0
movwf TBLPTRL,0
tblrd*
movf TABLAT,0,0
movwf coolant,0 ;Coolant temp in °C
movlw AIRDENFACTOR
movwf TBLPTRH,0
movf mat,0,0
movwf TBLPTRL,0
tblrd*
movf TABLAT,0,0
movwf aircor,0 ;Air density correction factor
;**********************************************************************
;** Fast idle comparison- fast idle set if coolant below FAST IDLE
;** value
;**********************************************************************
movf fastidle,0
cpfslt coolant,0 ;skip if coolant<fastidle
bra SLOW_IDLE_SET ;branch if coolant>fastidle
- - 125
FAST_IDLE_SET
bsf idle,0
bra RPM_COMP
SLOW_IDLE_SET
bcf idle,0
;********************* Computation of RPM******************************
;** rpmk:rpmk+1
;** ----------- = rpm
;** rpmph:rpmpl
;**
;** rpmk:rpmk+1 = constant = (6000*(stroke/2))/ncyl -> 0x0b:0xb8
;** rpmph:rpmpl = period count betwen IRQ pulsed lines, in 0.1 ms res
;**
;**********************************************************************
RPM_COMP
btfss running,0 ;branch if engine is not running
bra LOOPER
movf rpmph,0,0
bz FAST_RPM_CALC
SLOW_RPM_CAlC
clrf EXT_H,0
clrf EXT_L,0
movf rpmph,0,0
movwf LUK_H,0
movf rpmpl,0,0
movwf LUK_L,0
movf rpmk,0,1 ;number of cylinder dependent
movwf WRD_H,0
movf rpmk_1,0,1
movwf WRD_L,0
call DIV32
movf WRD_L,0,0
movwf rpm,0
bra CHK_FOR_WENRCH
FAST_RPM_CALC
movf rpmpl,0,0
bz LOOPER
movf rpmpl,0,0
movwf LUK_L,0
movff rpmk,WRD_H ;number of cylinder dependent
movff rpmk_1,WRD_L
call DIV16
movf WRD_L,0,0
movwf rpm,0
CHK_FOR_WENRCH
movlw 0x03 ;in cranking mode if engine speed lower than 300 rpm
cpfslt rpm,0
bra WARM_UP_ENRICH
;**********************************************************************
; Cranking mode- pulse width is set by coolant temperature value of CWU
; at -40°C and CWH at 70°C- value is interpolated
;**********************************************************************
CRANKING_SET
bsf crank,0
bcf startw,0
bcf warmup,0
movlw D'155' ;3volt comparison for tps- flood clear trigger
cpfsgt tps,0
bra INTERP_CRANK_PW
FLOOD_CLEAR
movlw 0x03 ;.3ms- just opening
- - 126
movwf pwcalc,0
goto LOOPER
INTERP_CRANK_PW
clrf tmp1,0
movlw D'110' ;40°+70°
movwf tmp2,0
movf cwu,0
movwf tmp3,0 ;cwu-crank enrichment at -40°C
movf cwh,0
movwf tmp4,0 ;cwh-crank enrichment at 70°C
movf coolant,0,0
movwf tmp5,0
call LININTERP
movf tmp6,0,0
movwf pwcalc,0
goto LOOPER
;********** Warm-up and After-start Enrichment Section ***************
;**
;** The Warm-up enrichment is a linear interpolated value from WWU
;** (10 points) which are placed at different temperatures
;**
;** Method:
;** 1) Perform ordered table search of WWU (using coolant variable) to
;** determine which bin.
;** 2) Perform linear interpolation to get interpolated
:** warmup enrichment.
;** Also, the after-start enrichment value is calculated and
;** applied here – it is an added percent value on top of
;** the warmup enrichment, and it is applied
;** for the number of ignition cycles specified in AWC.
;** This enrichment starts
;** at a value of AWEV at first, then it linearly
;** interpolates down to zero
;** after AWC cycles.
;**
;** 3) If (startw, engine is set) then:
;** 4) compare if (awc < asecount) then:
;** 5) x1=0, x2=AWC, y1=AWEV, y2=0, x=asecount, y=ASEenrichment
;** 6) else clear startw bit in engine
;**********************************************************************
WARM_UP_ENRICH
btfss crank,0
bra WUE1
bcf crank,0
bsf warmup,0
bsf startw,0
clrf asecount,0
WUE1
movlw 0x61
movwf TBLPTRH,0
movlw 0x00
movwf TBLPTRL,0 ;WWURANGE address = 0x6100
movlw 0x09
movwf tmp3,0
movf coolant,0,0
movwf tmp4,0
call FLASH_TABLE_FIND
WUE2
lfsr FSR0, wwuaddr ;WWU address
movf tmp5,0,0
movff PLUSW0,tmp4
decf tmp5,0,0
movff PLUSW0,tmp3
movf coolant,0,0
movwf tmp5,0
call LININTERP ;calculation of warm up enrichment
- - 127
movf tmp6,0,0
movwf tmp12,0
movlw 0x64
cpfseq tmp12,0
bra ASE1
;Outside warm up renge- clear warm up enrichment
bcf startw,0
bcf warmup,0
bcf wled,0
bra ASE_FINAL
ASE1 ;after start enrichment
bsf wled,0
bsf warmup,0
btfss startw,0
bra ASE_FINAL
movf asecount,0,0
cpfsgt awc ;skip if acw > asecount
bra ASE_END
ASE2
clrf tmp1,0
movf awc,0
movwf tmp2,0
movf awev,0
movwf tmp3,0
clrf tmp4,0
movf asecount,0,0
movwf tmp5,0
call LININTERP ;calculation of after start enrichment
movf tmp6,0,0
addwf tmp12,0,0
bc ASE_RAIL
movf tmp6,0,0
addwf tmp12,0,0
movwf warmcor,0
bra TAE
ASE_RAIL
movlw 0xfe
movwf warmcor,0
bra TAE
ASE_END
bcf startw,0
ASE_FINAL
movf tmp12,0,0
movwf warmcor,0
;***************** Throttle Position Acceleration Enrichment*********
;**
;** Method is the following:
;**
;** ACCELERATION ENRICHMENT:
;** If (tps < last_tps) goto DEACCELERATION_ENRICHMENT
;** If (tps - last_tps) > tpsthresh and TPSAEN = 0
;** then (acceleration enrichemnt):
;** {
;** 1) Set accelration mode
;** 2) Continuously determine rate-of-change of throttle, and perform
;** interpolation of tpsaq values to determine acceleration
;** enrichment amount to apply.
;** }
;** If (tpsaclk > TPSACLKCMP) and TPSAEN is set then:
;** {
;** 1) Clear TPSAEN bit in engine
;** 2) Set tpsaccel to 100%
;** 3) Go to EGO Delta Step Check Section
- - 128
;** }
;**
;** DEACCELERATION ENRICHMENT:
;** If (last_tps - tps) > tpsthresh then (deacceleration fuel cut)
;** {
;** If (TPSAEN = 1) then:
;** {
;** 1) tpsaccel = 100 percent (no acceleration)
;** 2) Clear TPSAEN bit in ENGINE
;* 3) Go to EGO Delta Step
;** }
;** If (RPM > 15 (corresponding to 1500 RPM)) then (fuel cut mode):
;** 1) Set tpsaccel value to tpsdq
;** 2) Set TPSDEN bit in ENGINE
;** 3) Go to EGO Delta Step Check Section
;** }
;** }
;** else
;** {
;** If (TPSDEN = 1) then
;** {
;** 1) Clear TPSDEN bit in ENGINE
;** 2) tpsaccel = 100%
;** 3) Go to EGO Delta Step Check Section
;** }
;** }
;**
;**********************************************************************
TAE
bcf INTCON,GIE,0 ;disable interupts
movf tps,0,0
movwf tmp1,0
movf last_tps,0,0
movwf tmp2,0
bsf INTCON,GIE,0 ;enable interupts
;movf tmp2,0,0
cpfslt tmp1,0 ;skip if tps<last_tps
bra AE_CHK
bra TDE
AE_CHK
movf tmp2,0,0
subwf tmp1,0,0 ;tmp1-tmp2->WREG
cpfslt tpsthresh
bra TAE_CHK_TIME ;branch if tps-last_tps<tpsthresh
btfsc TPSAEN,0
bra AE_COMP_SHOOT_AMT ;branch to accel.comp. if bit TPSAEN set
;- already in acc. enrichment
;Add in accel enrichement
movf tpsaq,0
movwf tpsaccel,0 ;start out using first element – will
;determine actual next time around
clrf tpsaclk,0 ;tpsaccel - Acceleration percent amount –
;used in later calculations
movf tpsasync,0 ;reset acc. clock
movwf tpsaclkcmp,0 ;tpsaclkcmp - Shoot time comparison value
bsf TPSAEN,0
bcf TPSDEN,0
bsf aled,0
bcf wled,0
goto MAE
; First, calculate Cold temperature add-on enrichment value from
; coolant value tpsacold,
; from -40 degrees to 70 degrees C.
;
; Then determine cold temperature multiplier value ACCELMULT (in
; percent), from -40 degrees to 70 degrees.
;
; Next, Calculate Shoot amount (quantity) for acceleration enrichment
; from table.
- - 129
; Find bins (between) for corresponding TPSDOT, and linear interpolate
; to find enrichment amount (from tpsaq). This is continuously
; checked every time thru main loop while in acceleration mode,
; and the highest value is latched and used.
;
; The final acceleration applied is
; AE = Alookup(TPSDOT) * (ACCELMULT/100) + tpsacold
AE_COMP_SHOOT_AMT
; First, the "added" amount based on cold temperatures
clrf tmp1,0 ;0 -> - 40 degrees
movlw D'110' ;70 + 40 degrees (because of offset in lookup
;table)
movwf tmp2,0
movf tpsacold,0
movwf tmp3,0 ;This is the amount at coldest
clrf tmp4,0 ;no enrichemnt addon at warm temperature
movf coolant,0,0
movwf tmp5,0
call LININTERP
movf tmp6,0,0
movwf tmp13,0 ;result ->tmp13- save hire temporarily
;Second, find the multiplier (ACCELMULT) amount based on cold ;temperatures
clrf tmp1,0 ;0 -> - 40 degrees
movlw D'110' ;70 + 40 degrees
movwf tmp2,0
movf ACMULT,0
movwf tmp3,0 ;This is the amount at coldest movlw D'100'
movwf tmp4,0 ;1.00 multiplier at 70°C
movf coolant,0,0
movwf tmp5,0
call LININTERP
movf tmp6,0,0
movwf tmp14,0 ;result -> tmp14 save here temporarily
;Now the lookup table amount based on TPSDOT
movlw 0x61
movwf TBLPTRH,0
movlw tpsdotaddr
movwf TBLPTRL,0 ;TPSdotrate adress = 0x610a
movlw 0x03
movwf tmp3,0
movf last_tps,0,0
subwf tps,0,0 ;tps-last_tps->WREG
movwf tmp4,0 ;TPSDOT
;movf tmp4,0,0
movwf tmp10,0 ;Save away for later use below
call FLASH_TABLE_FIND
lfsr FSR0,tpsaqaddr ;tpsaq address
movf tmp5,0,0 ;tpsdot table index- tmp5 ->WREG
movff PLUSW0,tmp4
decf tmp5,0,0 ;increment tmp5 and place in WREG
movff PLUSW0,tmp3
movf tmp10,0,0
movwf tmp5,0
call LININTERP ;tmp6 has the result
;Now, the final applied acceleration enrichment amount is
; ((tmp6 * tmp14)/100) + tmp13
FIND_TOTAL_A
banksel engine
movf tmp6,0
mulwf tmp14
movf PRODH,0
movwf WRD_H ;WRD_H:WRD_L/LUK_L ->WRD_L, remainder ->WRD_H,
movff PRODL,WRD_L
movlw 0x64
movwf LUK_L ;LUK_L=100
- - 130
call DIV16
incf WRD_L,0 ;on overflow during division 0xFF->WRD_L
bc UPPER_RAIL_AE
movlw D'200'
cpfslt WRD_L ;
bra UPPER_RAIL_AE ;branch if WRD_L > 200
movlw 0x32 ;test reminder
cpfsgt WRD_H
bra ADD_TO_AE ;branch if reminder - WRD_H <50
incf WRD_L ;if reminder >50 inc WRD_L
bra ADD_TO_AE
UPPER_RAIL_AE
movlw D'200'
movwf WRD_L ;Set to 20 milliseconds railed
ADD_TO_AE
movf WRD_L,0
addwf tmp13,0 ;Add on the amount computed in cold
;temperature enrich above
movwf tmp6
cpfslt tpsaccel
bra TAE_CHK_TIME ;branch if tpsaccel >= tmp6
movff tmp6,tpsaccel ;Replace with this higher value
;Check if acceleration done
TAE_CHK_TIME
btfsc TPSDEN,0
bra RST_ACCEL ;branch directly to RST_ACCEL if TPSDEN bit set
movf tpsaclk,0,0
cpfslt tpsaclkcmp,0
bra MAE ;branch to MAE if tpsaclk < tpsaclkcmp
RST_ACCEL
bcf TPSAEN,0 ;clear TPSAEN bit
movlw 0x64
movwf tpsfuelcut,0 ;TPS fuel cut is 100% _ no fuel cut
clrf tpsaccel,0 ;TPS accel. enrichment is 0% - no enrichment
bcf aled,0 ;turn off aled
bcf TPSDEN,0 ;clear TPSDEN bit
bra MAE
;deacceleration fuel cut-off
TDE
banksel tpsthresh
movf tmp1,0,0
subwf tmp2,0,0 ;tmp2-tmp1
cpfslt tpsthresh
bra TDE_CHK_DONE ;branch if tmp2-tmp1<tpsthresh
btfss TPSAEN,0 ;skip if in accel. enrichment
bra TDE_CHK_FUEL_CUT
movlw 0x64 ;set tps fuel cut to 100%- no fuel cut off
movwf tpsfuelcut,0
clrf tpsaccel,0
bcf TPSAEN,0
bcf aled,0
bcf TPSDEN,0
bra MAE
TDE_CHK_FUEL_CUT
movf rpm,0,0
sublw 14 ;1400-rpm
bc MAE ;branch if rpm =< 1400rpm
movf tpsdq,0
movwf tpsfuelcut,0
bsf TPSDEN,0
bcf TPSAEN,0
bcf aled,0
bra MAE
TDE_CHK_DONE
btfss TPSDEN,0
bra MAE
bcf TPSDEN,0
- - 131
movlw 0x64
movwf tpsfuelcut,0
clrf tpsaccel,0
bra MAE
;*************Exhaust Gas Oxygen Sensor Measurement Section************
;**
;** Steps are the following:
;**
;** If egodelta = 0 then goto skipo2
;** If RPM < RPMOXLIMIT then goto skipo2
;** If TPSAEN in ENGINE or TPSDEN in ENGINE are set, then goto skipo2
;** If coolant < egotemp then goto skipo2
;** If sech = 0 and secl < 30 seconds then got skipo2
;** (skip first 30 seconds)
;** If tps > 3.5 volts then goto skipo2
;**
;** If egocount > egocountcmp
;** {
;** egocount = 0
;** If ego > 26 (counts, or 0.5 Volts) then (rich)
;** {
;** tmp = egocurr - egodelta
;** if tmp < egolimit then goto VETABLELOOKUP
;** egocorr = tmp
;** goto VETABLELOOKUP
;** }
;** else (lean)
;** {
;** tmp = egocorr + egodelta
;** if tmp > egolimit then goto VETABLELOOKUP
;** egocorr = tmp
;** goto VETABLELOOKUP
;** }
;** }
;**
;** skipo2:
;** egocorr = 100%
;** goto VETABLELOOKUP
;**
;**
;**********************************************************************
MAE
banksel egodelta
movf egodelta,0,1
bz SKIPO2
movf rpm,0,0
cpfslt RPMOXLIMIT ;Low-end of RPM
bra SKIPO2 ;branch if rpm < RPMOXLIMIT
btfsc TPSAEN,0
bra SKIPO2
btfsc TPSDEN,0
bra SKIPO2
movf coolant,0,0
cpfslt egotemp
bra SKIPO2 ;branch if coolant < egotemp
movf tps,0,0
sublw .178 ;178 - tps =3.5V
bn SKIPO2 ;branch if tps > 3.5V
tstfsz sech,0
bra CHK_O2_LAG ;if high seconds set then we can check o2
movf secl,0,0
sublw 0x1E ;30 seconds threshold- 30-secl
bc SKIPO2 ;branch if secl < 30
; Check if exceeded lag time - if so then we can modify egocorr
CHK_O2_LAG
movf egocount,0,0
cpfslt egocountcmp
bra VETABLELOOKUP ;branch if egocount<egocountcmp
- - 132
;Check if rich/lean
clrf egocount,0
btfsc config13,2 ;Check if Narrow-band (bit=0) or WB (bit=1)
bra WBO2TYPE ;Branch if the bit is set
NBO2TYPE
movf ego,0,0
cpfslt VOLTOXTARGET ;if ego< voltoxtarget is lean
bra O2_IS_LEAN
bra O2_IS_RICH
WBO2TYPE
movf ego,0,0
cpfslt VOLTOXTARGET
bra O2_IS_RICH
bra O2_IS_LEAN
;rich o2 - lean out egocorr
O2_IS_RICH
movf egolimit,0
sublw 0x64 ;Generate the lower limit rail point
movwf tmp2,0
movf egodelta,0
subwf egocorr,0
movwf tmp1,0 ;egocorr - egodelta = tmp1
cpfslt tmp2,0 ;skip if tmp2<tmp1
bra VETABLELOOKUP ;railed at egolimit value
movf tmp1,0,0
movwf egocorr,0
bra VETABLELOOKUP
;lean o2 - richen egocorr
O2_IS_LEAN
movf egolimit,0
addlw 0x64 ;Generate the upper limit rail point
movwf tmp2,0
movf egodelta,0
addwf egocorr,0,0
movwf tmp1,0 ;egocorr + egodelta = tmp1
cpfsgt tmp2,0 ;skip if tmp2>tmp1
bra VETABLELOOKUP ;railed at egolimit value
movf tmp1,0,0
movwf egocorr,0
bra VETABLELOOKUP
;reset egocorr to 100%
SKIPO2
movlw 0x64
movwf egocorr,0
;bra VETABLELOOKUP
;**********************************************************************
;**
;** VE 3-D Table Lookup
;**
;** This is used to determine value of VE based on RPM and MAP
;** The table looks like:
;**
;** 105 +....+....+....+....+....+....+....+
;** ....................................
;** 100 +....+....+....+....+....+....+....+
;** ...
;** KPA ...
;** ...
;** 35 +....+....+....+....+....+....+....+
;** 5 15 25 35 45 55 65 75 RPM/100
;**
;**
;** Steps:
;** 1) Find the bracketing KPA positions via ORD_TABLE_FIND, put
;** index in tmp8 and
- - 133
;** bounding values in tmp9(kpa1) and tmp10(kpa2)
;** 2) Find the bracketing RPM positions via ORD_TABLE_FIND, store
;** index in tmp11 and
;** bounding values in tmp13(rpm1) and tmp14(rpm2)
;** 3) Using the VE table, find the table VE values for
;** tmp15=VE(kpa1,rpm1),
;** tmp16=VE(kpa1,rpm2), tmp17 = VE(kpa2,rpm1)
;** and tmp18 = VE(kpa2,rpm2)
;** 4) Find the interpolated VE value at the lower KPA range :
;** x1=rpm1, x2=rpm2, y1=VE(kpa1,rpm1),
;** y2=VE(kpa1,rpm2) - put in tmp19
;** 5) Find the interpolated VE value at the upper KPA range :
;** x1=rpm1, x2=rpm2, y1=VE(kpa2,rpm1),
;** y2=VE(kpa2,rpm2) - put in tmp11
;** 6) Find the final VE value using the two interpolated VE values:
;** x1=kpa1, x2=kpa2, y1=VE_FROM_STEP_4, y2=VE_FROM_STEP_5
;**
;**********************************************************************
VETABLELOOKUP
; First, determine if in Speed-density or Alpha-N mode.
; If in Alpha-N mode, then
; replace the variable "kpa" with the contents of "tps".
; This will not break anything, since
; this check is performed again when multiplying MAP
; against the enrichments, and
; the SCI version of the variable is MAP, not kpa
btfss config13,2 ;Check if in speed-density or Aplha-N mode
bra VE_STEP_1 ;Branch if the bit is clear
call TPSCOMP,1 ;reevaluation of tps for real time value
movff tps,kpa ; if in alfa/n mode
VE_STEP_1
banksel engine
movlw 0x60
movwf TBLPTRH
movlw kparengeaddr
movwf TBLPTRL ;kparengeflash ADDRESS :0x60c0
movlw indxsize ;indxsize
movwf tmp3
movf kpa,0
movwf tmp4
call FLASH_TABLE_FIND
movf tmp5,0
movwf tmp8 ;Index
movf tmp1,0
movwf tmp9 ;X1(kpaL)
movf tmp2,0
movwf tmp10 ;X2(kpaH)
VE_STEP_2
movlw 0x60
movwf TBLPTRH
movlw rpmrengeaddr
movwf TBLPTRL ;rpmrengeflash ADDRESS
movlw indxsize
movwf tmp3
movf rpm,0
movwf tmp4
call FLASH_TABLE_FIND
movf tmp5,0
movwf tmp11 ;Index
movf tmp1,0
movwf tmp13 ;X1(rpmL)
movf tmp2,0
movwf tmp14 ;X2(rpmH)
VE_STEP_3
decf tmp8,0,0 ;tmp8-1 ->Wreg
mullw tblsize ;(tmp8-1)x tblsize ->(12)
- - 134
lfsr FSR0,0x100 ;VE-ADDRESS decf
PRODL,0,0 ;((tmp8-1)x tblsize)-1 ->Wreg
addwf tmp11,0,0 ;((tmp8-1)x tblsize)-1 + tmp11 ->Wreg
movff PLUSW0,tmp15 ;tmp15=VE(kpaL,rpmL)
incf WREG
movff PLUSW0,tmp16 ;tmp16=VE(kpaL,rpmH)
movf tmp8,0,0
mullw tblsize
decf PRODL,0,0
addwf tmp11,0,0
movff PLUSW0,tmp17 ;tmp17=VE(kpaH,rpmL)
incf WREG
movff PLUSW0,tmp18 ;tmp18=VE(kpaH,rpmH)
VE_STEP_4
movf tmp13,0 ;rpmL
movwf tmp1
movf tmp14,0 ;rpmH
movwf tmp2
movf tmp15,0 ;tmp15=VE(kpaL,rpmL)
movwf tmp3
movf tmp16,0 ;tmp16=VE(kpaL,rpmH)
movwf tmp4
movf rpm,0
movwf tmp5
call LININTERP
movf tmp6,0
movwf tmp19 ;tmp19 = VE(kpaL,rpm)
VE_STEP_5
movf tmp13,0 ;rpmL
movwf tmp1
movf tmp14,0 ;rpmH
movwf tmp2
movf tmp17,0 ;tmp17=VE(kpaH,rpmL)
movwf tmp3
movf tmp18,0 ;tmp18=VE(kpaH,rpmH)
movwf tmp4
movf rpm,0
movwf tmp5
call LININTERP
movf tmp6,0
movwf tmp11 ;tmp11 = VE(kpaH,rpm)
VE_STEP_6
movff tmp9,tmp1 ;tmp9 = kpaL
movff tmp10,tmp2 ;tmp10 = kpaH
movff tmp19,tmp3
movff tmp11,tmp4
banksel config13
btfss config13,4 ;check if in alpha/N mode
bra MAP_OR_SNGL_TPS_OR_SEC_TRC
movlw D'240'
subwf tps1,0,0
bnc MAP_OR_SNGL_TPS_OR_SEC_TRC
FIRST_TRACK
banksel engine
movlw INVERSETPS1
movwf TBLPTRH
movf tmp1,0
movwf TBLPTRL
tblrd*
movf TABLAT,0
movwf tmp1
movf tmp2,0
movwf TBLPTRL
tblrd*
movf TABLAT,0
- - 135
movwf tmp2
movff tps1,tmp5
call LININTERP
movff tmp6,vecurr
bra WARMACCEL_COMP
MAP_OR_SNGL_TPS_OR_SEC_TRC
banksel engine
movff kpa,tmp5
call LININTERP
movff tmp6,vecurr
;******************** Computation of Fuel Parameters******************
;**
;** Remainders are maintained for hi-resolution calculations - results
;** converted back to 100 microsecond resolution at end.
;**
;** (Warm * Tpsfuelcut)/100 = R1 + rem1/100
;** (Barcor * Aircor)/100 = R2 + rem2/100
;** ((R1 + rem1/100) * (R2 + rem2/100)) / 100 = R3 + rem3/100
;** (EGO * MAP)/100 = R4 + rem4/100
;** ((R3 + rem3/100) * (R4 + rem4/100)) /100 = R5 + rem5/100
;** (VE * req_fuel)/100 = R6 + rem6/100
;** ((R5 + rem5/100) * (R6 + rem6/100)) = R7
;**
;**
;** GAMMAE includes Warm, Tpsfuelcut, Barocor, and Aircor
;**
;** Rationle on ordering: to prevent calculation overflow
;** for boosted operations, the variables have been ordered
;** in specific "pairs" in the calculation:
;** EGO * MAP - when at WOT, EGO is set to 100%,
;** so MAP can run up to 255% without overflow
;** VE * req_fuel - for boosted applications,
;** req_fuel tends to be low (below 10 ms) due to the
;** added fuel requirements (i.e. large injectors),
;** so VE entries can be well above 100%.
;**
;**********************************************************************
WARMACCEL_COMP
movff warmcor,tmp10 ;Warmup Correction in tmp10
clrf tmp11 ;tmp11 is zero
movff tpsfuelcut,tmp12 ;tpsfuelcut in tmp12
clrf tmp13 ;tmp13 is zero
call SUPERNORM ;do the multiply and normalization
movff tmp10,tmp1 ;save whole result in tmp1
movff tmp11,tmp2 ;save remainder in tmp2
movff barocor,tmp10 ;tmp10 is barometer percent
clrf tmp11 ;zero to tmp11
movff aircor,tmp12 ;air temp correction % in tmp12
clrf tmp13 ;tmp13 is zero
call SUPERNORM ;multiply and divide by 100
;result in tmp10:tmp11
movff tmp1,tmp12 ;move saved tmp1 into tmp12
movff tmp2,tmp13 ;move saved tmp2 into tmp13
call SUPERNORM ;multiply/divide
btfss config13,2
bra SPEED_DENS_MODE
ALPHA_N_MODE
movff egocorr,tmp12
call SUPERNORM
bra BOTH_MODES
SPEED_DENS_MODE
movff tmp10,tmp5 ;save whole result into tmp5
- - 136
movff tmp11,tmp6 ;save remainder into tmp6
movff tmp10,gammae ;includes Warm, Tpsfuelcut,
;Barocor, and Aircor
movff egocorr,tmp10 ;closed-loop correction percent
;into tmp10
clrf tmp11 ;remainder is zero
movff kpa,tmp12 ;MAP into tmp12
clrf tmp13 ;no remainder
call SUPERNORM ;do the multiply and divide
movff tmp5,tmp12 ;take saved result in tmp5 and put into tmp12
movff tmp6,tmp13 ;tmp6 into tmp13
call SUPERNORM ;mult/div
BOTH_MODES
movff tmp10,tmp3 ;result (whole) save in tmp3
movff tmp11,tmp4 ;remainder result save in tmp4
movff vecurr,tmp10 ;VE into tmp10
clrf tmp11 ;no remainder value for VE
movff req_fuel,tmp12 ;req-fuel into tmp12
clrf tmp13 ;no remainder
call SUPERNORM ;mult/div
movff tmp3,tmp12 ;take previous result and put in tmp12
movff tmp4,tmp13 ;again for remainder
call SUPERNORM ;multiply/divide
movff tmp10,tmp11
;**********************************************************************
;** Calculation of Battery Voltage Correction for Injector Opening Time
;**
;** Injector open time is implemented as a linear function of
;** battery voltage, from 7.2 volts (61 ADC counts)
;** to 19.2 volts (164 counts),
;** with 13.2 volts (113 counts) being the nominal operating voltage.
;** Voltage reading 0 -30 V, where 255counts is 30 V.
;**
;** INJOPEN = injector open time at 13.2 volts in mms
;** BATTFAC = injector open adjustment factor 6 volts from 13.2V in mms
;**
;** + (INJOPEN + BATTFAC)
;** + *
;** + (INJOPEN)
;** + *
;** + (INJOPEN - BATTFAC)
;** + *
;** +
;** ++++++++++++++++++++++++++++++++++++++++++++++++++++++
;** 7.2V 13.2V 19.2
;**
;**********************************************************************
BATT_CORR_COMP
movlw D'61'
movwf tmp1
movlw D'164'
movwf tmp2
banksel injopen
movf injopen,0
addwf battfac,0
movwf tmp3,0
movf battfac,0
subwf injopen,0 ;injopen-battfac = WREG
movwf tmp4,0
bnn MBFF ;Check if minus condition
clrf tmp4,0
MBFF
movff batt,tmp5
call LININTERP ;injector open time in tmp6
- - 137
;*****************Calculation of Final Pulse Width*********************
;**
;** The following equation is evaluated here:
;** PWCALC = TMP6 + TMP11 + tpsaccel - injocfuel
;**
;**********************************************************************
ADD_INJ_OFFSET
movf tmp11,0,0
addwf tmp6,0,0
bc MAX_PWM_ALLOWED
addwf tpsaccel,0,0
bc MAX_PWM_ALLOWED
movwf tmp1,0
movf injocfuel,0
subwf tmp1,0,0
movwf pwcalc,0
goto FINISHED_PW_COMP
MAX_PWM_ALLOWED
movlw 0xFE
movwf pwcalc,0
FINISHED_PW_COMP
goto LOOPER
;*************************INTERRUPT SECTION****************************
;**
;** Following interrupt service routines:
;** - Timer Overflow
;** - ADC Conversion Complete
;** - IRQ input line transistion from high to low
;** - Serial Communication received character
;** - Serial Communications transmit buffer empty (send other char.)
;**
;**********************************************************************
;*****************************Timer Rollover***************************
;** - Occurs every 1/10 of a millisecond - main timing clock
;**
;** Generate time rates:
;** 1/10 milliseconds
;** 1 milliseconds
;** 1/10 seconds
;** seconds
;**
;** Also, in 1/10 millisecond section, turn on/off injector and
;** check RPM for stall condition
;** In milliseconds section, fire off ADC conversion for next channel
;** and wrap back when all channels done
;**
;**********************************************************************
TIMERROLL
;======================================================================
;***************** 0.1 millesecond section ****************************
;======================================================================
banksel injpwmt
incf mms,1,0 ;bump up 0.1 millisec variable
movlw 0x9c ;adjust TMR0 counter for 0.1ms ,
movwf TMR0L ;0x06 for 0.1ms when 40Mh clock with PLL and
;0x06 for 10Mh test clock, 0x9C for 1MHz
;======== Injector Firing Control ========
;===== Main Injector Control Logic =======
btfsc sched1,0
bra NEW_SQUIRT1
INJF1
btfsc sched2,0
bra NEW_SQUIRT2
- - 138
INJF2
btfsc firing1,0
bra CHK_DONE_1
INJF3
btfsc firing2,0
bra CHK_DONE_2
goto CHECK_RPM
;=== Injector #1 - Start New Injection ===
NEW_SQUIRT1
bsf firing1,0 ;Turn on "firing" bit
bcf sched1,0 ;Turn off schedule bit (is now current operation)
bsf inj1,0
bsf sled,0 ;squrt LED is ON
bsf fbd1,0 ;Flyback Damper board
bcf inject1,0 ;Turn on Injector #1 - inverted drive
bra INJF1
;=== Injector #2 - Start New Injection ===
NEW_SQUIRT2
bsf firing2,0 ;Turn on "firing" bit
bcf sched2,0 ;Turn off schedule bit
;(is now current operation)
bsf inj2,0
bsf sled,0 ;squrt LED is ON
bsf fbd2,0 ;Flyback Damper
bcf inject2,0 ;Turn on Injector #1
bra INJF2
;=== Injector #1 - Check for end of Injection ===
CHK_DONE_1
incf pwrun1,1,0
movf pwrun1,0,0 ;--> W
subwf pw,0,0 ;pw-pwrun1
bz OFF_INJ_1 ;branch if zerro
btfsc crank,0
bra INJF3 ;do not perform PWM limiting when cranking
movf pwrun1,0,0
subwf injpwmt,0 ;injpwmt-pwrun1
bz PWM_LIMIT_1
bra INJF3
OFF_INJ_1
bcf firing1,0
bcf sched1,0
bcf inj1,0
bsf inject1,0 ;Turn Off Injector #1
clrf CCP1CON,0 ;turn off pwm1
bcf fbd1,0 ;Flyback Damper - turn off X0
bra INJF3
PWM_LIMIT_1
movlw b'00001100'
movwf CCP1CON,0
bra INJF3
;=== Injector #2 - Check for end of Injection ===
CHK_DONE_2
incf pwrun2,1,0
movf pwrun2,0,0
subwf pw2,0,0
bz OFF_INJ_2
btfsc crank,0
bra CHECK_RPM ;do not perform PWM limiting when cranking
movf pwrun2,0,0
subwf injpwmt,0
bz PWM_LIMIT_2
bra CHECK_RPM
OFF_INJ_2
bcf firing2,0
bcf sched2,0
bcf inj2,0
- - 139
bsf inject2,0 ;Turn Off Injector #2 -inverted drive
clrf ECCP1CON,0 ;turn off pwm1
bcf fbd2,0 ;Flyback Damper - turn off X0
bra CHECK_RPM
PWM_LIMIT_2
movlw b'00001100'
movwf ECCP1CON,0
bra CHECK_RPM
;=======Check RPM Section=====
CHECK_RPM
btfss running,0
bra ENABLE_THE_IRQ ;Branch if not running right now
btfsc firing1,0
bra CHK_RE_ENABLE
btfsc firing2,0
bra CHK_RE_ENABLE
bcf sled,0 ;squrt LED is OFF - nothing is injecting
CHK_RE_ENABLE
;====== Check for re-enabling of IRQ input pulses
movf rpmph,0,0 ;Get high byte of last rpm interval
bz RPMLOWBYTECHK ;If zero go ahead check for half interval
movf rpmcl,0,0 ; Check current rpm interval
sublw D'128' ;12.8 milliseconds is maximum
;(half of 25.6 ms = 1 in rpmph)
bz REARM_IRQ ;time to re-arm IRQ
bra INCRPMER ;Jump around rpm half interval check
RPMLOWBYTECHK
rrncf rpmpl,0,0 ;Load in the latched previous RPM value
bcf WREG,7
cpfseq rpmcl ;Is it the same value as current RPM Counter?
bra INCRPMER ;If not then jump around this
REARM_IRQ
;bcf INTCON,INT0IF,0 ;clear out any latched
;external INT0 interrupts
bsf INTCON,INT0IE,0 ; enable interrupts again for INT0
INCRPMER
incfsz rpmcl,1,0
bra CHECK_MMS
incf rpmch,1,0
movlw 0x64
cpfseq rpmch,0 ;If RPMPH is 100 (or RPMPeriod =
;2.5 sec) then engine stalled
bra CHECK_MMS
clrf engine,0 ;Engine is stalled, clear all in engine
bcf fuelp,0 ;Turn off fuel Pump
;bcf iasc,porta ;Turn off IAC
clrf rpmch,0
clrf rpmcl,0
bcf sled,0 ;squrt LED is OFF
bcf wled,0 ;warmup LED is off
clrf pw,0 ;zero out pulsewidth
clrf rpm,0
bsf INTCON,INT0IE,0 ;enable all IRQ interrupts
bra CHECK_MMS
ENABLE_THE_IRQ
bsf INTCON,INT0IE,0 ;Enable IRQ
CHECK_MMS
movlw 0x0A
cpfseq mms,0
bra RTC_DONE
- - 140
;======================================================================
;********************** millesecond section ***************************
;======================================================================
MSEC
incf ms,1,0 ;bump up millisec
clrf mms,0
;Fire off another ADC conversion, channel is pointed to by ADSEL
btfss ms,0,0
bra ADGO
swapf adsel,0,0
rrncf WREG,0
iorlw b'10000001' ;Fosc/64,chanel adsel, ADON
movwf ADCON0,0
bra MSDONE
ADGO
bsf ADCON0,2,0 ;A/D aquisition time is taken into
;account bi performing the A/D conversion
;every second ms count
MSDONE
movlw 0x64
cpfseq ms,0
bra RTC_DONE
;======================================================================
;********************** 1/10 second section ***************************
;======================================================================
ONETENTH
incf tenth,1,0
incf tpsaclk,1,0
clrf ms,0
;Save current TPS reading in last_tps variable
;to compute TPSDOT in acceleration
;enrichment section
movff tps,last_tps
movlw 0x0A
cpfseq tenth,0
bra RTC_DONE
;======================================================================
;************************ seconds section *****************************
;======================================================================
SECONDS
clrf tenth,0
incfsz secl,1,0 ;bump up second count
bra RTC_DONE
incf sech,1,0
RTC_DONE
bcf INTCON,TMR0IF,0 ;clear timer0 interupt flag bit
retfie 1
;****************INT0 - Input trigger for new pulse event**************
;**
;** This line is connected to the input trigger (i.e TACH signal from
;** ignition system), and schedules a new injector shot
;** (injector actually opened in 1/10 timer section above)
;**
;**********************************************************************
DOSQUIRT
banksel divider
tstfsz igncount,0
bra EGOBUMP ;Only increment ase counter if cylinder
;count is zero
incf asecount,1,0 ;Increment after-start enrichment counter
- - 141
EGOBUMP
incf egocount,f,0 ;Increment EGO step counter
movff rpmch,rpmph
movff rpmcl,rpmpl
clrf rpmch,0
clrf rpmcl,0
;movff rpm,old_rpm1 ;Used in odd-fire code - save the last
;computed RPM for average
bsf fuelp,0 ;Turn on fuel Pump
bsf running,0 ;Set engine running value
btfsc crank,0
bra SCHED_SQUIRT ;Squirt on every pulse if cranking
incf igncount,1,0 ;Check to see if we are to squirt or skip
movf igncount,0,0
subwf divider,0,1 ;divider - igcount
bz SCHED_SQUIRT
movlw 0x0F
cpfseq igncount,0 ;The maximum allowed - reset if match
bra IRQ_EXIT
clrf igncount,0
bra IRQ_EXIT
SCHED_SQUIRT
bsf fuelp,0 ;Turn on fuel Pump
bsf running,0 ;Set engine running value
clrf igncount,0
btfsc crank,0
bra SCHED_BOTH
btfss alternate,0
bz SCHED_BOTH
incf altcount,1,0
btfsc altcount,0,0
bra SCHED_INJ2
SCHED_INJ1
movff pwcalc,pw ;latched calculated pulsewidth
clrf pwrun1,0 ;Running counter variable set to zero
bsf sched1,0
bsf inj1,0
bra IRQ_EXIT
SCHED_INJ2
movff pwcalc,pw2 ;latched calculated pulsewidth
clrf pwrun2,0 ;Running counter variable set to zero
bsf sched2,0
bsf inj2,0
bra IRQ_EXIT
SCHED_BOTH
movf pwcalc,0,0
movwf pw,0 ;Same pulsewidth
movwf pw2,0 ;for both
clrf pwrun1,0 ;Running counter variable set to zero
bsf sched1,0
bsf inj1,0
clrf pwrun2,0 ;Running counter variable set to zero
bsf sched2,0
bsf inj2,0
IRQ_EXIT
bcf INTCON,INT0IF,0 ;Flush out any new interrupts pending
bcf INTCON,INT0IE,0 ;Disable IRQ interrupts
retfie 1 ;Wreg, and BSR are backdated
;***************ADC - Interrupt for ADC conversion complete************
- - 142
;**AD0=TPS1
;**AD1=TPS2
;**AD2=MAP
;**AD4=MAT
;**AD5=CLT
;**AD6=BATT
;**AD7=EGO
;**********************************************************************
ADCDONE
; Store previous values for derivative
lfsr FSR1,0x028 ;tps1 address is 40
movf adsel,0,0
movff PLUSW1,adtmp
lfsr FSR1,0x45 ;ltps1 address is 69
movf adsel,0,0
movff adtmp,PLUSW1 ;Store the old value
lfsr FSR1,0x028
movf adsel,0,0
movf PLUSW1,0,0
addwf ADRESH,0,0 ;Load the new ADC reading
rrcf WREG,0,0 ;and perform (map + last_map)/2 averaging
;(for all ADC readings
movwf adtmp,0
movf adsel,0,0
movff adtmp,PLUSW1 ;TPS1 is entry point,
;offset is loaded in WREG
incf adsel,1,0
movf adsel,0,0
sublw 0x03
btfsc STATUS,Z,0 ;AN3 = tps-computed value
incf adsel,1,0
movf adsel,0,0
sublw 0x08
bnz ADCPTR
clrf adsel,0
ADCPTR
bcf PIR1,ADIF,0
retfie 1
;***************************SCI comunication***************************
;**
;**Communication is established when the PC communication program sends
;** a command character- the particular character sets the mode:
;**
;** "A" = send all of the real time variables via txport
;** "V" = send the VE table and constants via txport
;** "W"+<offset>+<newbyte> = receive new VE
;** or Constant byte value
;** and store in offset location
;** "B" = jump to flash burner routine and burn VE/constants values
;** in RAM into flash
;** "C" = test communication - echo back SECL
;**
;** "O" = burn baro table
;** "K" = burn kpa table
;** "D" = burn airden table
;** "T" = burn therm table
;**
;**********************************************************************
IN_SCI_RCV
banksel txmode
movf txmode,0 ;Check if we are in middle of receive
sublw 0x05 ;new VE/constant
sublw 0x05
bz TXMODE_5
movf txmode,0
- - 143
sublw 0x06
bz TXMODE_6
movf txmode,0 ;Check if we are in middle of receive
sublw 0x07 ;new Sensor table entry
bz TXMODE_7
movf txmode,0
sublw 0x08
bz TXMODE_8
movf RCREG,0,0
movwf txmode,0
sublw 0x41
bz MODE_A
movf txmode,0
sublw 0x42
bz MODE_B
movf txmode,0
sublw 0x43
bz MODE_C
movf txmode,0
sublw 0x56
bz MODE_V
movf txmode,0
sublw 0x57
bz MODE_W
movf txmode,0 ;code for burning sensor look-up tables
sublw 0x58
bz MODE_Z
movf txmode,0
sublw 0x4f
bz MODE_O
movf txmode,0
sublw 0x4b
bz MODE_K
movf txmode,0
sublw 0x44
bz MODE_D
movf txmode,0
sublw 0x54
bz MODE_T
bra DONE_RCV
;***************************************************
MODE_A ;sand back all real time variables
movlw 0x01
movwf txmode
clrf txcnt
movlw 0x1e ; = 28 (need 30) real time variables includes
movwf txgoal ;3 blank spots for future upgrades
bsf PIE1,TXIE,0 ;enable transfer interrupt
bsf TXSTA,TXEN,0 ;enable transmit, which will also set bit TXIF
bra DONE_RCV
;***************************************************
MODE_B ;jump to flash burner routine and burn VE/constants
;from RAM into flash memory
clrf TBLPTRU,0 ;address of the memory block
movlw 0x60
movwf TBLPTRH,0
clrf TBLPTRL,0
lfsr FSR1,0x100
GO_MORE
call BURNER
movlw 0x40
movwf TBLPTRL,0
call BURNER
movlw 0x80
movwf TBLPTRL,0
call BURNER
movlw 0xC0
- - 144
movwf TBLPTRL,0
call BURNER
clrf txmode
bra DONE_RCV
MODE_O ;baro_table
clrf TBLPTRU,0
movlw 0x70
bra TO_SAME
MODE_K ;kpa_table
clrf TBLPTRU,0
movlw 0x71
bra TO_SAME
MODE_T ;term_table
clrf TBLPTRU,0
movlw 0x72
bra TO_SAME
MODE_D ;aird_table
clrf TBLPTRU,0
movlw 0x73
TO_SAME
movwf TBLPTRH,0
clrf TBLPTRL,0
lfsr FSR1,0x200
call BURNER
movlw 0x40
movwf TBLPTRL,0
call BURNER
movlw 0x80
movwf TBLPTRL,0
call BURNER
movlw 0xC0
movwf TBLPTRL,0
call BURNER
clrf txmode
bra DONE_RCV
;***************************************************
MODE_C ;test COM port - echo back "secl" variable
movlw 0x01
movwf txmode
clrf txcnt
movlw 0x03
movwf txgoal ;just one byte
bsf PIE1,TXIE,0 ;enable transfer interrupt
bsf TXSTA,TXEN,0 ;enable transmit, which will also set bit TXIF
bra DONE_RCV
;***************************************************
MODE_V
movlw 0x03
movwf txmode
clrf txcnt
movlw nVar
movwf txgoal
bsf PIE1,TXIE,0 ;enable transfer interrupt
bsf TXSTA,TXEN,0 ;enable transmit, which will also set bit TXIF
bra DONE_RCV
;***************************************************
TXMODE_7
bra MODE_7
TXMODE_8
bra MODE_8
;***************************************************
MODE_W
movlw 0x05
- - 145
movwf txmode
bra DONE_RCV
TXMODE_5
movff RCREG, rxoffset
incf txmode,1
bra DONE_RCV
TXMODE_6
lfsr FSR2,0x100 ;VE table start address
movlw 0x80
subwf rxoffset,0,0
bn UPER_HALF
lfsr FSR2,0x180
movff RCREG,PLUSW2
clrf txmode
bra DONE_RCV
UPER_HALF ;<--------<----------<----------<----------<--|
movf rxoffset,0 ;|
movff RCREG,PLUSW2 ;the stupid MC can't add more ;|
;than 127 to the fsr ;|
clrf txmode ;|
bra DONE_RCV ;|
;*************************************************** ;|
MODE_Z ;|
movlw 0x07 ;|
movwf txmode ;|
bra DONE_RCV ;|
;|
MODE_7 ;|
movff RCREG, rxoffset ;|
incf txmode,1 ;|
bra DONE_RCV ;|
;|
MODE_8 ;|
lfsr FSR2,0x200 ;TBLBURNER start address ;|
movlw 0x80 ;|
subwf rxoffset,0,0 ;|
bn UPER_HALF ;->-------->------------>---------->'
lfsr FSR2,0x280
movff RCREG,PLUSW2
clrf txmode
DONE_RCV
bcf PIR1,RCIF,0
retfie 1
;****************transmit character interupt header******************
IN_SCI_TX
banksel txmode
incf txcnt,0
subwf txgoal,0 ;txgoal- txcount->WREG
bz DONE_LAST
decfsz txmode,0 ;Check if we are in middle of
bra IN_V_MODE ;receive new VE/constant
IN_A_OR_C_MODE
lfsr FSR1,0x024 ;secl(first real time variable) address is 36
movf txcnt,0 ;load count in wreg for indirect addressing
bra CONT_TX
IN_V_MODE
lfsr FSR1,0x100 ;ve adress is 0x100- fsr are composed from
;two 8 bit reg. because the address is
;12bit wide
movf txcnt,0 ;load count in wreg for indirect adressing
- - 146
CONT_TX
movff PLUSW1,TXREG ;load to the trans. register TXREG starts
;the transmision
incf txcnt,1
movf txcnt,0
subwf txgoal,0 ;txgoal- txcount->WREG
bra DONE_XFER
DONE_LAST
clrf txcnt
clrf txgoal
clrf txmode
bcf PIE1,TXIE,0 ;disable transfer interrupt
bcf TXSTA,TXEN,0 ;disable transmit,
DONE_XFER
retfie 1
;***************Various functions and subroutines**********************
;** - TPS copputation
;** - Ordered Table Search
;** - 16 / 8 divide
;** - 32 / 16 divide
;** - Linear Interpolation
;** - Computation of normalized values
;**********************************************************************
TPSCOMP
banksel config13
btfsc config13,4
bra DOUBLE_TPS
movff tps1,tps
bra TPS_END
DOUBLE_TPS
movlw D'240'
subwf tps1,0,0
bnc SECOND_TRACK
movlw TPS1FACTOR
movwf TBLPTRH,0
movf tps1,0,0
movwf TBLPTRL,0
tblrd*
movf TABLAT,0,0
movwf tps,0
bra TPS_END
SECOND_TRACK
movlw TPS2FACTOR
movwf TBLPTRH,0
movf tps2,0,0
movwf TBLPTRL,0
tblrd*
movf TABLAT,0,0
movwf tps,0
TPS_END
return 1
;******************************ORD_TABLE_FIND**************************
;** Ordered Table Search
;**
;** X is pointing to the start of the first value in the table
;** tmp1:2 initially hold the start of table address, then
;** they hold the bound values
;** tmp3 is the end of the table (nelements - 1)
;** tmp4 is the comparison value
;** tmp5 is the index result - if zero then comp value is
;** less than beginning of table, and
;** if equal to n-1 elements then it is rail-ed at upper end
;**********************************************************************
- - 147
ORD_TABLE_FIND
clrf tmp5,0
REENT
incf tmp5,1,0
movf POSTINC0,0,0
movwf tmp1,0
movf INDF0,0,0
movwf tmp2,0
movf INDF0,0,0
cpfsgt tmp4,0
bra GOT_ORD_NUM
movf tmp5,0,0
cpfseq tmp3,0
bra REENT
GOT_ORD_NUM
return
;******************************FLASH_TABLE_FIND************************
;**
;** Ordered Table Search for tables in program memory
;**
;** tmp5 -index
;** tmp1- lower value
;** tmp2- grater value
;**********************************************************************
FLASH_TABLE_FIND
clrf tmp5,0
tblrd*
movf TABLAT,0,0
movwf tmp2,0
REENTER
incf tmp5,1,0
movf tmp2,0,0
movwf tmp1,0 ;tmp2 -> tmp1
tblrd+*
movf TABLAT,0,0
movwf tmp2,0
movf tmp2,0,0
cpfsgt tmp4,0 ;skip branch to end if tmp4>tmp2
bra GOT_NUM
movf tmp5,0,0
cpfseq tmp3,0
bra REENTER
GOT_NUM
return
;*******************************DIV16**********************************
;Unsigned Division 16bit/8bit ->8bit
;WRD_H:WRD_L/LUK_L ->WRD_L, remainder ->WRD_H,
;On overflow or divide by zero: FFFFh -> WRD, FFFFh -> EXT
;**********************************************************************
DIV16
bcf STATUS,0,0
movlw 0x09
movwf div_repeat,0
movf LUK_L,0,0
addlw 0x00
bnz SKIP_SHIFT
movlw 0xFF
movwf WRD_L,0
return
DIV_LOOP
dcfsnz div_repeat,1,0
bra ENDE16
rlcf WRD_L,1,0
- - 148
rlcf WRD_H,1,0
bnc SKIP_SHIFT
movf LUK_L,0,0
subwf WRD_H,1,0
bsf STATUS,0,0
bnz DIV_LOOP
SKIP_SHIFT
movf LUK_L,0,0
subwf WRD_H,1,0
bc DIV_LOOP
movwf LUK_L,0
addwf WRD_H,1,0
bcf STATUS,0,0
bra DIV_LOOP
ENDE16
rlcf WRD_L,1,0
return
;******************************DIV32***********************************
;Unsigned Division 32bit / 16bit -> 16bit
;EXTWRD / LUK -> WRD, remainder -> EXT
;detailed EXT_H:EXT_L:WRD_H:WRD_L / LUK_H:LUK_L -> WRD_H:WRD_L
;On overflow or divide by zero: FFFFh -> WRD, FFFFh -> EXT
;LUK value remains. Affected registers: temp reg C0, C1, C2, C3
;**********************************************************************
; uint16 x = uint16 x / uint16 y
;
; Input:
; x, x+1 - 16 bit unsigned integer dividend (x - lsb, x+1 - msb)
; y, y+1 - 16 bit unsigned integer divisor
; Output:
; x, x+1 - 16 bit unsigned integer quotient
; Temporary:
; counter
; x+2, x+3 - 16 bit remainder
; temp - remainder extension
; Size: 36 instructions
; Max timing: 6+16*(5+13+3)-1+2+2=345 cycles
DIV32
div16by16
div16by16loopinit
clrf C2,0 ;clear remainder extension
movlw .16
movwf C3,0
bsf STATUS,0,0
div16by16loop
;shift in next result bit and shift out next
;dividend bit to remainder
rlcf WRD_L,1,0 ;shift lsb
rlcf WRD_H,1,0 ;shift msb
rlcf EXT_L,1,0
rlcf EXT_H,1,0
rlcf C2,1,0
movf LUK_L, w,0
btfss WRD_L,0,0
goto div16by16add
;subtract divisor from remainder
subwf EXT_L, f,0
- - 149
movf LUK_H, w,0
btfss STATUS,0,0
incfsz LUK_H, w,0
subwf EXT_H, f,0
movlw 0x01
btfss STATUS,0,0
subwf C2, f,0
goto div16by16next
div16by16add
;add divisor to remainder
addwf EXT_L, f,0
movf LUK_H, w,0
btfsc STATUS,0
incfsz LUK_H, w,0
addwf EXT_H, f,0
movlw 0x01
btfsc STATUS,0,0
addwf C2, f,0
div16by16next
;carry is next result bit
decfsz C3, f,0
goto div16by16loop
;shift in last bit
rlcf WRD_L, f,0
rlcf WRD_H, f,0
return
;***************************LININTERP**********************************
; Linear interpolation
;
; (y2-y1)
; y=y1 + ------- *(x-x1)
; (x2-x1)
;
; tmp1=x1
; tmp2=x2
; tmp3=y1
; tmp4=y2
; tmp5=x
; tmp6=y
;**********************************************************************
LININTERP
clrf STATUS,0
clrf tmp7,0 ;this is the negative slope detection bit
movff tmp3,tmp6
movf tmp5,0,0 ;check if x lower than x1
cpfslt tmp1,0 ;skip if x1<x
bra DONE_WITH_INTERP ;branch if x1>=x
movf tmp5,0,0 ;check if x greter than x2
cpfslt tmp2,0 ;skip if x2<x
bra DO_INTERP
movff tmp4,tmp6
bra DONE_WITH_INTERP
DO_INTERP
movf tmp1,0,0
subwf tmp2,0,0
movwf imen,0 ;x2-x1=imen
bz DONE_WITH_INTERP
movf tmp3,0,0
subwf tmp4,0,0
movwf stev,0
bz DONE_WITH_INTERP ;y2-y1=stev
bnn POS_INTERP
- - 150
negf stev,0 ;-stev
incf tmp7,1,0
POS_INTERP
movf tmp1,0,0
subwf tmp5,0,0 ;x-x1=WREG
mulwf stev,0 ;(y2-y1)*(x-x1)->PRODH:PRODL
movff PRODH,WRD_H
movff PRODL,WRD_L
movff imen,LUK_L ;Unsigned Division 16bit/8bit ->8bit
call DIV16 ;WRD_H:WRD_L/LUK_L ->WRD_L, rem.->WRD_H
rrncf imen,0,0 ;takeing care of the reminder
bcf WREG,7,0
cpfsgt WRD_H,0 ;Branch If reminder<stev/2
bra REMM_OK
infsnz WRD_L,1,0
setf WRD_L,0 ;devision result was 0xFF
REMM_OK
btfsc tmp7,0,0
bra NEG_SLOPE
movf WRD_L,0,0
addwf tmp3,0,0
movwf tmp6,0
bra DONE_WITH_INTERP
NEG_SLOPE
movf WRD_L,0,0
subwf tmp3,0,0
movwf tmp6,0
DONE_WITH_INTERP
return ;temp6 = y
;**********************************SUPERNORM***************************
;**
;** Computation of Normalized Variables
;**
;** The following is the form of the evaluation for
;** the normalized variables:
;**
;** (A rem A * B)
;** ------------- = C rem C
;** 100
;**
;** Where A = Whole part of the percentage,
;** rem A = Remainder of A from previous calc. (range 0 to 99)
;** B = Percentage multiplied (this always has a zero remainder)
;** C = Whole part of result
;** rem C = remainder of result
;**
;**
;** Calculation is preformed by the following method:
;**
;** |(A * B) + (rem A * B)|
;** | -----------|
;** | 100 |
;** ----------------------- = C rem C
;** 100
;**
;**
;** Inputs: tmp10 = A
;** tmp11 = rem A
;** tmp12 = B
;**
;** Outputs: tmp10 = C
;** tmp11 = rem C
- - 151
;** tmp13 = high order part of (A rem A) * B
;** tmp14 = low order part of (A rem A) * B
;**
;**********************************************************************
SUPERNORM
movf tmp10,0,0 ;tmp10->WREG
mulwf tmp12,0 ;tmp10 * tmp12->tmp13
movff PRODH,tmp13 ;High order of A * B
movff PRODL,tmp14 ;Low order of A * B
movf tmp11,0,0 ;rem A
mulwf tmp12,0 ;B
movff PRODH,WRD_H
movff PRODL,WRD_L
movlw 0x64
movwf LUK_L,0
call DIV16 ;WRD_H:WRD_L/LUK_L ->WRD_L, remainder ->WRD_H,
movf WRD_L,0,0
addwf tmp14,1,0 ;Add to lower part and store in tmp14
bnc Roundrem ;Branch is no carry occurred
incf tmp13,1,0 ;Increment high-order part because an
;overflow occurred in add
Roundrem
movlw 0x32
cpfsgt WRD_H,0
bra FinalNorm ;branch if reminder < 50
incf tmp14,1,0
bnc FinalNorm
incf tmp13,1,0
FinalNorm
movff tmp13,WRD_H
movff tmp14,WRD_L
movlw 0x64
movwf LUK_L,0
call DIV16
movff WRD_L,tmp10
infsnz tmp10,0,0
bra RailCalc ;Branch if tmp10 = 0xff <=> overflow
movff WRD_H,tmp11
movlw 0x32
cpfsgt tmp11,0
bra ExitSN ;branch if reminder < 50
incf tmp11,1,0
bnc ExitSN
incf tmp10,1,0
bra ExitSN
RailCalc
clrf tmp11,0 ;Rail value if rollover
ExitSN
return
;*******************************Load and Burn******************
BURNER
ERASE_BLOCK
bcf INTCON, GIE,0 ; disable interrupts
bsf EECON1, EEPGD,0 ; point to FLASH program memory
bcf EECON1, CFGS,0 ; access FLASH program memory
bsf EECON1, WREN,0 ; enable write to memory
bsf EECON1, FREE,0 ; enable Row Erase operation
movlw 0x55
movwf EECON2,0 ; write 55H
movlw 0xAA
movwf EECON2,0 ; write AAH
bsf EECON1, WR,0 ; start erase (CPU stall)
nop
- - 152
nop
nop
nop
nop
TBLRD*- ;dummy read decrement
WRITE_BUFFER_BACK
movlw 0x08 ;number of write buffer groups of 8 bytes
movwf COUNTER_HI
PROGRAM_LOOP
movlw 0x08 ;number of bytes in holding register
movwf COUNTER,0
WRITE_WORD_TO_HREGS
movf POSTINC1,0 ,0 ;get low byte of buffer data
movwf TABLAT,0 ;present data to table latch
tblwt+* ;write data, perform a short write
;to internal TBLWT holding register.
decfsz COUNTER,1,0 ;loop until buffers are full
bra WRITE_WORD_TO_HREGS
PROGRAM_MEMORY
bsf EECON1, EEPGD,0 ;point to FLASH program memory
bcf EECON1, CFGS,0 ;access FLASH program memory
bsf EECON1, WREN,0 ;enable write to memory
bcf INTCON, GIE,0 ;disable interrupts
movlw 0x55 ;write 0x55
movwf EECON2,0
movlw 0xAA ;write 0xAA
movwf EECON2,0 ;start program (CPU stall)
bsf EECON1, WR,0
nop
decfsz COUNTER_HI,1,0 ;loop until done
bra PROGRAM_LOOP
bcf EECON1, WREN,0 ;disable write to memory
return
;**************constants stored in flash program memory**************
VE_tbl code_pack 0x6000
; Initial VE table, copied into RAM at startup
VETABLE
db 0x27 ; VE (0,0)
db 0x28 ; VE (0,1)
db .41 ; VE (0,2)
db .44 ; VE (0,3)
db .44 ; VE (0,4)
db .44 ; VE (0,5)
db .45 ; VE (0,6)
db .45 ; VE (0,7)
db .45 ; VE (0,8)
db .45 ; VE (0,9)
db .45 ; VE (0,10)
db .45 ; VE (0,11)
db .47 ; VE (1,0)
db .47 ; VE (1,1)
db .51 ; VE (1,2)
db .51 ; VE (1,3)
db .50 ; VE (1,4)
db .50 ; VE (1,5)
db .50 ; VE (1,6)
db .50 ; VE (1,7)
db .50 ; VE (1,8)
db .50 ; VE (1,9)
db .50 ; VE (1,10)
db .50 ; VE (1,11)
- - 153
db .52 ; VE (2,0)
db .55 ; VE (2,1)
db .55 ; VE (2,2)
db .57 ; VE (2,3)
db .60 ; VE (2,4)
db .61 ; VE (2,5)
db .61 ; VE (2,6)
db .62 ; VE (2,7)
db .63 ; VE (2,8)
db .65 ; VE (2,9)
db .64 ; VE (2,10)
db .64 ; VE (2,11)
db .59 ; VE (3,0)
db .60 ; VE (3,1)
db .60 ; VE (3,2)
db .65 ; VE (3,3)
db .66 ; VE (3,4)
db .68 ; VE (3,5)
db .70 ; VE (3,6)
db .70 ; VE (3,7)
db .70 ; VE (3,8)
db .70 ; VE (3,9)
db .69 ; VE (3,10)
db .68 ; VE (3,11)
db .61 ; VE (4,0)
db .63 ; VE (4,1)
db .65 ; VE (4,2)
db .65 ; VE (4,3)
db .68 ; VE (4,4)
db .70 ; VE (4,5)
db .72 ; VE (4,6)
db .73 ; VE (4,7)
db .74 ; VE (4,8)
db .75 ; VE (4,9)
db .75 ; VE (4,10)
db .74 ; VE (4,11)
db .65 ; VE (5,0)
db .72 ; VE (5,1)
db .72 ; VE (5,2)
db .74 ; VE (5,3)
db .74 ; VE (5,4)
db .75 ; VE (5,5)
db .75 ; VE (5,6)
db .76 ; VE (5,7)
db .77 ; VE (5,8)
db .77 ; VE (5,9)
db .77 ; VE (5,10)
db .76 ; VE (5,11)
db .70 ; VE (6,0)
db .74 ; VE (6,1)
db .74 ; VE (6,2)
db .75 ; VE (6,3)
db .75 ; VE (6,4)
db .77 ; VE (6,5)
db .77 ; VE (6,6)
db .78 ; VE (6,7)
db .78 ; VE (6,8)
db .79 ; VE (6,9)
db .79 ; VE (6,10)
db .76 ; VE (6,11)
db .73 ; VE (7,0)
db .77 ; VE (7,1)
db .79 ; VE (7,2)
db .82 ; VE (7,3)
db .82 ; VE (7,4)
- - 154
db .82 ; VE (7,5)
db .82 ; VE (7,6)
db .83 ; VE (7,7)
db .84 ; VE (7,8)
db .85 ; VE (7,9)
db .84 ; VE (7,10)
db .83 ; VE (7,11)
db .75 ; VE (8,0)
db .78 ; VE (8,1)
db .79 ; VE (8,2)
db .83 ; VE (8,3)
db .83 ; VE (8,4)
db .83 ; VE (8,5)
db .84 ; VE (8,6)
db .85 ; VE (8,7)
db .86 ; VE (8,8)
db .86 ; VE (8,9)
db .86 ; VE (8,10)
db .85 ; VE (8,11)
db .77 ; VE (9,0)
db .80 ; VE (9,1)
db .81 ; VE (9,2)
db .85 ; VE (9,3)
db .86 ; VE (9,4)
db .87 ; VE (9,5)
db .87 ; VE (9,6)
db .89 ; VE (9,7)
db .89 ; VE (9,8)
db .90 ; VE (9,9)
db .89 ; VE (9,10)
db .88 ; VE (9,11)
db .77 ; VE (10,0)
db .80 ; VE (10,1)
db .81 ; VE (10,2)
db .85 ; VE (10,3)
db .86 ; VE (10,4)
db .87 ; VE (10,5)
db .87 ; VE (10,6)
db .89 ; VE (10,7)
db .89 ; VE (10,8)
db .90 ; VE (10,9)
db .89 ; VE (10,10)
db .88 ; VE (10,11)
db .77 ; VE (11,0)
db .80 ; VE (11,1)
db .81 ; VE (11,2)
db .85 ; VE (11,3)
db .86 ; VE (11,4)
db .87 ; VE (11,5)
db .87 ; VE (11,6)
db .89 ; VE (11,7)
db .89 ; VE (11,8)
db .90 ; VE (11,9)
db .89 ; VE (11,10)
db .88 ; VE (11,11)
CWUTABLE ;0x6090
db .120 ; CWU
db .040 ; CWH
db .35 ; AWEV
db .250 ; AWC
db .180 ; WWU (-40 C) ;0x6094
db .180 ; WWU (-30 C)
db .160 ; WWU (-20 C)
db .150 ; WWU (-10 C)
db .135 ; WWU (0 C)
db .125 ; WWU (10 C)
- - 155
db .113 ; WWU (25 C)
db .108 ; WWU (40 C)
db .102 ; WWU (55 C)
db .100 ; WWU (70 C)
db .20 ; tpsaq (tpsdot=0.1) ;0x609e
db .50 ; tpsaq (tpsdot=0.4)
db .105 ; tpsaq (tpsdot=0.8) ;0x60a0
db .150 ; tpsaq (tpsdot=1.5) ;
db .90 ; tpsacold (ms to add in when cold)
db .03 ; TPSTHRESH
db .30 ; tpsasync (accel enrich time in 1/10s incr.)
db .100 ; tpsdq
db .110 ; EGOTEMP
db .16 ; EGOCOUNTCMP
db .0 ; EGODELTA
db .30 ; EGOLIMIT
db .100 ; REQFUEL 0x60aa
db .4 ; DIVIDER
db .1 ; Alternate
db .10 ; INJOPEN
db .0 ; injocfuel
db .100 ; INJPWM -
db .255 ; injpwmt -injector PWM current limiting is off
db .12 ; BATTFAC
db 0x0b ; RPMK[0]
db 0xb8 ; RPMK[1]
RPMRANGEVEFLASH ;0x60b4
db .5 ; RPMRANGEVE[0]
db .10 ; RPMRANGEVE[1]
db .15 ; RPMRANGEVE[2]
db .20 ; RPMRANGEVE[3]
db .28 ; RPMRANGEVE[4]
db .35 ; RPMRANGEVE[5]
db .43 ; RPMRANGEVE[6]
db .50 ; RPMRANGEVE[7]
db .57 ; RPMRANGEVE[8]
db .63 ; RPMRANGEVE[9]
db .65 ; RPMRANGEVE[10]
db .68 ; RPMRANGEVE[11]
KPARANGEVEFLASH ;0x60c0
db .15 ; KPARANGEVE[0]
db .20 ; KPARANGEVE[1]
db .30 ; KPARANGEVE[2]
db .40 ; KPARANGEVE[3]
db .50 ; KPARANGEVE[4]
db .60 ; KPARANGEVE[5]
db .70 ; KPARANGEVE[6]
db .80 ; KPARANGEVE[7]
db .85 ; KPARANGEVE[8]
db .90 ; KPARANGEVE[9]
db .95 ; KPARANGEVE[10]
db .105 ; KPARANGEVE[11]
db .113 ; Config11 =01110001 ;0x60cc
db .112 ; Config12 =01110000
db .00 ; Config13 =
db .00 ; PRIMEP
db .13 ; RPMOXLIMIT
db .60 ; FAST IDLE TEMPERATURE(clt+40°C)
db .26 ; VOLTOXTARGET
db .120 ; ACCELMULT
db .00 ; BLANK[1]
db .00 ; BLANK[2]
db .00 ; BLANK[3]
db .00 ; BLANK[4] -212 variables with 12x12 table
; This is used to set the bin coolant range for WWU
- - 156
enr_tbl code_pack 0x6100
WWURANGE
db 0x00
db .10
db .20
db .30
db .40
db .50
db .65
db .80
db .95
db .110
TPSDOTRATE ; 0x610a
db .05 ; 0.1 volts delta
db .20 ; 0.4 volt delta
db .40 ; 0.8 volt
db .77 ; 1.5 volt
baro_table code_pack 0x7000
#include <barofactor.inc> ;address 0x7000
kpa_table code_pack 0x7100
#include <kpafactor.inc> ;address 0x7100
term_table code_pack 0x7200
#include <thermfactor.inc> ;address 0x7200
aird_table code_pack 0x7300
#include <airdenfactor.inc> ;address 0x7300
tps1_table code_pack 0x7400
#include <tps1factor.inc> ;address 0x7400
tps2_table code_pack 0x7500
#include <tps2factor.inc> ;address 0x7500
itps1_table code_pack 0x7600
#include <inversetps1.inc> ;address 0x7600
end
- - 157
Literatura
[1] Robert Bosch GmbH., Gasoline Engine Menagement, Robert Bosch GmbH
& Professional Engineering Publishing Ltd., druga izdaja, Suffolk, 2004
[2] Mondt J.R., Cleaner Cars:The History and Tecnology of Emission Control
since the 1960s, Society of Automotive Engineers Inc., Warrendale, 2000
[3] Bowling B., Grippo A., Megasquirt, http://www.megasquirt.info/ , Bruce
Bowling and Al Grippo, internet, dostopnost preverjena februar 2010
[4] Lumley J. L., Engines: an introduction, Cambridge University Press,
Cambridge, 1999
[5] Basshuysen R.V., Schäfer F., Internal Combustion Engine Handbook,
Society of Automotive Engineers Inc., Warrendale, 2004
[6] Vucko I., Tehnologija motornih vozil 2, PAMI, Ţelezniki, 1998
[7] Smith P. H., Morrison J. C., Sientific Design of Exhaust and Intake Systems,
Bentley Publishers, tretja izdaja, Cambridge, 2009
[8] Kraut B., Krautov strojniški priročnik, Littera picta, štirinajsta izdaja, Ljubljana,
2003
[9] Probst C. O., Bosch Fuel Injection & Egine Management, Bentley
Publishers, Cambridge, 2003
[10] http:/www.naftc.wnu.edu/NAFTC/data/indepth/datatable.html, internet,
dostopnost preverjena februar 2010
[11] http://en.wikipedia.org/wiki/Fuel_injection, internet, dostopnost preverjena
marec 2010
[12] Microchip Technology Inc., Microchip PIC18FXX8 Data Sheet, Microchip
Technology Inc., 2004
[13] STMicroelectronics,
http://www.st.com/stonline/products/literature/ds/2143/l7805ac.pdf, internet,
dostopnost preverjena junij 2010
[14] Texas Instruments, http://focus.ti.com/lit/ds/symlink/max232.pdf, internet,
dostopnost preverjena junij 2010
- - 158
[15] Motorola,
http://www.datasheetcatalog.org/datasheet/motorola/MC34151D.pdf,.
internet, dostopnost preverjena junij 2010
[16] International Rectifier,
http://www.irf.com/product-info/datasheets/data/irfz34n.pdf, internet,
dostopnost preverjena junij 2010
[17] Won-Top Electronics Co., http://www.wontop.com/pdf/SF31.pdf, internet,
dostopnost preverjena junij 2010
[18] Fairchild Semiconductors, http://www.fairchild.com/ds/TI%FTIP42C.pdf,
internet, dostopnost preverjena junij 2010
[19] STMicroelectronics,
http://www.st.com/stonline/products/literature/ds/4128/TIP125.pdf, internet,
dostopnost preverjena junij 2010
[20] Microchip Technology Inc.,
http://ww1.microchip.com/downloads/en/devicedoc/51331b.pdf, internet,
dostopnost preverjena junij 2010
[21] http://apps.bosch.com.au/motorsport/downloads/sensors_throttleposition.pdf,
internet, dostopnost preverjena junij 2010
[22] Microsoft, http.//www.microsoft.com/express/, internet, dostopnost
preverjena junij 2010
[23] http://www.megamanual.com/v22manual/mtune.htm, internet, dostopnost
preverjena julij 2010
[24] http://www.innovatemotorsport.com/support/manual/LM1_Manual.pdf,
internet, dostopnost preverjena julij 2010
[25] http://www.innovatemotorsport.com/support/manual/LogWorks3_Manual.pdf,
internet, dostopnost preverjena julij 2010
- - 159
Viri slik:
Slike iz lastnega arhiva razen:
Slika 1: http://www.automotive_ilustrations.com/engines.html
Slika 2: http://www.antonine-
education.co.uk/physics_a2/options/module_7/topic_4/internal_combustion_e
ngines.htm
Slika 5: http://www.automotivecoolingservices.co.uk/acs/cooling_system.html
Slika 7: http://hdabob.com/Exhaust.html
Slika 8: [1]
Slika 11: http://www.shoptalkforums.com/viewtopic.php?t=114081
Slika 12: http://www.motiontrends.com/2009/01/volvo/s60_concept_4.shtml
Slika 13: http://www.freescale.com/files/sensors/doc/data_sheet/MPX4250A.pdf
Slika 14: http://www.swedishautoparts.com/960/volvo-960-sensors.html
Slika 15:
http://apps.bosch.com.au/motorsport/downloads/sensors_throttleposition.pdf
Slika 17: http://forums.audiworld.com/showthread.php?t=2162872
Slika 19: http://www.rickscarline.ca/images/o2.png
Slika 21: http://www.northamptonmotorsport.com/default.asp?id=95
- - 160
- - 161
Izjava
Izjavljam, da sem diplomsko delo izdelal samostojno pod vodstvom mentorja
doc. dr. Boštjana Murovca, univ. dipl. inţ. el. Izkazano pomoč drugih sodelavcev
sem v celoti navedel v zahvali.
Iztok Vatovec
Ljubljana 23.8.2010