zx6r 2006 by DNA54

Presentiamo le nostre moto
DNA54
Maledetto centimetro
Maledetto centimetro
Messaggi: 123
Iscritto il: 29 mag 2011, 23:50
Provincia: CA
Sesso: Maschio
Moto: zx6r 2006

Re: zx6r 2006 by DNA54

Messaggio da DNA54 » 30 mag 2013, 17:29

diamo il benvenuto al programma definitivo versione 1.0 !! :clapping:

Codice: Seleziona tutto

#include <SPI.h>
  const int slaveSelectPin = 10;
  const int tpsLett=A0; //la lettura analogica del tps
  const int rpmLett=6; //la lettura analogica dei rpm

  int tps=0; //la variabile che accoglierà il tps
  int rpm=0; //la variabile che accoglierà gli rpm

  int level=0;  //il dato da inviare al potenziometro
//la mappa caricata
  int TPS5[13] =   {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
  int TPS10[13] =  {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
  int TPS20[13] =  {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
  int TPS30[13] =  {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
  int TPS50[13] =  {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
  int TPS70[13] =  {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};
  int TPS100[13] = {  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0};



void setup()
{
  pinMode (slaveSelectPin, OUTPUT);
  SPI.begin();
  digitalPotWrite(level);


}
void loop()
{
  tps=mapTps(analogRead(tpsLett));     //fase 1: leggo i valori e li mappo
  rpm=mapRpm(pulseIn(rpmLett,HIGH,2000));

//quantizzo i valori rpm

if (rpm<=2000) {rpm=0;}
else {
    if ((rpm>2000)&&(rpm<=3000)) {rpm=1;}
    else {
    if ((rpm>3000)&&(rpm<=4000)) {rpm=2;}
    else {
       if ((rpm>4000)&&(rpm<=5000)) {rpm=3;}
       else {
       if ((rpm>5000)&&(rpm<=6000)) {rpm=4;}
       else {
          if ((rpm>6000)&&(rpm<=7000)) {rpm=5;}
          else {
          if ((rpm>7000)&&(rpm<=8000)) {rpm=6;}
          else {
             if ((rpm>8000)&&(rpm<=9000)) {rpm=7;}
             else {
             if ((rpm>9000)&&(rpm<=10000)) {rpm=8;}
             else {
                if ((rpm>10000)&&(rpm<=11000)) {rpm=9;}
                else {
                if ((rpm>11000)&&(rpm<=12000)) {rpm=10;}
                else {
                   if ((rpm>12000)&&(rpm<=13000)) {rpm=11;}
                   else {
                   if (rpm>13000) {rpm=12;}
                     }
                   }
                }
                }
             }
             }
          }
          }
       }
       }
    }
    }

//quantizzo i valori tps
if (tps<=5) {tps=5;}
else {
    if ((tps>5)&&(tps<=10)) {tps=10;}
    else {
    if ((tps>10)&&(tps<=20)) {tps=20;}
    else {
       if ((tps>20)&&(tps<=30)) {tps=30;}
       else {
       if ((tps>30)&&(tps<=50)) {tps=50;}
       else {
          if ((tps>50)&&(tps<=70)) {tps=70;}
          else {
          if (tps>70) {tps=100;}
            }
          }
       }
       }
    }
    }

//adesso mando i valori della mappa al potenziometro
switch (tps) {

case 5:
     tps5(rpm, &TPS5[0]);
     break;
case 10:
     tps10(rpm, &TPS10[0]);
     break;
case 20:
     tps20(rpm, &TPS20[0]);
     break;
case 30:
     tps30(rpm, &TPS30[0]);
     break;
case 50:
     tps50(rpm, &TPS50[0]);
     break;
case 70:
     tps70(rpm, &TPS70[0]);
     break;
case 100:
     tps100(rpm, &TPS100[0]);
     break;
}
} //fine del ciclo loop


void digitalPotWrite(int value)  //funzione che si occupa di mandare un valore al potenziometro compreso tra 0 e 255
{
  digitalWrite(slaveSelectPin, LOW);
  SPI.transfer(0x11);
  SPI.transfer(value);
  digitalWrite(slaveSelectPin, HIGH);
}
int mapTps(int value)  //funzione che mappa il valore tps da 0 a 100
{
  map(value,0,255,0,100);

  return value;
}
int mapRpm(float value)  //funzione che trasforma il periodo in rpm
{
  value = 15/(value*1000000);

  return value;
}
//qui le funzioni che scelgono il vettore mappa in funzione dell'apertura tps
void tps5 (int value, int *ptr5)
{

  ptr5 = ptr5 + value;
  digitalPotWrite(*ptr5);


}
void tps10 (int value, int *ptr10)
{

  ptr10 = ptr10 + value;
  digitalPotWrite(*ptr10);

}
void tps20 (int value, int *ptr20)
{

  ptr20 = ptr20 + value;
  digitalPotWrite(*ptr20);

}
void tps30 (int value, int *ptr30)
{

  ptr30 = ptr30 + value;
  digitalPotWrite(*ptr30);

}
void tps50 (int value, int *ptr50)
{

  ptr50 = ptr50 + value;
  digitalPotWrite(*ptr50);

}
void tps70 (int value, int *ptr70)
{

  ptr70 = ptr70 + value;
  digitalPotWrite(*ptr70);

}
void tps100 (int value, int *ptr100)
{

  ptr100 = ptr100 + value;
  digitalPotWrite(*ptr100);

}

mi sono dovuto studiare nuovamente i puntatori per riuscire a usarli a dovere, ma nonostante questo, dovrebbe girare bene

Adesso mi tocca recuperare 135 euri per la wideband :whistle2: e poi farò i primi test !!

marcmoto
Meccanico Ufficiale
Meccanico Ufficiale
Messaggi: 28067
Iscritto il: 20 giu 2009, 14:24
Provincia: RI
Sesso: Maschio
Moto: ZX10R 2016, NINJA 1000 SX
Contatta:

Re: zx6r 2006 by DNA54

Messaggio da marcmoto » 30 mag 2013, 22:26

Non voglio deluderti ma purtroppo è si un sistema economico e semplice ma proprio per questo ha anche dei forti limiti, e scriverci anche un programma apposito è praticamente inutile.
Questo sistema (usato già molto tempo fa e copiato da varie centraline come ad esempio Mjet) ha il suo forte limite nel valore che va a inviare all'Ecu. Le variabili che in base ai sensori le ecu possono apportare e che vengono inserite nelle mappature originali delle moto sono a livello percentuale di circa il 5/10% e non lo sono sempre in modo uguale all'apertura del gas (Tps) e del numero di giri. IL sensore di temperatura motore o quello della temperatura aria aspirata possono quindi far variare la carburazione di un certo limite e non oltre e sopratutto non si sa a priori come è stato deciso dagli ingenieri dove e come questa variazione avvenga. Con una centralina simile abbiamo fatto prove al banco in estate e poi in inverno ebbene in estate le cose seppure con dei buchi evidenti miglioravano un poco e seppure il risultato non era minimamente paragonabile a una mappatura decente perlomeno in qualche punto migliorava un poco (ma solo un poco), in inverno invece dove il sensore era già stato portato al limite della minima temperatura ammessa dalla variazione scritta nella mappa Ecu per ingrassare sono venuti fuori dei buchi di carburazione pazzeschi e la potenza è scesa notevolmente, purtroppo non è che una moto venduta per andare in climi dove al massimo si raggiungono temperature di 10° sotto zero possiamo andare oltre certi valori facendogli credere alla centralina che ci troviamo a -40° e quindi avviene il patatrac. Ora capisci che seppure scolasticamente fa bene comunque sforzarsi per provare ad avere un risultato su un'idea che si è avuta diventa poi tutto inutile se poi ci troviamo davanti a limiti insormontabili.
Monta una buona centralina aggiuntiva (PWC, Rapid ecc ecc) o ancora meglio fai modificare in racing la tua e scrivi un programma che puoi utilizzare tramite il wide con quelle e allora si che il risultato sarà degno di nota.
In definitiva una cosa è apportare una modifica indiretta sull'iniezione tramite un sensore e un'altra è andare a comandare direttamente gli iniettori.
Prendila come una critica costruttiva e non come uno sfogo contro il tuo lavoro.

DNA54
Maledetto centimetro
Maledetto centimetro
Messaggi: 123
Iscritto il: 29 mag 2011, 23:50
Provincia: CA
Sesso: Maschio
Moto: zx6r 2006

Re: zx6r 2006 by DNA54

Messaggio da DNA54 » 01 giu 2013, 10:39

marcmoto ha scritto:Non voglio deluderti ma purtroppo è si un sistema economico e semplice ma proprio per questo ha anche dei forti limiti, e scriverci anche un programma apposito è praticamente inutile.
Questo sistema (usato già molto tempo fa e copiato da varie centraline come ad esempio Mjet) ha il suo forte limite nel valore che va a inviare all'Ecu. Le variabili che in base ai sensori le ecu possono apportare e che vengono inserite nelle mappature originali delle moto sono a livello percentuale di circa il 5/10% e non lo sono sempre in modo uguale all'apertura del gas (Tps) e del numero di giri. IL sensore di temperatura motore o quello della temperatura aria aspirata possono quindi far variare la carburazione di un certo limite e non oltre e sopratutto non si sa a priori come è stato deciso dagli ingenieri dove e come questa variazione avvenga. Con una centralina simile abbiamo fatto prove al banco in estate e poi in inverno ebbene in estate le cose seppure con dei buchi evidenti miglioravano un poco e seppure il risultato non era minimamente paragonabile a una mappatura decente perlomeno in qualche punto migliorava un poco (ma solo un poco), in inverno invece dove il sensore era già stato portato al limite della minima temperatura ammessa dalla variazione scritta nella mappa Ecu per ingrassare sono venuti fuori dei buchi di carburazione pazzeschi e la potenza è scesa notevolmente, purtroppo non è che una moto venduta per andare in climi dove al massimo si raggiungono temperature di 10° sotto zero possiamo andare oltre certi valori facendogli credere alla centralina che ci troviamo a -40° e quindi avviene il patatrac. Ora capisci che seppure scolasticamente fa bene comunque sforzarsi per provare ad avere un risultato su un'idea che si è avuta diventa poi tutto inutile se poi ci troviamo davanti a limiti insormontabili.
Monta una buona centralina aggiuntiva (PWC, Rapid ecc ecc) o ancora meglio fai modificare in racing la tua e scrivi un programma che puoi utilizzare tramite il wide con quelle e allora si che il risultato sarà degno di nota.
In definitiva una cosa è apportare una modifica indiretta sull'iniezione tramite un sensore e un'altra è andare a comandare direttamente gli iniettori.
Prendila come una critica costruttiva e non come uno sfogo contro il tuo lavoro.

Tranquillo, qualunque critica costruttiva è ben accetta!
è esattamente per i motivi descritti da te che ho deciso di fare una mappa punto per punto in funzione del tps e giri motore
Quando arriverà la wideband, fare un programma di acquisizione dati su microsd sarà abbastanza semplice (così da vedere i punti da modificare)
la resistenza l'ho scelta facendo delle prove sul sensore originale mettendolo nel freezer. Con un termometro a parte controllavo la resistenza interna al variare della temperatura.
In questo modo la temperatura minima che legge la ecu è di -10°
Poi, la parte che realizzo e che posto qui in completa open source prevede l'utilizzo del sensore temperatura, e impedisce un eventuale smagrimento voluto.

Quando finirò di realizzare il progetto, io mi interfaccerò direttamente sugli iniettori, ma quella parte non sarà assolutamente open source.
Per chi vuole lavorarci un minimo, il programma alla fine l'ho già postato. Basta riflettere un po' per capire che passare dal sensore temperatura a un duty cycle variabile con definizione di sempre 256 punti per pilotare gli iniettori non ci vuole poi così tanto :derisive:

DNA54
Maledetto centimetro
Maledetto centimetro
Messaggi: 123
Iscritto il: 29 mag 2011, 23:50
Provincia: CA
Sesso: Maschio
Moto: zx6r 2006

Re: zx6r 2006 by DNA54

Messaggio da DNA54 » 02 giu 2013, 21:39

finito il programma di acquisizione dati su microsd :yahoo:

questo però rimane top secret :tongue:

DNA54
Maledetto centimetro
Maledetto centimetro
Messaggi: 123
Iscritto il: 29 mag 2011, 23:50
Provincia: CA
Sesso: Maschio
Moto: zx6r 2006

Re: zx6r 2006 by DNA54

Messaggio da DNA54 » 04 giu 2013, 15:37

stamane ho testato lo sketch "base" con un solo ingresso analogico da salvare

http://www.youtube.com/watch?v=RDthRrOjIzA&

Adesso resto in attesa di avere i dindi per la wideband, dopodiché si passa allo step successivo!


devo solo capire come importare i dati medi su excel :whistle2:

DNA54
Maledetto centimetro
Maledetto centimetro
Messaggi: 123
Iscritto il: 29 mag 2011, 23:50
Provincia: CA
Sesso: Maschio
Moto: zx6r 2006

Re: zx6r 2006 by DNA54

Messaggio da DNA54 » 07 giu 2013, 13:24

yeeeeee :yahoo:

Immagine

Immagine

questo è il primo pcb doppia faccia che realizzo col bromografo (disegnato su autocad)
non mi aspettavo di riuscirci al primo colpo, e invece.. perfettamente allineato!

a breve il primo video-test


PS: trattasi della scheda di acquisizione dati :lol:

DNA54
Maledetto centimetro
Maledetto centimetro
Messaggi: 123
Iscritto il: 29 mag 2011, 23:50
Provincia: CA
Sesso: Maschio
Moto: zx6r 2006

Re: zx6r 2006 by DNA54

Messaggio da DNA54 » 07 giu 2013, 19:23

eccolo!


Avatar utente
Pilot
Collaboratori
Collaboratori
Messaggi: 7601
Iscritto il: 29 giu 2009, 21:20
Provincia: CN
Sesso: Maschio
Moto: ZX-6R 06
Località: Cuneo

Re: zx6r 2006 by DNA54

Messaggio da Pilot » 07 giu 2013, 23:22

Come mai per realizzare il circuito hai usato autocat e non Eagle?
La mia è solo curiositá, visto che da qualche mese mi sono messo a studiare un pò di elettronica di base, e vedo che tutti consigliano di usare Eagle poichè è semplicissimo e gratuito!
Vivere Senza Tentare Vuol Dire Morire Con il Dubbio che ce l'avresti Fatta!!!

"I tuoi cerchi sono Fantastici! Senti la moto dal serbatoio in su, sotto é come se fosse appoggiata su dei magneti!!!" Nik cit.

Ciao Ciao Porto!

marcmoto
Meccanico Ufficiale
Meccanico Ufficiale
Messaggi: 28067
Iscritto il: 20 giu 2009, 14:24
Provincia: RI
Sesso: Maschio
Moto: ZX10R 2016, NINJA 1000 SX
Contatta:

Re: zx6r 2006 by DNA54

Messaggio da marcmoto » 07 giu 2013, 23:23

DNA54 ha scritto:yeeeeee :yahoo:

Immagine

Immagine

questo è il primo pcb doppia faccia che realizzo col bromografo (disegnato su autocad)
non mi aspettavo di riuscirci al primo colpo, e invece.. perfettamente allineato!

a breve il primo video-test


PS: trattasi della scheda di acquisizione dati :lol:

Tho qualcosa che conosco... L'Arduino...... ottimo aggeggio ci si può fare un po di tutto......
Ma tu non hai fatto l'Arduino vero?

DNA54
Maledetto centimetro
Maledetto centimetro
Messaggi: 123
Iscritto il: 29 mag 2011, 23:50
Provincia: CA
Sesso: Maschio
Moto: zx6r 2006

Re: zx6r 2006 by DNA54

Messaggio da DNA54 » 08 giu 2013, 07:00

Pilot ha scritto:Come mai per realizzare il circuito hai usato autocat e non Eagle?
La mia è solo curiositá, visto che da qualche mese mi sono messo a studiare un pò di elettronica di base, e vedo che tutti consigliano di usare Eagle poichè è semplicissimo e gratuito!
perché... non lo conoscevo! Sono alle prime armi con la prototipazione, finora ho creato pochi Pcb (tra cui il servobuddy nel mercatino) e autocad andava abbastanza bene, ma con questo circuito doppia faccia è stato davvero un casino!
ho visto qualche video, e sembra davvero facile da usare, grazie della dritta!

marcmoto ha scritto: Tho qualcosa che conosco... L'Arduino...... ottimo aggeggio ci si può fare un po di tutto......
Ma tu non hai fatto l'Arduino vero?
se si sa programmare bene, riesce pure a sostituire la ecu di un motore "semplice" senza grosse pretese in ambito prestazioni!
quello che ho realizzato adesso è lo shield per l'acquisizione dati, ovvero un pcb contenente tutto quello che serve per interfacciare l'arduino con la moto, più il box per la scheda sd

per il cambio elettronico invece ho utilizzato direttamente il controllore atmega 328p-pu con cristallo da 16MHz (lo stesso di arduino, più che sufficiente.. pure troppo! ) stampando un circuito apposito.
Adesso aspetto che un mio amico finisca il programma di interfaccia per il computer ( abbiamo formato una specie di "team" di sviluppo ) così mettiamo in vendita il kit centralina + sensore
Ultima modifica di DNA54 il 09 giu 2013, 10:35, modificato 1 volta in totale.

Rispondi