Mopon tehonmittaus

Millaista koodia se arduino pyörittää? Eroaakohan paljonkin jostain vanhasta&yksinkertaisesta minkä äkkiseltään googlella löysin?
https://github.com/kjellegafvelin/SimpleDyno/blob/master/Instructions and Docs and Release Zip File/SimpleDyno Arduino Sketch/SimpleDyno_Sketch.ino

En ole mikään arduino spesialisti, mutta mikä tuossa koodissa itseä pistää silmään on se, että kerätään nippu dataa ja lähetetään se kaikki kerralla. Näkisin, että sarjaporttikeskeytyksien määrää voisi jakaa pidemmälle aikajanalle sillä, että numeroarvoja lähetetään yksi kerrallaan ja käyttäisi jotain synkka-tavuja.

Esimerkiksi ite kun tuohon harrastekulkineeseen koodasin 2x 8051 prossuille realtime datalogin, niin se lopputuloksena käytännössä puskee tavu kerrallaan dataa sarjaporttiin. Ja sarjaportti mahdollisimman nopealla, jotta lähetystapahtumassa ei jumiteta liian pitkään. Noi kaks prossua synkkaa keskenään lähetysvuoroja ja tosiaan data tulee täysin raakana tavuina ja väliin lyödään synkkatavuja. Perässä oleva kone sitten saa tulkita synkkatavujen perusteella, että saatiinko täydellinen datarivi ja jos saatiin, niin kone laskee oikeat arvot. Toinen 8051 hyytyy korkeilla kierroksilla, joten sinne ei halua yhtään liikaa rakentaa koodia, etenkin kun se laskee nakukorjaukset ja ahdon ohjaukset.
 
Arduinon koodi on juuri tuo, tosin mulla on versio jossa on koitettu tätä ongelmaa korjata mutta eihä nse onnistu jos triggerin pulssi hukkuu sarjadatan lähetyksen aikana niin silloin se hukkuu teki mitä tahansa. Tuo sarajaprotokolla eli lähetetyn datan formaatti on mitä on, se on koodatut tuohon pc softan puolelle vastaanottamaan justiin tuo datapaketti kerralla. Kokeilin tehdä pieniä muutoksia tuohon formaattiin niin Dynosofta ei enää ymmärtänyt sitä.
Pitäisi keksiä keino miten havaitaan triggerin pulssi sillä hetkellä milloin uC lähettää sarjadata.
 
Tuo loop lähettää dataa jatkuvasti. Mä kokeilisin ensin sellaista versiota, jossa data lähetetään vain, kun on saatu pulssi. Näin lähetys olisi synkronoitu ja tapahtuisi aina pulssin jälkeen ja ehtisi lähettää datan ennen seuraavaa pulssia. Tuota voisi sitten modata vielä niin, että jos edellisestä lähetyksestä on xxx ms, niin lähettää datan, niin toimii noi analogiadatojen päivitykset silloin kun ei ajeta vetoa.
 
Arduinon koodi on juuri tuo, tosin mulla on versio jossa on koitettu tätä ongelmaa korjata mutta eihä nse onnistu jos triggerin pulssi hukkuu sarjadatan lähetyksen aikana niin silloin se hukkuu teki mitä tahansa. Tuo sarajaprotokolla eli lähetetyn datan formaatti on mitä on, se on koodatut tuohon pc softan puolelle vastaanottamaan justiin tuo datapaketti kerralla. Kokeilin tehdä pieniä muutoksia tuohon formaattiin niin Dynosofta ei enää ymmärtänyt sitä.
Pitäisi keksiä keino miten havaitaan triggerin pulssi sillä hetkellä milloin uC lähettää sarjadata.
Kyllä se prosessori sen pulssin saa, vaikka keskeytykset on disabloitu. Ongelma vain on siinä, että kun keskeytys enabloidaan ja siirrytään lukemaan micros() funkkarilla aikaa, niin aika ei ole pulssin aika vaan pulssi+ x*4us. Sen takia pitäisi käyttää hw timeria laskemaan pulssin leveyttä, koska sitä eivät keskeytykset häiritse. Kun keskeytys sitten tulee, niin voi käydä lukemassa ajan timerin rekisteristä. Mutta kokeilisin edellisessä viestissä mainitsemaani tapaa ensin, koska sen pitäisi toimia sinun setupissa ja on helpompi tehdä.
 
Nyt kun päästiin ehkäpä ongelman alkulähteille ja hyvin nukutun yön jälkeen ajatuskin kulkee paremmin.
Tuossa aamukahvia siemaillessa käänsin tuon arduinon koodin esp32:lle joka kävi melko kivuttomasti. Simple dyno toimii hyvin tuon esp:n kanssa. Tosin tämä on ensimmäinen kerta kun esp32:sta koodailen joten hieman joutuu googlettamaan yksityiskohtia. 😀

Kokeilen seuraavaa eli tahdistan sarjadatan lähetyksen 115200 nopeudella pulssien kanssa sekä suoritan sen eri ytimellä. Toisella ytimellä prosessoin datan lähetyskuntoon. Nyt kun pulsseja tulee maksimi 50-70x sekunnissa ei tule tällä prosessorilla ihan heti rajat vastaan ja pulssien välissä voi rauhassa prosessoida datan.
 
Tämähän alkoi toimimaan! Melkoisen labraamisen kyllä vaati ja viimeiset vinkit ongelman lähteille sain täältä.
on siinä vielä paljon viimeistelyä ennen kuin voi sanoa valmiiksi mutta sitä jatketana tuossa kesäloman jälkeen syksymmällä.
Sain viimein mitattua tehokäppyrät tosin taisin hukata kalibrointitulokset johonkin ja laitoin muistista jotain sinne päin eli joudun vielä kalibroimaan tämän uudelleen mutta se on pikkujuttu.

