Pages: 1 2 [3] 4   Go Down
Author Topic: Installare iniezione elettronica indiretta con l'aiuto di Arduino  (Read 7453 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 14
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Sun un motore 2T monocilindrico omologato per la strada generalmente non supera i 9000 rpm, qundi tra un giro e l'altro passano 6,66 ms.
Ora, se la lettura di un valore analogico ha una latenza di 10 ms, più tutto il resto del codice, il tempo non è dalla tua parte.
Hai considerato l'opzione di utilizare 2 Arduino? Uno per regolare fisicamente il rapporto Aria/Benzina del carburatore e in base ai giri del motore e uno per leggere i valori analogici o digitali dei sensori (termocoppia, lambda, ecc ecc), e collegarli tramite seriale o I2C.
Potresti includere una semplice mappatura standard nel Primo Arduino che, in base ai valori ricevuti dal secondo, viene modificataogni volta che riceve dati.
In questo modo potresti avere un Arduino abbastanza veloce per rientrare nei tempi previsti e uno relativamente lento che aggiorna la mappatura del primo di volta in volta.
Naturalmente, almeno nel primo Arduino, ti conviene utilizzare gli Interrupt per la lettura dei giri, in questo modo non dovresti perdere nessuna iniezione ne accensione.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 17
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Sun un motore 2T monocilindrico omologato per la strada generalmente non supera i 9000 rpm, qundi tra un giro e l'altro passano 6,66 ms.
Ora, se la lettura di un valore analogico ha una latenza di 10 ms, più tutto il resto del codice, il tempo non è dalla tua parte.
Hai considerato l'opzione di utilizare 2 Arduino? Uno per regolare fisicamente il rapporto Aria/Benzina del carburatore e in base ai giri del motore e uno per leggere i valori analogici o digitali dei sensori (termocoppia, lambda, ecc ecc), e collegarli tramite seriale o I2C.
Potresti includere una semplice mappatura standard nel Primo Arduino che, in base ai valori ricevuti dal secondo, viene modificataogni volta che riceve dati.
In questo modo potresti avere un Arduino abbastanza veloce per rientrare nei tempi previsti e uno relativamente lento che aggiorna la mappatura del primo di volta in volta.
Naturalmente, almeno nel primo Arduino, ti conviene utilizzare gli Interrupt per la lettura dei giri, in questo modo non dovresti perdere nessuna iniezione ne accensione.


Icearrow, la tua idea mi piace molto! Ma purtroppo, come scritto a inizio topic, non mastico ancora bene il linguaggio tecnico elettronico e di ciò che tu mi hai detto ho capito giusto l'essenziale.

A riguardo sto cercando uno starter kit ben rifornito al prezzo più basso possibile per cominciare a imparare Arduino e la programmazione; poi per verificare le mie conoscenze mi piacerebbe costruire un ArduDrone, in giro per il web ce ne sono a bizzeffe da cui trarre spunto, e c è anche qualche programmino di controllo condiviso (e già salvato nel mio pc naturalmente!).

Ora stavo solo raccogliendo un po' di dati e di idee, poi quando comincierò a masticare anche Arduino (università permettendo) sicuramente vi mostrerò più idee e problematiche smiley
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 14
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Scusate.... ma il calcolo di Arduino non va fatto ad ogni scoppio del motore....
L'iniettore 'spruzza' benzina di continuo non fa uno 'schizzo' ad ogni ciclo.
E' ovvio che più velocemente si ricalcola e piu' accurata è la carburazione.... ad esempio nel classico colpetto di acceleratore l'aria aumenta improvvisamente e se la centralina non adegua la quantità di benzina la miscela si impoverisce... non stiamo parlando di millisecondi in questo caso.

Detto questo... come si comanda L'iniettore?  Immaginiamo passandogli una certa tensione da 0 volt a 5 volt

Stabiliamo:
-5 step di regimi motore
-5 step di apertura dell'acceleratore

Dobbiamo mettere giù una matrice di 25 valori per ogni incrocio.

