Точка выборки CAN
Точка выборки — момент внутри каждого бита, когда контроллер CAN считывает уровень шины. Её положение задаётся настройкой битового тайминга, и у всех узлов на шине оно должно быть одинаковым, иначе на длинной линии или при неточных генераторах начинаются ошибки.
Обновлено Редакция GAW
Точка выборки (sample point) — момент внутри бита CAN, в который контроллер считывает уровень шины. Её выражают в процентах длительности бита от его начала. Бит CAN делится на кванты времени (time quanta): первый квант — сегмент синхронизации, затем сегменты до точки выборки (Prop_Seg и Phase_Seg1, у STM32 — объединённый BS1) и сегмент после неё (Phase_Seg2, у STM32 — BS2). По спецификации Bosch в бите от 8 до 25 квантов.
Зачем она поздно в бите
Сигнал от передатчика доходит до дальнего узла и возвращается с задержкой — в CAN подтверждение и арбитраж требуют, чтобы все узлы видели один и тот же бит одновременно. Поздняя точка выборки оставляет время на распространение по линии и задержки трансиверов. Слишком поздняя оставляет мало запаса на ресинхронизацию по фронтам, поэтому на высоких скоростях её сдвигают раньше: драйвер Linux по умолчанию берёт 87,5 % до 500 кбит/с, 80 % до 800 кбит/с и 75 % выше.
Примеры для 500 кбит/с
| Контроллер | Тактирование | Настройка | Квантов в бите | Точка выборки |
|---|---|---|---|---|
| STM32F103 (bxCAN) | APB1 36 МГц | Prescaler 9, BS1 6, BS2 1 | 8 | 87,5 % |
| MCP2515 | кварц 16 МГц | CNF1 0x00, CNF2 0xB5, CNF3 0x01 | 16 | 87,5 % |
Рассчитать делитель, сегменты, SJW и значения регистров для STM32 и MCP2515, а также проверить допуск генераторов поможет калькулятор битового тайминга CAN. Устройство шины, уровни и формат кадра — в статье о шине CAN, а битовую структуру кадра нарисует конструктор кадра CAN.
Частые вопросы
Какую точку выборки выбрать?
Если особых требований нет — 87,5 %. Такую точку для скоростей до 500 кбит/с берёт по умолчанию драйвер CAN в Linux; до 800 кбит/с он берёт 80 %, выше — 75 %. Важнее самого числа, чтобы точка выборки совпадала у всех узлов шины.
Как настроить 500 кбит/с на STM32 с точкой выборки 87,5 %?
При частоте шины APB1 36 МГц: Prescaler = 9, BS1 = 6 квантов, BS2 = 1 квант, SJW = 1. Квант — 250 нс, в бите 8 квантов, точка выборки (1 + 6) / 8 = 87,5 %, значение регистра CAN_BTR = 0x00050008.
Что такое SJW?
Ширина скачка ресинхронизации (synchronization jump width) — на сколько квантов контроллер может удлинить или укоротить бит, подстраиваясь под фронты на шине. По спецификации Bosch она не больше длины сегмента перед точкой выборки. SJW больше 1 нужен при неточных генераторах, например керамических резонаторах.
Источники
- Robert Bosch GmbH. CAN Specification Version 2.0, 1991 — часть B, разд. 10 — сегменты бита, 8–25 квантов на бит, SJW не больше Phase_Seg1, общая для всех узлов точка выборки
- Microchip. MCP2515 Stand-Alone CAN Controller with SPI Interface, DS20001801J — разд. 5 — квант TQ = 2·(BRP + 1)/FOSC, длины сегментов, регистры CNF1–CNF3
- STMicroelectronics. RM0008 Reference manual STM32F101xx–STM32F107xx, Rev 21, 2021 — гл. 24 — bxCAN: разд. 24.7.7 «Bit timing», регистр CAN_BTR
- Linux kernel: drivers/net/can/dev/calc_bittiming.c — точки выборки по умолчанию: 87,5 % до 500 кбит/с, 80 % до 800 кбит/с, 75 % выше
Нашли ошибку?
Смотрите также
- Битовый тайминг CANCAN_BTR для STM32, CNF1–CNF3 для MCP2515, точка выборки
- CANCAN_H и CAN_L, терминаторы, кадр, арбитраж, ошибки, тайминг, MCP2515
- Конструктор кадра CANCAN и CAN FD по битам: CRC-15, CRC-17 и CRC-21, битстаффинг, длина кадра
- Скорость передачи (бод)Бит/с и бод: стандартные скорости и допуск UART