CAN 비트 타이밍 계산기
목표 비트레이트와 샘플 포인트에 맞는 CAN·CAN FD 프리스케일러와 세그먼트 값을 찾습니다. bxCAN, SJA1000, MCP2515, M_CAN의 레지스터 값까지 표시합니다.
Clock is the APB1 peripheral clock, not the CPU clock. Register fields store value − 1.
CAN 주변장치에 들어가는 클럭입니다.
CiA 권장값은 87.5%, 1 Mbit/s에서는 75%입니다.
비트 시간
8 time quanta × 250.0 ns = 2000.0 nsSJW is 1 quantum, so the controller can stretch or shorten a phase segment by up to 250.0 ns per bit to stay in step.
레지스터 값
CAN_BTR0x00050008SJW=0, TS2=0, TS1=5, BRP=8 (each field stores value − 1)다른 후보
Ranked by bitrate accuracy, then by how close the sample point lands. Select a row to see its registers.
| BRP | TSEG1 | TSEG2 | SJW | 퀀텀 | 샘플 | 오차 | 허용오차 |
|---|---|---|---|---|---|---|---|
| 9 | 6 | 1 | 1 | 8 | 87.5% | exact | ±0.49% |
| 4 | 15 | 2 | 2 | 18 | 88.9% | exact | ±0.43% |
| 8 | 7 | 1 | 1 | 9 | 88.9% | exact | ±0.43% |
| 4 | 14 | 3 | 3 | 18 | 83.3% | exact | ±0.65% |
| 6 | 10 | 1 | 1 | 12 | 91.7% | exact | ±0.32% |
| 6 | 9 | 2 | 2 | 12 | 83.3% | exact | ±0.65% |
| 8 | 6 | 2 | 2 | 9 | 77.8% | exact | ±0.87% |
| 5 | 11 | 2 | 2 | 14 | 85.7% | 2.86% | ±0.56% |
| 7 | 8 | 1 | 1 | 10 | 90.0% | 2.86% | ±0.39% |
| 5 | 12 | 1 | 1 | 14 | 92.9% | 2.86% | ±0.28% |
| 7 | 7 | 2 | 2 | 10 | 80.0% | 2.86% | ±0.78% |
| 5 | 12 | 2 | 2 | 15 | 86.7% | -4.00% | ±0.52% |
CAN이 한 비트를 나누는 방식
CAN은 비트의 한가운데를 읽지 않습니다. 각 비트는 정수 개의 타임 퀀텀으로 나뉘고, 그 퀀텀들이 세그먼트로 묶여 클럭 선 없이도 모든 노드가 동기를 유지하게 합니다.
- SYNC_SEG — 항상 정확히 1 퀀텀. 에지가 이 구간에 들어오리라 기대하며, 그것으로 드리프트를 감지합니다.
- PROP_SEG — 버스를 따라 왕복하고 양쪽 트랜시버를 통과하는 시간을 덮습니다. 반대편이 안정되기 전에 읽지 않기 위한 구간입니다.
- PHASE_SEG1과 PHASE_SEG2 — 클럭 차이를 흡수합니다. 컨트롤러는 점프 폭만큼 PHASE_SEG1을 늘리거나 PHASE_SEG2를 줄여 자신을 다시 맞춥니다.
버스를 읽는 시점은 PHASE_SEG1과 PHASE_SEG2의 경계입니다. 대부분의 레지스터는 PROP_SEG와 PHASE_SEG1을
따로 두지 않고 TSEG1으로 합쳐 두며, TSEG2가 PHASE_SEG2를 담습니다.
비트 시간 = (1 + TSEG1 + TSEG2) × TQ, 여기서 TQ = 프리스케일러 / f_clk
샘플 포인트가 생각보다 중요한 이유
샘플 포인트는 비트의 어느 지점에서 버스를 읽는지를 백분율로 나타낸 값입니다. 뒤쪽에 두면 신호가 전파될 시간이 늘어나 긴 버스에 유리하고, 앞쪽에 두면 샘플 이후 구간이 남아 재동기화에 유리합니다.
같은 버스의 노드들은 이 값을 맞춰야 합니다. 정확히 같을 필요는 없지만 60%에서 읽는 노드와 87.5%에서 읽는 노드는 경계에 걸친 비트를 다르게 판단합니다. 증상이 고약합니다 — 책상 위에서는 잘 동작하다가 전기적 잡음이 있거나 부하가 걸릴 때만 산발적으로 오류가 납니다.
오차는 두 노드가 나눠 씁니다
이 계산기는 후보마다 허용 가능한 오실레이터 편차를 함께 보여 줍니다. 중요한 것은 그 값이 한 노드의 예산이 아니라 두 노드가 함께 쓰는 예산이라는 점입니다. 허용 오차가 0.5퍼센트로 나왔다면 양쪽 편차의 합이 그 안에 들어야 합니다.
±0.5% 세라믹 레조네이터를 양쪽에 쓰면 최악의 경우 1퍼센트가 되어 한계를 넘습니다. 간헐적으로 버스 오프에 빠지는데 원인을 찾기 어려운 상황이 여기서 자주 나옵니다. 50ppm 수정 발진기는 0.005퍼센트라 여유가 충분합니다.
비트레이트 오차를 0으로 만들 수 있는 클럭
프리스케일러와 세그먼트는 정수이므로 모든 클럭에서 원하는 비트레이트가 정확히 나오지는 않습니다. 8MHz에서 500kbit/s는 정확히 떨어지지만 어떤 조합은 0.1퍼센트씩 어긋납니다.
그래서 이 계산기는 오차가 0인 조합을 먼저 보여 줍니다. 회로를 설계하는 단계라면 목표 비트레이트를 정확히 나누는 클럭을 고르는 것이 이후의 타이밍 고민을 상당 부분 없애 줍니다. 16MHz와 40MHz가 흔한 선택인 이유가 그것입니다.
CAN FD는 구간이 둘입니다
CAN FD는 중재 구간과 데이터 구간의 비트레이트가 다릅니다. 중재는 모든 노드가 동시에 참여해야 하므로 클래식 CAN과 같은 속도로 두고, 데이터 구간만 올립니다. 두 구간의 타이밍을 각각 설정해야 합니다.
데이터 구간이 빨라지면 트랜시버를 통과하는 루프 지연이 한 비트 시간을 넘어섭니다. 이때는 송신 노드가 자기가 보낸 신호의 메아리를 엉뚱한 위치에서 읽게 되므로, 송신 지연 보상을 켜고 이차 샘플 포인트를 지정해야 합니다. 2Mbit/s 이상에서는 선택이 아니라 필수입니다.
레지스터 값을 그대로 쓰기 전에
이 계산기는 bxCAN, SJA1000, MCP2515, M_CAN의 레지스터 값을 함께 표시합니다. 다만 부품마다 필드에 넣는 값이 실제 퀀텀 수보다 1 작은 경우가 있고, 클럭을 먼저 2로 나누는 부품도 있습니다. 표시된 값은 선택한 부품의 규칙을 따른 것이므로, 다른 부품에 그대로 옮겨 쓰면 맞지 않습니다.
같은 버스에 여러 종류의 컨트롤러가 섞여 있다면 각각 따로 계산하고, 결과로 나온 비트레이트와 샘플 포인트가 서로 맞는지 확인하세요.
자주 묻는 질문
비트레이트가 같은데 통신이 안 됩니다.
비트레이트가 같은 것만으로는 부족합니다. 샘플 포인트가 크게 다르거나 한쪽 노드의 비트레이트 오차가 상대가 흡수할 수 있는 범위를 넘으면, 노드들이 비트 경계를 다르게 판단해 부하가 걸릴 때 폼 오류나 스터프 오류가 납니다. 같은 버스의 노드는 샘플 포인트를 맞추고, 각자 비트레이트를 근사치가 아니라 정확히 맞춰야 합니다.
샘플 포인트는 몇 퍼센트로 해야 하나요?
CiA는 800kbit/s까지는 87.5%, 전파 지연이 비트에서 차지하는 비중이 커지는 1Mbit/s에서는 75%를 권장합니다. 대부분의 스택과 도구가 이 값을 기본으로 쓰므로, 버스가 길어서 샘플 포인트를 앞당겨야 하는 경우가 아니라면 맞추는 편이 안전합니다.
오실레이터 정밀도는 얼마나 필요한가요?
설정에 따라 달라서 이 계산기가 후보마다 허용 오차를 함께 표시합니다. 일반적인 클래식 CAN 설정은 대략 0.4~0.5퍼센트를 견디는데, 이 여유는 반대편 노드와 나눠 쓰는 값입니다. ±0.5%인 세라믹 레조네이터는 한계에 걸쳐 있어 간헐적인 버스 오프의 흔한 원인이고, 50ppm 수정 발진기라면 여유가 충분합니다.
한 비트가 왜 8~25 타임 퀀텀이어야 하나요?
퀀텀이 그보다 적으면 재동기화에 쓸 해상도가 부족합니다. 점프 폭이 위상 세그먼트를 넘을 수 없기 때문입니다. 25를 넘으면 초기 Bosch 컨트롤러의 필드 폭을 초과합니다. 최신 CAN FD 컨트롤러는 훨씬 큰 값을 허용하며, 이 계산기는 선택한 부품의 한계를 따릅니다.
해당 비트레이트에서 버스 길이는 얼마까지 가능한가요?
신호가 반대쪽 노드까지 갔다 오는 시간이 전파 세그먼트 안에 들어가야 하므로 길이와 비트레이트는 서로 상충합니다. 통상적인 수치는 1Mbit/s에서 약 40m, 500kbit/s에서 100m, 250kbit/s에서 250m, 125kbit/s에서 500m이며 표준적인 트랜시버 지연을 가정한 값입니다.
CAN FD에서 송신 지연 보상이 필요한가요?
데이터 구간이 약 1Mbit/s를 넘으면 필요합니다. 그 위에서는 트랜시버를 통과하는 루프 지연이 한 비트 시간을 넘을 수 있어, 송신 노드가 자기 신호의 메아리를 잘못된 위치에서 샘플링하게 됩니다. 2Mbit/s 이상에서 안정적으로 동작하려면 TDC를 켜고 이차 샘플 포인트를 설정해야 합니다.