A questo punto Arduino semplicemente svolgera':

1) leggi rpm su un pin
2) leggi posizione acceleratore su un altro pin
3) cerca valore nella matrice
4) manda il voltaggio all'iniettore tramite un altro pin

Se l'idea di fondo è un progetto divertente già cosi' il motore sta in moto, e ci si può divertire a trovare i 25 valori migliori, magari creandosi un pannellino per la modifica al volo.




Logged

italy
Offline Offline
Sr. Member
****
Karma: 5
Posts: 260
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Salve, mi permetto di intromettermi in questo post vista la mia esperienza in campo motoristico e specialmente in gestione motore.
Chiarisco alcune cose:

1-gli inniettori non si aprono in modo fisso, ma pulsato, solo qli inniettori di impianti meccanici tipo Bosch K-jetronic erano a spruzzo fisso e richiedevano un complesso sistema per regolare la quantità inniettata che è dipendente dai giri e dal carico motore, a 1000 giri richiede meno benzina che a 9000 rpm a folle, ma a 4000 rpm a pieno carico richiederà anche il doppio di benzina che a 9000 rpm a folle.

2-la miscelazione aria-benzina o AFR (Air Fuel Ratio) è dipendente dal carico motore, avere un' AFR di 14,7:1 significa bruciare tutta la benzina disponibile, ma questa condizione viene raggiunta solo a carichi parziali leggeri, a pieno carico è consigliabile attestarsi entro i 12,8 @ 13,5:1 (da analizzare caso per caso).  Un AFR basso significa carburazione GRASSA, uno alto MAGRA.

3-Per far funzionare una ipotetica centralina ARDUINO ECU, serviranno:

-segnale giri (onda sinusoidale o quadra, ricavata da sensore magnetico, effetto Hall o ottici).  per un motore monocilindrico 2T non richiederà di ruote foniche complesse, credo possa essere fatto anche con un unico dente in corrispondenza del PMS, ma la precisione ne risentirebbe molto, meglio dotarlo di almeno 4 denti o più.
-segnale CARICO MOTORE, principalmente un segnale analogico potenziometro farfalla.
-segnale pressione barometrica o cassonetto aspirazione (servirà ad adeguare la carburazione al variare della pressione atm. e quindi di variazioni di quota).
-segnale temp. motore, servirà per implementare le strategie di partenza a freddo (a freddo  si richiede più benzina)
-segnale temp. Aria, servirà a rivedere la carburazione per effetto del cambio di densità dell'aria al variare la temp.

