• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Komunikacja pomiędzy dwoma Arduino.
#1
Witam, dostałem projekt na studiach związany z Arduino. Moją częścią projektu jest zaimplementowanie komunikacji pomiędzy Arduino Mega, a Arduino Nano. Arduino Mega ma zadawać prędkość obrotową silnika, a Arduino Nano ma wysterować silnik i poprzez sprzężenie zwrotne odczytywać informację o stanie prędkości obrotowej po czym wysyłać spowrotem informację do Mega.

Komunikację chciałem oprzeć na I2C ale nie jestem znawcą tematu i zastanawiam się czy jest to możliwe. Końcowo Arduino Mega ma za zadanie przesyłać informację o prędkości do 6 Arduino Nano. Czy nie lepszy będzie tryb 1-wire? Chciałbym wybrać tryb komunikacji, który byłby w stanie to obsłużyć. Informacja ma zostać wysłana w zakresie od np 0 - 10000 obr/min.
 
Odpowiedź
#2
(28-12-2018, 12:23)owerel209 napisał(a): Komunikację chciałem oprzeć na I2C ale nie jestem znawcą tematu i zastanawiam się czy jest to możliwe. Końcowo Arduino Mega ma za zadanie przesyłać informację o prędkości do 6 Arduino Nano. Czy nie lepszy będzie tryb 1-wire? Chciałbym wybrać tryb komunikacji, który byłby w stanie to obsłużyć. Informacja ma zostać wysłana w zakresie od np 0 - 10000 obr/min.
I2C jest wolne, 1-Wire jeszcze wolniejsze. Ponadto, 1-Wire chyba jeszcze nada wymaga licencji na slave.
Jak często mają być odczytywane informacje z NANO?
 
Odpowiedź
#3
Ta, I2C jest koszmarnie wolne. Maksymalna prędkość to 100 - 800 tysięcy bitów/s. Jak będziesz mógł żyć z tym, że transmisja jednego int (16 bitów) do jednego UNO zajmie jakieś 40us to jest jednak OK. Ja bym nie zasnął Big Grin
W załączniku wrzuciłem przykład dla mastera i sleva takiej komunikacji. Jak odległość między urządzeniami jest "pudełkowa" do kilkudziesięciu cm, to można użyć SPI lub I2C, jak są większe odległości to UART/RS485, 1Wire (tylko do celów hobbystycznych - licencje), komunikacja sieciowa z ESP8266 (również zamiast UNO) lub shieldem Ethernet.


Załączone pliki
.zip   Arduino.zip (Rozmiar: 1.14 KB / Pobrań: 26)
Miło być decenianym https://buycoffee.to/kaczakat
 
Odpowiedź
#4
(28-12-2018, 20:43)es2 napisał(a):
(28-12-2018, 20:08)kaczakat napisał(a): Ta, I2C jest koszmarnie wolne. Maksymalna prędkość to 100 - 800 tysięcy bitów/s.
I2C - NIEPRAWDA! 3,4MHz, sam policz jaka jest przepływność jak potrafisz?

(28-12-2018, 20:08)kaczakat napisał(a): 1Wire (tylko do celów hobbystycznych - licencje)
1-Wire - po co powtarzać to co juz wcześniej napisałem? Aby sie dowartościować?
Prosiłbym bardzo o nie infliktowanie kolegi w moim temacie. Zachowujmy się jak gentelmeni Smile dziękuje bardzo za fachową odpowiedź w takim razie zostaję przy interfejsie I2C(chyba,że jest inna możliwość) moje pytanie jest jednak takie czy klon MEGA jest w stanie ogarnac 6x I2c na raz. Projekt ma w zamyśle objąć sterowaniem hexacoptera. 40 mikro na wysłanie pojedyńczego polecenia wydaje mi się strasznie długo zwłaszcza że informacja ma być wysterowana odczytana, przetworzona i wysłana spowrotem do jednostki sterującej. Zastanawiam się czy całe przedsięwzięcie jest możliwe do ogarnięcia. Czy jest możliwość ogarnięcia jakiegoś szybszego interfejsu komunikacyjnego? Odległość między slave'ami a masterem jest mniejwięcej 20-30 cm

p.s (żartobliwie) komunikacja ma być na tyle szybka, by dron nie pierd****ł o ziemię Smile
 
Odpowiedź
#5
Użyj Bluetooth 4.0 ? Uart ?
 
Odpowiedź
#6
A czemu nie wifi?
Udp jak chcesz szybko..

Wysłane z mojego SM-G950F przy użyciu Tapatalka
 
Odpowiedź
#7
(29-12-2018, 13:27)wchpikus napisał(a): A czemu nie wifi?
Udp jak chcesz szybko..
Co da Wi-Fi, USP jak 2,5Mb/s dla AVR to szczyt szczytów?
Tyle to sobie po RS485/422 zrobi płaca 1zł za driver a nie np 13zł za ESP.
 
Odpowiedź
#8
(29-12-2018, 04:44)es2 napisał(a): Złe podejście do tematu. Ogarnięcie tego na kilku uC będzie wymagało "trochę" obliczeń, prościej zrobić to na jednym uC..
I2C może działać nawet 3,4Mb/s ale nie na AVR! Na ARM nie ma problemu! W temacie ARM łatwiej pomóc!
Nawet na AVR temat jest do ogarnięcia ale....
wymaga sporego nakładu pracy!

Problem polega na tym, że dron już jest. Zrobiony na Arduino MEGA - lata ale jest niestabilny. Według założenia wykładowcy pojedyńczy mikrokontroler nie jest w stanie ogarnąć sześciu silników jednocześnie, stąd koncepcja przerzucenia sterowania silnikami do sześciu osobnych mikrokontrolerów zarządzanych przez jednego Mastera - który ma za zadanie tylko zadawać i kontrolować prędkość. Temat został mi narzucony więc nie mam zbytnio pola manewru.

Konkluzja jest taka, że jeżeli zostanę przy tej koncepcji to najlepszy rozwiązaniem pozostaje I2c tak ?
 
Odpowiedź
#9
(29-12-2018, 16:26)owerel209 napisał(a): Problem polega na tym, że dron już jest. Zrobiony na Arduino MEGA - lata ale jest niestabilny. Według założenia wykładowcy pojedyńczy mikrokontroler nie jest w stanie ogarnąć sześciu silników jednocześnie, stąd koncepcja przerzucenia sterowania silnikami do sześciu osobnych mikrokontrolerów zarządzanych przez jednego Mastera - który ma za zadanie tylko zadawać i kontrolować prędkość. Temat został mi narzucony więc nie mam zbytnio pola manewru.
Co to za silniki? Mega2560 ma sporo PWM powinno wystarczyć, jeśli nie to źle został wybrany uC.
Może PWM zrealizowano programowo? Jeśli tak to źle napisany program. Może funkcje programu sa blokujące? Pokaż program, schemat.

(29-12-2018, 16:26)owerel209 napisał(a): Konkluzja jest taka, że jeżeli zostanę przy tej koncepcji to najlepszy rozwiązaniem pozostaje I2c tak ?
I2C ma tą zaletę, że wymaga tylko 2 drutów ale jest wolny co w tym przypadku jest bez znaczenia.

(29-12-2018, 16:26)owerel209 napisał(a): moje pytanie jest jednak takie czy klon MEGA jest w stanie ogarnac 6x I2c na raz.
Po co 6 I2C? Tylko nieliczne ARM maja tyle.

Kolejne możliwości to SPI ale wymaga aż 3 drutów + po jednym na każdego slave czyli razem 9.
UART i RS485, tylko dwa druty.
 
Odpowiedź
#10
Silniki to BLDC Redoxa wysterowane przez sygnały PWM przenikające przez regulatory ESC dedykowane do tego typu silników. Również wydaje mi się że problemem jest jądro platformy sterującej jednakże nic nie da, że się wychylę z moją teorią. Niejeden dron lata na armi'e ale niestety moim zadaniem jest doprowadzenie do tego aby AVR ogarnął. Mógłbym się długo rozpisywać o problemie bo temat jest szeroki, luzy na utwierdzeniach silników, różnice w rzeczywistym ciągu każdego z silników i wiele wiele innych niewiadomych. Chciałbym zrobić po prostu coś w kierunku który wskazał mi wykładowca czy to będzie działać czy nie o mnie za mnie. Dlatego ostatecznie zadaję pytanie w który interfejs komunikacyjny powinienem się skierować?
Mając na uwadze możliwości komunikacyjne platformy A Mega i Nano (klon) - musi być opcja obsłużenia 6 slave'ów.
Ilość drutów nie ma znaczenia, liczy się możliwość podłączenia całego układu, nawet jak to nie jest możliwe do obsłużenia chciałbym, aby z mojej strony komunikacja była optymalna i na miarę możliwości najszybsza ze wszystkich możliwych opcji.
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości