niedziela, 21 września 2014

Teoria sterowania silnikiem - część 2

W poprzednim odcinku opisywałem sposób wyliczania potrzebnej dawki paliwa oraz różnych wzbogaceń. Dzisiaj chciałbym opisać trochę sterowanie zapłonem oraz wyznaczanie momentu rozpoczęcia wtrysku paliwa.


Kąt wyprzedzenia zapłonu
Czyli kiedy ma pojawić się iskra. Zazwyczaj sprowadza się to do ustawienia kąta zapłony zależnego od aktualnej prędkości obrotowej oraz obciążenia (MAP lub Load omawiane w poprzednim odcinku) oraz dodania kilku korekt  Może to wyglądać następująco:

$$FinalSparkAngle = SparkAngle(LOAD,RPM) + Correction_{ECT} + \\
Correction_{MAT} + Correction_{KNOCK}$$

Gdzie:
  • FinalSparkAngle - kąt wyprzedzenia zapłonu
  • SparkAngle - bazowy kąt wyprzedzenia zapłonu zapisany w mapach dla aktualnego obciążenia oraz prędkości obrotowej
  • CorrectionECT - opóźnienie lub przyspieszenie kąta zapłonu w zależności od aktualnej temperatury cieczy chłodzącej
  • CorrectionMAT - opóźnienie lub przyspieszenie kąta zapłonu w zależności od aktualnej temperatury w dolocie (IAT) lub kolektorze (MAT)
  • CorrectionKNOCK - opóźnienie zapłonu związane z wystąpieniem spalania stukowego
Zarządzanie spalaniem stukowym
W momencie wykrycia spalania stukowego ECU opóźnia zapłon aż spalanie stukowe zostanie zredukowane. Oczywiście nie można opóźniać zapłonu w nieskończoność, jedynie do pewnego stopnia. W sytuacji gdy spalanie stukowe zniknie, CorrectionKNOCK jest redukowane stopniowo do zera.

Natomiast ECU od Evo oraz wszystko wskazuje na to, że także i Galanta dodatkowo używa dwóch map zapłonu - jednej dla benzyny niskooktanowej i jednej dla wysokooktanowej. Zazwyczaj działanie rozpoczyna na mapie wysokooktanowej i w momencie wystąpienia stuków zaczyna przemieszczać się ku mapie niskooktanowej (bezpiecznej).

$$FinalSparkAngle = (1-K)*SparkAngle_{LowOctane}(LOAD,RPM) + \\ K*SparkAngle_{HighOctane}(LOAD,RPM)$$

Gdzie:
  • K - współczynnik od 0 do 1 (np. 0.23) wyliczany na podstawie liczby stuków w zdefiniowanym przedziale czasu
Mamy kąt zapłonu, ale czy to wszystko?
Sam kąt wyprzedzenia zapłonu to za mało aby sterować zapłonem. Potrzebne są jeszcze następujące informacje:
  • numer cylindra w którym ma pojawić się iskra
  • aktualna prędkość obrotowa
  • sygnał informujący o znanej pozycji wału i wałka (czujnik położenia wału i wałka)
  • czas ładowania cewki
  • wymagany czas trwania iskry
Numer aktualnego cylindra, RPM oraz sygnał informujący o zadanej pozycji sprowadzają się do czujników położenia wału i wałka (lub tylko wału jeśli nie ma innych). Potrzebna jest charakterystyka sygnału z tych czujników. W przypadku 4G63 używane są dwa czujniki halla która zmieniają stan przy zdefinowanych kątach.


Na podstawie Crank Angle Sensor możemy wyliczyć RPM:

$$RPM = \frac{Freq_{CRANK}(HIGH)}{2} * 60$$

Gdzie:
  • FreqCrankHigh - częstotliwość pojawiania się wysokich impulsów (w Hz)
  • 2 - ponieważ występują dwa sygnały per obrót
  • 60 - służy do skonwertowania na minuty
Używając kombinacji czujników CRANK i CAM możemy także ustalić numer aktualnego cylindra wg następującego algorytmu:

NEXT_CYLINDER_MAP[]  = {0, Cyl_3, Cyl_1, Cyl_4, Cyl_2};

