Фон
Я розробляю проект, який вимагатиме скромних характеристик мікроконтролера:
- 8 12-бітних, 10 кГц АЦП
- 1 кБ оперативної пам’яті
- 48-QFN або менший слід
- 20 кбіт / с, захист від шуму, стійкий до шуму та виправлення помилок, протокол зв'язку
Вимоги до обробки сигналів досить низькі, і більшість може бути експортовано до головного процесора в системі. Перші три характеристики легко зустріти, і їх можна зробити за менше 2 доларів. Однак спілкування буде відбуватися в дуже шумному середовищі, тому мережі, вразливі від шуму, такі як LIN та I2C, виходять із мережі. Додатковий аргумент проти LIN полягає в тому, що я хотів би запустити все на 5V або 3.3V, а для приймачів LIN потрібно 12В, і тому потрібен буде додатковий регулятор або провід на платі датчика. Спочатку я вибрав CAN для цього завдання. Однак контролери CAN додають значних витрат, і мені цікаво, чи можна це зробити в програмному забезпеченні.
МОЖЛИВО фізичний шар
Специфікація CAN визначає шари передачі даних та фізичні рівні еталонної моделі мережі OSI. Для реалізації фізичного рівня існує безліч недорогих 8-контактних ІС, таких як NXP TJA1040 / 50 , Maxim MAX3058 / 59 , Microchip MCP2551 та TI SN65HVD1050 . Реалізація фізичного рівня за допомогою перетворювачів D / A або підсилювачів буде важкою, якщо не неможливою, тому ці ІМС коштують 1 долара або близько того, що вони коштують.
МОЖЛИВО Зв’язок даних / протокол
Для рівня даних Data Link деякі мікроконтролери додають модулі протоколу CAN на базовий рівень зв'язку UART, I2C та SPI. Однак вони значно дорожчі, ніж основні чіпи.
Дослідження вартості модулів протоколу CAN
Щоб обґрунтувати це твердження, ось кілька популярних мікро-версій у версіях CAN та не-CAN:
- ATmega16 - ATMEGA16M1 (з CAN): $ 3,87, ATMEGA168A (без CAN): 3,23 дол.
- dsPIC - DSPIC33FJ64MC802 (з CAN): 6,14 дол. США, DSPIC33FJ64GP202 (без CAN): 5,48 дол.
- PIC18 - PIC18F2480 (з CAN): 6,80 дол. США, PIC18F24J10 (без CAN): 2,10 дол. США
- Cortex-M3 - STM32F103C4T6A (з CAN): $ 6,50, STM32F100C4T6B (без CAN): $ 2,73
Справедливо кажучи, я порівнював лише мікроконтролери з еквівалентними розмірами пам’яті, однак багато версій, які не є CAN, доступні з меншими розмірами пам’яті для менших. Зовнішні контролери CAN, як Microchip MCP2515 , коштують майже 2 долари, тому, очевидно, вигідніше інтегрувати CAN в мікроконтролер, якщо є можливість.
Цікаво, що частина ATmega - це найдешевша з CAN-комплектуючої частини в інвентарі Digikey.
Функція шару протоколу CAN
Модуль CAN, знайдений в мікроконтролерах dsPIC, виконує наступні дії:
Модуль шини CAN складається з двигуна протоколу та буферизації / управління повідомленнями. Двигун протоколу CAN обробляє всі функції прийому та передачі повідомлень на шині CAN. Повідомлення передаються спочатку завантаженням відповідних регістрів даних. Стан та помилки можна перевірити, прочитавши відповідні регістри. Будь-яке повідомлення, виявлене на шині CAN, перевіряється на наявність помилок, а потім порівнюється з фільтрами, щоб побачити, чи слід його отримувати та зберігати в одному з регістрів прийому.
Це здається досить можливим у програмному забезпеченні.
Питання
Чи можна використовувати рівень протоколу програмного забезпечення, що реалізує специфікацію CAN лише з недорогим мікроконтролером UART та приймачем CAN? Якщо так, то чи існують будь-які реалізації з відкритим кодом?
Чи можна CAN-приймачі використовувати з UART для впровадження користувальницького протоколу? Я з нормальною топологією одноосібника; Я розумію, що арбітраж може бути важким для отримання права в користувальницькому протоколі.