logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Arduino i czujnik indukcyjny – zakłócenia od maszyny

Ryyy 30 Cze 2025 20:52 702 22
  • #1 21594111
    Ryyy
    Poziom 7  
    Posty: 9
    Witam,
    Mam układ oparty na Arduino do świecenia diodami LED mocy. Arduino zlicza sygnały z czujnika indukcyjnego i po danej liczbie sygnałów ma wyzwolić błysk oraz przesłać też informację przez USB do Raspberry Pi, które jednocześnie je zasila. Cały układ działa bardzo dobrze, ale tylko w domowych warunkach. Gdy swoje urządzenie dam w miejsce docelowe, czyli w warunki przemysłowe, czyli w maszynę, w dodatku z dużym silnikiem elektrycznym tuż obok, to czasem działa, ale częściej wariuje. Zbieram mnóstwo zakłóceń zamiast właściwych sygnałów z czujnika i bardzo często restartuje się przez to Arduino.

    Arduino i czujnik indukcyjny – zakłócenia od maszyny

    - Czujnik to Pepperl Fuchs NBB0,8-5GM25-E2. Przewód ma 2 m i nie jest ekranowany. Czy w pierwszej kolejności powinienem przelutować przewód na ekranowany? Nie bardzo rozumiem, czemu w sprzedaży nie mogę znaleźć takich czujników z fabrycznym ekranem w kablu.
    - Kondensator w filtrze 100 nF zamieniałem na próbę na ~700 nF, ale nic się nie zmieniło.

    Myślę nad dodaniem gdzieś transoptora, ale za bardzo nie wiem, w którym miejscu. Czujnik i LED-y dzielą zasilanie, więc czy transoptory powinny być trzy – dwa na mosfety i jeden na wejście sygnału? Proszę o sugestie, czy to ma w ogóle sens i jak jeszcze można zabezpieczyć układ.
  • #2 21594122
    spinacz
    Poziom 42  
    Posty: 8574
    Pomógł: 1204
    Ocena: 2651
    Zamknij cały układ w metalowej puszce albo umieść go dalej od silnika.
  • #3 21594127
    jdubowski
    Specjalista - urządzenia lampowe
    Posty: 21595
    Pomógł: 2511
    Ocena: 2802
    Ryyy napisał:
    do Raspberry Pi, które jednocześnie je zasila

    Ale rozumiem, że te diody mocy mają oddzielny zasilacz?
    Jak są połączone masy - zasilacz 15 V, Arduino, RPi, zasilacz RPi?

    Ryyy napisał:
    Zbieram mnóstwo zakłóceń zamiast właściwych sygnałów z czujnika i bardzo często restartuje się przez to Arduino.

    Ekrany jak masz zrobione i jak połączone?
  • #4 21594359
    Ryyy
    Poziom 7  
    Posty: 9
    jdubowski napisał:
    Ale rozumiem, że te diody mocy mają oddzielny zasilacz?
    Jak są połączone masy - zasilacz 15 V, Arduino, RPi, zasilacz RPi?

    Diody mocy, czujnik - zasilacz 15 V
    Raspberry, Arduino - zasilacz Raspberry 5 V, Arduino spięte z Raspberry tylko przez USB, więc tędy idzie masa

    jdubowski napisał:
    Ekrany jak masz zrobione i jak połączone?

    Napisałem, że właśnie ekranów nie ma żadnych, pytanie czy wymienić w pierwszej kolejności właśnie kabel czujnika? Ekran ma być wtedy do czegoś podłączony?
  • #5 21594412
    jarek_lnx
    Poziom 43  
    Posty: 22716
    Pomógł: 4194
    Ocena: 6116
    Ekran zazwyczaj niewiele daje, bo najłatwiej wnikają zakłócenia przewodzone. Długie przewody które działają jak anteny albo łączą punkty o różnym poziomie zakłóceń, pętle masy,
  • #6 21594457
    viayner
    Poziom 43  
    Posty: 10628
    Pomógł: 1563
    Ocena: 2051
    Witam,
    opisz dokładnie, na czym polega wariowanie urządzenia?
    Liczy jakieś impulsy, których nie ma? Nie liczy prawidłowych impulsów?
    W warunkach przemysłowych masz sporo zakłóceń, co prawda 2 m to nie tragedia, a ty nie przesyłasz danych, tylko stan i to zapewne raz na parę sekund (sądząc po pojemności filtru). Możesz podejrzeć ten sygnał wyzwalający na oscyloskopie? Być może masz jakieś szpilki i np. przerzutnik Schmitta tu pomoże.
    Jak wygląda detekcja stanu/zbocza w Arduino?
    Jak to jest zasilane? Tzn. jaki zasilacz i co konkretnie jest nim zasilane, z jakich linii, jak długie przewody itd. Zasilanie to 90% problemów. Daj dodatkowe kondensatory filtrujące na samym zasilaniu czujnika, jak najbliżej czujnika.
    Pozdrawiam
  • #7 21594492
    sigwa18
    Poziom 43  
    Posty: 12019
    Pomógł: 1188
    Ocena: 3341
    Jak wyżej filtr w zasilaniu. Układ do puchy (można zrobić otwory i wystawić tylko główki ledów). Na kabel do czujnika ekran. Może da się wykonać filtr programowy by np za krótkich impulsów nie liczył jako prawidłowe tak samo następujących za szybko po sobie. Dużo pomaga nieraz obserwacja diody czujnika. Dwa można go nim trochę pomachać po okolicy gdzie jest źródło największych zakłóceń. Jeśli jest silnik z falownikiem to również połączenie silnik falownik można zrealizować przewodem ekranowanym.
  • #8 21594584
    jarek_lnx
    Poziom 43  
    Posty: 22716
    Pomógł: 4194
    Ocena: 6116
    C3 wraz rezystancją dzielnika stanowią filtr wejściowy o stałej czasowej 430us. Taki filtr może działać lub też nie zależnie od tego jak się go fizycznie zrealizuje. Do której masy podłączono kondensator? jaką długość maja nóżki kondensatora?

    Z punktu widzenia zakłóceń, schemat ideowy nie oddaje działania układu. Na schemacie jest masa - wspólny potencjał. W rzeczywistym układzie, nie ma czegoś takiego jak masa, dla częstotliwości radiowych (większość zakłóceń ma bardzo szerokie pasmo) każdy przewód ma indukcyjność i napięcie zakłóceń w każdym punkcie "masy" jest inne. Układ będzie się zachowywał inaczej kiedy inaczej połączysz masy.

    Bardziej interesujący był by schemat montażowy uwzględniający sposób poprowadzenia przewodów i zasilania.
  • #9 21594986
    _jta_
    Specjalista elektronik
    Posty: 49098
    Pomógł: 3212
    Ocena: 4252
    1. Jakie są parametry wyjściowe tego czujnika indukcyjnego? Jaki sygnał z niego wychodzi bez podłączenia Arduino, i po umieszczeniu całego przewodu zwiniętego "bezindukcyjnie" w uziemionej puszce?
    ... niewykluczone, że tam są pola magnetyczne od silnika, które wykrywa już sam czujnik, i konieczne jest użycie innego czujnika.

    2. Jak są prowadzone masy i zasilania Raspberry i Arduino? Arduino ma masę z Raspberry, a jak ma wspólną masę z MOSFET-ami?
  • #10 21595308
    jdubowski
    Specjalista - urządzenia lampowe
    Posty: 21595
    Pomógł: 2511
    Ocena: 2802
    Ryyy napisał:
    Diody mocy, czujnik - zasilacz 15 V Raspberry, Arduino - zasilacz Raspberry 5 V, Arduino spięte z Raspberry tylko przez USB, więc tędy idzie masa

    Nic nie wnosi ten opis do analizy problemu Dokładnie opisz a lepiej rozrysuj jak sa te masy połączone.
    Ryyy napisał:
    pytanie czy wymienić w pierwszej kolejności właśnie kabel czujnika?

    Tak, jeśli po odłączeniu czujnika wariować przestaje.
    Ryyy napisał:
    Ekran ma być wtedy do czegoś podłączony?

    Do masy od strony Arduino.
    Jeszcze coś zauwazyłem - zasilasz ten czujnik z tego samego zasilacza co diody LED - to nie jest dobre rozwiązanie.
  • #11 21595374
    _jta_
    Specjalista elektronik
    Posty: 49098
    Pomógł: 3212
    Ocena: 4252
    To pewnie taki czujnik. Ale z opisu producenta nie wiem, co to ma być, na co on ma reagować, na pole magnetyczne? Ale jaki ma próg zadziałania?

    Być może w otoczeniu czujnika występuje pole wystarczające do jego zadziałania, i trzeba go ekranować (magnetycznie), albo zastosować inny czujnik.
  • #12 21595380
    sigwa18
    Poziom 43  
    Posty: 12019
    Pomógł: 1188
    Ocena: 3341
    Może autor mógłby zastosować czujnik optyczny?
  • #13 21601266
    Ryyy
    Poziom 7  
    Posty: 9
    viayner napisał:
    opisz dokładnie, na czym polega wariowanie urządzenia?
    Liczy jakieś impulsy, których nie ma?

    Tak, tylko tyle i aż tyle. Do tego dochodzą te częste restarty. Dokładniej to po prostu Raspberry na chwilę nie widzi Arduino i za chwilę widzi je znowu. Poprzednia płytka, którą robiłem, miała zupełnie inny schemat, inne LED-y i inny zasilacz, i tam z kolei oprócz tych problemów, co opisuję, dochodziło jeszcze zacinanie samych portów USB w Raspberry. Zakłócenia musiały być wtedy na tyle silne, że port potrafił nie działać, dopóki nie zrestartowało się Raspberry. Ale przy aktualnej płytce aż takiego problemu jeszcze nie widziałem.

    viayner napisał:
    Jak wygląda detekcja stanu/zbocza w Arduino?

      attachInterrupt(digitalPinToInterrupt(czujnik), licz, FALLING);

    W funkcji licz() jest też filtr programowy, ale myślę, że nie tędy droga, skoro zakłócenia są w stanie zawiesić mi Arduino.

    viayner napisał:
    Jak to jest zasilane? Tzn. jaki zasilacz i co konkretnie jest nim zasilane, z jakich linii, jak długie przewody itd.

    Zasilacz Akyga 11–15 V / 12,5 A, przewody mają maksymalnie 15 cm, zasilane są tylko te 2 LED-y i czujnik. Arduino jest zasilane przez Raspberry przez USB i to jest jedyne połączenie z Raspberry, jakie jest.

    Zrobiłem następujące testy:
    1. Czujnik indukcyjny wymieniłem na próbę na optyczny – czujnik kontrastu. Problemy są te same, więc chyba wszystko, co dotyczyłoby złego doboru czujnika, można wykluczyć.
    2. Czujnik kontrastu miał ekran, więc też wlutowałem go potem do masy i nadal bez zmian.
    3. Dodałem kondensator 100 µF na zasilanie czujnika – bez zmian.
    4. Docelowy program w Arduino zlicza x sygnałów z czujnika i wysyła wtedy informację do Raspberry oraz robi błysk LED-ami. Jako kolejne testy odpiąłem czujnik, a program ustawiłem też omijając zbieranie sygnałów. Czyli teraz co sekundę Arduino wysyła informację do Raspberry i robi błysk. Celem było sprawdzenie, czy może to LED-y lub obciążenie zasilacza z ich powodu może powodować restarty Arduino, ale w takim układzie nic złego się nie dzieje (Arduino się nie zacina).
    Załączam zdjęcia, jak to wygląda.
    Arduino i czujnik indukcyjny – zakłócenia od maszyny
    Arduino i czujnik indukcyjny – zakłócenia od maszyny
    Opis spodu płytki:
    1 – w założeniu "centrum gwiazdy", tu jest podłączona masa z zasilacza, a 4 to masa z Arduino
    2 – tu podłączyłem ekran czujnika kontrastu
    3 – minus czujnika
    5 i 6 to źródła Mosfetów

    jdubowski napisał:
    Jeszcze coś zauważyłem – zasilasz ten czujnik z tego samego zasilacza co diody LED – to nie jest dobre rozwiązanie.

    Czy Kolega mógłby rozwinąć, jak już zapodał taką "bombę"? Takie rozwiązanie miałem przy poprzedniej płytce, o której pisałem wyżej – tam LED-y były na ~100 V, a czujnik na 24 V i były dwa zasilacze.

    Proszę też o jakieś odniesienie do mojej sugestii o transoptorze. Czy dać go zamiast tego dzielnika napięcia i rozdzielić sygnał czujnika od Arduino.
  • #14 21601354
    viayner
    Poziom 43  
    Posty: 10628
    Pomógł: 1563
    Ocena: 2051
    Witam,
    z opisu stawiam na 99% na problemy z zasilaniem, miałem kilka takich przypadków z przypadkowym resetem Arduino.
    Raz czujniki były na długich przewodach, co tworzyło cewkę, podobnie długie przewody zasilające, dalej na wspólnym zasilaniu było duże obciążenie indukcyjne, raz przetwornica, a raz cewki – zawsze powstawały szpilki, które przez diody zabezpieczające na wejściach Arduino dostawały się do zasilania i tworzyły te nieoczekiwane zdarzenia.
    - Rozdziel zasilanie, w sumie nawet proste rozwiązanie typu filtr RC na każdej linii zasilającej, czyli oddzielnie do Arduino i oddzielnie do RBPi, a na pewno do obciążenia.
    - Upewnij się, że zasilanie wytrzymuje obciążenie i nie masz chwilowego "zatykania się" jego (Arduino).
    - Dodaj spore kondensatory elektrolityczne jak najbliżej zasilania Arduino i RBPi itd.
    - Uwzględniłeś, że stale podłączone USB może przekazywać szpilki z komputera, skoro Arduino jest zasilane z USB tylko, to tu jest problem, wspólna masa jest "taka sobie", obciążenie lub cokolwiek dalej generuje jakieś szpilki, które wracają do Arduino.
    Bez urazy, ale płytka prosi się o takie zachowanie, sprawdź ją powtórnie.
    Pozdrawiam
  • #16 21609309
    cranky
    Poziom 30  
    Posty: 2190
    Pomógł: 70
    Ocena: 404
    _jta_ napisał:
    To pewnie taki czujnik. Ale z opisu producenta nie wiem, co to ma być, na co on ma reagować, na pole magnetyczne?

    Indukcyjny na pole magnetyczne. Boże, Ty widzisz i nie grzmisz... Reaguje na metal. I nie ma reagować na nic innego. Choć przy spawarce większość poza Pulsotronic zgłupieje.
    1 Arduino w ogóle bardzo słabo się nadaje do zastosowań w przemyśle. Łapie z wejść, łapie z zasilania, łapie nawet z pola EM (radiowo) śmieci co nie miara.
    2 Zacznij od tego, czego nie ma na schemacie. Zasilanie jest jakie? Podepnij oscyloskop na miejscu jeśli możesz. Dodaj układ filtrujący napięcie zasilania. Może być filtr EMC z demontażu przed zasilaczem i co się da po zasilaczu (cewka z 3 zwojami nawiniętymi przeciwnie, RC - co masz/dasz radę). Niestety im drożej, tym lepiej.
    3 Jeśli możesz, to odseparuj czujnik przez optoizolator. Jeśli nie, to wyfiltruj go RC (nie wiem jaką ma częstotliwość maksymalną, więc trudno dobrać z głowy). Nie rżnij oryginalnego przewodu. One nie są ekranowane, a obudowa czujnika nie jest połączona z masą.
    4 W programie dodaj filtrowanie sygnałów o częstotliwości 2× większej niż spodziewana maksymalna.

    To tak jeśli chodzi o to "działa na stole, ale nie w życiu".

    Natomiast zupełną rację ma @jdubowski co do zasilania czujnika i diod (kondensatory zdolne do spawania) z tego samego zasilacza. Odseparowałbym sterowanie diod od reszty przez optoizolację. Ale to oczywiście nie wyjaśnia sprawy, skoro działa na stole. Choć trochę razi.
  • #17 21609323
    _jta_
    Specjalista elektronik
    Posty: 49098
    Pomógł: 3212
    Ocena: 4252
    Jeśli czujnik reaguje na niewielkie pole magnetyczne, to raczej nie może być używany obok silnika, który wytwarza takie pole - chyba, że jego konstrukcja została pomyślana tak, by był odporny na zakłócanie polem silnika. Może zapytać producenta?
  • #18 21609330
    sigwa18
    Poziom 43  
    Posty: 12019
    Pomógł: 1188
    Ocena: 3341
    Tutaj przydałby się oscyloskop i zbadanie, gdzie/w którym momencie pojawiają się śmieci. Co do czujnika indukcyjnego, ja od razu sugerowałem czujnik optyczny. Co do Arduino, przy projektach lubię na uruchomieniach podłączać wyświetlacz na I2C. Można modyfikować program i wyrzucać na niego zmienne czy stany (tworzyć sobie zmienne na cele diagnostyki), co pomaga w identyfikacji, co nie działa zgodnie z założeniami.
  • #19 21609395
    cranky
    Poziom 30  
    Posty: 2190
    Pomógł: 70
    Ocena: 404
    _jta_ napisał:
    Jeśli czujnik reaguje na niewielkie pole magnetyczne, to raczej nie może być używany obok silnika, który wytwarza takie pole - chyba, że jego konstrukcja została pomyślana tak, by był odporny na zakłócanie polem silnika. Może zapytać producenta?

    To jest czujnik przemysłowy. Nie wzruszy go ani silnik, ani falownik. W zależności od konstrukcji (czoło schowane lub wystające) może reagować na obecność metalu tylko od czoła, lub nieco na boki (tańsze).
    Pomysł z czujnikiem optycznym jest swietny - 2 światłowody lub jeden i odblaskówka przy silniku, a czujnik (zwany bez sensu wzmacniaczem światłowodowym) w bezpiecznej odległości, w skrzynce. Ale to koszt kilkuset pln. Taniej kupić używany sterownik przemysłowy.
  • #20 21609678
    _jta_
    Specjalista elektronik
    Posty: 49098
    Pomógł: 3212
    Ocena: 4252
    Ryyy napisał:
    1. Czujnik indukcyjny wymieniłem na próbę na optyczny – czujnik kontrastu. Problemy są te same

    Może to jednak nie czujnik, a napięcia indukowane w przewodzie sygnałowym (na to może pomóc transoptor - idea jest taka, że od czujnika idzie przewód, raczej skrętka, do diody transoptora, i prąd wraca do zasilania czujnika drugą żyłą skrętki - w przewodzie sygnałowym i w powrotnym indukują się takie same napięcia, więc się odejmą), albo zakłócenia w zasilaniu.
  • #21 21609694
    tos18
    Poziom 42  
    Posty: 7129
    Pomógł: 1110
    Ocena: 1863
    Nie szukał bym problemów z czujnikiem - to typowa przemysłówka odporna na śmieci(Chyba że to chińska podróbka)
    Stawiam na zakłócenia przenoszone po przewodach. Arduino źle znosi warunki przemysłowe.

    spróbował bym zwiększyć prąd obciążający czujnik do 10mA (R10=1k,R9=0,47k)

    ponadto odseparował bym zasilanie czujnika od ledów - dioda prostownicza i kondensator 470uF. Jeśli napięcie w momencie błysku przysiada do 10V czujnik może głupieć.Jeśli w momencie przysiadu czujnik będzie załączony napięcie na wejściu arduino przysiądzie do 3V - do tego trochę zakłóceń i mamy "lewe" przełączenie.


    Arduino i czujnik indukcyjny – zakłócenia od maszyny

    Następnie odseparował bym arduino transoptorami od zasilacza 15V.
    - separacja wejścia czujnikowego. trzeba dobrze dobrać warunki pracy transoptora by próg przełączania wypadł w połowie napięcia zasilania.Można rozważyć użycie transoptora z wyjściem logicznym lub schmitta.
    - separacja wyjść dla ledów transoptorami.
    - przemyśleć prowadzenie przewodów.

    trzecia opcja to rezygnacja z arduino i zastosowanie licznika przemysłowego.
  • #22 21609914
    _jta_
    Specjalista elektronik
    Posty: 49098
    Pomógł: 3212
    Ocena: 4252
    tos18 napisał:
    trzeba dobrze dobrać warunki pracy transoptora by próg przełączania wypadł

    Zwykły transoptor działa analogowo - im większy prąd poda się na wejście, tym większy można odebrać na wyjściu. Można wyjście czujnika podłączyć przez opornik 1.5kΩ do wejścia transoptora, a wyjście obciążyć opornikiem dobranym do prądu transoptora tak, by ten prąd dawał ze 4.5V (i po stronie wyjściowej transoptora używać tylko zasilania 5V), można zastosować nieco mniejszy opornik i niech Arduino mierzy napięcie analogowe i program decyduje, czy to stan niski, czy wysoki. I jeśli zakłócenia są krótkimi "szpilkami", to można programem je odfiltrować.
  • #23 21609926
    tos18
    Poziom 42  
    Posty: 7129
    Pomógł: 1110
    Ocena: 1863
    ok ... więc po analogowemu - tak dobrać punkt pracy by gdy na wejściu jest 7,5V to na wyjściu ( na nodze atmela) ma być 2,5V. Resztę załatwi schmitt na wejściu atmela.