Veideolla vähän fiilistelyö aiheesta.

MITATTU TEHO.webp

MITATTU TEHO.webp
 
Mikäs arduino tuo eka versio oli? Kyllä mun mielestä pitäis arduinon raudalla tälläinen simppeli juttu onnistua suorituskyvyn puolesta.
 
Se oli ihan perus Arduino UNO atmega 328 prosessorilla. Kyllä sen silläkin olisi saanut toimimaan mutta omat taidot ja harrasteaika ei siihen olisi riittänyt.
 
Ei pitäis lukea näitä foorumeita... Nyt sitten koodaillan Arduino IDE:n(hyi...) kanssa. Tuo simple dynon sketsi ei modaamatta voi kyllä toimiakaan yli 15 Hz taajuudella, kun pelkkä loop kestää vähintään 64ms Arduino Unon kanssa. Mulla ei oo edes pulssia eli aikaleimat(4 kpl) on kaikki 0. Sitten kun noi on jotain järkeviä lukuarvoja, niin loopin pituus kasvaa entisestään.
 
Mikä tässä dynossa on maksimi kierrostaajuus, mitä tässä tulee noilla mopon välityksillä? Noin suurinpiirtein...
 
Tämähän alkoi toimimaan! Melkoisen labraamisen kyllä vaati ja viimeiset vinkit ongelman lähteille sain täältä.
on siinä vielä paljon viimeistelyä ennen kuin voi sanoa valmiiksi mutta sitä jatketana tuossa kesäloman jälkeen syksymmällä.
Sain viimein mitattua tehokäppyrät tosin taisin hukata kalibrointitulokset johonkin ja laitoin muistista jotain sinne päin eli joudun vielä kalibroimaan tämän uudelleen mutta se on pikkujuttu.

Veideolla vähän fiilistelyö aiheesta.

Näytä liitetiedosto 118062

 
Nyt on tehdy jos jonkinnäköistä labrausta ja tuolla kotiverstasfoorumilla eräs kaveri labrasi ja koodasi tuon arduinon koodin reilusti uusiksi mutta se ei ratkaissut ongelmaani.
Nyt viimeisimmässä kokeiluissa vaihdoin arduino unon tilalle aidon arduino UNO:n ja tein tuosta ESP32:sta signaaligeneraattorin joslla syötin arduinoa suoraan. Lisäksi täysin eri tietokone käytössä ja välistä on pois tuo tekemäni mittakortti ja sain toistettua ongelma reippaasti muutetulla Arduinon koodilla ja täysin eri raudalla. Ainoa tuntuva ero tuossa tuloksissa on se että häiriö alkaa vasta lähempänä 3000rpm eli tällä setillä pitäisi tuon raisun mittaus jo onnistua kun siinä on maksimikierrokset rullalla alle tuon 3000rpm. Tosin testasin tämänkin Unon koodin verision jo ja se ei jostain syystä tominut tuon oikean dynon kanssa vaan tuo sama häiriö ilmestyi kuten aikaisemminkin.

Liitteenä myös tuon setin tuottama raakadata tekstitiedostossa.

Tämmönen setti oli nyt kokeiluissa:
IMG_1769.webp

Tämmöset tulokset:
Sweep testi fail.webp

Sweep testi fail analyysi.webp
 

Liitetiedostot

Nyt on tuo yllä esitelty koodi testattu tositoimissa ja sehän toimii dynossa kuten toimi pöydälläkin eli tämän mopon kanssa ongelmat eivät tule esiin koska rullan nopeus mopon kanssa on maksimi noin 2500rpm.
Lisäsin settiin lämpötilan mittaukset ja nekin lähti toimimaan kuten pitääkin. aiheesta tulee tässä illemmalla video jossa selostuksen lisäksi viimein kaasutellaan mopoa rullalla.

Pakokaasun lämpötila yllätti, tuosta mitattiin lähes 580 astetta mikä on mutulla melko korkea pakokaasun lämpötila. Nyt kun ei ole kokemusta tai tietoa miten tuota pakolämpöä pitäisi tulkita ja käyttää hyväksi, vai onko siitä edes hyötyä säätämisessä?

testi 6_8_23_viimeisin analyysi.webp
 
Pakokaasun lämpötila yllätti, tuosta mitattiin lähes 580 astetta mikä on mutulla melko korkea pakokaasun lämpötila. Nyt kun ei ole kokemusta tai tietoa miten tuota pakolämpöä pitäisi tulkita ja käyttää hyväksi, vai onko siitä edes hyötyä säätämisessä?

Mistä mittaat tuon lämmön ja miten?

Tuosta on säätämisessä iloa mutta pitää ensin oppia se skaala missä mennään. Esim. ex-käyttiksessä oli vakiona anturit pakosarjassa ja niiden minimi oli 945C. Het kohta tuon ylittämisen jälkeen alkoi turvarikastus ja sytkän myöhästäminen. Ihan tehdastekoisesti siis näin. Periaatteessa rinnakkaismallissa oli laajaskaalaisemmat anturit mitkä itsellekin laitoin, piti vaan softasta muuttaa skaala ettei ala rajoittaa menoa jo hellekeleillä moottoria käynnistämättä.
 

Luo tili tai kirjaudu sisään kommentoidaksesi

Sinun täytyy olla jäsen voidaksesi jättää kommentin.

Luo käyttäjätili

Liity Konekansalaiseksi. Se on helppoa ja ilmaista! Rekisteröityneenä et näe mainoksia, voit käyttää hakua, näet alueita, joita nyt ovat piilossa...jne.

Kirjaudu sisään

Oletko jo Konekansan jäsen? Kirjaudu sisään tästä.

Samankaltaisia viestiketjuja

Takaisin
Ylös