Skocz do zawartości
volt240

UART i kontrola błędów transmisji

Pomocna odpowiedź

Napisano (edytowany)

Witam,

Mam układ zbudowany na Arduino MEGA 2560 jako centrali i 3 układy peryferyjne na Arduino NANO.

Centrala zawiera wyświetlacze, klawiaturę, kilka przycisków do sterowania i zasilacz 2x150W i oczywiście Arduino Mega.

Peryferia to silnik DC ze sterownikiem PWM i czujnikiem indukcyjnym który mierzy prędkość obrotową na wale sterowanego silnika oraz kilka czujników temperatury DS18.

Komunikacja między centralą a peryferiami odbywa się przez UART. Centrala odpytuje peryferia i wysyła do nich dane. Peryferia nigdy same jako pierwsze nic nie nadają.

Problem polega na tym że urządzenie pracuje w warsztacie gdzie jest bardzo dużo zakłóceń, przez co dane przychodzą zafałszowane.

Prędkość transmisji: 19200

Odległość peryferiów od centrali od 1 do 4 metrów. Kabel: skrętka ekranowana, ekran podpięty do masy tylko z jednej strony. Linia TX w parze z masą, tak samo linia RX.

Moje pytania:

1. Jakie rozwiązania sprzętowe mogę zastosować aby poprawić jakość transmisji

2. Jakie rozwiązania programowe mogę zastosować aby zabezpieczyć się przez przekazywaniem niewłaściwych danych.

 

Jako ciekawostkę dodam że próby spawania TIGiem w odległości 3m od maszyny powoduje resety układów (w momencie zajażania łuku)

Edytowano przez volt240

Udostępnij ten post


Link to post
Share on other sites
10 godzin temu, volt240 napisał:

Jakie rozwiązania programowe mogę zastosować aby zabezpieczyć się przez przekazywaniem niewłaściwych danych.

Może suma kontrolna CRC?

  • Lubię! 2

Udostępnij ten post


Link to post
Share on other sites
(edytowany)
10 godzin temu, volt240 napisał:

Witam,

Moje pytania:

1. Jakie rozwiązania sprzętowe mogę zastosować aby poprawić jakość transmisji

2. Jakie rozwiązania programowe mogę zastosować aby zabezpieczyć się przez przekazywaniem niewłaściwych danych.

 

Jako ciekawostkę dodam że próby spawania TIGiem w odległości 3m od maszyny powoduje resety układów (w momencie zajażania łuku)

Cześć,

1) Rozwiązanie prostsze: konwerter UART-RS485 (lub RS422) - pętla prądowa na prawidłowym kablu niweluje indukowane zakłócenia.

2) Trudniejsze: magistrala CAN - ma bardzo dobrą korekcję błędów sprzętową.

Rozwiązań programowych jest sporo: od liczenia prostych sum kontrolnych po kody korekcyjne.

Pozdrawiam

 

Edytowano przez FlyingDutch
  • Lubię! 2

Udostępnij ten post


Link to post
Share on other sites

Ekranowanie całych układów jest obecne? Też może mieć wpływ na występowanie błędów i na resety urządzeń.

RS485 powinno załatwić sprawę, przynajmniej w większości przypadków.

Ekrany podłączone z jednej strony, a z drugiej "wiszą"? Swego czasu widziałem, jak duża firma na polskim rynku zmagała się z problemem ekranowania przewodów - było za dużo zakłóceń, nie przechodziło testów itp. Problem rozwiązało wstawienie kondensatora w szeregu między ekranem modułu odbiorczego a masą tego modułu (ekran połączony z masą przez kondensator 100nF) + zwiększenie prądów transmisyjnych (o ile dobrze pamiętam to coś około 5 razy zwiększyli prąd). Oczywiście z drugiej strony było normalne połączenie do masy. Niestety nie wiem czy to rozwiąże problem, kiedyś widziałem takie rozwiązanie które się sprawdziło 🙂

  • Lubię! 2

Udostępnij ten post


Link to post
Share on other sites

Dzięki wszystkim za odpowiedzi. Szkoda że wcześniej nie wpadłem na rs485 bo widzę że to jest idealne rozwiązanie dla mojej sytuacji. Na szczęście widzę ze są gotowe moduły do arduino.  Niestety nie mam żadnego ekranowania w obudowach poszczególnych peryferiow. Czy oklejanie ich taśma aluminiową i podłączenie jej do masy ma jakiś sens ? 

Ewentualnie myślę jeszcze o wymianie obudów na metalowe i podłączenie ich do masy.

Myślałem także o zastosowaniu prostej sumy kontrolnej. Moja komunikacja działa w ten sposób ze najpierw wysyłam numer komendy a następnie dane. Myślę żeby dołożyć jako trzeci parametr sumę "numer komendy + dane". 

Czy dobrze kombinuje ?

  • Lubię! 2

Udostępnij ten post


Link to post
Share on other sites
9 godzin temu, volt240 napisał:

Ewentualnie myślę jeszcze o wymianie obudów na metalowe i podłączenie ich do masy.

Myślałem także o zastosowaniu prostej sumy kontrolnej.

W trudnych warunkach nawet lepiej gdy będziesz łączył różne metody zabezpieczające przez błędami transmisji.

  • Lubię! 1

Udostępnij ten post


Link to post
Share on other sites

Żeby nie bałaganić na forum dopytam jeszcze w tym temacie. Pytanie dotyczy układów w tym samym urządzeniu co poprzednie, tak więc środowisko z wieloma zakłóceniami od innych maszyn.

Otóż w maszynie pracują trzy silniki DC ( każdy układ peryferyjny steruje i kontroluje pracę jednego z nich).

Arduino nano generuje PWM -> mostek H mocy -> Silnik DC

Ten sam układ zbiera sygnały z czujnika indukcyjnego NPN który wychwytuje zęby łańcuchowego koła zębatego (3/8" 30 zębów dołączam zdjęcie - niestety przed zamontowaniem czujnika indukcyjnego). Prędkość obrotowa kół podczas pracy to 10rpm albo 5rpm (czyli 5 lub 2,5 ząba na sekundę). Układ zaprogramowałem tak żeby zliczał czas pomiędzy kolejnymi zębami na tej podstawie obliczał prędkość i korygował "co ząb" niestety z powodu małej prędkości obrotowej odpada uśrednianie na podstawie kilku zębów lub  pomiar co jakiś czas (układ musi szybko i płynnie reagować na zmienne obciążenia).

Całe te koła zębate osadzone są na śrubie trapezowej  (Tr24x5) dzięki czemu wiem że jeden obrót koła zębatego oznacza przesunięcie stołu o 5mm, i w ten sposób maszyna miała znać w każdej chwili dokładne położenie stołu.

Problem polega na tym że czujnik indukcyjny prawdopodobnie szaleje od zakłóceń i zlicza za dużo impulsów, przez co po przejechaniu około 150cm układ widzi przejazd o 200cm.

Czujnik jest podłączony bezpośrednio do pinu INT0 arduino nano (pin podciągnięty wewnętrznie do vcc). Programowo jest raczej wszystko ok.

Jakieś pomysły jak odfiltrować zakłócenia z czujnika sprzętowo?

zk.jpg

Udostępnij ten post


Link to post
Share on other sites
Dnia 17.03.2019 o 19:22, volt240 napisał:

Jakieś pomysły jak odfiltrować zakłócenia z czujnika sprzętowo?

Tutaj problem może być dwojaki.

Czujnik może przez zakłócenia błędnie zliczać, albo problemem jest "wskakiwanie błędów do transmisji".

Problem z wskakiwaniem błędów w transmisji można spróbować rozwiązać poprzez rozsunięcie napięć i FDP. Po prostu wyjście z czujnika podłączasz do jakiegoś tranzystora który będzie kluczował jakieś większe napięcie (12, 24v?), na wejście układu pomiarowego dajesz jakiś układ odbiorczy z FDP na wejściu (by odfiltrować zakłócenia)  i by na wyjściu tego układu uzyskać napięcie które nie zabije nano. Trzeba tylko pamiętać by układ odbiorczy miał szeroką pętlę przełączania (histerezy, shmitta), by jakieś nieprzefiltrowane zakłócenia przypadkiem nie przełączyły stanu.

Udostępnij ten post


Link to post
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Gość
Napisz odpowiedź...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.


×
×
  • Utwórz nowe...