Podsumowanie tematu

✨ Problem dotyczy układu opartego na Arduino, który zlicza sygnały z czujnika indukcyjnego Pepperl Fuchs NBB0,8-5GM25-E2 i steruje diodami LED oraz komunikuje się przez USB z Raspberry Pi. W warunkach przemysłowych, blisko dużego silnika elektrycznego, układ doświadcza silnych zakłóceń elektromagnetycznych, co powoduje błędne odczyty impulsów, częste restarty Arduino oraz problemy z komunikacją USB. Dyskusja wskazuje na kilka kluczowych aspektów: brak ekranowania przewodu czujnika (2 m, nieekranowany), konieczność poprawy filtracji zasilania (kondensatory elektrolityczne, filtry RC, separacja zasilania LED i czujnika), stosowanie metalowej obudowy dla układu, eliminację pętli masy oraz poprawne połączenia mas. Zalecane jest użycie transoptora do separacji sygnału czujnika, zastosowanie filtrów programowych eliminujących krótkie zakłócenia, a także diagnostyka oscyloskopowa sygnału i zasilania. Wskazano, że Arduino jest podatne na zakłócenia w środowisku przemysłowym, a czujnik indukcyjny może reagować na pole magnetyczne silnika, co wymaga ewentualnej konsultacji z producentem lub zastosowania alternatywnego czujnika (np. optycznego). Proponowane są również metody ekranowania przewodów, separacji galwanicznej oraz poprawy stabilności zasilania, aby ograniczyć wpływ zakłóceń elektromagnetycznych i przewodzonych.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA