UART 보율 오차 계산기
MCU 클럭과 오버샘플링으로 보율 분주비(AVR UBRR 등)·실제 보율·오차 %를 계산하고, 데이터 비트 수에 따른 수신 허용 범위와 표준 보율 표를 함께 봅니다.
계산식
- 분주비 = f ÷ (오버샘플링 × 보율) → 정수(또는 레지스터의 소수 단위)로 반올림
- 실제 보율 = f ÷ (오버샘플링 × 넣은 분주비)
- 오차(%) = (실제 보율 ÷ 원하는 보율 − 1) × 100
- AVR: BAUD = f ÷ (16 × (UBRR + 1)), 두 배 속도(U2X = 1)는 8 × (UBRR + 1)
오차가 왜 문제인가
- UART 는 시작 비트의 하강 에지에 맞춰 시계를 맞추고, 그 뒤 비트들은 자기 클럭으로 세어 가운데쯤에서 읽습니다. 보율이 다르면 프레임 끝(패리티·정지 비트)으로 갈수록 읽는 위치가 밀립니다.
- 그래서 허용 오차는 프레임이 길수록 작습니다. ATmega328P 데이터시트는 데이터+패리티 비트 수(D)별로 받아들일 수 있는 범위를 식으로 주고(아래 표), 송신·수신이 오차를 반씩 나눈다고 보고 «권장 최대 수신 오차» 를 적습니다(보통 속도 D = 8 에서 ±2.0 %).
- 중요한 것은 두 장비 사이의 차이입니다. 한쪽이 +2 %, 다른 쪽이 −2 % 면 차이는 약 4 % 입니다. «상대 장비 보율 오차» 칸에 상대 쪽 오차를 넣어 차이를 봅니다.
- 클럭이 1.8432 MHz 의 배수(11.0592·14.7456·18.432 MHz 등)면 표준 보율이 정확히 나누어떨어집니다. 데이터시트 표 19-11 에서 이 클럭들의 오차가 0.0 % 인 이유입니다.
AVR 수신 허용 범위 (데이터시트 표 19-2·19-3)
| D | 보통 속도 최저 ~ 최고 | 권장 최대 수신 오차 | 두 배 속도 최저 ~ 최고 | 권장 최대 수신 오차 |
|---|---|---|---|---|
| 5 | 93.20 ~ 106.67 % | ±3.0 % | 94.12 ~ 105.66 % | ±2.5 % |
| 6 | 94.12 ~ 105.79 % | ±2.5 % | 94.92 ~ 104.92 % | ±2.0 % |
| 7 | 94.81 ~ 105.11 % | ±2.0 % | 95.52 ~ 104.35 % | ±1.5 % |
| 8 | 95.36 ~ 104.58 % | ±2.0 % | 96.00 ~ 103.90 % | ±1.5 % |
| 9 | 95.81 ~ 104.14 % | ±1.5 % | 96.39 ~ 103.53 % | ±1.5 % |
| 10 | 96.17 ~ 103.78 % | ±1.5 % | 96.70 ~ 103.23 % | ±1.0 % |
자주 묻는 것
16 MHz 에서 115200 bps 가 잘 안 되는 이유는?
오버샘플링 16 이면 분주비가 8.68 이라 9 로 반올림되고, 실제 보율은 111 111 bps(−3.5 %)가 됩니다. 두 배 속도(오버샘플링 8)로 바꾸면 17.36 → 17, 117 647 bps(+2.1 %)로 오차가 줄어듭니다.
오차가 몇 % 까지 괜찮나요?
칩과 프레임 길이에 따라 다릅니다. ATmega328P 는 8비트 데이터·패리티 없음(D = 8)에서 보통 속도 기준 권장 최대 수신 오차를 ±2.0 % 로 적습니다. 다른 칩은 그 데이터시트의 수신 허용 범위 표를 봅니다.
분수 분주는 무엇인가요?
분주 레지스터에 소수 부분(예: 1/16 단위)이 있는 UART 입니다. 정수만 되는 UART 보다 오차를 훨씬 줄일 수 있습니다. 레지스터에 넣는 방법은 칩 매뉴얼을 따릅니다.
PC 쪽 USB-시리얼 변환기도 오차가 있나요?
변환기 칩도 자기 클럭을 나눠 보율을 만듭니다. 칩마다 만들 수 있는 보율과 오차가 다르므로, 높은 보율에서 글자가 깨지면 변환기 데이터시트의 보율 표를 확인합니다.
보율로 문자 시간·Modbus 3.5문자를 보려면 시리얼 통신 시간 계산기.