Как работает битовый тайминг CAN
Шина CAN — синхронная последовательная сеть без отдельной линии тактирования: каждый узел восстанавливает такт из фронтов сигнала на общей витой паре. Чтобы все контроллеры одинаково «видели» один и тот же бит, время бита делят на кванты (Time Quantum, TQ) и распределяют их по сегментам. Настройка этих сегментов и есть битовый тайминг — именно её записывают в регистры бит-тайминга (BTR) контроллера. В отличие от асинхронного обмена, где узлы стартуют по стоп-биту и важна лишь ошибка бодрейта между передатчиком и приёмником, в CAN все узлы жёстко ресинхронизируются по каждому переходу, поэтому положение точки выборки внутри бита критично для устойчивости связи.
Прескейлер BRP = fтакт / (скорость · Nq) TQ = 1 / (скорость · Nq)
Бит = Sync(1) + TSEG1 + TSEG2 = Nq квантов точка выборки = (1 + TSEG1) / Nq
Квант времени TQ задаётся прескейлером BRP, который делит тактовую частоту контроллера — тем же приёмом, что и прескейлер таймера МК. Число квантов на бит Nq — это сумма трёх частей: сегмента синхронизации (всегда ровно 1 квант), TSEG1 (сегмент распространения плюс фазовый сегмент 1, всё до точки выборки) и TSEG2 (фазовый сегмент 2, после неё). Произведение скорости, Nq и BRP должно точно равняться тактовой частоте: только тогда бит длится ровно 1/скорость и передатчик с приёмником не расходятся за длину кадра.
Сегменты бита и точка выборки
Сегмент синхронизации нужен, чтобы совместить фронты сигнала разных узлов; ожидается, что перепад уровня попадёт именно в этот квант. Сегмент распространения компенсирует задержку сигнала в кабеле и трансиверах туда и обратно — чем длиннее шина, тем больше квантов приходится отдать на него. Фазовые сегменты 1 и 2 обрамляют точку выборки и могут удлиняться или укорачиваться при ресинхронизации в пределах SJW (Synchronization Jump Width). Точка выборки — момент, когда контроллер считывает уровень бита; она делит бит на TSEG1 до и TSEG2 после. Для CAN её принято ставить на 75–87,5% длины бита: стандарты CANopen и DeviceNet рекомендуют именно 87,5%. Слишком ранняя выборка не даёт сигналу «устояться» после переключения, слишком поздняя оставляет мало запаса на ресинхронизацию — и то, и другое повышает число ошибок кадра. Чем больше TSEG1, тем позже выборка и тем дальше её можно отодвинуть от края бита, где сигнал ещё дребезжит; при этом TSEG2 не должен быть короче SJW, иначе узлу негде «догонять» рассинхрон. На практике сегмент распространения задают исходя из физической длины шины и суммарной задержки трансиверов: на длинных линиях его увеличивают за счёт TSEG1, сдвигая точку выборки, но сохраняя её единой для всех узлов.
Как выбрать Nq и прескейлер
Главное требование — целый прескейлер. Если BRP получается дробным, точную скорость набрать нельзя: меняют либо число квантов Nq (обычно 8–25), либо саму тактовую частоту (отсюда любовь разработчиков к «удобным» кварцам 8, 16, 20, 40 МГц). Больший Nq даёт более тонкую регулировку точки выборки и лучший запас на ресинхронизацию, но требует меньшего прескейлера; меньший Nq экономит разрядность регистров. Все узлы одной шины обязаны иметь одинаковую скорость и совпадающую точку выборки, иначе связь распадётся, даже если формально скорость совпала. Типовая ошибка — набрать нужную скорость на бумаге, забыв, что дробный BRP округляется контроллером, и получить сдвиг частоты. Отдельно следят за допуском кварца: суммарный уход частоты двух узлов, деленный на запас ресинхронизации SJW, ограничивает максимальную скорость и длину шины, поэтому для быстрых сетей ставят кварц вместо RC-генератора, а SJW берут не меньше 1–2 квантов. Для дифференциальных линий вроде RS-485 тайминг проще, ведь там нет побитовой ресинхронизации, а у скоростных шин I²C вместо этого нормируют время нарастания на подтяжках.
Типовые конфигурации при fтакт = 16 МГц
Классический набор скоростей CAN при тактовой 16 МГц и Nq = 16 квантов — прескейлер везде получается целым, точка выборки 87,5%:
| Скорость | BRP | TQ | TSEG1 / TSEG2 | Выборка |
| 1 Мбит/с | 1 | 62,5 нс | 13 / 2 | 87,5 % |
| 500 кбит/с | 2 | 125 нс | 13 / 2 | 87,5 % |
| 250 кбит/с | 4 | 250 нс | 13 / 2 | 87,5 % |
| 125 кбит/с | 8 | 500 нс | 13 / 2 | 87,5 % |
При других кварцах прескейлер меняется пропорционально: например, на 8 МГц те же скорости требуют вдвое меньшего BRP. Если целое значение не находится — берут иное Nq в пределах 8–25.
Где применяют — и где не годится
Битовый тайминг настраивают при инициализации любого CAN-контроллера: автомобильные сети (OBD-II, кузовная электроника), промышленные CANopen и DeviceNet, авионика, станки и робототехника. Расчёт нужен всякий раз, когда меняется кварц платы или требуется нестандартная скорость. Он не описывает пропускную способность приложения — реальный поток данных с учётом стаффинга, арбитража и служебных полей ближе к битрейту полезного потока, а длину и время одного кадра оценивают отдельно, как и в кадре UART. Для CAN FD с раздельной скоростью данных считают два независимых набора сегментов (арбитраж и фаза данных) — здесь показан классический CAN с единой скоростью.
Пример
На значениях по умолчанию (fтакт = 16 МГц, скорость 500 кбит/с, Nq = 16): BRP = 16 000 000 / (500 000 · 16) = 2, квант времени TQ = 1 / (500 000 · 16) = 125 нс. Сегменты под точку выборки 87,5%: TSEG1 = round(16 · 0,875) − 1 = 13, TSEG2 = 16 − 1 − 13 = 2, то есть точка выборки = (1 + 13) / 16 = 87,5 %. Прескейлер целый — значит скорость 500 кбит/с получается точно.
См. также: ошибка бодрейта · кадр UART · битрейт потока · линия RS-485 · все калькуляторы
|