Page 19 of 22

Re: W126 300SE för söndagsåkning

Posted: Mon 25 May, 2015 08:44
by aroncbds
torake wrote:Bilen är inte längre till salu, förresten. Jag har redan förhört mig om förvaring till nästa vinter. :mrgreen:
Härligt! :mrgreen:
Vad ska du göra åt reläet? Ska du felsöka den eller byta ut den helt?

Re: W126 300SE för söndagsåkning

Posted: Mon 25 May, 2015 10:22
by torake
aroncbds wrote:
torake wrote:Bilen är inte längre till salu, förresten. Jag har redan förhört mig om förvaring till nästa vinter. :mrgreen:
Härligt! :mrgreen:
Vad ska du göra åt reläet? Ska du felsöka den eller byta ut den helt?


Image

Hittade några lödningar med "ring of death" och lödde om dem - inget resultat.

Ett nytt relä kostar nästan 3 papp så det blir det inget med så länge de övriga funktionerna är okej, alltså bränslepumpdrivning och varvstopp.

Däremot funtar jag på en s.k. FGS (First Gear Start)-modul, och jag tror att jag kan bygga en själv. Tanken är så här - jag plockar in varvtalssignal, pulserna från en av ABS-sensorerna, kickdownkontaktens läge och körprogramsväljaren (S,E) in i ett Arduino-kort. Därifrån styr jag sedan i programvara kickdownsolenoiden.

Så, kickdownsolenoiden aktiverar jag om något av följande är sant:
1. Kickdownkontakten är intryckt (gasen i botten) OCH varvtalet är under 5700rpm (kickdownreläts funktion)
2. S är valt OCH hastigheten är under 18km/h OCH hastigheten är ökande med en viss gradient (acceleration)
3. S är valt OCH hastigheten är < 5km/h

Vitsen är att utnyttja alla stegen i lådan, ettan kan ju vara kul att använda vid parkeringsmanövrer. Blir också mer som en 5G-tronic i karaktären.

Funderade också på en rattpaddel där man kan välja att växla ned motsvarande kickdown i förebyggande syfte, t.ex. vid en omkörning när man ligger i redoläge och väntar på att mötande skall passera, så att när man väl trycker på så ligger rätt växel redan i. Men där någonstans tyckte jag det började spåra ur.

Nästa steg är lite experimenterande. 8)

Re: W126 300SE för söndagsåkning

Posted: Thu 28 May, 2015 14:53
by torake
Nybes idag U.A.

Besiktningskillarna som var obetydligt äldre än bilen var förbluffade över att den var så fräsch, speciellt inuti. De fipplade på alla knappar och lyckades spruta spolarvätska i håret på sig själva eftersom takluckan var öppen och TROTS att jag sade till den ene att stänga luckan först. :lol:

Nu är det två år till nästa besiktning. Sidoblinkersarna har blivit förpassade till en påse i garaget.
Image

Re: W126 300SE för söndagsåkning

Posted: Thu 28 May, 2015 15:05
by aroncbds
torake wrote:Nybes idag U.A.

Besiktningskillarna som var obetydligt äldre än bilen var förbluffade över att den var så fräsch, speciellt inuti. De fipplade på alla knappar och lyckades spruta spolarvätska i håret på sig själva eftersom takluckan var öppen och TROTS att jag sade till den ene att stänga luckan först. :lol:

Nu är det två år till nästa besiktning. Sidoblinkersarna har blivit förpassade till en påse i garaget.
Image

Haha, underbart! :-) Ska du åka på någon träff med den i sommar?

Re: W126 300SE för söndagsåkning

Posted: Thu 28 May, 2015 17:37
by torake
aroncbds wrote:Haha, underbart! :-) Ska du åka på någon träff med den i sommar?


Inget planerat!
Är inte så sugen på att visa upp bilen innan dörrarna blivit omlackade och det är långt borta just nu.

Re: W126 300SE för söndagsåkning

Posted: Sun 31 May, 2015 17:56
by vazman 67
Kan relä passa från en 300 SE-88? plockar isär en nu

Re: W126 300SE för söndagsåkning

