Портал для радиолюбителей и разработчиков электроники · с 2003 годаРеклама на сайте
Найти компонент, схему или даташит

Даташиты, справочник отечественных приборов, схемы с разбором и живой форум


Калькулятор битового тайминга CAN



Битовый тайминг CAN

Настройка битового времени шины CAN: прескейлер, кванты времени (TQ), сегменты и точка выборки по тактовой частоте и скорости. Для регистров битового тайминга контроллера.

Как работает битовый тайминг 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%:

СкоростьBRPTQTSEG1 / TSEG2Выборка
1 Мбит/с162,5 нс13 / 287,5 %
500 кбит/с2125 нс13 / 287,5 %
250 кбит/с4250 нс13 / 287,5 %
125 кбит/с8500 нс13 / 287,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 · все калькуляторы


Частые вопросы

Как настроить битовый тайминг CAN?

Битовое время делят на кванты (Nq). Прескейлер BRP = fтакт/(скорость·Nq) задаёт длительность кванта TQ. Кванты распределяют: Sync (1) + TSEG1 + TSEG2. Например, 16 МГц, 500 кбит/с, Nq = 16 → BRP = 2, TQ = 125 нс.

Где ставить точку выборки CAN?

Обычно на 75–87,5% бита (для 500 кбит/с и выше чаще 87,5%). Главное — чтобы у всех узлов шины она была одинаковой, иначе появляются ошибки на длинных линиях. Для точной скорости прескейлер должен быть целым.


Похожие калькуляторы — Embedded / интерфейсы
Pull-up I2C  ·  RS-485 линия  ·  ADC ↔ напряжение  ·  ШИМ (скважность)  ·  Таймер/прескейлер МК  ·  ШИМ-ЦАП фильтр  ·  все калькуляторы →


© 2003—2026 «KAZUS.RUN - Электронный портал»