Skocz do zawartości

Przesył danych z prędkością 1Mb/s


Sabre

Pomocna odpowiedź

Wkopałem się niemiłosiernie wiele lat temu i właśnie zdałem sobie z tego sprawę. Potrzebuję przesłać dane z prędkością 1Mb/s po kablu telefonicznym w bardzo zakłóconym środowisku na odległość około 2-2,5m. Miałem do tematu już dwa podejścia. Za każdym razem próbowałem przesłać dane metodą prądową, sterowałem transoptorem 6N137 (w odbiorniku) za pomocą szybkiej bramki SN74LVC1G126 (w nadajniku) sterowanej przez mikrokontroler Atmega328p. Na wyjściu 6N137 jest bramka NAND (NC7S00M5X) potrzebna, aby odwrócić zanegowany przez transoptor sygnał. 

W teorii wszystko miało działać, ale wyszedł mój brak wiedzy na temat kabli telefonicznych i prędkości przesyłu danych po czymś takim. Okazało się, że mój kabel jest żelazny i tylko pokryty miedzią. Pewnie nie tylko to jest przyczyną nieprawidłowych danych na wyjściu.

Czy da się to jeszcze jakoś uratować? Czy po takim kablu telefonicznym da się przesłać dane z prędkością 1Mb/s sterując prądem? 

Zaczynam się zastanawiać czy wybór 6N137 był dobrym rozwiązaniem. Jego wyjście wymaga podciągania do Vcc, użyłem rezystora 350 Om, i czy to nie spowoduje, że właśnie dane będą nieprawidłowe przez ten rezystor?

Mogę wymienić wszystko poza kablem, niestety kabel musi być ten i nie mogę go zmienić. Niestety nie posiadam oscyloskopu z prawdziwego zdarzenia, aby podejrzeć co się tam dzieje i gdzie jest problem.

Edytowano przez Sabre
Link do komentarza
Share on other sites

Ja na kablach telefonicznych też się nie znam, ale może spróbuję podrzucić jakieś tematy do przemyślenia.
Pierwsze co ja zrobiłem, to sprawdziłem czas narastania sygnału na bramce drivera. W dokumentacji nie ma tej wartości podanej, ale driver jest do aplikacji z maksymalną częstotliwością 100MHz, więc pewnie krawędzie mają czas narastania 1ns albo krócej. To zgodnie z kciukowym wzorem przekłada się na pasmo BW=0.35/t_r=350MHz. Zakładam, że przewód to para skręconych przewodów i przyjmując er_eff=1.0 (powietrze, chociaż pewnie nie do końca prawda), to górna długość fali wychodzi 85cm. A kolejna reguła kciuka mówi, że efektami związanymi z odbiciami, niedopasowaniem impedancji i całą tą 'czarną magią' trzeba się przejmować, gdy długość linii transmisyjnej jest dłuższa niż 1/6 długości fali, czyli  w tym przypadku to jest 85cm/6=14cm.

No Twoja linia jest deczko dłuższa niż wyznaczona powyżej, co oznacza, że przy niedopasowaniu impedancji drivera, linii oraz odbiornika będziesz miał odbicia.
Myślę, że ewentualny drugi efekt jaki tutaj może wchodzić, to związany z pojemnością oraz rezystancją linii, które potencjalnie mogą mocno tłumić sygnał - to już zależy od parametrów samego przewodu, które jakoś by trzeba spróbować policzyć/zmierzyć. Ale ja bym stawiał raczej na odbicia.

No i generalnie tak trochę tutaj kończy się moje doświadczenie, bo takich instalacji i komunikacji jak opisujesz nie rozkminiałem. Spróbowałbym zmniejszyć stromość zboczy sygnału (inny driver albo rezystor szeregowy przy driverze) albo jakoś mniej-więcej dopasować impedancję przy odbiorniku: dokumentacja nie podaje impedancji drivera, ale stawiałbym że w okolicach 30-50R - czyli musiałbyś dać rezystor równolegle z diodą w Twoim odbiorniku. Jaka wartość rezystora? Taka, żeby impedencja zastępcza rezystora i diody była taka, jak impedancja drivera. Nie wiadomo jaka jest impedancja diody (w ogóle nie jest przecież stała, więc ciężka sprawa). Chociaż teraz się zastanawiam, czy może nie lepiej dopasować impedancję odbiornika do impedancji linii transmisyjnej, wtedy będzie tylko odbicie przy przejściu driver->linia, a już przy linia->odbiornik nie (chyba, nie jestem pewien już...).

Fajnie jakby ktoś moje powyższe rozkminy skomentował, bo może herezje wypisuję. Wołam @marek1707, może on napisze jakieś mądre słowo albo dwa...

  • Pomogłeś! 1
Link do komentarza
Share on other sites

Ten kabel nie ma skręconych par, to 4 równoległe przewody ułożone na płasko. Ja połączyłem po dwa równolegle, może niepotrzebnie bo wzrosła pojemność. Zmierzyłem jedynie pojemność dla prądu stałego i wyszło mi 160pF dla około 2m kabla.

