ECU- styrning till en VW pumpdysediesel.
- Klas-Kenny
- Inlägg: 11292
- Blev medlem: 17 maj 2010, 19:06:14
- Ort: Växjö/Alvesta
Re: ECU- styrning till en VW pumpdysediesel.
Min nolla är blå för att jag slår på syntax highlight i forumet, dropdownmenyn "Syntaxmarkera kod" och väljer C.
Re: ECU- styrning till en VW pumpdysediesel.
Jag tror problemet ligger någonstans mellan dom två looparna. interruptloopen missar aldrig en puls (tand). Den räknar alltid upp en tand resp nollar. Den flaggar alltid av som oläst till main-loopen men mainloopen tappar kontakten lite sporadiskt?
- Klas-Kenny
- Inlägg: 11292
- Blev medlem: 17 maj 2010, 19:06:14
- Ort: Växjö/Alvesta
Re: ECU- styrning till en VW pumpdysediesel.
Provkörde koden lite.
Fick fram följande:
Vilket printar ett mycket stabilt värde på tand 1 med tandluckor från ~200us upp till väldigt långt.
Fick fram följande:
Kod: Markera allt
const unsigned int hogstavarv = 200; // div konstanta värden
const unsigned int lagstavarv = 1000;
int inpin = 2;
int utpin = 10;
volatile unsigned long VEVTAND_langd;
volatile unsigned long VEVTAND_start;
unsigned long delvalue = 0;
volatile byte tand = 0;
unsigned long prev_langd;
float mduration;
volatile int caseRead;
int gas;
float bduration;
int battvolt;
int sprstartkorr;
float error;
float starttid;
void setup()
{
pinMode(inpin, INPUT); // satt inpin som ingång
attachInterrupt(digitalPinToInterrupt(inpin), VEV_pulse, RISING); // här blir inpin interruptstyrd
pinMode(utpin, OUTPUT); // satt utpin som utgång
Serial.begin(250000); // initsierar serialprintfunktionen på 250000 b/sek
}
void loop()
{
if(caseRead == 1) {
caseRead = 0;
switch (tand) // här startar switch och case, tandräknaren stegar fram ett steg (case)
{
case 1: // Case 1:
delvalue = VEVTAND_langd; // tandluckan läggs in som första delvärde
// gas = analogRead(A0)>>2; // gaspot läses av här, skiftas två gånger (0-255)
// bduration = map(gas, 0, 255, lagstavarv, hogstavarv); // motorns börduration bestäms här (1000-100 uS)
Serial.println(delvalue);
break;
case 2:
delvalue = VEVTAND_langd + delvalue;
//battvolt = analogRead(A7);
//sprstartkorr = map(battvolt, 150, 700, 200, 800);
//sprstartkorr = constrain(sprstartkorr,150,400);
//Serial.println(delvalue);
break;
case 3:
delvalue = VEVTAND_langd + delvalue;
break;
case 4:
delvalue = VEVTAND_langd + delvalue;
break;
case 5:
delvalue = VEVTAND_langd + delvalue;
break;
case 6:
delvalue = VEVTAND_langd + delvalue;
break;
case 7:
delvalue = VEVTAND_langd + delvalue;
//Serial.println(delvalue);
break;
case 8:
mduration = VEVTAND_langd + delvalue;
mduration = mduration/12;
// Serial.println(mduration);
break;
case 16:
error = (mduration / bduration)-1;
if (error <=0.) // om error under noll
{
error = 0.; // förblir error 0 för att ej få minusvärden
}
if(error >=6.)
{
error = 6.;
}
starttid = map(mduration, 2000, 200, 21., 17.);
//starttid =constrain(starttid, 17,21);
//Serial.println(mduration);
break;
}
}
//Serial.print(mduration);
//Serial.print(" ");
//Serial.println(starttid);
}
void VEV_pulse() // Den interruptstyrda delaen börjar här
{
long thisLength = micros();
caseRead = 1;
prev_langd = VEVTAND_langd; // nuvarande vevtands längd läggs in som föregående vevtandslängd (döper om)
VEVTAND_langd = thisLength-VEVTAND_start; // Längden på nuvarande lucka hamnar i variabeln VEVTAND_langd
VEVTAND_start = thisLength; // Börja mätning av lucka
tand++; // tandräknaren räknar upp en tand
// caseRead = 0; // en "flagga" sätts till 0 = oläst case
//Serial.println(tand);
if(VEVTAND_langd > prev_langd +150) // OM nyaste vevtands längd är längre än föregåendes + 150
{ // då är luckan hittad
digitalWrite(utpin, HIGH); // Då går utpin hög
tand = 1; // och tandräknaren resetas till 1 (början på tandräkningen)
}
if(VEVTAND_langd < prev_langd -150) // OM nyaste vevtands längd är kortare än föregående -150
{ // då är luckan slut
digitalWrite(utpin, LOW); // och utpin blir låg igen.
}
}
Re: ECU- styrning till en VW pumpdysediesel.
jadå, tand ett är inga problem, den kan bara bli ett tal då det är första läsningen, men andra tanden blir mer känslig för hur många gånger delvalue blir plussat... I mitt fall räknar den en gång (rätt) för det mesta men helt random kan den räkna 2 gånger sen en gång flera varv och så två gånger igen osv. Så prova gärna vidare...
edit: det ser ut som koden är lite omgjord? ser jag nu. Jag hoppas detta är medicinen! Nu har jag tyvärr ingen simulator jämte mig men jag tar en test i morgon. Men som sagt prova gärna case 2 med Serialen.
edit: det ser ut som koden är lite omgjord? ser jag nu. Jag hoppas detta är medicinen! Nu har jag tyvärr ingen simulator jämte mig men jag tar en test i morgon. Men som sagt prova gärna case 2 med Serialen.
- Klas-Kenny
- Inlägg: 11292
- Blev medlem: 17 maj 2010, 19:06:14
- Ort: Växjö/Alvesta
Re: ECU- styrning till en VW pumpdysediesel.
Samma kod men där jag skriver ut delvalue i case 1,2,3,4, ger följande utskrift:
Det får väl ses som ganska stabilt?
Edit: Kör inte med din simulator för att generera signal, utan tar från en funktionsgenerator... Så vet inte om siffrorna blir något du inte känner igen pga det. Vågformen jag testar med ser ut så här (lite skräpig i mätningen, den är fyrkantig egentligen):
Gul är signal till Arduinon, och blå är utsignal ifrån densamma.
Kod: Markera allt
4848
2284
3136
3992
4844
2284
3136
3992
4844
2284
3136
3992
4844
2284
3136
3992
4848
2284
3136
3992
4848
2284
3136
3996
4848
2280
3132
3992
4844
2280
3132
3992
4844
2284
3136
3992
4844
2284
3136
3992
4844
2284
3136
3992
4848
2284
3136
3992
4848
2284
3136
3996
4848
2284
3136
3996
4848
2280
3136
3992
4844
2280
3132
3992
4844
2284
3136
3992
4844
2284
3136
3992
4844
2284
3136
3992
4848
2284
3136
3992
4848
2284
3136
3996
4848
2280
3132
3992
4844
2280
3132
3992
4844
2280
3132
3992
4844
2284
3136
3992
4844
2284
3136
3992
4844
2284
3136
3992
4848
2284
3136
3992
4848
2284
3136
3996
4848
Det får väl ses som ganska stabilt?
Edit: Kör inte med din simulator för att generera signal, utan tar från en funktionsgenerator... Så vet inte om siffrorna blir något du inte känner igen pga det. Vågformen jag testar med ser ut så här (lite skräpig i mätningen, den är fyrkantig egentligen):
Gul är signal till Arduinon, och blå är utsignal ifrån densamma.
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Re: ECU- styrning till en VW pumpdysediesel.
Klas_Kenny: ja för tusan, fick tänka lite men du har en frekvensgenerator med en liten tandlucka? Och jag antar du lagt Serial.printen utanför case men i mainloop. Men det ser verkligen rätt ut! Tack!!
- Klas-Kenny
- Inlägg: 11292
- Blev medlem: 17 maj 2010, 19:06:14
- Ort: Växjö/Alvesta
Re: ECU- styrning till en VW pumpdysediesel.
Har arbiträr funktionsgenerator, så satte samman en enkel (valfri) vågform. Orkade dock inte lägga in riktigt alla tänderna. Men bör ju vara tillräckligt för att se att mätningen fungerar stabilt.
Re: ECU- styrning till en VW pumpdysediesel.
Klas-Kenny: Nu är det testat och det fungerar alldeles utmärkt! Så tack än en gång, denna lösning hade jag nog inte kommit på i första hand... Nu så kan jag gå vidare i min interruptprogrammering!
Re: ECU- styrning till en VW pumpdysediesel.
Jag har nu labbat med traktorn och den gamla vanliga ECU- filen och fått till insprutningstillfällena ganska bra nu. Vid startvarv upp till tomgångvarv ca 750 RPM börjar insprutningen på tand 19,5 vilket ger ca 15 grader BTDC (hmm konstigt, jag fick det till 9 grader förut men motorn går betydligt bättre med lite högre förtändning) Sen backar insprutningsbörjan allteftersom varvtalet ökar till 20 grader BTDC vid 4000 RPM men här tror jag ytterligare förtändning skulle göra gott. Mitt nuvarande program måste modifieras lite om det skall gå att backa tändläget ytterligare då jag har en variabel som justerar strömsättningen av spridarna med hänsyn till drivspänningen och den spökar lite vid tidiga tändlägen... Men nu går traktorn riktigt bra, jag har nu ställt maxvarvet till ca 3800 Rpm och detta ger en fart av ca 40 km/h. Traktorn går i princip lika fort uppför som nerför (den har samma maxvarv obelastad som belastad men går med lite övervarv nerför) och startar bra varm som kall. Jag har ett klingande ljud i förmodligen det svetsade dubbelmassahjulet? Det har inte ökat något på den timmen motorn har gott hittills. Just nu skall traktorn få Ljus och blinkers och även elfläkten skall kopplas in. Jag beställde en ny huv som jag väntar på och även två nya framlampor. Jag skaffade en 1,3 tums OLED-display med seriellt snitt som jag tänker operera in i Biltemas oljetrycksmätare, ja oljetrycksinredning får flytta ut och OLED:en flyttar in. Om jag lyckas med detta så behöver jag inte göra hål för någon display eller så utan kan använda original 52 mm hål i panelen, jag vill göra så lite åverkan som möjligt i traktorn.
Förra gången jag grejade med en seriell display var det ett helsike innan jag fick till det, jag hade för mig jag fick hämta en H-fil någonstan? Hur har ni andra löst detta? Jag har för mig att jag hittade en fil som man lätt kunde mjuvarustyra runt SDA-SCL från Ax +Ax till vilka lediga pinnar som helst. Känns detta igen?
En liten snutt från förra veckan vid provkörning...
Förra gången jag grejade med en seriell display var det ett helsike innan jag fick till det, jag hade för mig jag fick hämta en H-fil någonstan? Hur har ni andra löst detta? Jag har för mig att jag hittade en fil som man lätt kunde mjuvarustyra runt SDA-SCL från Ax +Ax till vilka lediga pinnar som helst. Känns detta igen?
En liten snutt från förra veckan vid provkörning...
Re: ECU- styrning till en VW pumpdysediesel.
Den nya huven kom idag som byggsats, fick ihop den efter en del meck. Den passar sådär, men lite färg på så blir det nog bra...
Nu har den bakljus och blinkers men framlamporna lyser med sin frånvaro, dom bör väl dyka upp snart nu?Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
- Magnus_K
- EF Sponsor
- Inlägg: 5854
- Blev medlem: 4 januari 2010, 17:53:25
- Ort: Skogen mellan Uppsala-Gävle
Re: ECU- styrning till en VW pumpdysediesel.
Vad bra det blir Janson1! Vilken resa. Och vilken traktor!
Verklig inspiration!
Re: ECU- styrning till en VW pumpdysediesel.
Tackar! den längsta resan har varit motorstyrningen!! Alla kategorier... Att få till traktorn är väl mest "a walk in the park" Nej, inte riktigt men det mesta där beror bara på tid, fri-tid, det blir färdigt bara man håller på.
Re: ECU- styrning till en VW pumpdysediesel.
Tackar baron3d!
Mrfrenzy: Hur går det med den andra arduinon och motorsim? Har du hunnit få nåt liv i prylarna?
Mrfrenzy: Hur går det med den andra arduinon och motorsim? Har du hunnit få nåt liv i prylarna?