if (CRANK(Low->High))
{
  currentCylinder = NEXT_CYLINDER_MAP[currentCylinder];
  if (CAM(High))
  {
    if (currentCylinder != Cyl_1 && g_currentCylinderNo != Cyl_4)
    {
      SYNC_ERROR();
    }
  }
  else
  {
    if (currentCylinder != Cyl_3 && currentCylinder != Cyl_2)
    {
      SYNC_ERROR();
    }
  }
}
else if (CRANK(High->Low))
{
  if (CAM(High)) currentCylinder = Cyl_1;
}
else if (CRANK(High))
{
  if (CAM(High->Low)) currentCylinder = Cyl_4;
}

Czas ładowania cewki oraz wymaganą długość impulsu najłatwiej jest zmierzyć za pomocą oscyloskopu. Wystarczy podłączyć się na jednym kanale do CRANK sensor a na drugim do sygnału sterującego zapłonem po stronie ECU. Dodatkowo potrzebujemy program do logowania, np. EvoScan. Odpalamy silnik, nagrzewamy do temperatury roboczej, wyłączamy zbędne odbiorniki prądu a następnie w EvoScan sprawdzamy jaki jest aktualny kąt wyprzedzenia zapłonu i RPM. Później pozostaje oscyloskopem zmierzyć czas pomiędzy sygnałem z CRANK (np. tym 75 BTDC) a sygnałem zapłonu.

Mając te dane oraz aktualną prędkość obrotowa możemy policzyć po jakim czasie od 75 BTDC powinien pojawić się sygnał zapłonu - dla małych kątów wypadnie to w środku zmierzonego sygnału prostokątnego podanego przez ECU. Czas "na lewo" od tego punktu, to czas ładowania cewki a czas "na prawo" od tego punktu to wymagana długość impulsu. Jak łatwo zauważyć z jednostek kątowych (stopni) musieliśmy przejść na czas (sekundy).


Warto tutaj dodać, że w przypadku 7500RPM, kącie 30 stopni oraz czasie ładowania równym 2ms nasz punkt rozpoczęcia zapłonu wypada przed 75 BTDC dlatego lepiej jest używać 75 BTDC poprzedniego cylindra do planowania zdarzenia zapłonu podczas programowania mikrokontrolera.

To byłby właściwie wszystko jeśli chodzi o zapłon, wróćmy do paliwa.

Kiedy rozpocząć wtrysk paliwa?
Ciężko jest znaleźć coś na ten temat - zazwyczaj portale milczą. Oczywiście warto wlewać paliwo do otwartego cylindra ale nie zawsze seryjne ECU tak robi. W przypadki stosowania świnek (piggy-back) często paliwo jest podawane do wszystkich cylindrów na raz czyli także do zamkniętych i jakoś to działa. Wg mnie najłatwiej jest wzorować się na tym co robi seryjne ECU a w przypadku Galanta wtrysk paliwa rozpoczyna się 3 stopnie BTDC. Dla przypomnienia, zawory ssące otwierają się przy 11 BTDC i zamykają się przy 53 ABDC.


Czy kąt ten jest stały? Przyznam się, że nie mierzyłem jak to wygląda dla wysokich obrotów. Jednak gdy wtryskuje paliwo przy 3 BTDC nic złego nie dzieje się z AFR więc wygląda na to, że ten kąt jest w porządku dla wysokich obrotów. Dla bardziej precyzyjnego dawkowania paliwa, kąt ten można  wyliczać m.in na podstawie odległości wtryskiwacza od cylindra - więcej tutaj.

Tutaj muszę przyznać, że zachowanie seryjnego ECU mnie zaskoczyło. Na podstawie powyższego diagramu wyszło mi, że gdy cylinder nr 1 ma zapłon, to cylinder nr 4 powinien mieć podane paliwo.

   75BTDC   5BTDC   75BTDC   5BTDC   75BTDC   5BTDC   75BTDC   5BTDC
      |-------|        |-------|        |-------|        |-------|
      |       |        |       |        |       |        |       |
------|       |--------|       |--------|       |--------|       |----
               |                |                |                |
            No.1 TDC         No.3 TDC         No.4 TDC         No.2 TDC
               |                |                |                |
      SPARK1   |       SPARK3   |       SPARK4   |       SPARK2   |

           FUEL4|           FUEL2|           FUEL1|           FUEL3|

Gdy tak zrobiłem, silnik zaczął szarpać i przestał wkręcać się na obroty. Podpięcie oscyloskopu pokazało, że byłem w błędzie i gdy zapłon następuje na cylindrze nr 1 to paliwo podawane jest do cylindra nr 2.

   75BTDC   5BTDC   75BTDC   5BTDC   75BTDC   5BTDC   75BTDC   5BTDC
      |-------|        |-------|        |-------|        |-------|
      |       |        |       |        |       |        |       |
