logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak zbudować układ zamieniający sygnały z przycisków/potencjometrów na CAN?

Tommaso32 15 Sie 2024 00:35 849 20
REKLAMA
  • #1 21191457
    Tommaso32
    Poziom 10  
    Posty: 10
    Ocena: 3
    Witam! Może ktoś z was będzie umiał podpowiedzieć, jak zbudować układ, który z sygnały przycisków lub potencjometrów będzie zamieniał na sygnały linii CAN? Podrzucam link do takiego układziku, czy umiałby ktoś rozgryźć to? ;)
    Pozdrowionka!
    https://www.ecumaster.com/files/devices/switchboard/switchboardManual.pdf
  • REKLAMA
  • REKLAMA
  • #3 21191490
    Tommaso32
    Poziom 10  
    Posty: 10
    Ocena: 3
    Chcę rozwiązać problem przetworzenia sygnału analogowego przycisku na sygnał cyfrowy na linii CAN

    Dodano po 1 [minuty]:

    Płytka od ECU MASTERA kosztuje 600 zł ponad i zastanawiam się, czy da się zrobić taki układ trochę taniej
  • #4 21191606
    _jta_
    Specjalista elektronik
    Posty: 48995
    Pomógł: 3209
    Ocena: 4238
    Prawdopodobnie firma w opracowanie tego układu włożyła grube miliony - masz ochotę też tyle włożyć w jego naśladowanie? Jeśli nie - nie wzoruj się na nich, szukaj innej drogi.

    Z tego, co widzę, ECU MASTER ma parę szybkości nadawania: 1M, 500k - na pewno potrzeba czegoś, co może nadawać z potrzebną szybkością. Pytanie, czy potrzebne jest tylko nadawanie, czy także wykrywanie kolizji, bądź odbieranie, bo od tego będzie zależeć stopień trudności. Jaki jest format bajtu, na ile trzeba trafić z szybkością? To pewnie określa jakiś standard, trzeba by poszukać jego opisu, pozbierać informacje...

    Najpierw wpisz w Google "magistrala can" i poczytaj - coś o tym pisze Botland i oferuje do tego moduły, gdzieś szczegółowo opisują, co jest wysyłane - trzeba to pozbierać.

    https://pl.wikipedia.org/wiki/Controller_Area_Network
    https://botland.com.pl/blog/magistrala-can-co-to-jest-i-jak-dziala/
    https://botland.com.pl/733-magistrala-can
    https://iautomatyka.pl/magistrala-can/
    https://kvaser.com/can-protocol-tutorial/
    - w tym ostatnim piszą o "Bit Stuffing" - dzięki temu jest możliwy poprawny odbiór przy niewielkiej różnicy szybkości (od około 8% zaczynają się błędy; wypada zadbać o ograniczenie odchylenia szybkości do 2%). I dobrze jest mieć moduł, który obsługuje ten "Stuffing" - a lepiej, żeby też obsługiwał parę innych elementów protokołu.
    Botland coś pisze, że Arduino może być za wolne do magistrali CAN - trzeba poczytać, może to dotyczy tylko niektórych (co tańszych) modułów CAN.

    Ale trzeba się liczyć z tym, że wyczytanie i zrozumienie, jak się robi łączność przez CAN, zajmie więcej czasu, niż zarobienie 600 zł...
  • REKLAMA
  • #5 21191978
    Kuniarz
    Moderator Projektowanie
    Posty: 4520
    Pomógł: 371
    Ocena: 825
    Tommaso32 napisał:
    czy da się zrobić taki układ trochę taniej

    Nie. Chyba że umiesz sam, to tak, zrobisz to po kosztach elementów + Twój czas. Jeśli nie umiesz sam, to nie zlecaj, no bo ile chciałbyś zapłacić, żeby było taniej niż 600 ? Dasz komuś dwie stówy, żeby dla Ciebie poświęcił tydzień pracy ?
    Pomogłem? Kup mi kawę.
  • #6 21192036
    jarek_lnx
    Poziom 43  
    Posty: 22660
    Pomógł: 4184
    Ocena: 6086
    Nie przesadzajcie z tymi milionami. To tylko płytka wejść/wyjść. Nie ma w tym żadnej wiedzy tajemnej.

    Można kupić płytkę deweloperską z CAN i mikrokontrolerem i napisać swój program. Jeśli nie programowałeś wcześniej mikrokontrolerów to zajmie to tyle czasu, że zakup płytki za 600zł jest atrakcyjny.

    Przykładowa płytka deweloperska za $25:
    Diagram płytki deweloperskiej CANBed z oznaczeniami pinów.
  • #7 21192038
    Tommaso32
    Poziom 10  
    Posty: 10
    Ocena: 3
    To nie chodzi o podkradanie pomysłu, czy zlecanie innym, tylko chciałbym for fun się pobawić i spróbować wykonać taki układ. Chodzi tylko i wyłącznie o przyciski analogowe, żeby przepuścić przez moduł wpięty w magistralę CAN. Pytanie, czy jest sens? Fakt faktem, dzięki za pomoc, nakierowaliście mnie, poczytam, popróbuję, zawsze to lepiej zrobić coś samemu niż kupować gotowca, większa frajda.
  • REKLAMA
  • #9 21193790
    ZbeeGin
    Poziom 39  
    Posty: 4326
    Pomógł: 602
    Ocena: 458
    _jta_ napisał:
    Z tego, co widzę, ECU MASTER ma parę szybkości nadawania: 1M, 500k - na pewno potrzeba czegoś, co może nadawać z potrzebną szybkością. Pytanie, czy potrzebne jest tylko nadawanie, czy także wykrywanie kolizji, bądź odbieranie, bo od tego będzie zależeć stopień trudności. Jaki jest format bajtu, na ile trzeba trafić z szybkością? To pewnie określa jakiś standard, trzeba by poszukać jego opisu, pozbierać informacje...

    Od strony sprzętowej wystarczy jakiś mikrokontroler ze sprzętowym FDCAN, np. STM32G0B1/C1 do tego transciever CAN który będzie mógł pracować z prędkością do 1Mbit. Reszta to już tylko układy dopasowujące sygnały wyjściowe, ADC, przetwornica lub stabilizator LDO.
    Samo uruchomienie CAN to naprawdę parę linijek kodu jeśli się skorzysta z bibliotek HAL: skonfigurowanie FDCAN, ustawienie FIFO, ewentualnie filtra odbiorczego, przygotowanie buforów Rx i Tx, i przypisanie odpowiednich callbacków. Wystarczy przejrzeć przykłady z repozytorium biblioteki HAL lub przeczytać i zrozumieć sekcję "How to use this driver" z pliku drivera HAL FDCAN.

    _jta_ napisał:
    Ale trzeba się liczyć z tym, że wyczytanie i zrozumienie, jak się robi łączność przez CAN, zajmie więcej czasu, niż zarobienie 600 zł...

    I dlatego większość trzeba powierzyć sprzętowi, który to ogarnie. Ty od strony programowej będziesz tylko obsługiwał gotowe dane jakie będą trafiać do mailboxów, albo też przygotowywał swoje komunikaty gdzie interesować cię będzie w zasadzie tylko ile bajtów z 8 (CAN2.0) / 64 (FDCAN) chcesz wysłać i jaki nadasz im ID (numer i format standard/extended).

    Jedyny problem w tym, że jeśli chcesz się wpiąć w istniejącą sieć CAN (np. w samochodzie) to nie możesz nadawać numerów ID jakie ci się podobają tylko takie, które nie występują w normalnej transmisji ECU<->DEVICE na danej magistrali. Zatem trzeba będzie najpierw nieco posniffować magistralę.
  • #11 21198610
    ZbeeGin
    Poziom 39  
    Posty: 4326
    Pomógł: 602
    Ocena: 458
    Uważam, że nie trzeba szukać dodatkowego modułu. Wystarczy MCU który ma sprzętowy CAN2.0/FDCAN na pokładzie i kawałek aplikacji. A CAN traktować tylko jako medium przesyłowe.

    Właśnie teraz mam na stole dwa STM32, które ze sobą gadają po CAN. STM32F103 z CAN2.0, udaje hosta OBDII i odpowiada na niektóre wybrane PIDy z zestawu 1, dodatkowo robi pewien "szum informacyjny" na łączu. Druga płytka z STM32G0B1 która ma FDCAN wysyła zapytania, analizuje odpowiedzi i sprawdza dodatkowo 5 wejść analogowych by realizować swoje zadania.
  • #12 21198849
    _jta_
    Specjalista elektronik
    Posty: 48995
    Pomógł: 3209
    Ocena: 4238
    ZbeeGin napisał:
    Wystarczy MCU który ma sprzętowy CAN2.0/FDCAN na pokładzie

    Plus dopasowanie standardu sygnałów, bo sam MCU ma raczej tylko logikę. Ale jest jeszcze kwestia zaprogramowania MCU - z Arduino urządzono tak, by było to łatwe, a z tym MCU może być znacznie trudniej.
  • #13 21200285
    ZbeeGin
    Poziom 39  
    Posty: 4326
    Pomógł: 602
    Ocena: 458
    _jta_ napisał:
    Plus dopasowanie standardu sygnałów, bo sam MCU ma raczej tylko logikę.

    Zewnętrzny układ zapewniający fizyczną warstwę łącza to raczej standard w wielu protokołach.

    _jta_ napisał:
    Ale jest jeszcze kwestia zaprogramowania MCU - z Arduino urządzono tak, by było to łatwe, a z tym MCU może być znacznie trudniej.

    To może jakiś dość banalny przykład, który nadaje CAN-em stan LEDów, które można przełączać podłączonym do MCU (STM32F103) joystickiem.

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #14 21202996
    _jta_
    Specjalista elektronik
    Posty: 48995
    Pomógł: 3209
    Ocena: 4238
    Popatrzyłem, co oferuje Botland:

    1. Moduł z interfejsem CAN - SN65HVD230 - Waveshare 3945
    2. Moduł CAN Bus - TJA1051T/3 - Adafruit 5708
    - podobna cena (rzędu 20zł) i funkcjonalność: dopasowanie poziomów sygnałów do magistrali CAN; 2 o parę zł droższy, ale ma lepsze parametry - wytzymuje dużo większe napięcia na liniach CAN, pozwala na szybszą komunikację (1: 1Mb/s, 2: 5Mb/s)... ale oba tylko przekazują sygnały, potrzebują "kontrolera" CAN.

    3. Grove - moduł CAN Bus - GD32E103 - Seeedstudio 114992978
    - tu już cena około 40zł, ale o ile rozumiem, może się z tym łączyć Arduino poprzez UART-a, a to robi komunikację z magistralą CAN, z szybkością do 5Mb/s; jest do tego biblioteka do Arduino; komunikacja z modułem używa poleceń AT - można zamiast Arduino użyć innego procesora.

    4. RS485/CAN Shield - nakładka do Arduino - Waveshare 10771 - cena 40zł, a funkcjonalność jak 1 + RS485 - myślę, że nie ma sensu tego próbować.
    (dalsze nakładki o podobnej fukcjonalności pominąłem)

    5. RP2040 CAN Bus Feather - moduł CAN Bus z mikrokontrolerem RP2040 - MCP2515 - STEMMA QT - Adafruit 5724
    - zawiera procesor RP2040 (Cortex-M0), transmisja CAN 1Mb/s.

    Jak dla mnie, najbardziej zachęcająco wygląda 3, i na tym chyba najszybciej można coś zrobić.
  • #15 21203053
    ZbeeGin
    Poziom 39  
    Posty: 4326
    Pomógł: 602
    Ocena: 458
    _jta_ napisał:
    3. Grove - moduł CAN Bus - GD32E103 - Seeedstudio 114992978
    - tu już cena około 40zł, ale o ile rozumiem, może się z tym łączyć Arduino poprzez UART-a, a to robi komunikację z magistralą CAN, z szybkością do 5Mb/s; jest do tego biblioteka do Arduino; komunikacja z modułem używa poleceń AT - można zamiast Arduino użyć innego procesora.
    (...)
    Jak dla mnie, najbardziej zachęcająco wygląda 3, i na tym chyba najszybciej można coś zrobić.

    Co do szybkości implementacji, jest OK.
    Co do zasadności takiej implementacji: zupełnie nie potrzebna komplikacja. Wykorzystanie modułu CAN z klonem MCU F103 na pokładzie i wewnętrznym kodem udającym modem, po to by go spiąć z jakimś Ardu, który będzie przetwarzał to co dostaje na ADC na polecenia AT... Dwa MCU do tak prostego zadania?
  • #16 21203086
    _jta_
    Specjalista elektronik
    Posty: 48995
    Pomógł: 3209
    Ocena: 4238
    Dzięki temu unika się pisania programów krytycznych czasowo, i oprogramowania protokołu, co nie jest łatwe, zwłaszcza dla początkującego. A tu masz tę część gotową.

    Na ABC-RC.PL znalazłem jakieś tańsze moduły do CAN - około 6zł podłączany do portu szeregowego Arduino (pytanie, jaką szybkość wyciąga, bo pewnie to Arduino ją ogranicza - standardowa biblioteka do 115 200, ale ponoć da się wyciągnąć 2Mbaud), i około 12zł podłączany do SPI. Ale nie wiem, jak będzie z napisaniem oprogramowania, które by działało - pewnie Arduino ma dostawać wszystko, co idzie magistralą, i trzeba nadążyć z przetwarzaniem, a jednocześnie odczytywać bajty z portu.
  • #17 21203107
    ZbeeGin
    Poziom 39  
    Posty: 4326
    Pomógł: 602
    Ocena: 458
    _jta_ napisał:
    Na ABC-RC.PL znalazłem jakieś tańsze moduły do CAN - około 6zł podłączany do portu szeregowego Arduino

    Ten? https://abc-rc.pl/pl/products/modul-interfejs...werter-rs232-can-arduino-9450.html?query_id=1
    To lepiej im napisz, by nie wprowadzali kupujących w błąd. To jest tylko transciever a nie konwerter CAN-RS232. Linii RX i TX nie łączy się z UART_RX/TX tylko z CAN_RX/TX.
  • #18 21203131
    drunek
    Poziom 25  
    Posty: 729
    Pomógł: 86
    Ocena: 219
    Płytka Nucleo z STM32 obsługującym CAN (na przykład STM32F303) będzie najlepszym rozwiązaniem. To koszt kilkudziesięciu złotych.
    Żadnego Arduino nie ma najmniejszego sensu dziś używać.
  • #19 21203184
    _jta_
    Specjalista elektronik
    Posty: 48995
    Pomógł: 3209
    Ocena: 4238
    Ale te tanie moduły, to często nie kontrolery, a konwertery parametrów elektrycznych sygnałów (choć ten z ABC-RC.PL za 12 zł zawiera i kontroler, na Allegro jest taki za 15zł, ma MCP2515 i TJA1050, Botland ma podobny za około 67zł; MCP2515 ma filtrowanie). Pierwszy kontroler CAN u Botlanda to ten za 40zł. Nie wiem, w jakiej cenie można mieć moduł z MCU + kontrolerem CAN - Botland ma w cenie około 120zł (pozycja 5), na Allegro nie znalazłem żadnego.

    :arrow: drunek - STM32 NUCLEO-F303K8 z Cortex M4? Botland sprzedaje to na Allegro za 62zł. Albo za 66zł z F303RE.

    Arduino jest łatwy do użycia. Próbowałem kiedyś STM32, ale tam jest sporo generatorów zegarowych do poustawiania, i trzeba nieźle się natrudzić, żeby znaleźć ustawienie, przy którym w miarę wszystko będzie prawidłowo działać. A i tak nie wszystko się dało: np. maksymalnej szybkości ADC nie dało się pogodzić z używaniem portu USB.
  • #20 21203213
    drunek
    Poziom 25  
    Posty: 729
    Pomógł: 86
    Ocena: 219
    _jta_ napisał:
    STM32 NUCLEO-F303K8 z Cortex M4?

    Na przykład.
    Co do timerów - to fakt, ale nie powinno się ustawiać ich na ślepo. Są pewne zasady, jesli się ich przestrzega, nie będzie większego problemu. Niestety należy tej wiedzy szukać głównie w anglojęzycznym Internecie. Trzeba też czytać noty katalogowe dość dokładnie.
    Ważna też jest odpowiednia konfiguracja przerwań.
  • #21 21203340
    _jta_
    Specjalista elektronik
    Posty: 48995
    Pomógł: 3209
    Ocena: 4238
    Chodzi o sygnały zegarowe, nie timery. Generowanie sygnałów zegara dla ADC i zegara dla USB ma część wspólną, i nie ma takiego ustawienia, żeby ADC chodziło z pełną szybkością, a jednocześnie port USB mógł działać - jak ma on działać, to trzeba spowolnić ADC, o ile pamiętam, to pełna szybkość jest 1 MSPS, a trzeba spowolnić o 1/6, do 0,833 MSPS (czyli mieć czas przetwarzania 1,2µs). To jest wciąż dużo (prawie 12x) lepiej od Arduino, które ma 12-bitowe ADC z zegarem 1MHz, co daje czas 14µs.

    Ale żeby dotrzeć do takich informacji, trzeba się nieźle wczytać w noty katalogowe - spędzić na tym z kilkanaście godzin, a może więcej.

    Może być jeszcze jedna pułapka: kolejność ustawiania generatorów sygnałów zegarowych - nieodpowiednia może spowodować zawieszenie.

    Z Arduino takich problemów nie ma. Ale za to jest z kilkanaście razy wolniejsze. Cóż, szybkość ma swoją cenę - wymaga więcej pracy.

Podsumowanie tematu

✨ Użytkownik poszukuje sposobu na zbudowanie układu, który przetwarza sygnały z przycisków i potencjometrów na sygnały magistrali CAN. W odpowiedziach podano różne podejścia, w tym wykorzystanie mikrokontrolerów z wbudowanym interfejsem CAN, takich jak STM32, oraz płytki deweloperskie. Zasugerowano użycie Arduino z modułem CAN, co może być prostsze dla początkujących. Wskazano również na potrzebę zrozumienia standardów CAN oraz możliwości programowania mikrokontrolerów. Użytkownicy podzielili się linkami do zasobów edukacyjnych oraz przykładami komponentów, które mogą być użyte w projekcie.
Podsumowanie wygenerowane przez AI na podstawie treści dyskusji.
REKLAMA