Może trochę dopiszę więcej informacji, po tym kablu przesyłam sygnał do diod WS2812B, tam są zbocza co 0,4us i 0,8us, zgodnie z ich protokołem. Zrobiłem jeszcze jedną rzecz w odbiorniku, bo przeciwrównolegle była dioda 1N4148 plus jakaś zenerka na 5,8V, usunąłem je obydwie, ale już dzisiaj nie zrobię testu ponieważ musiałbym przeprogramować mikrokontroler w nadajniku.

Link do komentarza
Share on other sites

Rozumiem, że jak postawiłeś nadajnik i odbiornik obok siebie i połączyłeś króciutkim przewodem to wszystko działało? Pomiędzy wyjściem bramki nadajnika a wejściem transoptora był rezystor ograniczający prąd?

  • Pomogłeś! 1
Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Szczerze, to nie sprawdziłem tego, z kilku powodów. Sprawdzę jutro, jeśli znajdę chwilę. Układ był podzielony, tzn. część jest lokalnie i działa wraz z układami wyjściowymi, a część ledów jest właśnie na kablach przez transoptory. Nie testowałem tego obok siebie bo na papierze wyglądało, że zadziała. Rezystor jest podzielony na pół, 180 Om na wyjściu przy nadajniku i 180 Om na wejściu przed transoptorem, pomiędzy rezystorami kabel.

Link do komentarza
Share on other sites

Cześć,

a czemu po prostu nie użyć RS485 (na taką odległość pójdzie po dowolnym kablu), lub RS422. Drugą opcją jest CAN (jeszcze odporniejszy na zakłócenia).

Pozdrawiam

  • Pomogłeś! 1
Link do komentarza
Share on other sites

Dzisiaj trochę nie mam czasu żeby wybebeszyć płytki i spiąć je na krótko, jutro mnie nie ma. Mam nadzieję, że w weekend wrócę do tematu. Co do RS485 to niekoniecznie on obsłuży taką prędkość transmisji, ale mogę się mylić. W ostateczności zmienię koncepcję i zamiast sterować ledami bezpośrednio, będę po kablu przekazywał tylko informację co ma się wyświetlać, a na miejscu kolejny mikrokontroler zinterpretuje tą informację i zamieni ją na sterowanie dla WS2812B. Wtedy pewnie wystarczy dużo niższa częstotliwość i sygnał przejdzie bez problemu przez moje ustrojstwo ;).

Wczoraj sobie przypomniałem dlaczego pod tynk poszedł ten kabel. Był tani, to po pierwsze, po drugie na początku to miało być sterowanie zwykłą tasiemką RGB. Kabel poszedł w ścianę, potem weszły diody inteligentne i koncepcja mi się zmieniła na właśnie WS2812B :).

Link do komentarza
Share on other sites

21 minut temu, Sabre napisał:

 Co do RS485 to niekoniecznie on obsłuży taką prędkość transmisji, ale mogę się mylić.

Hej,

Co do RS485:

Cytat: Największa rekomendowana w standardzie prędkość transmisji to 10Mb/s. Obecnie jednak szybkie interfejsy pracują z szybkością rzędu 40Mb/s.

Bardzo często używam RS485 (i RS422) - jestem prawie pewien,,że na taką odległość pójdzie z wymaganą prędkością nawet na bardzo słabym kablu.

Możesz też użyć CAN - ten na pewno da radę.

Pozdrawiam

  • Lubię! 1
  • Pomogłeś! 1
Link do komentarza
Share on other sites

Ok, ale w takim razie czy pominąć zupełnie transoptor i użyć 2 driverów RS485? Kabel leży razem z kablem od 230V, dlatego chciałem optoizolację.

Link do komentarza
Share on other sites

Cześć,

możesz użyć scalaka drivera RS485 z opto-izolacją, np.takiego:

https://www.maximintegrated.com/en/products/interface/transceivers/MAXM22511.html

Maksymalna prędkość transmisji dla tego układu to 25Mbps (MAXM22511).

To tylko przykład układu scalonego z opto-izolacją - jest ich sporo dostępnych.

Pozdrawiam

Edytowano przez FlyingDutch
  • Lubię! 1
  • Pomogłeś! 1
Link do komentarza
Share on other sites

Poniekąd wszystko jest jasne i wszystko już działa poprawnie. Nie do końca rozumiem dlaczego, ale działa. Tak jak mi doradzał @grg0 sprawdziłem czy wszystko działa na krótko. Okazało się, że z pominięciem kabla dalej jest tak samo, czyli brak właściwych kolorów na diodach WS2812B a zamiast animacji kolorów jest w przeważającej części kolor biały. Dało mi to poniekąd do myślenia, ten kolor biały, że może sygnał nie tyle nie przechodzi po kablu nieprawidłowo, co gdzieś jest brak negacji i sterowanie nie jest takie jak być powinno.

