Elektroda.pl
Elektroda.pl
X

Search our partners

Find the latest content on electronic components. Datasheets.com
Elektroda.pl
Texa PolandTexa Poland
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

Regulator obrotów silnika spalinowego z wykorzystaniem Arduino

26 Jan 2019 05:59 1236 19
  • Level 13  
    Próbuje wykorzystać ten program:
    Code: c
    Log in, to see the code

    Z tego tematu: https://www.elektroda.pl/rtvforum/topic3348694-30.html
    Do sterowania obrotami silnika 1.7 Isuzu, silnik ten napędza sprężarkę powietrza. Na razie robię próby na stole, do pomiarów obrotów użyłem czujnika halla wałka rozrządu z VW polo 1.4 MPI i szlifierki z regulacją obrotów w zakresie 1000-3000. Obroty silnika jakie potrzebuje utrzymywać na wale silnika to około 2400obr. Obecnie serwo MG-995 reaguje od 1500obr. w górę, stopniowo dodając? "gazu" aż dojdzie w skrajne położenie i na tym koniec. W programie zmieniam średnie wartości z czujnika i nic to nie daje. Czujnik gdy nie wykrywa punktu magnetycznego daje napięcie 4.63v, gdy wykrywa punkt napięcie spada do 0.09v. Brak mi pomysłu w czym jest problem.
  • Texa PolandTexa Poland
  • Level 43  
    Masz hallotron on off ,a nie liniowy.

    Dodano po 1 [godziny] 25 [minuty]:

    PO drugie jaki odczyt ma serwo?
    PO trzecie jak mierzysz obroty?
  • Texa PolandTexa Poland
  • Level 33  
    Strumien swiadomosci swia wrote:
    Masz hallotron on off ,a nie liniowy.

    Dodano po 1 [godziny] 25 [minuty]:

    PO drugie jaki odczyt ma serwo?
    PO trzecie jak mierzysz obroty?

    Przed pierwszym postem lepiej wypić kawę.

    Ustaw sobie punkt docelowy 2400 zamiast 3700, jak masz szlifierkę max 3000 to wygląda, że działa prawidłowo, nie osiąga 3700 wiec wychyla się w skrajne położenie i nie mogąc już zwiększać obrotów stoi w tym punkcie. Dodaj sobie do programu wydruki na UART jakie są wyniki pomiarów i co nastawia na serwo.
  • Level 39  
    Chyba nie rozumiem Twojego programu.
    Funkcja pulseIn mierzy czas trwania impulsu, trzeba ją zamienić na prędkość obrotową, która generalnie jest odwrotnością czasu. Poza tym ta funkcja blokuje działanie programu.
    Moim zdaniem lepiej będzie podłączyć czujnik Halla do wejścia przerwania i ustawić je na wykrywanie zbocza, w sumie obojętne narastającego czy opadającego, na jeden obrót wału jest tyle samo zboczy jednych i drugich. W ISR od tego przerwania możesz łapać czas pomiędzy kolejnymi wywołaniami za pomocą millis lub micros, w zależności od czasu pomiędzy kolejnymi przerwaniami, w sumie lepiej micros bo będzie lepsza rozdzielczość pomiaru, musisz zastosować odpowiednią arytmetykę, żeby uwzględnić zjawisko "timer rollover". Mając czas możesz łatwo obliczyć prędkość obrotową wału.
    Musisz również zaimplementować jakiś time-out, który uwzględni zaniknięcie przerwań po uszkodzeniu czujnika.
    Powinieneś również zrealizować jakiś w miarę sensowny algorytm, zapewne PID, żeby zapewnić stabilność regulatora i uniknąć oscylacji.
  • Level 31  
    krzysiek_krm wrote:
    W ISR od tego przerwania możesz łapać czas pomiędzy kolejnymi wywołaniami za pomocą millis lub micros, w zależności od czasu pomiędzy kolejnymi przerwaniami,

    Po co kombinować jak timer umożliwia przechwytywanie?
  • Level 13  
    Tak jak pisałem do prób używam szlifierki z regulacją i wyświetlaczem ustawionych obrotów, dorobiłem do niej krążek blachy z wypustem aktywującym hallotron.
    W programie zmieniałem już wartości na przykładowo 2200rpm i serwo zawsze zaczyna od 1500rpm stopniowo iść w skrajne położenie, nawet jak na szlifierce mam ustawione 3000rpm. Hallotron działa prawidłowo, podpięta pod niego dioda przemiennie zapala się i gasnie.
    W programowaniu mam bardzo małe doświadczenie... bawię się z tym już ponad rok czasu i przydało by się wreszcie uruchomić sprężarkę.

    Program nie jest mój, w temacie z którego go zapożyczyłem autor pisze że działa prawidłowo. Hallotron mogę mieć inny niz autor programu, wyglada na to że wykorzystał sygnał z czujnika położenia wału w silniku skody Felicji 1.3 MPI.
  • Level 39  
    jero11 wrote:
    Tak jak pisałem do prób używam szlifierki z regulacją i wyświetlaczem ustawionych obrotów, dorobiłem do niej krążek blachy z wypustem aktywującym hallotron.
    W programie zmieniałem już wartości na przykładowo 2200rpm i serwo zawsze zaczyna od 1500rpm stopniowo iść w skrajne położenie, nawet jak na szlifierce mam ustawione 3000rpm. Hallotron działa prawidłowo, podpięta pod niego dioda przemiennie zapala się i gasnie.
    W programowaniu mam bardzo małe doświadczenie... bawię się z tym już ponad rok czasu i przydało by się wreszcie uruchomić sprężarkę.

    Ktoś już wcześniej miał podobny pomysł ale powtórzę go.
    Zrealizuj Twój projekt metodą małych kroków. Najpierw napisz (w dowolny sposób) program, który na UART będzie Ci wysyłał zmierzoną prędkość obrotową. Ustawisz sobie na szlifierce na przykład 1500 rpm i powinieneś uzyskać wynik pomiaru mniej więcej taki sam, analogicznie dla 2000 rpm, itd. Jak już będziesz pewny, że pomiar rpm jest prawidłowy, będziesz mógł pójść dalej, na razie to masz dość dużo stopni swobody i nie jesteś w stanie ustalić co powoduje błędy.
  • Level 39  
    Jeśli masz możliwość to do odczytu prędkości użyj czegoś co da więcej niż jeden impuls na obrót.
    Dzięki temu skrócisz czas pomiaru i szybciej będziesz mógł reagować na zmiany.
  • Level 43  
    tos18 wrote:
    Jeśli masz możliwość to do odczytu prędkości użyj czegoś co da więcej niż jeden impuls na obrót.

    Po co przy masach wirujących rzędu 100kg i po co ci obroty 2400 masz przekładnie pasową na prądnice czy jak?
  • Level 13  
    Sprężarka jest napędzana pasami, przełożenie 3:1.
    Jak ustawie wymagane obroty na sprężarce bez ciśnienia, to przy ciśnieniu 8bar. obroty mocno spadną, kiedy ustawie obroty przy 8bar. to po załączeniu blokady ssania sprężarki silnik rozkręca się na duże obroty... Regulator obrotów w pompie wtryskowej nie ogarnia takich skoków obciążenia.
  • Level 43  
    Kolego zrób po pierwsze stabilny odczyt obrotów silnika .
    Masz 40 imp na sekundę więc dokładność jest wystarczająca.
  • Level 37  
    Strumien swiadomosci swia wrote:
    Kolego zrób po pierwsze stabilny odczyt obrotów silnika .


    Nie jest mu to potrzebne do niczego!
    Nie interesuje go jakie są aktualne obroty, ani nie potrzebuje ich wyświetlic na jakimś wskaźniku cyfrowym, ani też nie zadaje w jakim zakresie chce je regulowac/zmieniac, więc po co je określac bądź nawet znac?
    Jak rozumiem, zadaniem jest: utrzymac je na określonym względnie stałym poziomie.
    W tej metodzie każdy jeden obrót wału dostarcza wystarczających informacji o prędkości obrotowej w postaci czasu trwania impulsu z wyjątkową dokładnością; - (w microsekundach) .
    Znając szerokośc wypustu na tarczy (zbudowanej przez autora tego wątka) oraz średnicę koła podziałowego można obliczyc kąt obrotu tarczy podczas którego jest ‘zbierany’ pomiar.
    Na podstawie tych informacji możnaby finalnie obliczyc RPM.
    Oczywiście wymiary gabarytowe tej tarczy nie są nikomu znane i nie są też potrzebne.
    Wystarczy że autor praktycznie na swoim sprzęcie dokona pomiaru długości impulsów dla interesujących go obrotów; podczas testów z regulowanymi obrotami szlifierki jako ‘wzorzec’(?) ; - dla roboczego zakresu 2400 RPM wokół którego będzie budował swoją instrukcję warunkową.
    Przyjete /(skopiowane) przez autora graniczne wartości (1000 i 100000) w wyrażeniu:

    if ((odczyt > 1000)&&(odczyt < 10000))

    tu nie mają większego sensu, bo w oryginalnym projekcie z pewnościa tamten autor konceptu miał inny aktuator, zatem były inne odczyty… Trzeba dokładniej czytac uwagi i objaśnienia...

    Należałoby tu nadmienic że górna granica (tu 10 000) reprezentująca te niskie (jałowe obroty) dla których autor pomija pomiar można zastąpic arbitralnie wartością stałą (const PULSEIN_TIMEOUT = ???) , wtedy też odpowiednio zmodyfikuje funkcję odczytu.

    Jeżeli autor zmieni tarczę albo wymiary wypustu, będzie zmuszony dokonac ponownej kalibracji…

    e marcus
  • Level 37  
    Strumien swiadomosci swia wrote:
    emarcus wrote:
    Nie jest mu to potrzebne do niczego!

    Musi znać obroty, dla kilku innych obliczeń.


    Nie ma innych obliczeń. ..
    jeżeli bedzie chciał zmieniac te rzekomo 'ustalone' obroty na poziomie 2400 RPM; to może manipulowac odczytaną podczas kalibracji wartościa odpowiadającą liczbie to co w oryg. czyimś projekcie było 3700 . Dla autora tego watku ta liczba będzie inna przy 2400(!).
    Może on dołożyc jeszcze jeden taki sam wypust (ząb ) przesuniętu o 180st. dla wyważenia tarczy i wynik pozostanie ten sam.
    Poza tym nie widzę potrzeby uśredniania wyniku z 10 pomiarów.
    Czujniki te są stosowane w silnikach do określania pozycji wałka rozrządu, jak również do określania pozycji wału korbowego (prawiew jednakowe).
    Czy tam jest czas na uśrednianie wyniku z iluśtam zębów czy okien w tarczy czy też ilości obrotów?

    Przeczytaj post #3;
    - kaczkat miał dobrą radę dla ciebie....

    e marcus
  • Level 13  
    W silniku skody autora programu czujnik czyta z koła zamachowego wału, na zdjęciu zaznaczyłem wypust, lub wypusty bo nie wiem ile ich jest.
    Regulator obrotów silnika spalinowego z wykorzystaniem Arduino
    A tu koło zamachowe mojego silnika, mógłbym wykorzystać znajdujące się na nim nacięcia, jest ich 6
    Regulator obrotów silnika spalinowego z wykorzystaniem Arduino
    Jestem amatorem w temacie programowania i ciężko mi to ogarnąć, rozważam też wykonanie mechanicznego regulatora.
  • Level 37  
    jero11 wrote:
    W silniku skody autora programu czujnik czyta z koła zamachowego wału, na zdjęciu zaznaczyłem wypust, lub wypusty bo nie wiem ile ich jest.


    Nie ma znaczenia ile ich jest; ważne aby wszystkie były jednakowej dlugości bo z tego jest ‘zbierany ‘
    czas pobytu ‘wypustu‘ w strefie czułości sensora (stan NISKI na jego wyjściu). Każdy taki wypust daje kolejny odczyt.
    Jeżeli istnieje pewna rozbieżnośc wymiarowa (ich długośc), to uśrednianie tych pomiarów ma pewien sens.

    jero11 wrote:

    A tu koło zamachowe mojego silnika,...


    W twoim przypadku nie jest aż tak źle;
    Możesz usytuaowc czujnik w pozycji gdzieś odpowiadającej lewy dolny róg na foto. Skoro masz tam powierzchnię wyobloną na obudowie to potrzebujesz zadbac aby zamocowanie sensora było stabilne a przejście z jednego stanu logicznego w drugi było możliwie powtarzalne i zdecydowane. Małe przesunięcie czujnika może jednak zgubic twoją kalibrację.
    Również ilośc tych wycięc nie ma znaczenia w tej metodzie. Możesz z powodzeniem zamienic czułośc zamiast obserwowac czas nad metalem, mierzyc czas pustych przerw (nad wycięciami), odwracając stan logiczny odczytu.

    Cokolwiek byś nie zrobił, musisz kalibrowac układ, bo wszystkie wymiary i położenia masz unikalne i trudne do pomierzenia a zatem praktycznie są ‘nie pomiarowe’ zwyczajnymi metodami.
    Innym rozwiązaniem byłoby wykonac własną tarczę montowaną do koła zamachowego, (chocby na wzór fabrycznych ‘Flex Plate’: patrz rys. poniżej).
    Regulator obrotów silnika spalinowego z wykorzystaniem Arduino

    e marcus
  • Level 13  
    Strumien swiadomosc... wrote:
    Jak ten silnik steruje obrotomierzem, w ogóle co to za silnik?

    Jest to Isuzu 1.7 TD z Opla Vectry, jeśli miał obrotomierz to pomiar był z alternatora, z braku alternatora zamontowałem alternator z VW golf 2 benzyna.