Posted: Sun 31 May, 2015 22:11
by torake
En 88 har den katalysator? Då passar inte relät. Det skall heta 0025452705, det står 6Zyl och varvstoppet i rpm (6350) på den och så står det "Kickd." för kickdown.

Men det är lite överspelat nu, jag har "uppgraderat" datakraften i bilen med ungefär 1000% :mrgreen: Den lilla svarta lådan till vänster. Image

Image

Jag kan med styrdatorn ta över inte bara kickdownfunktionen utan även bränslepumpstyrning, klimarelät och ett par funktioner till. Är bara antalet portar och transistorsteg jag orkar löda dit som styr...

Re: W126 300SE för söndagsåkning

Posted: Mon 01 Jun, 2015 07:00
by aroncbds
Läckert! :-) Vad är det för produkt? Eller har du designat sen själv från grunden? :-)

Re: W126 300SE för söndagsåkning

Posted: Mon 01 Jun, 2015 08:51
by torake
aroncbds wrote:Läckert! :-) Vad är det för produkt? Eller har du designat sen själv från grunden? :-)


Det är en Atmega328 på en arduino-uno-kompatibel bräda, med en LM2596 spänningsregulator samt fem egendesignade transistorsteg för in- och utsignaler. Två externa 12V-relän för att driva större laster.

Image

Tror den är kompatibel med din fläktregulator, eller hur?
Hade jag gjort om den hade jag använt samma LM2596, fast en Arduino Nano (-kompatibel) och ett färdigt reläkort för att spara tid och plats.

Re: W126 300SE för söndagsåkning

Posted: Mon 01 Jun, 2015 09:32
by aroncbds
torake wrote:
aroncbds wrote:Läckert! :-) Vad är det för produkt? Eller har du designat sen själv från grunden? :-)


Det är en Atmega328 på en arduino-uno-kompatibel bräda, med en LM2596 spänningsregulator samt fem egendesignade transistorsteg för in- och utsignaler. Två externa 12V-relän för att driva större laster.

Image

Tror den är kompatibel med din fläktregulator, eller hur?
Hade jag gjort om den hade jag använt samma LM2596, fast en Arduino Nano (-kompatibel) och ett färdigt reläkort för att spara tid och plats.
Haha, now we're talkin! ;-) Använder du interrupts eller kör du pollat? Vore enormt kul att se din firmware! :-)

Re: W126 300SE för söndagsåkning

Posted: Mon 01 Jun, 2015 11:13
by torake
aroncbds wrote:Haha, now we're talkin! ;-) Använder du interrupts eller kör du pollat? Vore enormt kul att se din firmware! :-)


Firmwaren håller på att ta form i mitt huvud för närvarande. Just nu har jag bara en pollande loop som räknar pulser på ingångarna och skriver ut frekvenser på seriekonsolen.

Behöver inga interrupt i den här applikationen tror jag, utan det går nog att polla. Däremot blir ju reglerloopen lite knepig eftersom den skall passa både lugn och våldsam körning och allt däremellan, med bara hastighet och varvtal som input.

Har du mätt hur snabbt atmegan snurrar i en loop där man gör ett fåtal operationer och sedan en kortare delay t.ex. delay(1)? Är det nära 1000 loopar/sekund eller är det väsentligt lägre/högre? Frågar eftersom jag får rpm-signalen till 40Hz på tomgång, och det skulle motsvara 800rpm...

Re: W126 300SE för söndagsåkning

Posted: Tue 02 Jun, 2015 05:45
by svnartis
När ska ni börja tala svenska igen i den här tråden? :shock:

Re: W126 300SE för söndagsåkning

Posted: Tue 02 Jun, 2015 07:45
by aroncbds
torake wrote:
aroncbds wrote:Haha, now we're talkin! ;-) Använder du interrupts eller kör du pollat? Vore enormt kul att se din firmware! :-)


Firmwaren håller på att ta form i mitt huvud för närvarande. Just nu har jag bara en pollande loop som räknar pulser på ingångarna och skriver ut frekvenser på seriekonsolen.

Behöver inga interrupt i den här applikationen tror jag, utan det går nog att polla. Däremot blir ju reglerloopen lite knepig eftersom den skall passa både lugn och våldsam körning och allt däremellan, med bara hastighet och varvtal som input.

