tło
Opracowuję projekt, który będzie wymagał skromnych specyfikacji mikrokontrolera:
- 8 12-bitowych przetworników ADC 10 kHz
- 1kB pamięci RAM
- 48-QFN lub mniejszy rozmiar
- Protokół komunikacyjny odporny na zakłócenia i korekcję błędów 20 kb / s
Wymagania dotyczące przetwarzania sygnału są dość niskie i większość z nich można wyeksportować do głównego procesora w systemie. Pierwsze trzy specyfikacje są łatwe do spełnienia i można je wykonać za mniej niż 2 USD w ilości. Jednak komunikacja będzie się odbywać w bardzo hałaśliwym środowisku elektrycznym, więc sieci wrażliwe na zakłócenia, takie jak LIN i I2C, są niedostępne. Dodatkowym argumentem przeciwko LIN jest to, że chciałbym uruchomić całość przy 5 V lub 3,3 V, a nadajniki-odbiorniki LIN wymagają 12 V, a więc wymagałyby dodatkowego regulatora lub przewodu na płytkę czujnika. Początkowo wybrałem CAN do tego zadania. Jednak sterowniki CAN generują znaczne koszty i jestem ciekawy, czy można to zrobić w oprogramowaniu.
Warstwa fizyczna CAN
Specyfikacja CAN określa warstwy danych i warstwy fizyczne modelu referencyjnego sieci OSI. Istnieje wiele niedrogich 8-pinowych układów scalonych, takich jak NXP TJA1040 / 50 , Maxim MAX3058 / 59 , Microchip MCP2551 i TI SN65HVD1050 . Wdrożenie warstwy fizycznej za pomocą przetworników D / A lub wzmacniaczy operacyjnych byłoby trudne, jeśli nie niemożliwe, więc te układy scalone są warte 1 USD lub więcej, więc kosztują.
CAN Data Link / Protocol Layer
W przypadku warstwy łącza danych niektóre mikrokontrolery dodają moduły protokołu CAN do podstawowych warstw komunikacyjnych UART, I2C i SPI. Są one jednak znacznie droższe niż podstawowe układy.
Badanie kosztów modułów protokołu CAN
Aby uzasadnić to twierdzenie, oto kilka popularnych mikrofonów w wersjach CAN i innych niż CAN:
- ATmega16 - ATMEGA16M1 (z CAN): 3,87 USD, ATMEGA168A (bez CAN): 3,23 USD
- dsPIC - DSPIC33FJ64MC802 (z CAN): 6,14 USD, DSPIC33FJ64GP202 (bez CAN): 5,48 USD
- PIC18 - PIC18F2480 (z CAN): 6,80 USD, PIC18F24J10 (bez CAN): 2,10 USD
- Cortex-M3 - STM32F103C4T6A (z CAN): 6,50 USD, STM32F100C4T6B (bez CAN): 2,73 USD
Szczerze mówiąc, porównałem tylko mikrokontrolery o równoważnych rozmiarach pamięci, jednak wiele wersji innych niż CAN jest dostępnych z mniejszymi rozmiarami pamięci za mniej. Zewnętrzne kontrolery CAN, takie jak Microchip MCP2515 , kosztują prawie 2 USD, więc oczywiście bardziej opłacalne jest zintegrowanie CAN z mikrokontrolerem, jeśli masz taką opcję.
Co ciekawe, część ATmega jest zdecydowanie najtańszą częścią wyposażoną w CAN w ekwipunku Digikey.
Funkcja warstwy protokołu CAN
Moduł CAN znaleziony w mikrokontrolerach dsPIC wykonuje następujące czynności:
Moduł magistrali CAN składa się z silnika protokołu i buforowania / sterowania wiadomościami. Silnik protokołu CAN obsługuje wszystkie funkcje odbierania i przesyłania komunikatów na magistrali CAN. Wiadomości są przesyłane przez załadowanie najpierw odpowiednich rejestrów danych. Status i błędy można sprawdzić, czytając odpowiednie rejestry. Każda wiadomość wykryta na magistrali CAN jest sprawdzana pod kątem błędów, a następnie dopasowywana do filtrów, aby sprawdzić, czy powinna zostać odebrana i zapisana w jednym z rejestrów odbiorczych.
Wydaje się to dość wykonalne w oprogramowaniu.
Pytanie
Czy można zastosować warstwę protokołu oprogramowania do implementacji specyfikacji CAN z jedynie niedrogim mikrokontrolerem wyposażonym w UART i transceiverem CAN? Jeśli tak, to czy istnieją jakieś implementacje typu open source?
Alternatywnie, czy transceivery CAN mogą być używane z UART do implementacji niestandardowego protokołu? Nic mi nie jest z topologią jednego wzorca; Rozumiem, że arbitraż może być trudny do uzyskania w niestandardowym protokole.