Aika-ajoin tulee kysymyksiä ja ihmetyksiä tuosta suorittamastani moottorinohjaimen koodin purkamisesta, joten koitan nyt valottaa hieman taustoja. Varautukaa siis siihen, että hetkittäin menee sen verran korkealta yli, että kurottaa ei kannata. Niin se meni alussa itselläkin.
Hieman taustatietona, niin itsellä alkoi E85 konversio kiinnostaa joskus samoihin aikoihin kun 95E10 suunnitelmat tuli julki. Tuolloin käyttiksenä oli VAG 2.7 tuplaturbo, jossa ME7.1 moottorinohjaus. Tarpeeksi asiaa setvittyäni tuo muutos oli todella helppo ja muutenkin nuo VAG:n ME7.x variantit ovat erittäin hyvin dokumentoitu (kiitos vuodetun dokumentaation). Koodin/säätökarttojen päivitys tuohon purnukkaan onnistuu OBD-portin kautta ja kestää ilmaisella softalla noin 3min.
Viinan hyödyt turbomoottorissa tuli nopeasti tutuksi ja käytännössä paluuta ei ollut. Kylmäkäynnistyksiä pelätessäni ekan talven osalta menin ja tankkasin bensaa - josta löytyi välittömästi motivaatio hakea kylmäkäynnistysasetukset viinalle kuntoon.
Ns. harrastekulkine ilmestyi jossain kohtaa taloon. Jo alussa oli selvää, että Audin 2.2 suora vitonen turbolla höystettynä tulee saamaan löylyä lisää, eihän tuo jaksanut koeajolla sutia kuivalla asfaltilla kuin ykkösellä. Ja viinat ehdottomasti tankkiin.
Hankinnan jälkeen aloin kartoittaa vaihtoehtoja moottorinohjaukselle. Valmiita "Stage X" ja "Stage Y" paketteja oli saatavilla, mutta huonommin mitään joka olisi vastannut tavotteita ja suonut viinan käytön. Kolmannen osapuolen järjestelmiä oli, mutta niissä tuppasi hinnan lisäksi olemaan ongelmaa esim. ylläpitää tyhjäkäynti tilanteessa kun jäähdyttäjän puhallin lähtee käyntiin.
Talvella seuraavaa kesää suunnitellessa eteen kuitenkin tuli foorumeilta virolainen kaveri. Tyyppi oli nuoresta iästä huolimattaan tehnyt pitkää uraa ohjelmistoalalla ja häntä oli myös alkanut askaroittaa "custom" viritysmahdollisuuksien vähyys vastaavan moottorinohjauksen osalta. Jotain pieniä ajatuksien palasia ja jo tehtyjä juttuja lukiessani alkoi tulla fiilis, että näin pitää itsekin toimia.
Tuosta lähdettiin liikkeelle. Kuvassa on puoli lasia E85, pari muistipiiriemulaattoria ja pari adapterikantaa, sekä luonnollisesti boksi kansi raollaan.
Kyseinen Motronic M2.3.2 on tietyllä tapaa mielenkiintoinen ja osin poikkeuksellinenkin rakenteeltaan. Boksissa on sisällä kaksi toisistaan erillistä suoritinta, joilla kummallakin on oma ohjelmansa ja tarkoituksensa. Toinen ohjaa moottorin perustoimintoja, eli polttoaineen syöttöä, sytytysennakoita, sekä muita perusasioita. Toinen prosessori ja ohjelma hoitaa ahtojen ohjauksen sekä sylinterikohtaisen nakutuksen tunnistuksen. Ohjelmakoodit ovat myös huomattavan erilaiset, sekä tavat millä asioita tehdään.
Molemmat prosessorit ovat Intel 8051 teollisuus prosessoreita, joita on käytetty erittäin paljon 80-90 luvulla (ja edelleen nykyäänkin) erinäisissä järjestelmissä. Molempien prosessorien ohjelma ja moottorinohjauksen säätökartat ovat tallennettu eprom muistipiireille. Joku saattaa muistaa 80-90 luvulla kun tietokoneen BIOS piirejä ohjelmoitiin, ihan vastaava homma tässä. Jonnet ei muista.
Prosessorin ominaisuuksista sen verran yleistietona, että kyseisessä mallissa ns. käskykanta on 8 bittinen. Tarkoittaa yleiskielessä sitä, että prosessorilla voi suorittaa 256 eri matemaattista funktiota, tai numeroiden siirtoa muistipaikasta toiseen, tai liikkumista ohjelmakoodin sisällä. Osa näistä funktioista on toistensa erinäisiä ilmentymiä, esim. numeroiden siirto ulkoiseen muistiin, ulkoisesta muistista käyttömuistiin, muistipiiristä käyttömuistiin, jne. Kutakin komentoa siis vastaa kahdeksan peräkkäisen 0 tai 1 merkkijono, joka tässä tapauksessa ilmaistaan tyypillisimmin hexa-arvoin 0x00-0xff.
Komennoille voi olla parametrejä niiden tyypistä riippuen. Prosessori on muistiosoiterekisteriä lukuun ottamatta (alempana kuvassa DPTR = 16bit, DPH & DPL) täysin 8bit vehjes, eli numeroarvoin ilmaistuna asiat ovat arvoltaan 0-255 tai -127 - +127.
Koska kyseessä on kohtalaisen tunnettu prosessori, löytyy tuohon ns. disassembler sovelluksia erittäin hyvin. Yksi suosituista, parhaista ja kalliista on IDA, jonka tälle prosessorityypille joutuu hankkimaan maksullisena versiona. Disassembler sovellus tulkitsee ohjelmakoodia muuttaen 0xNN arvot komentojen nimiksi ja samalla huomioiden komennon parametrit. Samoin sovellus huomioi prosessorityypille tyypilliset kutsupaikat ohjelmakoodissa (esimerkiksi kun kampiakselin asentotunnistimelta tulee pulssi, niin ohjelmassa hypätään tiettyyn kohtaan).
(kuvassa luetaan kartan otsikkotiedot)
Sama setti koodina:
Vaaleansiniset numerot ovat (yläriviä lukuunottamatta) komentoja, sekä niiden parametreja. Hyvänä esimerkkinä tästä on helppo nostaa about puolivälissä oleva "ljmp code_108A", joka komentona on:
02 = ljmp = komento
108A = parametri, eli osoite mihin hypätään
Osoite 108A on taas disassemblerin itsensä kommentoima hyppykohde ilman erillistä nimeä, joten tässä kohti vain code_108A.
Hommahan ei tässä kohdin ole vielä mitenkään ratkaistu. Disassembler ei tee automaattisesti täydellistä lopputulosta, vaan sitä jo yksistään joutuu käskyttämään. Lisäksi paljon alkaa askarruttaa miten esimerkiksi moottorin pyörintänopeus, lämpöanturit, ilmamassa yms päätyy numeroiksi ja miten niitä käytetään hyväksi. Lämpöanturit eivät suinkaan ole suoraan mainitsemissani skaaloissa 0-255 tai -127 - +127, vaan niille on muutoskertoimensa. Kierrosnopeus on myös aika vaikea ilmaista tuolla asteikolla (tämä nyt on toki triviaali). Samoin esim. sytytysennakkoa säädetään huomattavasti tarkemmin kuin asteen tarkkuudella.
Pelkän komentorimpsun perusteellahan on aika mahdoton päätellä miten säätökarttoja luetaan, joita tämä boksi hienoimmillaan tekee myös interpoloiden osan kartoista. Seoksen ja sytytysennakon säätöön löytyy pitkät rimpsut koodia, miten mikäkin nyanssi vaikuttaa toiseensa - on erinäistä lämpökorjausta, ilmanpainekorjauksia, muita olosuhdekorjauksia jne.
Huolimatta 8bit laskennasta, käsitellään boksissa jopa 24bit arvoja, jotta tarkkuutta saadaan riittävästi. Tämä aiheuttaa toisinaan lisähaastetta koodin tulkintaan. Tai kun kerrotaan 16bit etumerkillinen numero 8bit etumerkillisellä numerolla. Lisäksi moottorin load (joka on käytännössä ilmamassa) on boksissa ilmaistuna sekä 8bit että 16bit numeroarvoin. Rajoituksellisena tekijänä tuossa 8bit arvossa on "bugi", jonka korjasin.
Koodin riittävään haltuunottoon meni ehkä puolisen vuotta. Muistan edelleen sen hetken kun ajoin lähes tyhjällä tankilla mittarille ja tankkasin täyteen E85. Istuin kabiiniin sisään, totesin läppärillä jotta syötöt 135%, starttasin auton ja ajoin kotiin kuin mitään ei olisi tapahtunut. Nuo mainitut muistipiiriemulaattorit tulevat kiinni läppärin USB porttiin ja niiden muistisisältöä voi reaaliajassa muuttaa, etenkin kun molemmista ohjelmista on poistanut tarkastussummien laskemisen. Ja jos tietokone ei ole USB:llä kiinni purkissa niin siellä on voimassa viimeisin softa mikä sinne on puskettu.
Koska viinan käyttöönotto oli vain osa kokonaisuutta, piti myös päästä paremmin seuraamaan moottorin toimintaa ja reagointia karttojen optimoimiseen. Vakiona boksin diagnostiikka antaa neljä arvoa ulos reilun 1sek välein. Arvoja on ihan liian vähän ja turbopuolen prosessorilta ei saa ulos mitään. Lisäksi kuormittavuutensa vuoksi koko diagnostiikkarutiini poistetaan käytöstä muistaakseni 3000rpm kohdalla.
Viron veli oli tässä kohtaa kuitenkin heittänyt hieman omia ajatuksiaan foorumille, josta aika nopeasti sain kehiteltyä oman ajatuksen. Alkuperäinen diagnostiikka varmentaa kaiken tiedon läpimenon, sekä jokainen arvo lähetetään kolmessa osassa (ja kaikki näistä kuitataan), koska protokolla on obd yhteensopiva. Boksin sarjaporttiin saa ensinnäkin nopeutta huomattavasti lisää, jonka lisäksi logitushan voi pelkästään "spämmätä" raakoja numeroarvoja porttiin. Tietty järjestys ja sopivissa kohdin "merkkipaaluja", joilla pidetään logia keräävä tietokone synkronoituna tuohon spämmiin.
Käytännössä tuolla pääsi tilanteeseen, jossa kaiken olennaisen (ja muutakin) sai boksista ulos ~50/sek, toki isommilla kierroksilla ahtopiiri alkaa tökkiä ja näytetaajuus tippuu johonkin 20-30/sek. Ei ihan liikaa haittaa virheenkorjauksen puute kun resoluutio on riittävä ilman yksittäistä paskottua riviä.
Muutakin tuohon softaan on tullut tehtyä. Viinalla kun kylmäkäynnistykset on tietyllä tapaa ongelma, niin tein pienet erilliset rutiinit, jolla pyritään pitämään käynnistyvyys hyvänä, kylmäkäynti kohdillaan ja käytettävyys kutakuinkin bensakoneen tasolla.
Vettä virtaili Vantaanjoessa jonkin verran sen jälkeen kun sain itselleni 100% dokumentoitua boksin toiminnan. Tällöin Viron lahja M2.3.2:lle päätti antaa meille harrastajille joululahjan ja julkaisi kaikki omat selvityksensä. Hän on tehnyt nyt käsittääkseni melkein 10 vuotta loistavaa ja syvällistä uraa moottorinohjaimien virittämisen parissa Virossa. Kaupallinen potentiaali M2.3.2:sta hänen osaltaan oli kadonnut, mutta koska boksi oli hänelle se iso juttu niin hän päätyi julkaisemaan softansa ja ohjeensa vapaaseen käyttöön.
Kiva oli verrata miten samalla tavalla mutta eri nyanssein tuli juttuja tehtyä. Yksi hänen spesiaali-jutuistaan oli ilmamassamittauksen korvaaminen paine+kaasuläppä+lämpö ym mittauksilla. Tuo vaatii pienen fyysisen muutoksen boksin sisuskaluihin mutta täysin tehtävissä muutoin boksin omilla eväillä (paineanturin johdotus bensa/sytkä -piirin vapaaseen sisääntuloon).
Muoks: vähän kuvasekoilua, josko nyt ois...
Hieman taustatietona, niin itsellä alkoi E85 konversio kiinnostaa joskus samoihin aikoihin kun 95E10 suunnitelmat tuli julki. Tuolloin käyttiksenä oli VAG 2.7 tuplaturbo, jossa ME7.1 moottorinohjaus. Tarpeeksi asiaa setvittyäni tuo muutos oli todella helppo ja muutenkin nuo VAG:n ME7.x variantit ovat erittäin hyvin dokumentoitu (kiitos vuodetun dokumentaation). Koodin/säätökarttojen päivitys tuohon purnukkaan onnistuu OBD-portin kautta ja kestää ilmaisella softalla noin 3min.
Viinan hyödyt turbomoottorissa tuli nopeasti tutuksi ja käytännössä paluuta ei ollut. Kylmäkäynnistyksiä pelätessäni ekan talven osalta menin ja tankkasin bensaa - josta löytyi välittömästi motivaatio hakea kylmäkäynnistysasetukset viinalle kuntoon.
Ns. harrastekulkine ilmestyi jossain kohtaa taloon. Jo alussa oli selvää, että Audin 2.2 suora vitonen turbolla höystettynä tulee saamaan löylyä lisää, eihän tuo jaksanut koeajolla sutia kuivalla asfaltilla kuin ykkösellä. Ja viinat ehdottomasti tankkiin.
Hankinnan jälkeen aloin kartoittaa vaihtoehtoja moottorinohjaukselle. Valmiita "Stage X" ja "Stage Y" paketteja oli saatavilla, mutta huonommin mitään joka olisi vastannut tavotteita ja suonut viinan käytön. Kolmannen osapuolen järjestelmiä oli, mutta niissä tuppasi hinnan lisäksi olemaan ongelmaa esim. ylläpitää tyhjäkäynti tilanteessa kun jäähdyttäjän puhallin lähtee käyntiin.
Talvella seuraavaa kesää suunnitellessa eteen kuitenkin tuli foorumeilta virolainen kaveri. Tyyppi oli nuoresta iästä huolimattaan tehnyt pitkää uraa ohjelmistoalalla ja häntä oli myös alkanut askaroittaa "custom" viritysmahdollisuuksien vähyys vastaavan moottorinohjauksen osalta. Jotain pieniä ajatuksien palasia ja jo tehtyjä juttuja lukiessani alkoi tulla fiilis, että näin pitää itsekin toimia.
Tuosta lähdettiin liikkeelle. Kuvassa on puoli lasia E85, pari muistipiiriemulaattoria ja pari adapterikantaa, sekä luonnollisesti boksi kansi raollaan.
Kyseinen Motronic M2.3.2 on tietyllä tapaa mielenkiintoinen ja osin poikkeuksellinenkin rakenteeltaan. Boksissa on sisällä kaksi toisistaan erillistä suoritinta, joilla kummallakin on oma ohjelmansa ja tarkoituksensa. Toinen ohjaa moottorin perustoimintoja, eli polttoaineen syöttöä, sytytysennakoita, sekä muita perusasioita. Toinen prosessori ja ohjelma hoitaa ahtojen ohjauksen sekä sylinterikohtaisen nakutuksen tunnistuksen. Ohjelmakoodit ovat myös huomattavan erilaiset, sekä tavat millä asioita tehdään.
Molemmat prosessorit ovat Intel 8051 teollisuus prosessoreita, joita on käytetty erittäin paljon 80-90 luvulla (ja edelleen nykyäänkin) erinäisissä järjestelmissä. Molempien prosessorien ohjelma ja moottorinohjauksen säätökartat ovat tallennettu eprom muistipiireille. Joku saattaa muistaa 80-90 luvulla kun tietokoneen BIOS piirejä ohjelmoitiin, ihan vastaava homma tässä. Jonnet ei muista.
Prosessorin ominaisuuksista sen verran yleistietona, että kyseisessä mallissa ns. käskykanta on 8 bittinen. Tarkoittaa yleiskielessä sitä, että prosessorilla voi suorittaa 256 eri matemaattista funktiota, tai numeroiden siirtoa muistipaikasta toiseen, tai liikkumista ohjelmakoodin sisällä. Osa näistä funktioista on toistensa erinäisiä ilmentymiä, esim. numeroiden siirto ulkoiseen muistiin, ulkoisesta muistista käyttömuistiin, muistipiiristä käyttömuistiin, jne. Kutakin komentoa siis vastaa kahdeksan peräkkäisen 0 tai 1 merkkijono, joka tässä tapauksessa ilmaistaan tyypillisimmin hexa-arvoin 0x00-0xff.
Komennoille voi olla parametrejä niiden tyypistä riippuen. Prosessori on muistiosoiterekisteriä lukuun ottamatta (alempana kuvassa DPTR = 16bit, DPH & DPL) täysin 8bit vehjes, eli numeroarvoin ilmaistuna asiat ovat arvoltaan 0-255 tai -127 - +127.
Koska kyseessä on kohtalaisen tunnettu prosessori, löytyy tuohon ns. disassembler sovelluksia erittäin hyvin. Yksi suosituista, parhaista ja kalliista on IDA, jonka tälle prosessorityypille joutuu hankkimaan maksullisena versiona. Disassembler sovellus tulkitsee ohjelmakoodia muuttaen 0xNN arvot komentojen nimiksi ja samalla huomioiden komennon parametrit. Samoin sovellus huomioi prosessorityypille tyypilliset kutsupaikat ohjelmakoodissa (esimerkiksi kun kampiakselin asentotunnistimelta tulee pulssi, niin ohjelmassa hypätään tiettyyn kohtaan).
(kuvassa luetaan kartan otsikkotiedot)
Sama setti koodina:
Vaaleansiniset numerot ovat (yläriviä lukuunottamatta) komentoja, sekä niiden parametreja. Hyvänä esimerkkinä tästä on helppo nostaa about puolivälissä oleva "ljmp code_108A", joka komentona on:
02 = ljmp = komento
108A = parametri, eli osoite mihin hypätään
Osoite 108A on taas disassemblerin itsensä kommentoima hyppykohde ilman erillistä nimeä, joten tässä kohti vain code_108A.
Hommahan ei tässä kohdin ole vielä mitenkään ratkaistu. Disassembler ei tee automaattisesti täydellistä lopputulosta, vaan sitä jo yksistään joutuu käskyttämään. Lisäksi paljon alkaa askarruttaa miten esimerkiksi moottorin pyörintänopeus, lämpöanturit, ilmamassa yms päätyy numeroiksi ja miten niitä käytetään hyväksi. Lämpöanturit eivät suinkaan ole suoraan mainitsemissani skaaloissa 0-255 tai -127 - +127, vaan niille on muutoskertoimensa. Kierrosnopeus on myös aika vaikea ilmaista tuolla asteikolla (tämä nyt on toki triviaali). Samoin esim. sytytysennakkoa säädetään huomattavasti tarkemmin kuin asteen tarkkuudella.
Pelkän komentorimpsun perusteellahan on aika mahdoton päätellä miten säätökarttoja luetaan, joita tämä boksi hienoimmillaan tekee myös interpoloiden osan kartoista. Seoksen ja sytytysennakon säätöön löytyy pitkät rimpsut koodia, miten mikäkin nyanssi vaikuttaa toiseensa - on erinäistä lämpökorjausta, ilmanpainekorjauksia, muita olosuhdekorjauksia jne.
Huolimatta 8bit laskennasta, käsitellään boksissa jopa 24bit arvoja, jotta tarkkuutta saadaan riittävästi. Tämä aiheuttaa toisinaan lisähaastetta koodin tulkintaan. Tai kun kerrotaan 16bit etumerkillinen numero 8bit etumerkillisellä numerolla. Lisäksi moottorin load (joka on käytännössä ilmamassa) on boksissa ilmaistuna sekä 8bit että 16bit numeroarvoin. Rajoituksellisena tekijänä tuossa 8bit arvossa on "bugi", jonka korjasin.
Koodin riittävään haltuunottoon meni ehkä puolisen vuotta. Muistan edelleen sen hetken kun ajoin lähes tyhjällä tankilla mittarille ja tankkasin täyteen E85. Istuin kabiiniin sisään, totesin läppärillä jotta syötöt 135%, starttasin auton ja ajoin kotiin kuin mitään ei olisi tapahtunut. Nuo mainitut muistipiiriemulaattorit tulevat kiinni läppärin USB porttiin ja niiden muistisisältöä voi reaaliajassa muuttaa, etenkin kun molemmista ohjelmista on poistanut tarkastussummien laskemisen. Ja jos tietokone ei ole USB:llä kiinni purkissa niin siellä on voimassa viimeisin softa mikä sinne on puskettu.
Koska viinan käyttöönotto oli vain osa kokonaisuutta, piti myös päästä paremmin seuraamaan moottorin toimintaa ja reagointia karttojen optimoimiseen. Vakiona boksin diagnostiikka antaa neljä arvoa ulos reilun 1sek välein. Arvoja on ihan liian vähän ja turbopuolen prosessorilta ei saa ulos mitään. Lisäksi kuormittavuutensa vuoksi koko diagnostiikkarutiini poistetaan käytöstä muistaakseni 3000rpm kohdalla.
Viron veli oli tässä kohtaa kuitenkin heittänyt hieman omia ajatuksiaan foorumille, josta aika nopeasti sain kehiteltyä oman ajatuksen. Alkuperäinen diagnostiikka varmentaa kaiken tiedon läpimenon, sekä jokainen arvo lähetetään kolmessa osassa (ja kaikki näistä kuitataan), koska protokolla on obd yhteensopiva. Boksin sarjaporttiin saa ensinnäkin nopeutta huomattavasti lisää, jonka lisäksi logitushan voi pelkästään "spämmätä" raakoja numeroarvoja porttiin. Tietty järjestys ja sopivissa kohdin "merkkipaaluja", joilla pidetään logia keräävä tietokone synkronoituna tuohon spämmiin.
Käytännössä tuolla pääsi tilanteeseen, jossa kaiken olennaisen (ja muutakin) sai boksista ulos ~50/sek, toki isommilla kierroksilla ahtopiiri alkaa tökkiä ja näytetaajuus tippuu johonkin 20-30/sek. Ei ihan liikaa haittaa virheenkorjauksen puute kun resoluutio on riittävä ilman yksittäistä paskottua riviä.
Muutakin tuohon softaan on tullut tehtyä. Viinalla kun kylmäkäynnistykset on tietyllä tapaa ongelma, niin tein pienet erilliset rutiinit, jolla pyritään pitämään käynnistyvyys hyvänä, kylmäkäynti kohdillaan ja käytettävyys kutakuinkin bensakoneen tasolla.
Vettä virtaili Vantaanjoessa jonkin verran sen jälkeen kun sain itselleni 100% dokumentoitua boksin toiminnan. Tällöin Viron lahja M2.3.2:lle päätti antaa meille harrastajille joululahjan ja julkaisi kaikki omat selvityksensä. Hän on tehnyt nyt käsittääkseni melkein 10 vuotta loistavaa ja syvällistä uraa moottorinohjaimien virittämisen parissa Virossa. Kaupallinen potentiaali M2.3.2:sta hänen osaltaan oli kadonnut, mutta koska boksi oli hänelle se iso juttu niin hän päätyi julkaisemaan softansa ja ohjeensa vapaaseen käyttöön.
Kiva oli verrata miten samalla tavalla mutta eri nyanssein tuli juttuja tehtyä. Yksi hänen spesiaali-jutuistaan oli ilmamassamittauksen korvaaminen paine+kaasuläppä+lämpö ym mittauksilla. Tuo vaatii pienen fyysisen muutoksen boksin sisuskaluihin mutta täysin tehtävissä muutoin boksin omilla eväillä (paineanturin johdotus bensa/sytkä -piirin vapaaseen sisääntuloon).
Muoks: vähän kuvasekoilua, josko nyt ois...
Viimeksi muokattu:
