Elektroda.pl
Elektroda.pl
X
SterControlSterControl
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Prośba o ocenę schematu interfejsu RS485

11 Paź 2015 16:22 1095 18
  • Poziom 6  
    Witam.

    Przesyłam schemat urządzenia, którego głównym zadaniem jest wysyłanie i odbieranie danych po linii RS485.

    Mam pewien problem z tym urządzeniem.

    W ramach eksperymentu, który miał na celu znalezienie źródła problemu, napisałem program, który cyklicznie ustawia naprzemiennie stan niski albo stan wysoki na nóżce PD2 mikrokontrolera ATmega. Sygnał PD2, za pośrednictwem transoptora, wchodzi na wyprowadzenia DE-RE/ (przełączanie nadajnik/odbiornik) układu MAX485ECPA. Do zacisków A i B linii RS485 nic nie jest podłączone. Oscyloskopem zdjąłem przebieg, na którym widać przebieg prostokątny na nóżce PD2, natomiast na nóżce PD0 (odczyt) jest stan wysoki.

    Do wyprowadzeń A i B podłączam przewody kabla LappKabel UNITRONIC BUS LD 2x2x0,22. Kabel ten jest zwinięty w krąg i ma 85 metrów długości. Drugi koniec kabla wisi w powietrzu. Oscyloskopem zdjąłem przebieg, na którym widać przebieg prostokątny na nóżce PD2, natomiast na nóżce PD0 (odczyt) jest stan wysoki, czyli to samo, co uprzednio.

    Do wiszącego uprzednio w powietrzu końca kabla podłączam rezystor 120om, między przewody A i B. Oscyloskopem zdjąłem przebieg, na którym widać przebieg prostokątny na nóżce PD2 i taki sam przebieg na na nóżce PD0 (odczyt). Reasumując, na nóżce PD0 mam taki sam przebieg jak ten generowany przeze mnie na PD2. Dołożenie drugiego rezystora 120om (po stronie urządzenia) nie rozwiązuje problemu. Podłączenie do linii dwóch podobnych urządzeń i założenie rezystorów 120om z obu stron, także nie rozwiązuje problemu.

    Problem ten uprzykrza mi pracę układu. W momencie, gdy przełączam urządzenie z nadawania na odbiór (PD2), to jednocześnie linia odczytu (PD0) dostaje stanu niskiego co sprawia, że program odbiornika dostaje bajt o wartości 0 (zero).

    Proszę o pomoc w rozwiązaniu problemu.

    Mam jeszcze inny układ, też własnoręcznie zrobiony, z praktycznie identycznym układem do RS485. Tam z kolei, przy podłączonym długim kablu z rezystorami 120om, przy przełączaniu nadajnik/odbiornik, na linii odczytu danych (sonda oscyloskopu podłączona do nóżki mikrokontrolera odczytu UART) pojawiają się króciutkie szpilki w dół z +5V do 0V.

    -------------------------

    Dołączam jeszcze przebiegi z oscyloskopu z normalnej pracy urządzenia.
    Sondy logiczne (dolny obrazek) podłączone był bezpośrednio do nóżek mikrokontrolera ATmega16.
    Sonda analogowa (górny obrazek) była podłączona do zacisków A i B magistrali
    RS485.
    Obydwa przebiegi (obrazek górny i dolny) zdjęto oddzielnie (przy dwóch
    różnych transmisjach, ale z identycznymi danymi) -- układ ma separację
    galwaniczną.

    Parametry transmisji: 19200 8N1
    Kabel LAPPKABEL UNITRONIC BUS LD 2x2x0,22 o długości 85 metrów, zwinięty w
    krąg.
    Na zaciskach A i B magistrali RS485 założono rezystory 120om, w obu urządzeniach.
    Podłączono linie A, B i C.
    Ekran wisi w powietrzu.

    Układ działa w ten sposób, że wysyła 83 bajty, a następnie czeka na odbiór
    (odbiera 8 bajtów). Na przebiegach pokazano moment, gdy wysyłanie kończy się i następuje odbiór danych. Nadawanie danych przebiega prawidłowo (zdalny odbiornik otrzymuje prawidłowo dane, z prawidłową sumą kontrolną).

    Problem polega na tym, że odbiornik na początku odbiera niepożądany bajt o
    wartości 0 (zero), po którym następuje dopiero właściwy ciąg bajtów,
    rzeczywiście nadany przez zdalny nadajnik. Jest to spowodowane tym, że przełączenie na odbiornik (nóżka PD2) powoduje pojawienie się niepożądanego stanu niskiego na linii odbiornika (nóżka PD0).

    Przy kablu o długości 15 metrów transmisja mi działała bez tego niechcianego zera na początku.

    Pozdrawiam,
    Motoman.
  • SterControlSterControl
  • Poziom 6  
    n0name10 napisał:
    Jaka prędkość transmisji baud ? Schemat masz poprawny.


    Dzięki za czas poświęcony na analizę schematu.

    Parametry transmisji: 19200 8N1

    Przy czym problem raczej nie ma związku z prędkością transmisji. Nawet pojedyncza zmiana sygnału przełączającego nadajnik/odbiornik powoduje zmianę sygnału na linii odczytu danych.

    -------------

    Właśnie zrobiłem jeszcze jeden eksperyment. Odłączyłem całkowicie kabel od zacisków A, B, C. Włączyłem urządzenie. Urządzenie zainicjowało LCD i USART, ale nie prowadzi żadnej transmisji i nie steruje wyjściami. Oscyloskopem z analizatorem logicznym obserwuję sygnały na nóżkach PD0 (odbiór), PD1 (wysyłanie), PD2 (przełączanie nadajnik/odbiornik) mikrokontrolera ATmega16. Początkowo PD2 jest w stanie niskim, PD1 i PD0 są w stanie wysokim. Przykładam rezystor 120om do zacisków A i B -- powoduje to pojawienie się stanu niskiego na PD0 (odbiór).
  • SterControlSterControl
  • Poziom 17  
    Miałem podobną sytuację niedawno jak budowałem komunikacje pomiędzy sterownikiem i układem wykonawczym na RS485. Problem obiawiał się tym, że jedno z urządzeń nadmiarowo dostawało dodatkowe bajty z ramką, pomimo tego że ramka była prawidłowo transmitowana. W moim przypadku wymiana maxa485 załatwiła sprawę.
  • Poziom 33  
    Witam
    Mnie się schemat do końca nie podoba.
    Po pierwsze na tej długości kabla musisz obie strony zaterminować, inaczej nie zapewnisz dobrych warunków do transmisji sygnału.
    Po drugie wyjścia powinny być podwieszone opornikami do zasilania i masy.
    Zobacz na jakikolwiek schemat przemysłowy, wszędzie są oporniki rzędu 4,7K do masy i zasilania. Oprócz tego że transmitujesz sygnał kablem to na wejściu odbiornika powinien być zapewniony konkretny poziom linii w stosunku do masy i te oporniki 4,7K to zapewnią, jeśli chodzi o terminowanie to opornik 120Ω będzie dobry.
    Pozdrawiam
  • Poziom 6  
    PiotrPitucha napisał:
    Witam
    Zobacz na jakikolwiek schemat przemysłowy, wszędzie są oporniki rzędu 4,7K do masy i zasilania.


    Z tego co wyczytałem w standardzie MODBUS działającym na RS485,to polaryzacja linii nie jest niezbędna. Aczkolwiek spróbuję i tego.

    Zrobiłem też eksperyment, gdzie w ogóle nie miałem podłączonego kabla (pisałem o tym w poprzedniej wiadomości). Samo dotknięcie rezystorem 120om do zacisków A i B powodowało, że na nóżce PD0 mikrokontrolera pojawiał się sygnał niski; odjęcie rezystora powodowało powrót PD0 to stanu wysokiego.
  • Poziom 33  
    Witam
    Czytałem o terminatorach i pochwaliłem te 120Ω :)
    Niby Maxim o opornikach nie wspomina, ale już Texas ewidentnie je zaleca, dałbym dla spokoju sumienia, bo sam miałem problemy bez tych rezystorów, co skutkowało nie tylko problemami z transmisją ale też ubijaniem MAXów co miesiąc-dwa, po zainstalowaniu oporników problemy mi zniknęły.
    Moja linia miała ponad 200m, jeśli są dostępne dane katalogowe kabla to można dobrać terminatory precyzyjnie do impedancji kabla, typowe 120Ω powinno wystarczyć dla 100m linii.
    Pozdrawiam
  • Poziom 6  
    PiotrPitucha napisał:
    Witam
    Niby Maxim o opornikach nie wspomina, ale już Texas ewidentnie je zaleca, dałbym dla spokoju sumienia,


    Chciałem zapytać, czy masz na myśli te oporniki 120om, czy te podciągające do plusa i do masy?
  • Poziom 6  
    n0name10 napisał:
    Spróbuj z innym egzemplarzem max485. U mnie to było przyczyną.


    Sprawdziłem inne egzemplarze MAXa.

    Z ostatnio zakupionych MAX485ECPA na 2 jest źle, na 4 jest dobrze.
    Mam jakiś MAX487, na którym jest źle. Mam zwykły MAX485, na którym jest źle.

    Źle: przełączenie z nadawania na odbiór powoduje pojawienie się sygnału niskiego na linii odbioru mikrokontrolera, mimo tego że jeszcze zdalny nadajnik nie nadaje.
    Dobrze: przełączenie z nadawania na odbiór nie wpływa na sygnał linii odbioru mikrokontrolera -- pozostaje on w stanie wysokim do czasu, aż zdalny nadajnik zacznie nadawać dane.

    Teraz się zastanawiam, czy te układy są rzeczywiście uszkodzone, czy mój układ ma problemy, żeby pracować poprawnie. Czy z Waszego doświadczenia wynika, że z MAXami bywają tego typu problemy, czy raczej szukać przyczyn u siebie? Na anglojęzycznej grupie ktoś mi napisał, że bywają podróbki MAXów, które mają tego typu problemy.
  • Poziom 17  
    Spróbuj zgodnie z zaleceniami kolegi @PiotrPitucha dodać te rezystory pomiędzy zasilanie i masę. W moim przypadku był to jeden wadliwy egzemplarz na 8, reszta działała i działa bez zarzutów.
  • Poziom 6  
    n0name10 napisał:
    Spróbuj zgodnie z zaleceniami kolegi @PiotrPitucha dodać te rezystory pomiędzy zasilanie i masę. W moim przypadku był to jeden wadliwy egzemplarz na 8, reszta działała i działa bez zarzutów.


    Jutro to zrobię i dam znać. Dziś już próbowałem z rezystorami rzędu 500om. Próby te zakończyły się niepowodzeniem. Zdalny odbiornik zgłaszał "frame error".
  • Poziom 28  
    Ciekawi mnie po co równolegle z każdą diodą transoptora masz rezystor 2,2k?
  • Poziom 6  
    FastProject napisał:
    Ciekawi mnie po co równolegle z każdą diodą transoptora masz rezystor 2,2k?


    "Tłumienie zakłóceń. Robienie dzielnika. Żeby transoptor nie pobudził się od słabego zakłócenia. Typowo stosowane w wejściach transoptorów w sterownikach PLC Fatek, Siemens" -- szybka odpowiedź od "mojego" elektronika.

    Dodano po 42 [minuty]:

    PiotrPitucha napisał:
    Witam
    500Ω zbyt stłumi Ci sygnał i zepsuje dopasowanie do impedancji linii, w większości spotykanych układów jest to 4,7K.
    Pozdrawiam


    Jeśli dobrze rozumiem, to rezystory pullup i pulldown o wartości 4,7k dajemy wtedy, kiedy nie używamy terminatorów 120om? W przypadku zastosowania terminatorów 120om, maksymalne wartości rezystorów pullup i pulldown mogą wynosić 750om(?)

    Kolejne pytanie. Rezystory terminatorów oraz rezystory pullup i pulldown podłączamy do zewnętrznych zacisków urządzeń podpiętych do magistrali RS485(?) Jeśli tak, to skąd bierze się w praktyce zasilanie +5V, do którego podciągamy rezystor pullup? Korzystam z PLC Fatek i modułu FBs-CM25, który nie ma wyprowadzonego zasilania +5V; drugie urządzenie na linii też nie ma +5V. Czy to oznacza, że muszę zastosować dodatkowy zasilacz?

    Po lekturze różnych artykułów, dochodzę do przekonania, że zamiast podłączać rezystory pullup i pulldown (co jest kłopotliwe, gdyż: - czasem ciężko znaleźć zasilanie; - nie wiem, czy klient w ogóle to zrobi i czy prawidłowo) powinienem poszukać scalaka, który posiada "true failsafe feature for idle-bus condition".
    Zastanawiam się między dwoma układami:
    - SN65HVD3082EP,
    - SN65HVD485EP.
  • Poziom 33  
    Witam
    Terminatorów używamy zawsze by dopasować impedancję linii transmisyjnej.
    Oporniki 4,7K powodują ściągnięcie wejść do sensownego poziomu względem masy, inaczej napięcie wspólne na wejściu mogłoby blokować transmisję.
    Jeśli między układami transmisyjnymi ciągniesz przewód masy, to nie ma tego problemu, ale może się pojawić problem przepływu prądu w tym przewodzie.
    Pozdrawiam
  • Poziom 1  
    Błąd na błędzie.
    1. brak terminatora,
    2. brak wstępnej polaryzacji linii,
    3. brak kondensatorów blokujacych zasilanie przy transoptorach.
    4. zbędny rezystor równolegle do diod LED transoptorów.
    5. wskazane są kondensatory korygujące pojemność diod LED równolegle do R20, R17, R10 w końcu pojemnośćtych diod to koło 60pF,
    6. nie łączy siębezpośrednio stabilizatorów scalonych!!!
    7. C16 ma byćbezindukcyjny ceramik i w okolicach 2u+ coś w okolicy 100n.
    8. C15 też ma być ceramik i też mniejszy wystarczy.9. nie pamiętam i nie chce mi sięsprawdzaćale d5i d3 powinno byćróżne od D4 a tam sąhurtem jednego typu.
    9. skąd ta mania stosowania elektrolitów? majądużą rezystancję więc tętnienia bądą spore.
    10. nie ma praktycznie wcale elementów przeciwzakłóceniowych.......