Har du mätt hur snabbt atmegan snurrar i en loop där man gör ett fåtal operationer och sedan en kortare delay t.ex. delay(1)? Är det nära 1000 loopar/sekund eller är det väsentligt lägre/högre? Frågar eftersom jag får rpm-signalen till 40Hz på tomgång, och det skulle motsvara 800rpm...
En avläsning av en digital ingång kostar en klockcykel på en Uno, motsvarande en 1/16-dels us (mikrosekund). En analog avläsning tar runt 100us, beroende på upplösning (hur du ställer in prescalern). Så loopcykelperioden är en funktion av vad du gör i loopen (antalet avläsningar, dess utförande samt eventuell övrig logik). Har du alternativa flöden i programmet, så kan det vara svårt att förutse/korrigera jittret som uppstår, vilket gör att CPU'n skulle kunna missa hårda deadlines för t. ex. kickdown. 1000 loopar/sekund låter realistiskt, men frågan är alltså vad du gör i loopen. :-)

Jag skulle nog spontant satsa på en interruptbaserad lösning med typ en Mega2560 och ArdOS eller FreeRTOS (lättvikts-RTOS för Arduinofamiljen, se länkarna nedan). Dessa kärnor kan köra flera processer och fördela CPU-n mellan dessa, samt stödjer också ett flertal IPC-mekanismer så som MUTEX-ar, FIFOs samt meddelandeköer, m.m. ATMegan skulle också göra testning och felsökning betydligt enklare, då 2560:an är betydligt generösare än 328:an i hårdvaruväg med större minne, fler serieportar, m.m. Som exempel kan jag nämna att på min 328-baserade golvvärmestyrning tog felsökningen/monitoreringen via serieporten så mycket CPU-tid att jittret satte hela ventilstyrningen ur spel, så jag loggade applikationsdatan till en I2C-baserad EEPROM i stället, vars innehåll jag sedan dumpade efterhand. :-)

https://bitbucket.org/ctank/ardos-ide/wiki/Home
http://sourceforge.net/projects/avrfreertos/

Re: W126 300SE för söndagsåkning

Posted: Tue 02 Jun, 2015 09:40
by torake
Här är en programvara som räknar pulserna snarare än att mäta tiden mellan pulser. Då blir reglerloopen minst 250ms lång för att få lite upplösning på hastighet och varvtal.

Code: Select all



#define UPSHIFT_FREQ   17 // 17km/h assuming observation time is 250ms
#define DOWNSHIFT_FREQ 12 // 12km/h
#define REV_LIM_LOW    84 // 3400rpm, we must go below this before kickdown is reactivated (hysteresis)
#define REV_LIM_HIGH   95 // 3800rpm but (due to low sampling frequency?) the signal is not accurate near and above 100
#define DOWNSHIFT_PIN  8
#define KICKDOWN_PIN   9
#define SPEED_PIN      2
#define RPM_PIN        4
#define PRG_PIN        7

int freq_rpm;
int freq_spd;
int freq_rpm_next;
int freq_spd_next;


int kickdown_enabled;
int downshift_active;

int counter[3];
int prevfq[2];
int nextfq[2];
int prevstate[2];


// the setup function runs once when you press reset or power the board
void setup() {
  int i;
 
  for (i=0;i<3;i++)
   counter[i]=0;
  for (i=0;i<2;i++) {
   prevstate[i]=0;
   prevfq[i]=0;
   nextfq[i]=0;
  }
   
   
  pinMode(SPEED_PIN, INPUT);
  pinMode(RPM_PIN, INPUT);
  pinMode(PRG_PIN, INPUT);

  // initialize digital pin 13 as an output.
  pinMode(13, OUTPUT);
  pinMode(DOWNSHIFT_PIN, OUTPUT);
  pinMode(KICKDOWN_PIN, OUTPUT);
  Serial.begin(9600);
  kickdown_enabled = 0;
  digitalWrite(KICKDOWN_PIN,LOW);
  downshift_active = 0;
  digitalWrite(DOWNSHIFT_PIN,LOW);
}