------|       |--------|       |--------|       |--------|       |----
               |                |                |                |
            No.1 TDC         No.3 TDC         No.4 TDC         No.2 TDC
               |                |                |                |
      SPARK1   |       SPARK3   |       SPARK4   |       SPARK2   |
          FUEL2|           FUEL1|           FUEL3|           FUEL4|


Możliwe, że coś źle policzyłem, nie wiem. Na razie zrobiłem tak jak robi to seryjnego ECU i wszystko działa.

Czy to wszystko jest naprawdę potrzebne?
Nie... tak... to zależy od aplikacji. Zasadnicze pytanie jest jak dużo funkcji zostaje pod kontrolą seryjnego ECU oraz czy zmieniamy wtryskiwacze.

Jeśli zmieniamy wtryskiwacze, to wtedy potrzebujemy wszystko związane z paliwem. Jeśli nie, to potrzebujemy zarządzać paliwem jedynie w momencie pojawienia się doładowania. Wariantów jest kilka różnych, nie będę ich wszystkich opisywał, skupię się na tym jak to jest obecnie zrobione w Galancie Turbo.

Galant ma seryjny MAF sensor, seryjne wtryskiwacze oraz wszystkie inne seryjne czujniki. Dlatego seryjne ECU jest w stanie sterować poprawnie silnikiem do 0.1 bara (do tylu są mapy w ECU z tego co udało mi się ustalić). Załatwia nam to m.in:
  • odpalanie w zimę
  • odpalanie na częściowo wyładowanym akumulatorze
  • różne długości wtrysku w zależności od temperatury cieczy chłodzącej (zakładamy, że nikt nie będzie katował samochodu na zimnym silniku)
  • wzbogacenia związane z przyspieszaniem i zwalnianiem (dopóki nie wejdziemy na doładowanie)
  • zarządzanie zapłonem oraz reagowanie na spalanie stukowe
Przejąc kontrolę musimy w przypadku pojawienia się doładowania co sprowadza się do wydłużenia czasu otwarcia wtryskiwaczy oraz opóźnienia zapłonu. Do pierwszego musimy wyliczyć czas wtrysku, czyli potrzebujemy większość matmy z poprzedniego odcinka - wzbogacenia można sobie odpuścić.

Do zapłonu tak naprawdę potrzebujemy informację o ile chcemy go opóźnić i na podstawie tego opóźniać sygnał idący z seryjnego ECU do modułów zapłonowym. Minus takiego rozwiązania jest taki, że nie jesteśmy w stanie przyspieszyć zapłonu jednak na razie zdaje się one wystarczać. Plus natomiast jest taki, że seryjnego ECU nadal może zarządzać spalaniem stukowym nawet na doładowaniu - dodatkowe ECU opóźnia jedynie sygnał z seryjnego ECU, więc jeśli sygnał z seryjnego ECU jest opóźniony z powodu spalania stukowego to zostanie od dodatkowo opóźniony w zależności od aktualnej wartości doładowania. Proste i działa.

Oczywiście ECU nad którym pracuję potrafi sporo więcej, zostało zaprojektowane z zapasam, ale wygląda na to, że Galant nie potrzebuje aż tak skomplikowanego sterowania przy modyfikacjach silnika jakie zastosowaliśmy. Na pewno dużo upraszcza zostawienie MAF sensora oraz seryjnych wtryskiwaczy które wydają się w zupełności wystarczać w tej aplikacji. Warto także dodać, że moje ECU nie modyfikuje sygnałów dostarczanych do seryjnego ECU, modyfikowane (lub całkowicie przejmowane) są jedynie sygnały idące do wtryskiwaczy oraz modułów zapłonowych.

Na zakończenie
Czy będzie cześć 3 teorii? Wydaje mi się, że opisałem już to co chciałem. Jest jeszcze kilka tematów ale są one raczej związane już z konkretnymi wdrożeniami niż samą teorią. Jeśli chodzi o samo ECU, to jest one zamontowane już w samochodzie na stałe. Obecnie pracujemy nad tuningiem. Natomiast z tematów którymi warto się jeszcze zając, to wyświetlacz parametrów czy chociażby lepsze sterowanie doładowaniem (np. odcinanie doładowania powyżej pewnym obrotów).

Brak komentarzy:

Prześlij komentarz

Reklamy będą usuwane.