Как создать сеть микроконтроллеров на CAN шине?

Работаю над проектом умного дома, с микроконтроллерами пока только начала знакомство, поэтому иногда возникают затыки.
Компоненты моего умного дома должны общаться по сети. 1-Wire слишком ненадежная и медленная, у Ethernet минус в необходимости коммутатора, да и на каждое исполнительное вешать Ethernet порт глупо.
Пришел к выводу что нужно использовать шину CAN, и скорости достаточно и максимальная длинна соединения приемлема.
Задача создать базовый элемент, который может получать/отправлять данные с CAN шины, и далее обрабатывать эти данные по микропрограмме.
В интернете ходит информация про связку mcp2551 + mcp2515 + avr контроллер, но конкретных схем и примеров рабочего когда я не нашел.
Может кто подскажет в какую сторону копать? Буду очень благодарен если кто поделится опытом работы с CAN
  • Вопрос задан
  • 6948 просмотров
Пригласить эксперта
Ответы на вопрос 4
MaxDukov
@MaxDukov
впишусь в проект как SRE/DevOps.
обязательно проводная? вот пример беспроводной.
Ответ написан
ТС не озвучил, как много информации будет ходить по сети. IMHO, вешать CAN на каждое устройство не менее глупо, чем Ethernet, т.к. аппаратный CAN - пока для малоногих МК экзотика, а делать программный, наверное можно, но это уже сильно не для слабонервных. Есть ещё SPI-й MCP2515. Просто и достаточно надёжно проблему решить можно посредством RS485, протокол - MODBUS, который хорошо себя зарекомендовал в промышленности, в сети есть масса примеров для разных реализаций. Для него МК достаточно USART-а, а он есть почти в каждом современном МК, даже в 8-выводных ( как, впрочем и SPI ) и добавить соответствующий трансивер, что-то, вроде AD485. IMHO, какой взять МК - вообще без разницы, лишь-бы его ресурсы соответствовали конкретной задаче, ну и какими средствами разработки/отладки обладает исполнитель.
Ответ написан
@Eddy_Em
AVR - прошлый век. Советую в сторону STM32 посмотреть. Кстати, если нужно хорошо сэкономить, то можно вместо STM32 подобрать более дешевый STM8, у них тоже есть эдакий CAN (правда, не полноценный).
Плюс еще понадобится преобразователь уровней, но этого добра на ибее/али навалом.
Вот для связи с компьютером придется либо дорогущий PCI'ный CAN-контроллер покупать (с ними, кстати, большая проблема: обычно разработчик выкладывает модули для очень древних ядер, поэтому если не умеете писать/править модули ядра, эту идею лучше сразу отбросить), либо сделать самому на основе того же STM32 переходник USB<->CAN. Еще один вариант: сделать мастер-контроллер с ethernet, на котором будет вертеться веб-морда. Втыкаем его в wifi-рутер и с любого устройства с wifi можем смотреть состояние системы.
Ответ написан
alexpic
@alexpic
1-Wire слишком ненадежная и медленная

Она достаточно надежная. Есть множество примеров промышленных устройств, в которых датчики температуры висят на одной шине длиной до 60 метров.

Может кто подскажет в какую сторону копать?

Японский городовой достаточно подробно ответил. Замечу, что для связи с компьютером можно использовать достаточно дешевые CAN-USB адаптеры в том числе с гальванической развязкой. Мы применяем Марафон — у них хорошее железо и API.
Добавлю, что CAN используется в основном в автомобилке или промавтоматике. Шина дифференциальная и поэтому вам придется использовать витую пару. Драйверы физического уровня (PHY) не особо дешевые (по сравнению с тем же 1-Wire, где можно использовать один транзистор). Шина требует терминаторов на концах. В остальном там все хорошо.
Все же подумайте насчет беспроводной сети.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы