Может ли контроллер MCP2515 CANBUS использоваться для двусторонней связи?

Я попытался найти коды для MCP2515 с помощью Arduino, На форумах Arduino, в учебных пособиях, в Центре электроники, на YouTube и т.д.

Все они были кодами для узла передатчика и узла приемника. Датчики на одном узле и результат на другом конце.

Можем ли мы подключить два Arduino с помощью MCP2515 и общаться в ДВУХ НАПРАВЛЕНИЯХ?

, 👍1


2 ответа


0

Я никогда не использовал CAN bus сам, но вы могли бы сделать одно из следующих действий:

  • Позволяя передатчику отправлять определенное (короткое) сообщение получателю. В случае, если получателю есть что передать, он отправляет определенный ответ обратно, чтобы передатчик мог запросить у получателя отправку фактического сообщения, которое должно быть отправлено. Недостатком является то, что необходим опрос.
  • Если вы хотите, чтобы получатель мог отправлять свое сообщение как можно быстрее, добавьте отдельный провод рядом со связью по шине CAN. Если эта линия НИЗКАЯ или ВЫСОКАЯ (решайте сами), то передатчик может "немедленно" отправить сообщение, чтобы приемник отправил свое фактическое сообщение.
,

Спасибо! Tx Arduino запускает только код tx, а Rx Arduino запускает только код rx. Таким образом, Rx не может передавать что-либо обратно. И использование CAN предназначено для уменьшения no. использованных проводов, но это хорошая идея., @spiders.here

По вашему первому пункту я попытаюсь объединить команды tx и rx и временно заставить TX Arduino получать данные, и наоборот., @spiders.here

Дайте нам знать, как у вас дела!, @Gil

В соответствии со спецификацией Bosch, которая легко доступна, шина CAN выполняет арбитраж автоматически в соответствии с определенным приоритетом на побитовой основе. Чтобы отправить сообщение с MPC2515, вы загружаете его, и когда шина становится доступной, он передает его, если есть ошибка, он повторяет много раз (внутренний счетчик), и если это не удается, вы об этом узнаете. Когда сообщение отправлено, оно должно получить ACK в указанной части кадра can. Это может быть сгенерировано любым узлом. Ваш внутренний протокол должен определить, получил ли сообщение нужный узел., @Gil


0

Да, это должно работать хорошо. Они работают только в симплексном режиме (отправка или прием) во внешний мир. Внутренне они также отслеживают то, что они отправляют для проверки ошибок и т.д. С точки зрения пользователя они кажутся двунаправленными, поскольку могут быстро переключаться между отправкой и получением сообщений, сообщение за сообщением. Конечно, скорость автобуса помогает. С их помощью вы можете получить до 1 мегабайта. Я использую "mcp_can.h" Кори Фаулера. Вы можете получить его по адресу: "https://github.com/coryjfowler/MCP_CAN_lib ". В библиотеке есть как файлы send, так и receive .ino, сначала заставьте их работать. Поскольку CAN - это неразрушающий арбитраж NDA на основе приоритета, сообщение с более высоким приоритетом будет иметь преимущественную силу независимо от того, кто еще находится на шине или отправляет сообщение.

Не забудьте поставить перемычки на модуле, чтобы завершить шину. Обратите внимание, что шина завершается только на физических концах. Расчетное сопротивление шины составляет 60 Ом, оконечные резисторы - 120 Ом.

Вы просто объединяете разделы отправки и получения кода в своем модуле, ничего особенного делать не нужно. Вы инициализируете отправку и получение одновременно, используя практически одну и ту же информацию. Вы найдете информацию для этого в разделе setup() кода. Обязательно проверьте частоты кристаллов, я видел на этих платах кристаллы как 8, так и 16 МГц.

,