Я провел дни, изучая и пытаясь добиться простой связи с шиной CAN с нуля, используя stm32f1, но я до сих пор не добился желаемых результатов, и это сложно понять и запрограммировать.
С другой стороны, есть модули шины CAN, которые взаимодействуют с микроконтроллером по SPI следующим образом: https://www.ebay.com/itm/283953770322?hash=item421cf6af52:g:JHAAAOSwIeVfQ7HI
и есть много библиотек для работы с этими модулями, но официальная страница микрочипа не рекомендует продолжать использовать MCP2515.
Мое сомнение: какая разница в использовании шины CAN с нуля (STM32) по сравнению с использованием отдельного модуля? использование автономного модуля влияет на безопасность шины CAN? Следует ли использовать автономный модуль в промышленности?
Чем отличается использование CAN-шины с нуля (STM32) от использования отдельного модуля?
Внешние контроллеры CAN в основном остались в прошлом. В 1990-х годах это был практически единственный способ использования CAN, до того, как микроконтроллеры начали поддерживать встроенные контроллеры CAN.
С тех пор единственная причина для использования внешнего контроллера CAN заключается в том, что у вас есть особые требования к проекту, ведущие к очень специализированному MCU, который не поставляется с версией CAN.
использование автономного модуля влияет на безопасность шины CAN?
Не безопасность, а защита от злонамеренного использования. Но это делает всю конструкцию немного более чувствительной к электромагнитным помехам, поскольку SPI не так надежен, как CAN. Внешний контроллер также приводит к большим задержкам, затратам на BoM и общей дополнительной бессмысленной сложности.
но официальная страница микросхемы не рекомендует продолжать использовать MCP2515
В основном это связано с тем, что Microchip выпустила новое поколение всех своих приемопередатчиков и контроллеров с поддержкой CAN FD. Новые современные детали обратно совместимы, а также имеют лучшую устойчивость, защиту от электростатических разрядов и т. д.
Если ваш MCU имеет встроенное периферийное устройство CAN, его использование предпочтительнее внешнего модуля. В дополнение к задержке, упомянутой Ральфом, учитывайте стоимость, доступность и надежность использования модуля.
Подумайте об этом таким образом. На рынке доступно множество микросхем расширения ввода-вывода. Вы бы использовали его, если бы у вас было много запасных контактов на MCU? Возможно нет. С другой стороны, если все ваши контакты израсходованы, то расширитель портов I2C может быть более жизнеспособным вариантом, чем получение MCU в более крупном корпусе.
Как правило, устройства на шине CAN требуют, чтобы сообщения доставлялись с одного устройства на другое с очень малой задержкой. Например, передача положения вращающегося вала двигателя от приводного устройства к контроллеру по шине. Данные бесполезны, если они не доставлены с небольшой задержкой. Если между вашим процессором и CAN-шиной есть устройство, с которым вы должны обмениваться данными через SPI, эта связь «устройство посередине» будет задерживать каждое сообщение, увеличивая задержку его прибытия на другие устройства на CAN-шине.
Контроллер CAN, встроенный в микроконтроллер, который обменивается данными напрямую по шине CAN, является лучшим способом взаимодействия с другими устройствами с малой задержкой. Большинство периферийных устройств CAN микроконтроллера могут обрабатывать низкоуровневую связь и прерывать микроконтроллер только при необходимости, избегая необходимости опроса или фильтрации сообщений.
Если приложение не имеет требований к связи с малой задержкой, то я полагаю, что внешнее периферийное устройство, подключенное к SPI, может удовлетворить эти требования.
Таким образом, основной причиной отказа от использования внешнего модуля будет связь по шине CAN с малой задержкой.
ДКНгуйен
ДэмиенД
Майк