int update_freq(int measure) {
  int instate7 = digitalRead(7);
  int instate4 = digitalRead(4);
  int instate2 = digitalRead(2);
  if (instate2 != prevstate[0])
    counter[0]++;
  if (instate4 != prevstate[1])
    counter[1]++;
  prevstate[0] = instate2;
  prevstate[1] = instate4;
  counter[2]++;
  if (counter[2] >= measure) {

    freq_spd=counter[0];
    freq_spd_next=freq_spd*2-prevfq[0]; // extrapolate - we use this value when time is important
    prevfq[0]=counter[0];
    counter[0]=0;

    freq_rpm=counter[1];
    freq_rpm_next=freq_rpm*2-prevfq[1];
    prevfq[1]=counter[1];
    counter[1]=0;

    counter[2]=0;
    return(1);
  }
  return(0);
}

void print_state() {
  Serial.print(freq_spd);
  Serial.print(" ");
  Serial.print(freq_spd_next);
  Serial.print("\t");
  Serial.print(freq_rpm);
  Serial.print(" ");
  Serial.print(freq_rpm_next);
  Serial.print("\t");
  if (downshift_active) {
    Serial.println("1ST");
  } else {
    Serial.println("");
  }
}

// the loop function runs over and over again forever
void loop() {
 
  if (update_freq(250)) {// 4 times per sec counting both flanks gives a frequency value corresponding to km/h
    digitalWrite(13, HIGH);   // turn the LED on (HIGH is the voltage level)
    print_state();
  } else {
    digitalWrite(13, LOW);
  }
 
  // The shift hysteresis would cause us to overshoot the desired shift point, so use the extrapolated value
  if (freq_spd_next > UPSHIFT_FREQ && downshift_active) {
    digitalWrite(DOWNSHIFT_PIN,LOW);
    downshift_active=0;
  }
  // only pull kickdown solenoid if engine actually is running
  if (freq_rpm > 0 && freq_spd <= DOWNSHIFT_FREQ && !downshift_active) {
    digitalWrite(DOWNSHIFT_PIN,HIGH);
    downshift_active=1;
  }
  // The shift hysteresis is not an issue since REV_LIM_HIGH << max rev.
  if (freq_rpm > REV_LIM_HIGH && kickdown_enabled) {
    digitalWrite(KICKDOWN_PIN,LOW);
    kickdown_enabled=0;
  }
  if (freq_rpm > 0 && freq_rpm <= REV_LIM_LOW && !kickdown_enabled) {
    digitalWrite(KICKDOWN_PIN,HIGH);
    kickdown_enabled=1;
  }
 
  delay(1);
}


Än så länge är programmet väldigt enkelt att läsa (= enkelt att felsöka, förutsäga och underhålla) men om inte detta räcker till då måste jag nog gå över till att mäta tiden mellan flankerna istället, då behöver jag interrupt och då måste jag också ändra hårdvaran...

Med en tidigare version som _inte_ predikterade frekvensen utan istället tog medelvärdet av föregående och nuvarande pulsräkning fick jag följande utseende på växlingarna:
Image
Den översta är vid lite kraftigare gaspådrag, den nedre är väldigt snällt pådrag.

Min analys är att:
- Hastigheten är bra att använda som indata, för då får man olika växlingspunkt varvtalsmässigt beroende på pådraget.
- Från det att man släpper solenoiden till dess att det växlar upp tar c:a 750ms.
- Växling 1-2 bör ske i normalfallet vid runt 2000rpm annars blir det obekvämt, den växlar ganska hårt!

Därför extrapolerar jag nu frekvensen och använder det extrapolerade värdet för att avgöra. Det plus att jag tar bort medelvärdesberäkningen gör att jag sparar två cykler, alltså 500ms vid hastigt pådrag. Så får jag provköra ikväll och se vad det blir...

Re: W126 300SE för söndagsåkning

Posted: Tue 02 Jun, 2015 10:57
by KOWALSKI 1
Karlie wrote:Lägg lite granris inunder bilen med, så säkerställer du att bilen blir fri från nyfikna gnagare i vinter.


funkar det med granris under bilen vid vinterförvaring för att hålla råttor o annan ohyra båtta från bilen?
gillar dom inte att gnaga på granbarren eller är det doften från granbarren som fungerar avskräckande?