Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Sposoby pomiaru mikrokontrolerem czasu wtrysku

Pfemek 23 Nov 2005 08:51 14889 65
NDN
  • #1
    Pfemek
    Level 24  
    Witam. Chcę rozpocząć dyskusję na temat sposobów pomiaru czasu wtrsku w układach wtryskowych benzyny w samochodach. Sam jestem na etapie doskonalenia pojektu komputerka paliwa, który zamieściłem na elektrodzie. Ogólnie są trzy rodzaje sterowania stryskiwaczami:
    a)Metoda zasilania pojedynczym impulsem:
    Wtej metodzie sterowanie odbywa się włączając klucz tranzystorowy zwierający cewkę wtryskiwacza do masy. Czas trwania wtrysku to czas trwania napięcia bliskiego 0V na wtrysiwaczu. rys spos3.jpg
    b)Metoda zasilania z ogranieczeniem prądowym:
    W tej metodzie do otwarcia iglicy wtryskiwacza potrzeba impulsu silnie prądowego a następnie podtrzymanie pracy wtryskiwacza przez zmniejszenie wartości prądu płynącego przez wtryskiwacz. Czas trwania wtrysku to w tym wypadku to czas od pojawiania się napięcia 0V do czasu pojawiania się piku napięcia wyindukowanego w cewce wtryskiwacza. rys spos7.jpg
    c)Metoda zasilania wieloimpulsowego
    Metoda ta polega na włączeniu wtryskiwacza dłuższym impulsem 0V a następnie na podtrzymaniu otwarcia iglicy sygnałem impulsowym. rys spos9.jpg
    Czas trwania wtrysku na oscylogramach to ΔTwtr.
    Prośba do wszytkich którzy mają pojęcie o to w jaki sposób mierzyć czas wtrysku za pomocą mikrokontrolera aby pomiar był najdokładniejszy, przy czym myśle że trzeba by się skupić na pomiarze w metodzie opisanej jako trzecia, jest ona chyba najczęsciej stosowana.
    Ja do pomiaru czasu wtrysku zastosowałem coś takiego (przykład bascoma, kawałek kodu):

    Config Timer1 = Timer , Prescale = 64
    ' ustawiłęm pd5 jako wejście
    ' impw liczba typu word

    impw=0
    1:
    timer1=0
    start timer1
    do
    if pind.5=0 then incr impw
    loop until timer1=15625 (czas 250ms dla xtal=4MHz)
    stop timer1
    'impw= pewna liczba proporcjonala do czasu trwania stanu niksiego na Pd5
    'dalsze obliczania
    goto 1

    Czy taki pomiar ma sens? I na ile jest prawdopodobny, mierzę tylko czas trwania stanu niskiego na Pd5 więc metoda nadaje się tylko w przypadku pierwszej metody sterowania wtryskiwaczem, mało stosowanej.

    Oscylogramy pochodzą ze strony:
    http://www.auto-online.pl/serwis/poradnik/elek_autom/ster_wtr/sp_ster.htm
  • NDN
  • #2
    GienekS
    Level 32  
    Dla rysunku spos9.jpg oraz spos3.jpg sprawa pomiaru jest chyba najłatwiejszą, ponieważ polega na pomiarze czasu stanu "0" na wtryskiwaczu. Nie wnikając w szczegóły sygnał ten mógł by być sygnałem bramkójącym dla napędzania licznika czasu. Pamiętam że taką funkcję na pewno miał u51 i miał byś to zrobione sprzętowo nie absorbując czasu procesora. Twoim zadanie było by tylko co jakiś czas odczytać ten czas i podać do dalszych obliczeń. Musisz pamiętać również o przepełnieniu tego licznika czasu.
  • NDN
  • #3
    Charly
    Level 19  
    Rys.3
    Już samo to że licznik może ci wskoczyć na liczenie, gdy jesteś na przykład w połowie impulsu ujemnego wtryskiwacza, stan niski będzie już trwał, więc zliczy tylko połowę tego co powinien. A licznik pracuje w pętli, więc nie wiadomo w jakim czasie trwania impulsu ujemnego wskoczy na niego. A stan niski będzie, więc będzie incrasował, ale mniej niż potrzeba.
    Moim zdaniem ten sposób liczenia nie jest dobry, trzeba uwarunkować aby licznik zaczął zliczać impulsy od momentu opadającego zbocza, tak by licznik liczył przez cały czas gdy jest stan niski. Tutaj tego nie ma.
  • #4
    Pfemek
    Level 24  
    Wiec jakieś sposoby może z przykładami na AVRa..?
  • #5
    Charly
    Level 19  
    Podam na AT89C2051, ale to jest to samo, trochę inne liczby tylko
    
    $regfile = "89c2051.DAT"
    $crystal = 12000000
    Dim T1ov As Word , Cnt1 As Word
    On Timer1 T1_int Nosave
    Enable Interrupts
    Enable Timer1
    Impuls Alias P3.5               'tu podłączamy impulsy wtryskiwacza
    Dim Liczba As Long
    
    Cursor Off Noblink
    Cls
    '***************Pomiar czasu trwania impulsu ujemnego na wtryskiwaczu************
    Do
       Config Timer1 = Timer , Mode = 1 , Gate = Internal
       T1ov = 0
       Counter1 = 0
                                    'gdybyśmy wskoczyli z licznikiem gdy impuls ujemny już trwa
       While Impuls = 0 : Wend      'czekamy dopuki Impuls=0 żeby złapać cały impuls ujemny
       While Impuls = 1 : Wend      'czekamy dopuki Impuls=1
       Start Timer1                 'i jak zmieni się na 0 to puszczamy Timer1
       While Impuls = 0 : Wend      'czekamy dopuki Impuls=0
       Stop Timer1                  'i jak zmieni się na 1 zatrzymujemy Timer1
       Cnt1 = Counter1
       Home
       Liczba = T1ov * 65536        'tu sobie zliczamy ilość cykli maszynowych
       Liczba = Liczba + Cnt1       'i obliczamy jaki to czas upłynął
                                    'czyli czas otwarcia wtryskiwacza
       If Liczba >= 10000 Then
       Liczba = Liczba / 1000       'dzieląc przez 1000 dostajemy czas w mS, a bez dzielenia w uS
       Lcd "Czas= " ; Liczba ; " mS" ; Spc(4)       'oczywiście te czasy wyświetlamy tylko przykładowo
                                       'w rzeczywistości w tym miejscu przechodzimy do
       Else                         'właściwych obliczeń
       Lcd "Czas= " ; Liczba ; " uS" ; Spc(4)
       End If
    Waitms 250
    Loop
    
    
    T1_int:
    Incr T1ov                       'ilość przepełnień T1
    Return

    Zrób sobie ten układ, puść na niego sygnał prostokątny z generatora i zobaczysz jak pięknie będzie pokazywał czas dolnej połówki przebiegu.
  • #6
    michalko12
    MCUs specialist
    Pfemek wrote:
    Wiec jakieś sposoby może z przykładami na AVRa..?


    Według autora linku którego podałeś najczęściej stosowaną metodą jest metoda z tego rysunku:
    Sposoby pomiaru mikrokontrolerem czasu wtrysku
    i to jest chyba prawda. Metoda pierwsza i druga jest łatwa do pomiaru, wystarczy że bedziesz bramkował timer podczas otwarcia wtryskiwacza,
    Przy metodzie impulsowej musisz skorzystać z timera i przerwania zewnętrznego reagujacego na dowolne zbocze (np. w AVR)
    1. Inicjujesz wszystkie zmienne i zezwalasz na przerwania.
    2. Po wystąpieniu pierwszego przerwania inicjujesz i odblokowujesz timer( 16 bitowy)
    3. Przy kolejnych przerwaniach sprawdzasz w przerwaniu czy jest to koniec impulsu włączajacego wtryskiwacz, jesli tak to zapamiętujesz stan licznika (cały czas w tej samej zmiennej).
    Następnie czekasz na przepełnienie timera, w przerwaniu od przepełnienia timera blokujesz timer i inicjujesz ponownie przerwanie zewnetrzne które bedzie gotowe na przyjęcie sygnału załączenia wtryskiwacza. Ostatni zapamiętany stan timera to czas otwarcia wtryskiwacza. Timer inicjalizujesz tak aby był sensowny czas przepełnienia .

    Przy wszystkich metodach jako układ wejściowy dobrze jest zastosować jakiś szybki i czuły transoptor np. PC900 lub H11L
  • #8
    Pfemek
    Level 24  
    Te piki to własnie sterowanie za pomocą sygnały wieloimpulsowego i dopuki one się pojawiają to iglica wtryskiwacza jest otwarta! Więc zaznaczony Tw jest za mały. Stosowanie wieloimpulsu ma na celu wydłużenie żywotnosci wtryskiwacza. Nie wiem czy dobrze myśle ale wychodzę z założenia że pomiar chwilowego zużycia paliwa jest to pomiar zużytego paliwa, wyrażony w litrach na sto kilometrów, w określonym czasie pracy silnika. Nic w fizyce nie dzieje się bez czasu wiec chyba dobrze myśle.
  • #9
    Charly
    Level 19  
    Te piki są tak jak napisałem, porównaj sobie tutaj poziom napięcia tych pików z tymi co ty przedstawiłeś. Jakbyś porównał przebiegi na wtryskiwaczu i na wyjściu sygnału z ECM, który w fabrycznych komputerach pokładowych jest wykorzystywany do pomiaru chwilowego zużycia paliwa to byś zobaczył że występuje tylko sam ten ujemny impuls, o takim czasie jak ten ujemny na wtrysku, bez tych pików. Zresztą pisałem to już wyżej.
  • #10
    Pfemek
    Level 24  
    Nie będę się upierał ale racją raczej leży po mojej stronie. Te piki powstają na skutek sterowania wtryskiwacza przez ECU, jest to wynik zmiany pola magnetycznego zgromadzonego w cewce wtryskiwacza na pole elektryczne. Gdyby nic się nie pojawiło po końcu trwania stanu 0 na wtryskiwaczu otrzymalibyśmy jeden pik jak widać na załączonym przezemnie wyżej oscylogramie, pik czyli stan nieustalony pojawił by się i znikł a w Twoim przypadku dalej się pojawia więc musi być czymś wymuszony a wymuszony jest kolejnymi impulsami sterującymi z ECU.
  • #11
    Charly
    Level 19  
    Widzę że chyba nigdy nie dokonywałeś pomiarów oscyloskopem skoro się upierasz przy swoim. Przecież tłumaczę Ci, że jest wyjście z ECM specjalnie do tego celu przeznaczone (mam też Opla) i stamtąd wychodzi sygnał jak pisałem wyżej. Praw Fizyki nie zmienisz przez to że się będziesz upierał przy swoim, nie mierząc tego praktycznie. Co innego rysuneczki, a co innego w praktyce. Będę Ci musiał posłać fotki oscylogramów zdjętych rzeczywistym oscyloskopem.
  • #12
    michalko12
    MCUs specialist
    Charly wrote:
    Widzę że chyba nigdy nie dokonywałeś pomiarów oscyloskopem skoro się upierasz przy swoim. Przecież tłumaczę Ci, że jest wyjście z ECM specjalnie do tego celu przeznaczone (mam też Opla) i stamtąd wychodzi sygnał jak pisałem wyżej. Praw Fizyki nie zmienisz przez to że się będziesz upierał przy swoim, nie mierząc tego praktycznie. Co innego rysuneczki, a co innego w praktyce. Będę Ci musiał posłać fotki oscylogramów zdjętych rzeczywistym oscyloskopem.


    Na tym specjalnym wyjsciu jest sumaryczny czas podstawowego sygnału i sygnałów podtrzymujacych działanie wtryskiwacza, w sumie na tym sygnale mogło by się pokazywać cokolwiek. Jesli występują jakieś oscylacje po odłączeniu zasilania od indukcyjności to jest to przebieg gasnący nie taki jak jest na twoim oscylogramie.
  • #13
    Pfemek
    Level 24  
    Napisałem, nie będę się upierał. :) Niech inni się wypowiedzą. A zdjęcia możesz wysłać. Tylko nie zapomnij żeby obciążyć silnik aby czas wtrysku wyraźnie się zmienił, wtedy założę się że zobaczysz że piki też polecą w prawo. Jeżeli nie polecą to będę w błedzie... ps. widze że kolega nerwowy jakiś... :)
  • #14
    Charly
    Level 19  
    Chłopie, że już tak powiem, wiadomo że polecą w prawo bo się wydłuży czas wtrysku, piki pojawią się zawsze po wyłączeniu wtrysku. Na tym polega samoindukcja, pojawia się po wyłączeniu cewki.
  • #15
    GienekS
    Level 32  
    Pfemek wrote:
    Napisałem, nie będę się upierał. :) Niech inni się wypowiedzą. A zdjęcia możesz wysłać. Tylko nie zapomnij żeby obciążyć silnik aby czas wtrysku wyraźnie się zmienił, wtedy założę się że zobaczysz że piki też polecą w prawo. Jeżeli nie polecą to będę w błedzie... ps. widze że kolega nerwowy jakiś... :)
    Czy te nazwijmy to "oscylacje" po głównym czasie mają stałą częstotliwość czy się zmieniają ? Czy jest ich zawsze tyle samo czy nie ? Wydaje się mi że oscylacje powstające po wyłączeniu przepływu prądu przez cewkę mają charakter gasnący, a te są jednakowe.
  • #16
    Charly
    Level 19  
    GienekS wrote:
    Wydaje się mi że oscylacje powstające po wyłączeniu przepływu prądu przez cewkę mają charakter gasnący, a te są jednakowe.

    Zauważ że to jest rysunek po pierwsze, dwa to to, że wtryskiwacz jest podłączony do układu i dlatego następuje wygaszenie oscylacji, można powiedzieć "natychmiastowe" (przecież czas ujemnego impulsu wynosi w tym konkretnym przypadku, silnika Opla, 0,8 - 1,6 mS), bo nie ma czasu na to żeby one sobie samoistnie wygasały w nieskończoność.
    Sygnał nam potrzebny i tak bierzemy z ECM, tak że to jest nieistotne, a nawet możemy go wziąć bezpośrednio z wtrysu, tylko przez układ odpowiednio dopasowujący i w niczym nam one nie będą przeszkadzać.
  • #17
    Pfemek
    Level 24  
    To Teraz sobie weź zamiast wtryskiwacza załóż rezystor powiedzmy 16Ω dużej mocy i sprawdź przebieg na rezystorze. Jeżeli wtedy się pojawią piki to znacz że wychodzą z ECU bo w rezystorze nic się nie wyindukuje. Sprawdź sobie przebieg prądu na wtryskiwaczu, zobaczysz ze na początku czasu wtrysku bedzie duża wartość prądu a potem będzie mniejsza w czasie trwania pików i kształt sygnału bedzie podobny jak do wyprostowanego sygnału sinusoidy przy połączonym w szereg z obciązeniem dławikiem. Cewka wtryskiwacza powoduje przeciągniecie prądu do pojawienia się następnego piku. Jeżeli na rezystorze nie pojawią się piki to wtedy nie ma sterowania wieloimpulsowego...
  • #18
    Charly
    Level 19  
    Ale przejdźmy do meritum sprawy, otóż kod który Ty przedstawiłeś nie jest w stanie zmierzyć czas trwania otwarcia wtrysku (całego impulsu), z tym się chyba zgodzisz ?
  • #19
    Pfemek
    Level 24  
    Tak, jeśli trafię w połowę impulsu to nie zmierzę całego czasu, zgadzam się. Tylko że myśle że w czasie 250ms otrzymam pomiar co najmniej dwóch impulsów a ten drugi mogę (choć też nie muszę) już zmierzyć cały. Otrzymam nawet pomiar więcej impulsów niz dwóch, dla prędkości obrotowej silnika 3000obr/min mam otwarcie wtryskiwacza z częstotliwością 25Hz (3000obr/min=50obr/s, 1obrót wału korbowego to dwa zapłony i dwa wtryski, czyli jeden wtryskiwacz pracuje z częstotliwością 25Hz, 100Hz/4=25Hz=40ms) czyli w ciągu 250ms trafię na 6 wtrysków pęłnych i 1/4 jednego wtrysku (o ile nie pomyliłem się w obliczeniach). Otrzymam w ten sposób czas otwarcia wtryskiwacza w ciągu 250ms, załóżmy że 6ms z tego czasu to jest otwarcie wtryskiwacza więc to 6ms razy stała wtrysku razy ilość wtryskiwaczy daje nam ilość wtryśnietego do kolektora dolotowego paliwa w litrach w czasie 250ms. Więc idąc dalej dokładając do tego przebytą w tym samym czasie drogę mogę otrzymać wynik w litrach na 100km. Jest to prawda?
  • #20
    Charly
    Level 19  
    No dobrze, 3000obr/min to jest 100Hz i nie musisz już tego dzielić przez 4 żeby wyszła częstotliwość pracy 25Hz jednego wtrysku, bo tak to znowu później mnożysz przez 4 wtryskiwacze. Wtedy czy jednopunkt, czy wielo będzie to samo.
  • #21
    Pfemek
    Level 24  
    Tak nie muszę mnożyć i nie mnożę i we wzorze już to uwzględniłem. Pracuję teraz nad procedurą kalibracji do komputerka, mam ją juz napsaną i będe testował na fordzie fieście na jednopuncie. W nowym programie być może użyję timera do pomiaru czasu wtrysku ale jeszcze nie wiem.
  • #22
    maniio
    Level 14  
    takze stoje przed tym problemem wiec sie dopisze, ja zastanawialem sie zeby zrobic to tak:

    1) przewod podlaczam na przerwanie zewnetrzne i teraz jak przyjdzie zbocze narastajace to lece do przerwania wylaczam te przerwanie i startuje timer, nastepnie robie nieskonczona petle
    do
    loop until (az pojawi sie zbocze opadajace)
    zatrzymuje timer i dziele liczbe z timera przez 16M (taki mam kwarc) i wychodzi mi czas otwarcia wtryskiwacza...

    czy taki pomysl uwazacuie za dobry?

    ja widze tylko jeden problem komputerek pokladowy ktory robi bedzie musial mierzyc tez predkosc, a chce to zrobic w nastepujacy sposob... startuje timerek ktory bedzie mi odmierzal czas, a drugi timerek bedzie mi liczyl impulsy z czujnika predkosci po 250ms zatrzymam timery zczytam ile jest imp pomnoze przez 4, nastepnie podziele przez stala predkosci(liczba impulsow na metr) i nastepnie pomnoze przez 3,6 i juz mam ile km/h jest

    pytanie:

    - skad wziasc 3timer ktory bede wykorzystywal przy pomiarze czasu otwarcia wtryskiwacza(2timery wykorzystuje przy pomiarze predkosci)
    - program pomiaru predkosci bedzie przerywany za kazdym razem kiedy bedzie zbocze narastajace na wtryskiwaczu i dopiero po pomiarze czasu wtrysku bedzie kontynulowany ile razy wiec w 250ms bedzie przerywany program? i jakiego bledu pomiaru moge sie w tym przypadku spodziewac?
  • #23
    diag
    Level 29  
    By ulżyć procesorowi zastosuj Capture zwyspecjalizowanego bloku, naogół przy PWM.
  • #24
    maniio
    Level 14  
    moglbys cos wiecej o tym napisac? powiedzmy ze jestem bardzo poczatkujacy :)
  • #25
    MAREK74
    Level 20  
    ja kożystam z 2 timerów i styka
    jeden mierzy wtrysk ,a drugi droge po co jeszcze mierzyc jakieś 250ms ???
  • #26
    pepin0
    Level 11  
    Witam. Odkopuje ten temat, poniewaz stanalem przed identycznym problemem. Czy ktos moze napisac, ktory z wymienionych sposob jest czesciej stosowany? Chcialbym napisac program do obliczenia spalania chwilowego ale nie wiem dla jakiego przypadku go rozpatrywac...
  • #27
    MAREK74
    Level 20  
    napisz tak jak ci jest prościej ,po co sobie utrudniać życie
  • #28
    pepin0
    Level 11  
    oczywiscie ze prosciej bedzie napisac dla zliczania czasu kiedy wstryskiwacz sterowany bedzie sygnalem masowym tylko
  • #29
    MAREK74
    Level 20  
    po pierwsze to co ma do łatwosci pisania sygnał masowy ?
    a po drugie to we wszystkich układach wtryskowych wtryskiwacz jest sterowany masą (oprócz diesla ale tu tego akurat nie rozpatrujemy)
  • #30
    pepin0
    Level 11  
    napisalem tylko masowym a to roznica. W innym wypadku jest podawane napiecie z pewna czestotliwoscia i wtedy napisanie programu ktory bedzie mierzyl czas wtrysku jest troche trudniejsze