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

[STM32] - Brak komunikacji na magistrali RS485

14 Gru 2014 21:51 2073 2
  • Poziom 28  
    Problem pojawia się na mikrokontrolerze STM32F100RB, aczkolwiek wydaje mi się, że nie ma on związku z samym mikrokontrolerem.

    Próbuje odczytywać dane z ultradźwiękowego anemometru, który jako jedyną magistralę cyfrową posiada RS485 (ma też wyjścia analogowe). Podłączam go do mojego sterownika przy pomocy takiego konwertera: [ciach] Konwerter RS485 - TTL na układzie MAX485 . Jest on oparty na układzie MAX485 a jego schemat wygląda następująco:
    [STM32] - Brak komunikacji na magistrali RS485
    Pomimo dwóch dni intensywnych prób nawiązania komunikacji, urządzenie milczy jak zaklęte. Przyznaje się, że w daleko posuniętej trosce o poprawe podłączenie zasilania do kosztującego kilka tysięcy pln czujnika, odwróciłem "na dzień dobry" zasilanie do tego MAXa, aczkolwiek dalsze eksperymenty wykazały, że chyba przeżył.

    Czujnik jest ustawiony do pracy jako halfduplex na jednej parze skrętki, z prędkością 19200bps. O wewnętrznej budowie jego interfejsu RS485 nie wiem nic poza tym, że jest separowany elektrycznie.

    Moje obserwacje są takie:
    1. Z biegiem prób wylutowałem z interfejsu rezystory 10K podciągające linie DI, DE, ~RE do napięcia 5V, ponieważ STM32 pracuje na logice +3.3V, a UART sam w sobie ma wyjścia Push-Pull. Nie poprawiło to jednak niczego.
    1. Odłączony od konwertera czujnik, po podaniu zasilania wystawia na RSie ok 4V napięcia różnicowego (mierzonego pomiędzy A i B)
    2. Konweter po podłączeniu zasilania i niskim stanie (dokładnie na wysokiej impedancji) na ~RE, DE i DI daje 1.7V napięcia pomiędzy niepodłączonymi liniami A i B
    3. Po podaniu stanu wysokiego (3.3V) na ~RE i DE jednocześnie, przy niskim stanie (wysokiej impedancji) na DI, napięcie pomiędzy A i B spada do 0V
    4. Sam czujnik jest sprawny. Pobiera tyle prądu ile powinien, a przebiegi na wyjściach analogowych są poprawne
    5. Używając oscyloskopu bez single-shot i pamięci przebiegu (niestety innego nie miałem pod ręką) widać, że przy nadawaniu plamka się rusza, także chyba coś na RS485 wychodzi. Nie widać jednak jakichkolwiek prób odpowiedzi czujnika na komunikację.

    Zastanawiam się, czy takie zachowanie tego konwertera jest poprawne, czy też odwrócenie polaryzacji zasilania go utłukło. Jak miej więcej powinny wyglądać poprawne przebiegi wyjściowe na magistrali? Jakie minimalne napięcie różnicowe uznaje się wg. standardu jako logiczną jedynke? Sama obsługa programowa jest raczej poprawna. Mój sterownik po wyrzuceniu przerwania TXE, po załadowaniu ostatniego bajtu czeka na zakończenie transmisji (flaga USART_SR_TC) i dopiero wtedy ustawia niski stan na ~RE i DE. Stan wysoki jest ustawiony w momencie wywoływania funkcji do inicjacji tranmisji, jeszcze przed włączeniem przerwań i przygotowaniem buforu do transmisji.

    Moderowany przez piotrva:

    3.1.18. Publikowania informacji do źródeł, które po pewnym czasie wygasają (publikowanie odnośników do stron o charakterze krótkotrwałym).
    Nie chcąc przenosić wątku do tematu z pytaniami o zakup itp. link usunąłem i pozostawiłem opis ;)

  • Specjalista - Mikrokontrolery
    EBC41 napisał:
    Jak miej więcej powinny wyglądać poprawne przebiegi wyjściowe na magistrali? Jakie minimalne napięcie różnicowe uznaje się wg. standardu jako logiczną jedynke?

    Masz wszystko w dokumentacji MAX485 co i jak powinno być przy danym zasilaniu.
  • Poziom 28  
    Problem rozwiazany. Jednak kowerter był uszkodzony. Z nowym wszystko działa OK