-segnale sonda lambda, questo segnale è utile ma non indispensabile, ho mappato tante auto da corsa senza che esse usino la retroazione sonda (ma per mapparle si viene usata una sonda lineare wideband), per gestire queste sonde vi è necessità di usare un controller, se prendi quansiasi sistema wideband commerciale tipo AEM o Innovate LC1 c'è l'hanno incluso, essi forniscono un segnale 0-5v proporzionale al valore lambda-AFR dove un valore di 500mV equivale ad un AFR di 9:1 e 4500mV ad uno di 22:1 (scusate le inesattezze, vado a memoria ma questa è l'idea di linearizzazione, poi si fa tutto con i datasheet alla mano). 

-tutto l'hardware necessario:  Pompetta benzina da almeno 3 bar, inniettore, regolatore pressione benzina, centralina e relativo cablaggio con relativo relè (non indispensabile ma raccomandato) e fusibile (molto raccomandato).

-ed ovviamente, un firmware per la centalina!  Per l'hardware della centralina ARDUINO ECU non ci sarebbero grossi problemi, potrei fornirti schemi di come fare, questa è la parte facile, è nel firmware dentro l'MCU dove risiede l'Inteligenza del progetto (parole dette da un ingegnere che ha creato la sua propia centralina per la sua moto). 

Come potete vedere, in realtà la parte difficile è creare il sw da scaricare nell'ARDUINO, per fortuna è un monocilindrico, quindi risolve di molto il lavoro da fare, ma la complessità dell'operazione non è alla portata di tutti (nemmeno mie per la verita! ma ci sto studiando!),

come potenza di calcolo credo che ARDUINO sia all'altezza della situazione, nonché perché ho visto in rete progetti simili funzionanti e poi, il micro usato, ATMEGA328P l'ho visto dentro la centralina creata da in ingegnere per la sua moto 4T bicilindrica (guzzi).

l'unico segnale che devi avere gestione in real time è quello giri motore, gli altri possono essere "letti" in base ai tempi di latenza dell'arduino di 10ms come ho letto nelle risposte precedenti.  Per acquisire il segnale giri, la miglior forma che conosco è usare gli interrupt in modo da liberare il micro quando non vi sono eventi "teeth" (lettura denti ruota fonica).  in un motore monocilindrico 2T vi è un' accensione ad ogni giro ogni qual volta il pistone è al PMS, quindi in breve, la nostra ARDUINO ECU ad ogni "teeth" (se usiamo un solo dente) deve inniettare una certa quantità di benzina regolandone il tempo di apertura dell' iniettore, al minimo magari sarà sufficiente 2ms ma a pieno carico e 9000 rpm sarà necessario 5,2-5,3ms (come detto da qualcun'altro, un giro si compie in 6,6ms e noi possiamo usare solo l'80% del tempo per aprire e chiudere gli iniettori questo si chiama DUTYCICLE dell'iniettore). quindi se dal momento che si verifica l'interrupt del dente ruota fonica, la nostra ECU dovrà aprire l'iniettore per quel tempo.  Come concetto è semplice, ma come realizzazione un bel pò meno, ma non impossibile.


 


Logged

"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

Riva del Garda, TN / Forlì
Offline Offline
Edison Member
*
Karma: 7
Posts: 2247
Il piu' modesto al mondo
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

e pensare che i piloti di aerei con motori 4 tempi usano solo l'egt gauge (exaust gas temperature, l'indicatore della temperatura di scarico) per muovere la manopola che va a cambiare il rapporto stechiometrico.

e parliamo di aerei non di motorini che se ti si ferma il motore al massimo rimani a piedi smiley-wink

poi ovvio i motori aeronautici passano per carburatore (i più a vaschetta).
Logged

Il nuovo forum italiano sull'elettronica: http://www.electroit.tk/ <--- Nuovamente online!

Offline Offline
Newbie
*
Karma: 0
Posts: 17
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Salve, mi permetto di intromettermi in questo post vista la mia esperienza in campo motoristico e specialmente in gestione motore.
Chiarisco alcune cose:

1-gli inniettori non si aprono in modo fisso, ma pulsato, solo qli inniettori di impianti meccanici tipo Bosch K-jetronic erano a spruzzo fisso e richiedevano un complesso sistema per regolare la quantità inniettata che è dipendente dai giri e dal carico motore, a 1000 giri richiede meno benzina che a 9000 rpm a folle, ma a 4000 rpm a pieno carico richiederà anche il doppio di benzina che a 9000 rpm a folle.

2-la miscelazione aria-benzina o AFR (Air Fuel Ratio) è dipendente dal carico motore, avere un' AFR di 14,7:1 significa bruciare tutta la benzina disponibile, ma questa condizione viene raggiunta solo a carichi parziali leggeri, a pieno carico è consigliabile attestarsi entro i 12,8 @ 13,5:1 (da analizzare caso per caso).  Un AFR basso significa carburazione GRASSA, uno alto MAGRA.

3-Per far funzionare una ipotetica centralina ARDUINO ECU, serviranno:

-segnale giri (onda sinusoidale o quadra, ricavata da sensore magnetico, effetto Hall o ottici).  per un motore monocilindrico 2T non richiederà di ruote foniche complesse, credo possa essere fatto anche con un unico dente in corrispondenza del PMS, ma la precisione ne risentirebbe molto, meglio dotarlo di almeno 4 denti o più.
-segnale CARICO MOTORE, principalmente un segnale analogico potenziometro farfalla.
-segnale pressione barometrica o cassonetto aspirazione (servirà ad adeguare la carburazione al variare della pressione atm. e quindi di variazioni di quota).
-segnale temp. motore, servirà per implementare le strategie di partenza a freddo (a freddo  si richiede più benzina)
-segnale temp. Aria, servirà a rivedere la carburazione per effetto del cambio di densità dell'aria al variare la temp.

-segnale sonda lambda, questo segnale è utile ma non indispensabile, ho mappato tante auto da corsa senza che esse usino la retroazione sonda (ma per mapparle si viene usata una sonda lineare wideband), per gestire queste sonde vi è necessità di usare un controller, se prendi quansiasi sistema wideband commerciale tipo AEM o Innovate LC1 c'è l'hanno incluso, essi forniscono un segnale 0-5v proporzionale al valore lambda-AFR dove un valore di 500mV equivale ad un AFR di 9:1 e 4500mV ad uno di 22:1 (scusate le inesattezze, vado a memoria ma questa è l'idea di linearizzazione, poi si fa tutto con i datasheet alla mano). 

-tutto l'hardware necessario:  Pompetta benzina da almeno 3 bar, inniettore, regolatore pressione benzina, centralina e relativo cablaggio con relativo relè (non indispensabile ma raccomandato) e fusibile (molto raccomandato).

-ed ovviamente, un firmware per la centalina!  Per l'hardware della centralina ARDUINO ECU non ci sarebbero grossi problemi, potrei fornirti schemi di come fare, questa è la parte facile, è nel firmware dentro l'MCU dove risiede l'Inteligenza del progetto (parole dette da un ingegnere che ha creato la sua propia centralina per la sua moto). 

Come potete vedere, in realtà la parte difficile è creare il sw da scaricare nell'ARDUINO, per fortuna è un monocilindrico, quindi risolve di molto il lavoro da fare, ma la complessità dell'operazione non è alla portata di tutti (nemmeno mie per la verita! ma ci sto studiando!),

come potenza di calcolo credo che ARDUINO sia all'altezza della situazione, nonché perché ho visto in rete progetti simili funzionanti e poi, il micro usato, ATMEGA328P l'ho visto dentro la centralina creata da in ingegnere per la sua moto 4T bicilindrica (guzzi).

l'unico segnale che devi avere gestione in real time è quello giri motore, gli altri possono essere "letti" in base ai tempi di latenza dell'arduino di 10ms come ho letto nelle risposte precedenti.  Per acquisire il segnale giri, la miglior forma che conosco è usare gli interrupt in modo da liberare il micro quando non vi sono eventi "teeth" (lettura denti ruota fonica).  in un motore monocilindrico 2T vi è un' accensione ad ogni giro ogni qual volta il pistone è al PMS, quindi in breve, la nostra ARDUINO ECU ad ogni "teeth" (se usiamo un solo dente) deve inniettare una certa quantità di benzina regolandone il tempo di apertura dell' iniettore, al minimo magari sarà sufficiente 2ms ma a pieno carico e 9000 rpm sarà necessario 5,2-5,3ms (come detto da qualcun'altro, un giro si compie in 6,6ms e noi possiamo usare solo l'80% del tempo per aprire e chiudere gli iniettori questo si chiama DUTYCICLE dell'iniettore). quindi se dal momento che si verifica l'interrupt del dente ruota fonica, la nostra ECU dovrà aprire l'iniettore per quel tempo.  Come concetto è semplice, ma come realizzazione un bel pò meno, ma non impossibile.

Hiperformance, una bella risposta, precisa. Io di quello che hai citato a livello di elettronica (e anche iniezione), so poco, per la parte meccanica ho capito tutto (o almeno spero!).

Per i giri basta e avanza il dentello del pick up del motore a mio avviso: ho visto molti contagiri che invece che leggere il regime di rotazione al pick up (quindi al volano), lo leggevano rispetto alla frequenza del cavo candela, avvolgendoci attorno un filo: io non conosco tale principio di funzionamento, ma questa potrebbe essere una valida alternativa alla lettura al pick up, un po più complessa da fare. Inoltre la lettura al cavo candela viene usata anche da taluni banchi prova per il grafico potenza-coppia su numero di giri. Insomma, non sarà precisissimo, ma nemmeno così errato a mio avviso.

Per il resto ora sono in fase di stand by causa esami. Spero di potermi tenere in contatto con te, le tue conoscenze a riguardo sono notevoli. smiley
Logged

italy
Offline Offline
Sr. Member
****
Karma: 5
Posts: 260
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao wmatte,  per una centralina che debba gestire solo inniezione io preferirei sempre un dente su una ruota fonica su''albero motore, ma non nego che sia fattibile ricavare il segnale dal sistema da te indicato (per effetto induttivo), infatti potremmo anche prelevare il segnale di corrente di flyback sul negativo bobina, dopo che si "rilascia" la carica bobina, parte la scintilla, bene, al contempo stesso, nella bobina si produce una carica positiva che può raggiungere anche i 400V per pochi attimi, esistono dei circuiti appositi che "sentono" questa corrente ed isolano la MCU da possibili danni, ho qualche schema al riguardo, ma come ti dicevo, preferisco il sistema del dente (o denti) su una ruota fonica sull'albero motore, mediante un sensore ad effetto magnetico (VR) esso darà un segnale sinusoidale, volendo anche ad ffetto HALL andrebbe bene, anzi, dovrebbe risultare anche più semplice il circuito perchè non richiederebbe un circuito di "condizionamento" del segnale sinusoidale (che ad alto numero di giri potrebbe facilmente raggiungere valori di 50V picco-picco). 
In BOCCA AL LUPO CON GLI ESAMI!!

e BUON ANNO 2013 a TUTTI!!!!


ps. visto che è un progettino stimolante, ho deciso di dedicarci un pochino del tempo libero, magari servirà da base per "farsi le OSSA" come si deve... Quindi ci sentiamo...
Logged

"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

Offline Offline
Newbie
*
Karma: 0
Posts: 17
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao wmatte,  per una centralina che debba gestire solo inniezione io preferirei sempre un dente su una ruota fonica su''albero motore, ma non nego che sia fattibile ricavare il segnale dal sistema da te indicato (per effetto induttivo), infatti potremmo anche prelevare il segnale di corrente di flyback sul negativo bobina, dopo che si "rilascia" la carica bobina, parte la scintilla, bene, al contempo stesso, nella bobina si produce una carica positiva che può raggiungere anche i 400V per pochi attimi, esistono dei circuiti appositi che "sentono" questa corrente ed isolano la MCU da possibili danni, ho qualche schema al riguardo, ma come ti dicevo, preferisco il sistema del dente (o denti) su una ruota fonica sull'albero motore, mediante un sensore ad effetto magnetico (VR) esso darà un segnale sinusoidale, volendo anche ad ffetto HALL andrebbe bene, anzi, dovrebbe risultare anche più semplice il circuito perchè non richiederebbe un circuito di "condizionamento" del segnale sinusoidale (che ad alto numero di giri potrebbe facilmente raggiungere valori di 50V picco-picco). 
In BOCCA AL LUPO CON GLI ESAMI!!

e BUON ANNO 2013 a TUTTI!!!!


ps. visto che è un progettino stimolante, ho deciso di dedicarci un pochino del tempo libero, magari servirà da base per "farsi le OSSA" come si deve... Quindi ci sentiamo...


Tanto varrebbe sfrutta il pick up sul volano! Non trovi?

Ps Buon anno anche a te, la tua sapienza è notevole! Ma dimmi un po': secondo te con un po di impegno è possibile fare un sistema di controllo elettronico "chiuso", ovvero che possa autoregolare da automaticamente la carburazione stessa? Anche incrociando diversi dati..
Logged

italy
Offline Offline
Sr. Member
****
Karma: 5
Posts: 260
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao, forse non al 100% ma si, è possibile, se nel sistema inseriamo una sonda lambda wideband (con relativo controller)  programmando una mappa AFR da rispettare e creando un algoritmo PID per gestire al meglio la risposta della sonda e della carburazione, si potrebbe, ma ovviamente andrebbe prima creata la mappa inniezione vera e propia, poi, se questa è ben fatta (sperimentalmente sul motore) la retroazione sonda darà risultati più coerenti e solidi. 

Infatti prova di ciò si può riscontrare su centraline da competizione, se abbiamo una mappa mal calibrata e lasciamo che sia la retroazione sonda a tenere in carburazione il motore, si rischia di fare qualche danno, c'è un certo tempo di latenza tra il valore lambda rilevato e quello del momento in cui quella condizione era presente, ovvero, non si riesce a misurare in tempo reale ma quasi, vi è un ritardo di circa 200-400 rpm (su un motore 4T) tra il tempo in cui vi sia una pecca nella carburazione ed il momento dove la sonda rileva il problema (anche se una sonda ha una frequenza di 10Hz circa come tempo di aggiornamento lettura). Se questo accade, se per esempio la mappa fosse molto magra all'affondare l'accelleratore (aumento della quantità aria improvviso) passeranno alcuni secondi prima che la ECU possa rivedere i tempi d'inniezione ingranssando, ma a quel punto magari la carburazione si è stabilizzata, ma siccome vi è un ritardo, la ECU non lo sa ancora e poi avremo l'opposto, troppa benzina!  più è scombinata la mappa, più si avrà questo problema. Quindi è primordiale eseguire un' accurata calibrazione della mappa di inniezione, poi si può attivare eventuali sistemi di retroazione, avranno poco da fare e saranno sempre vicinissimo al target AFR impostato.  Sui motori aspirati non è necessario farlo, anche perchè se la sonda non lavorasse correttamente (si possono danneggiare facilmente con carburazioni molto grasse o con presenza di olio o refrigerante nei gas di scarico) potremmo rischiare gravi danni al motore, quindi meglio lasciarla per l'acquisizione dati o solo da usare mentre si mappa a banco.  Unica eccezione, quando mappo motori turbo, visto che sono molto più dipendenti da cambi di pressione/carico è utile lasciar la retroazione sonda attiva sopo aver mappato per bene, in un motore turbo le cose succedono troppo in fretta, bastano pochi secondi fuori target per ritrovarti con dei pistoni bucati, per fare ciò su aspirati si deve propio andare a cercarlo (ma non difficile che succeda però).  Infatti, su un aspirato tipo gr.N si può girare a pieno carico anche con AFR di 13,5:1 e più secco ancora senza incorrere in danni, mentre su un turbo, sarebbe deleterio smagrire oltre 12:1 visto che il target spesso è intorno a 10,8-11,5:1 per ragioni di sicurezza, io ho visto spesse volte AFR di 12,5 a pieno carico senza danni, ma non è bene rischiare!!
Logged

"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

Offline Offline
Newbie
*
Karma: 0
Posts: 17
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao, forse non al 100% ma si, è possibile, se nel sistema inseriamo una sonda lambda wideband (con relativo controller)  programmando una mappa AFR da rispettare e creando un algoritmo PID per gestire al meglio la risposta della sonda e della carburazione, si potrebbe, ma ovviamente andrebbe prima creata la mappa inniezione vera e propia, poi, se questa è ben fatta (sperimentalmente sul motore) la retroazione sonda darà risultati più coerenti e solidi. 

Infatti prova di ciò si può riscontrare su centraline da competizione, se abbiamo una mappa mal calibrata e lasciamo che sia la retroazione sonda a tenere in carburazione il motore, si rischia di fare qualche danno, c'è un certo tempo di latenza tra il valore lambda rilevato e quello del momento in cui quella condizione era presente, ovvero, non si riesce a misurare in tempo reale ma quasi, vi è un ritardo di circa 200-400 rpm (su un motore 4T) tra il tempo in cui vi sia una pecca nella carburazione ed il momento dove la sonda rileva il problema (anche se una sonda ha una frequenza di 10Hz circa come tempo di aggiornamento lettura). Se questo accade, se per esempio la mappa fosse molto magra all'affondare l'accelleratore (aumento della quantità aria improvviso) passeranno alcuni secondi prima che la ECU possa rivedere i tempi d'inniezione ingranssando, ma a quel punto magari la carburazione si è stabilizzata, ma siccome vi è un ritardo, la ECU non lo sa ancora e poi avremo l'opposto, troppa benzina!  più è scombinata la mappa, più si avrà questo problema. Quindi è primordiale eseguire un' accurata calibrazione della mappa di inniezione, poi si può attivare eventuali sistemi di retroazione, avranno poco da fare e saranno sempre vicinissimo al target AFR impostato.  Sui motori aspirati non è necessario farlo, anche perchè se la sonda non lavorasse correttamente (si possono danneggiare facilmente con carburazioni molto grasse o con presenza di olio o refrigerante nei gas di scarico) potremmo rischiare gravi danni al motore, quindi meglio lasciarla per l'acquisizione dati o solo da usare mentre si mappa a banco.  Unica eccezione, quando mappo motori turbo, visto che sono molto più dipendenti da cambi di pressione/carico è utile lasciar la retroazione sonda attiva sopo aver mappato per bene, in un motore turbo le cose succedono troppo in fretta, bastano pochi secondi fuori target per ritrovarti con dei pistoni bucati, per fare ciò su aspirati si deve propio andare a cercarlo (ma non difficile che succeda però).  Infatti, su un aspirato tipo gr.N si può girare a pieno carico anche con AFR di 13,5:1 e più secco ancora senza incorrere in danni, mentre su un turbo, sarebbe deleterio smagrire oltre 12:1 visto che il target spesso è intorno a 10,8-11,5:1 per ragioni di sicurezza, io ho visto spesse volte AFR di 12,5 a pieno carico senza danni, ma non è bene rischiare!!

La tua spiegazione è veramente precisa, ma scordi un particolare: io vorrei lavorare su un motore a due tempi, e dopo essermi informato ho constatato che l utilizzo di una lambda è molto difficile a causa della lubrificazione non separata tipica di questi motori.

Però credo che lavorando con qualche sensore dalla parte opposta, quindi in aspirazione, si potrebbe fare qualcosa esattamente come dici tu: partendo dal presupposto di avere una mappa solida e ben studiata, si potrebbe rendere il sistema retroattivo lavorando su dati quali temperatura dell aria nell'airbox e pressione nella stessa. Tenendo poi come fermo che temperatura e pressione sono in genere (a parità di volume) correlati, e avendo un airbox generoso, basterebbe usare anche un solo sensore. Poi eventualmente si potrebbe anche implementare il sistema usando come ulteriore "feedback" il valore di temperatura allo scarico di una termocoppia.

Dimmi tu se il mio ragionamento puramente teorico e concettuale è applicabile o meno, e indicami per favore i pro i contro e le difficoltà di tale sistema, a tuo parere. Di sicuro credo che, prendendo sempre per presupposto che la mappa sia buona, l eventuale ritardo di risposta del iniezione ad adattarsi sarebbe minimo, e di sicuro non superiore a un sistema di iniezione tradizionale e non retroattivo.
Logged

Offline Offline
Jr. Member
**
Karma: 1
Posts: 54
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
« Last Edit: January 03, 2013, 03:49:45 pm by Nick85 » Logged

italy
Offline Offline
Sr. Member
****
Karma: 5
Posts: 260
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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!!


 
Logged

"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

Offline Offline
Jr. Member
**
Karma: 1
Posts: 54
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 17
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Offline Offline
Jr. Member
**
Karma: 1
Posts: 54
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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?
Logged

Pages: 1 2 [3] 4   Go Up
Jump to: