2015-11-06 4 views
0

Я пытаюсь использовать плату микроконтроллера, чтобы разговаривать с внешним устройством с помощью CAN-BUS. Но прямо сейчас я не понимаю механизм CAN-BUS так четко и как использовать его на своем оборудовании.Может кто-нибудь объяснить, как использовать протокол CANBUS?

Из того, что я понимаю, это линия шины, где несколько устройств могут транслировать свои сообщения, а приоритет определяется идентификатором каждого узла.

Может кто-нибудь сказать мне, что еще я должен знать, чтобы закончить свою задачу?

Спасибо, Zhuhan

ответ

2

Хорошо, я постараюсь дать вам подсказку, но предмет довольно широк. Да CANBus - это широковещательное сообщение, где не важно, кто отправляет сообщение, но само сообщение. Скажем, информационно-ориентированное общение. Поэтому, как правило, больше, чем одно сообщение, важна вся «база данных CAN». В таких системах (например, в автомобиле) не обязательно знать, кто отправляет температуру воздуха, но важно знать, что температура воздуха находится на определенном идентификаторе кадра с определенным временем кодирования и цикла.

Даже не важно, кто является приемником сигнала, но вы можете решить добавить еще одну часть аппаратного обеспечения, для которой требуется температура воздуха, без повторной настройки связи.

Каждое CAN-устройство, использующее одну и ту же шину, может отправлять без арбитража. Арбитраж встроен в аппаратный уровень. В CAN два бита называются Dominant и Recessive. Бит «0» является доминирующим, а бит «1» рецессивным. Это означает, что если два разных устройства начинают «разговаривать» одновременно с первым битом в 0, оба сохраняют отправку, а на шине вы видите «0». Как только одно устройство хочет отправить 1 (рецессивный бит), в то время как другой отправляет «0» (доминирующий), вся остановка на автобусе равна 0. Отправитель «1» может обнаружить его и прекратить отправку, покидая автобус для победителя. Поскольку каждый CAN-кадр, после преамбулы, начинается с идентификатора, самый низкий идентификатор (с большим количеством нулей внутри) - тот, который выиграет при столкновении и будет поддерживать использование шины.

Таким образом, приоритет задается идентификатором, информация привязана к идентификатору, поэтому в данных есть своего рода приоритет.

Обычно, когда вы разрабатываете приложение CAN, у вас уже есть база данных, но, как и в моем случае, вам нужно разработать целую систему с нуля, вам необходимо выполнить этот анализ и создать базу данных в первую очередь.

Практически во всех CAN-контроллерах есть возможность установить фильтры приема и маску. Когда вы разрабатываете аппаратное обеспечение (или улучшенное прошивку), первая распространенная ошибка для новичков заключается в том, чтобы оставить фильтры приема и маску широко открытыми. Это, в тяжелой загруженной шине, может привести к превышению приема (обратного вызова или прерывания) принимающего микропроцессора.

Другие советы по синхронизации контроллера. Бит CAN делится на несколько квантов времени (например, 16). В большинстве контроллеров вам нужно выбрать, как и когда вы хотите отбирать бит, чтобы узнать, равно ли оно 0 или 1. Обычно вы можете сделать это один раз (одна точка выборки) или более одного раза (но я никогда не видел более трех точек выборки).

Другие вещи, которые следует учитывать, - это поведение в случае выключения шины или шины. Тяжелые события или другие ошибки, которые могут возникнуть (найдите список возможных CAN-ошибок). Я имею в виду, что обычно должна быть возможность автоматического перезапуска контроллера в случае ошибок шины.

Существует гораздо больше, но, вероятно, вам нужно спросить что-то более точное.