Go Down

Topic: Installare iniezione elettronica indiretta con l'aiuto di Arduino (Read 10 times) previous topic - next topic

Nick85

#40
Jan 03, 2013, 10:43 am Last Edit: Jan 03, 2013, 09:49 pm by Nick85 Reason: 1
Ciao ragazzi, questa discussione è molto interessante visto che anche io sto usando arduino per fare qualcosa che è vagamente simile a quello che volete fare voi.
Io sto facendo un apparecchietto che mi servirà per fare la diagnostica della carburazione e devo leggere rpm, lambda ed egt.
Magari potrebbe tornare utile a tutti interagire per trovare alcune soluzioni che possono essere comuni ai nostri progetti. Qui trovate la mia discussione: http://arduino.cc/forum/index.php/topic,138546.0.html

Ieri sera ho cominciato a buttare giù uno schizzo del circuito, anche se purtroppo sono abbastanza ignorante in elettronica, quindi ci metto il triplo per inventarmi i circuiti e calcolar tutto.

La mia idea per gli rpm è di prelevare l'onda quadra a 12v che comanda la bobina, dove ogni impulso corrisponde ad una scintilla delle candele, d'altra parte se funziona per il contagiri...

Al momento ho già scritto buona parte del programma, voi dovreste implementare solo la parte di gestione dell'iniettore in funzione dei dati rilevati, io invece voglio mostrare i dati a display e salvarli su una sd card.
Stavo pensando che per le mappe, potreste salvarle in una sd in un file csv e all'accensione di arduino caricare i dati dal csv ad una matrice, in questo modo potreste fare le mappe inserendo semplicemente la sd nel pc.

Tanto per conoscerci, io ho una fiat 500 vecchia con la quale mi diletto a fare qualche puntatina in pista e nei kartodromi, questo è il mio ultimo bambino:

hiperformance71

Ciao, no, non avevo dimenticato che stiamo parlando di un 2T, ma effettivamente, hai ragione, un 2T sporcherebbe e renderebbe inutilizzabile una wideband (lambda a banda larga), forse ad eccezione di quei motori 2T ad inniezione diretta come gli envinrude E-TEC o i motori rotax E-TEC (stessa tecnologia licenziata da ROTAX) che vengono montati sui prodotti Sky-Doo  (motoslitte da neve), infatti questi motori dichiarano una pulizia allo scarico pari al 4T quindi su questi è possibile montare le sonda lambda, ma avevo dimenticato che il tuo progetto è di inniezione indiretta, scusa. 

In realtà se la ECU ha la mappa inniezione ben calibrata, e tutte le tabelle di correzione in funzione Temp. aria, temp. motore, press. barometrica, e arricchimento derivata farfalla, a meno che non succeda qualcosa di inatteso come la perdita di pressione benzina ecc difficile che vi siano condizioni di pericolo per il motore, ovviamente, forse per questo progetto, l'uso di termocoppia allo scarico sarebbe un MUST HAVE, ovviamente richiederebbe un circuito amplificatore visto il segnale molto debole delle termocoppie (si usa un chip ->AD595A).

Aggiornamento:  Ho visto che con la programmazione ARDUINO di questi MCU non si possono superare certe prestazioni, programmando direttamente in C sfruttando i registri del micro si potrà andare molto più veloce.  Esempio, se creiamo una semplice routine che accende e spegne un led con delay in microsecondi invece di ms, ed usando digitalWrite(), misurando con oscilloscopio otterremo una frequenza di 97-117KHz in funzione del pin usato (quelli con opzione PWM sono più lenti) ma se facessimo la stessa cosa con i registri, si otterrebbe una frequenza di 2,6MHz ovvero 20 volte di più!  Quindi ci tocca studiare anche questo!!  sarà per più avanti, per ora mi basta imparare l'arduino semplice!   

per Nick85:

Ciao, interessante il tuo progetto, fai attenzione al segnale del negativo bobina, vedi che se questo non è filtrato ta un circuito, in realtà ti troveresti con dei picchi velocissimi di tensione alta fino a 400V (chiamata flyback e si produce ogni qualvolta si scarica la bobina).  Di solito i contagiri hanno circuiti protetti contro queste veloci sovratensioni, quindi devi fare molta attenzione a questo.  Ho qualche chema di circuito appositamente per "sensare" questo tipo di segnale, appena lo trovo te lo mando, ma grossolanamente, consiste di un diodo skotty, alcune resistenze ed un fotoaccoppiatore MOC205 se non ricordo male, in sostanza, taglia le sovratensioni e per maggiore sicurezza viene isolato dalla MCU con il fotoaccoppiatore al quale poi gli arriva un segnale entro i 0-5V. 

L'idea di base è che il programma o firmware dell'ipotetica ECU Arduino sia in flash, ma le mappe in EEPROM, sarebbero meno della memoria max disponibile, quindi anche più veloce della SD da caricare (una SD mi sembra ha un tempo di lettura di 200ms vs 10ms dell' EEPROM interna se non ricordo male).  Quindi, all'avviamento, in setup() legge i dati dall'EEPROM e le salva in delle array adeguatamente create in modo di avere tutti i dati necessari in RAM, ma  è daverificare quante risorse disponibili restano, potrebbe bloccarsi il micro se andiamo ad intaccare tutta la RAM disponibile.  Calcola che le mappe da avere come minimo sono:

mappa_inniezione[8][8]; //matrice da 8x8 breakpoints (carico/giri)
mappa_cranking[8];       //serve per la partenza a freddo.
mappa_correzione_Barometrica[8];  //correzione barometrica.
mappa_correzione_Temp_Aria[8];   //correzione in funz. temp. aria.
mappa_correzione_Temp_Mot[8];   //correzione in funz. temp. motore.
breakpoint_carico[8];  //tutti i valori carico selezionati (utile solo se si vogliono manipolare da pc)
breakpoint_giri[8];     //tutti i valori giri in mappa ovviamente saranno in base 8 bit per ovvi motivi di spazio EEPROM. idem che sopra.
Linearizzazione_sensore_TPS[2]; //valore ADC farfalla chiusa (o%), e valore ADC farfalla tutta aperta (100%)
Linearizzazione_sensore_MAP[4};//valore ADC min, ADC max, kpa min e kpa max.
Linearizzazione_sensore_Temp_Mot[8]; // valori ADC a temp. conosciute.
Linearizzazione_sensore_Temp_Air[8];  // valore ADC a temp. conosciute.
Linearizzazione_sensore_Temp_EGT[4]; // valore ADC min, ADC max, Temp. min e Temp. max. 

ecc...

Da studiare bene l'organizzazione dei dati in eeprom visto che devono essere ad 8 bit, quindi tutti i dati che superano 255 devono essere espressi in EEPROM come una frazione, ovvero, se per es. i giri mettiamo:  10,20,25,255  possiamo semplicemente moltiplicare per 100 ed otteniamo: 1000, 2000, 2500, 25000 rpm.  ma altre forme sono valide (es. x 50 ed otteniamo un max di 12xxx rpm)  mmm, cè tanto tanto da lavorare!!


"The only way to do great work is to love what you do. If you haven't found it yet, keep looking. Don't settle" - Steve Jobs

Nick85

Ciao, bravo, vedo che sei molto preparato in materia, mentre io sono molto più allenato con roba old style vedi carburatori.
Adesso mi studio quello che mi hai detto, ma non son troppo sicuro delle correnti di flyback, ti spiego nella'altra discussione il perché.
Grazie e ciao

wmatte


Ciao ragazzi, questa discussione è molto interessante visto che anche io sto usando arduino per fare qualcosa che è vagamente simile a quello che volete fare voi.
Io sto facendo un apparecchietto che mi servirà per fare la diagnostica della carburazione e devo leggere rpm, lambda ed egt.
Magari potrebbe tornare utile a tutti interagire per trovare alcune soluzioni che possono essere comuni ai nostri progetti. Qui trovate la mia discussione: http://arduino.cc/forum/index.php/topic,138546.0.html

Ieri sera ho cominciato a buttare giù uno schizzo del circuito, anche se purtroppo sono abbastanza ignorante in elettronica, quindi ci metto il triplo per inventarmi i circuiti e calcolar tutto.

La mia idea per gli rpm è di prelevare l'onda quadra a 12v che comanda la bobina, dove ogni impulso corrisponde ad una scintilla delle candele, d'altra parte se funziona per il contagiri...

Al momento ho già scritto buona parte del programma, voi dovreste implementare solo la parte di gestione dell'iniettore in funzione dei dati rilevati, io invece voglio mostrare i dati a display e salvarli su una sd card.
Stavo pensando che per le mappe, potreste salvarle in una sd in un file csv e all'accensione di arduino caricare i dati dal csv ad una matrice, in questo modo potreste fare le mappe inserendo semplicemente la sd nel pc.

Tanto per conoscerci, io ho una fiat 500 vecchia con la quale mi diletto a fare qualche puntatina in pista e nei kartodromi, questo è il mio ultimo bambino:


Nick, il tuo bambino è.... MERAVIGLIOSO!

Sono positivamente colpito dalla vostra preparazione, io in materia di iniezione non so ancora nulla. Sono old style come Nick (si dice: "Old But Gold...").

Hiperformance, ti prego di spiegarmi tutte le funzioni minime da avere come sensori, da avere a livello di programma, da avere a livello di output.

Ti chiedo questo per entrare un po' più nel dettaglio, per vedere quanto sono preparato leggendo queste tue righe e quanto ancora mi manca, che sicuramente è tanto. Almeno posso prepararmi con qualcuno che mi guida un po', visto che queste cose non saprei dove impararle altrimenti.

Sperando di non annoiarti e di non annoiare gli altri

Nick85

Grazie mille.
Beh di sicuro wmatte toglimi una curiosita, ma vuoi gestire anche l'accensione?
Io dovendo cominciare avrei provato prima a gestire quest' ultima e poi in un secondo momento l'iniezione che magari è più complessa. O sbaglio?

Go Up