Параметры настроек шины can

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

Наверное больше всего возникает вопросов в том, что же это такое и как правильно эти тайминги настроить.

Опять теория

Напомню, что протокол CAN (Controller Area Network) — представляет собой асинхронную последовательную шину с битовым кодирование NRZ (Non Return to Zero), разработанную для быстрой и надежной связи в жестких условиях, такие как автомобильные или промышленные сети. Протокол CAN позволяет программно настраивать скорость передачи данных в широком диапазоне (до 1 Мбита). Для того, чтобы работа CAN шины была стабильной, необходимо правильно указать параметры настройки синхронизации и временных интервалов (таймингов).

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

Так давайте же разберемся в этом подробнее:

Параметры настроек шины can

Механизм синхронизации битов контролирует шину и выполняет выборку и корректировку точек захвата бита (Sample Point) путем синхронизации при начале передаче бита и ресинхронизации при прекращении передачи этого бита.

Этот процесс можно объяснить путем простого деления номинального времени передачи бита на три сегмента:

Сегмент синхронизации (SYNC_SEG): изменение бита, как ожидается, произойдет в течение этого отрезка времени. Он имеет фиксированную длину одного кванта времени (1 х tq).
Сегмент фазы 1 (BS1): определяет местоположение точки захвата (Sample Point). Он включает в себя Prop_Seg и PHASE_SEG1 стандарта CAN. Его продолжительность программируется от 1 до 16 квантов времени, но может быть автоматически увеличена для компенсации положительной фазы дрейфов из-за различий в частоте работы на различных узлах сети.
Сегмент фазы 2 (BS2): определяет местоположение точки передачи. Он представляет собой PHASE_SEG2 стандарта CAN. Его продолжительность программируется от 1 до 8 квантов времени, но также может быть автоматически изменена в сторону уменьшения для компенсации отрицательной фазы заносов.

Ширина перехода ресинхронизации (SJW — reSynchronization Jump Width) определяет максимальное количество квантов времени, на которое может быть увеличено или уменьшено количество квантов времени битовых сегментов. Возможные значения этого показателя составляют от 1-го до 4-х квантов.

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

Если этот переход обнаружен в сегменте BS1 вместо сегмента Sync_Seg, то сегмент BS1 продлевается таким образом, чтобы достичь точки захвата бита путем увеличения длительности сегментов на значение SJW. И наоборот, если переход обнаружен в сегменте BS2 вместо Sync_Seg, то BS2 укорачивается так, чтобы точка захвата сформировалась раньше. Таким образом происходит постоянная пересинхронизация с целью синхронизации с другими узлами шины. (Забавно звучит ? )

Согласно стандарту CAN, оптимальный момент времени для Sample Point составляет 87.5% от номинальной длительности передачи бита.

Расчет временных интервалов и регистры, в которых они хранятся — приведен на рисунке 2.

APB Clock — это частота, с которой работает периферия микроконтроллера. Она настраивается при запуске программы на микроконтроллере, но об этом ниже.

Стоит заметить, что для предотвращения ошибок программирования, конфигурация регистра CAN_BTR (Bit Timing Register) возможна только тогда, когда bxCan находится в режиме ожидания.

Теперь, когда Вы это все прочитали и половину не поняли, опишу простыми словами (далее цитата с одного из форумов, очень понравилась :)) :

Бит поделен на сегменты, каждый сегмент состоит из квантов, кол-во которых вы настраиваете:

• Сегмент синхронизации — по нему идет синхронизация с шиной, для длинных шин с заваленными фронтами его делают чуть шире.
• Сегмент фазы 1 (BS1) — это кванты, которые аппаратная часть выжидает, прежде чем сделать захват состояния шины.
• Сегмент фазы 2 (BS2) — это кванты, которые пройдут прежде, чем начнется прием нового бита.

Сумма этих квантов * период кванта = периоду бита выбранной скорости.

BS1 и BS2 в разных узлах сети могут быть разные, это зависит еще от частоты микроконтроллера, аппаратными средствами может изменяться на величину SJW.

Реализация

Разобравшись с теорией, приступим к реализации.

Тактирование

Рассмотрим все на примере STM32F103C8 в CooCox CoIDE.


Поделиться или сохранить к себе:
Технарь знаток