Do tej pory było tak:

dioda transoptora była zasilana z plusa a jej minus był zwierany sygnałem z bufora SN74LVC1G126 do masy, potem był 6N137 a na jego wyjściu bramka NAND ze spiętymi obydwoma wejściami i podciągniętymi przez rezystor 350 Om do Vcc, wyjście tej bramki szło na wejście diod WS2812B.

Teraz jest tak:

dioda transoptora jest zasilana sygnałem z bufora SN74LVC1G126 a jej katoda jest podłączona do masy. Reszta jest bez zmian, a mimo to działa. Odwróciłem sterowanie na wejściu i zaczęło działać.

Analizując połączenia doszedłem do wniosku, że oryginalne połączenie musiało nie dawać w którymś momencie odpowiedniego potencjału i nie przechodził sygnał poprawnie, pomimo, że z wejścia na wyjście sygnał jest dwukrotnie negowany niezależnie od połączenia 1 czy 2.

W pierwszym połączeniu 0 z mikrokontrolera za buforem było dalej 0, po przejściu przez 6N137 dawała 1 i po zanegowaniu przez NAND wychodziła znowu 0.

W nowym połączeniu jest tak, że 1 z mikrokontrolera za buforem daje 1, po przejściu przez 6N137 daje 0 i po zanegowaniu przez NAND wychodzi znowu 1.

Logika poprawna w obu przypadkach a mimo to pierwsze połączenie nie działało, dopiero zamiana sposobu sterowania diody 6N137 zadziałała.

Dziękuję wszystkim za pomoc, już dzisiaj nie mam głowy do analizowania tego czy któryś z elementów miał za małą wydajność prądową do odpowiedniego sterowania 0/1.

Teraz pora na kolejne wyzwanie, napisanie aplikacji na Androida, która przez BT sterowałaby ledami. Znacie jakieś proste środowisko do stworzenia takiej apki?

  • Lubię! 2
Link do komentarza
Share on other sites

Cieszę się, że działa. Przy okazji, kolejny post który przekonuje mnie, że ogromną pomocą przy dyskusji jest schemat. Wydaje mi się, że stosując typ połączenia nr 1 pojechałeś o jedną negację za daleko. Tę ostatnią.

  • Lubię! 1
Link do komentarza
Share on other sites

Ale schemat się nie zmienił jeśli chodzi o logikę. Zmieniłem tylko sposób w jaki steruję diodą, czy za pomocą logicznej 1 czy 0. Ilość negacji w obwodzie jest taka sama.

Nie wrzucałem schematu ze względu na brak elementów w bibliotece eagla (a nie czułem potrzeby ich tworzenia ze względu na jednostkowość użycia), mam na schemacie inne elementy wrzucone, które mają identyczne obudowy. W dokumentacji 6n137 każą zasilać anodę diody do Vcc a sterować od strony katody. I tak zrobiłem i mi to nie działało. Teraz steruję diodą od strony jej anody, a katoda jest podłączona do GND. Ilość negacji się przez to nie zmienia, bo czy starujesz 0 czy 1, obwód musi zanegować 2 razy ten sygnał bo raz neguje 6N137. Według mnie, któryś z elementów miał zbyt niską wydajność prądową i nie przechodziła jakaś 1 albo 0. Choć elementy dobierałem tak, aby tą wydajność miały jako source i jako sink, czyli i w 0 ,i w 1.

Link do komentarza
Share on other sites

Trzymając się Twojego opisu i konwencji.

Typ połączenia nr 1. Na wejściu bufora SN74LVC1G126 jest "0". Na wyjściu bufora jest "0", które włącza diodę transoptora. Włączona dioda transoptora daje "0" na wyjściu transoptora.

Typ połączenia nr 2. Na wejściu bufora SN74LVC1G126 jest "0". Na wyjściu bufora jest "0", które wyłącza diodę transoptora. Wyłączona dioda transoptora daje "1" na wyjściu transoptora.

Edytowano przez grg0
  • Pomogłeś! 1
Link do komentarza
Share on other sites

(edytowany)

@grg0 , no tak masz rację, nie wiem jak mogłem to przegapić, że sterowanie diodą dodaje kolejną negację.

Gdy tworzyłem schemat tego odbiornika, traktowałem 6N137 jako element, który neguje to co jest na wejściu. A przy sterowaniu zgodnym z dokumentacją, on nie neguje wejścia, bo 0 na diodzie da 0 na wyjściu. Eh, człowiek czasami zbyt szybko wszystko układa z tylko prostą analizą. Tak więc to co pisałem 2 posty wyżej jest błędne:

Dnia 9.02.2019 o 21:03, Sabre napisał:

W pierwszym połączeniu 0 z mikrokontrolera za buforem było dalej 0, po przejściu przez 6N137 dawała 1 i po zanegowaniu przez NAND wychodziła znowu 0. 

 

Edytowano przez Sabre
Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.