본문 바로가기
돈버는정보 돈버는정보

UART Baud Rate 오차 해석

읽는 시간 약 7분

UART 통신 사양을 보면 9600, 38400, 115200 Baud 같은 값을 자주 볼 수 있습니다. UART는 별도의 클럭선을 사용하지 않는 비동기 통신이기 때문에 송신기와 수신기의 Baud Rate가 정확하게 맞는 것이 중요합니다.

하지만 실제 회로에서는 클럭 오차와 분주기 계산 때문에 설정값과 실제 Baud Rate 사이에 약간의 차이가 생길 수 있습니다.

이를 Baud Rate Error라고 합니다. Microchip은 송신·수신 Baud Rate의 차이가 너무 커지면 데이터가 불규칙하게 손상될 수 있다고 설명합니다.

Baud Rate란?

UART에서 Baud Rate는 데이터 전송 타이밍을 결정하는 값입니다.

일반적인 이진 UART에서는 실무적으로 Baud Rate와 초당 비트 수를 거의 같은 의미로 사용합니다.

대표적으로

9600 Baud

57600 Baud

115200 Baud

등이 많이 사용됩니다.

예를 들어 9600 Baud라면 한 비트의 시간은 약

1 ÷ 9600 = 104.17μs

입니다.

115200 Baud라면

1 ÷ 115200 ≈ 8.68μs

로 훨씬 짧아집니다.

UART에서 왜 오차가 발생할까?

UART는 SPI처럼 별도의 Clock 신호를 주고받지 않습니다.

송신기와 수신기가 각각 자신의 클럭을 기준으로 데이터 타이밍을 계산합니다.

따라서 오차는 주로

MCU 오실레이터의 주파수 오차

Baud Rate Generator의 분주 오차

온도에 따른 클럭 변화

등에서 발생합니다.

Microchip은 UART Baud Rate 불일치의 주요 원인으로 기준 클럭의 오차와 원하는 Baud Rate를 정확히 만들지 못하는 분주기 오차를 설명합니다.

Baud Rate 오차는 어떻게 계산할까?

기본적인 계산식은 다음과 같습니다.

오차율(%) = (실제 Baud Rate – 목표 Baud Rate) ÷ 목표 Baud Rate × 100

예를 들어 목표가 9600 Baud인데 실제 출력이 9615 Baud라면

(9615 – 9600) ÷ 9600 × 100 ≈ +0.16%

입니다.

즉 약 +0.16% 빠르게 동작한다는 뜻입니다.

반대로 실제 Baud Rate가 9500이라면

(9500 – 9600) ÷ 9600 × 100 ≈ -1.04%

가 됩니다.

MCU에서는 왜 정확히 9600이 안 나올까?

MCU의 UART는 시스템 클럭을 일정한 숫자로 나누어 Baud Rate를 만듭니다.

예를 들어 Microchip의 한 UART 방식에서는 16MHz 클럭에서 9600 Baud를 만들기 위해 분주값을 정수로 선택해야 합니다.

분주값을 계산하면 약 25.04가 나오지만 레지스터에는 정수를 넣어야 하므로 25를 사용하게 됩니다.

그 결과 실제 Baud Rate는 약

9615 Baud

가 되고 오차는 약 **+0.16%**가 됩니다.

즉 설정 화면에 9600이라고 입력했다고 해서 실제 전기신호가 정확히 9600.000 Baud가 되는 것은 아닙니다.

오차가 몇 %까지 괜찮을까?

UART에서는 흔히 약 2~3% 정도를 실무적인 허용범위로 이야기하지만 이것을 모든 UART에 적용되는 절대 기준으로 보면 안 됩니다.

Texas Instruments는 일반적인 UART 시스템에서 약 2~3% 수준의 Baud Rate 차이를 허용할 수 있다고 설명하지만, 실제 허용범위는 수신기의 샘플링방식과 프레임 길이 등에 따라 달라집니다.

Microchip의 예에서도 프레임의 데이터 비트 수 등에 따라 권장 수신기 오차가 약 **±1.5~±3%**로 달라집니다.

따라서 가장 안전한 방법은 사용하는 MCU의 UART Error Tolerance 표를 확인하는 것입니다.

송신기와 수신기 오차를 함께 봐야 한다

한쪽 장치의 오차만 확인해서는 부족합니다.

예를 들어

송신기 = +1%

수신기 = -1%

라면 두 장치 사이의 실제 Baud Rate 차이는 약 **2%**가 될 수 있습니다.

반대로 두 장치가 모두 +1% 방향으로 오차가 있다면 서로의 상대적인 차이는 매우 작을 수도 있습니다.

결국 UART 통신에서 중요한 것은 송신기와 수신기 사이의 실제 속도 차이입니다.

Baud Rate 오차가 커지면 왜 데이터가 깨질까?

UART 수신기는 Start Bit를 감지한 뒤 일정한 시간간격으로 각 데이터 비트를 읽습니다.

처음에는 정확한 위치에서 읽더라도 송신기와 수신기의 속도가 조금씩 다르면 뒤쪽 비트로 갈수록 샘플링 위치가 이동합니다.

오차가 너무 커지면 원래 읽어야 할 비트의 가운데가 아니라 다음 비트와 가까운 곳을 읽게 됩니다.

그 결과

문자 깨짐

잘못된 데이터 수신

Framing Error

등이 발생할 수 있습니다.

Microchip은 송·수신 Baud Rate 차이가 너무 커지면 수신기가 Start Bit와 프레임에 정상적으로 동기화하지 못할 수 있다고 설명합니다.

Baud Rate가 높을수록 더 민감할까?

일반적으로 높은 Baud Rate에서는 하나의 비트 시간이 짧아지기 때문에 클럭 정확도와 신호 품질에 더 신경 써야 합니다.

Microchip은 UART 통신 문제를 줄이는 방법으로

정확도가 높은 Crystal/Oscillator 사용

Auto-Baud 기능 사용

Baud Rate 낮추기

등을 제시합니다.

특히 내부 RC 오실레이터를 사용하는 장치에서는 온도와 전압 변화에 따른 클럭 오차도 확인하는 것이 좋습니다.

9600과 115200 중 어떤 것이 좋을까?

속도가 높다고 항상 좋은 것은 아닙니다.

9600 Baud는 느리지만 통신 타이밍에 비교적 여유가 있고, 115200 Baud는 빠르게 데이터를 전송할 수 있지만 MCU 클럭과 배선 품질에 더 주의해야 합니다.

따라서 UART를 설정할 때는 단순히 가장 높은 속도를 선택하기보다 필요한 데이터량과 클럭 정확도를 함께 고려해야 합니다.

정리

UART Baud Rate Error는 목표 Baud Rate와 실제 생성된 Baud Rate 사이의 차이입니다.

계산식은

오차율 = (실제값 – 목표값) ÷ 목표값 × 100

입니다.

UART는 별도의 클럭선을 사용하지 않기 때문에 송신기와 수신기의 Baud Rate 차이가 누적되면 데이터 오류나 Framing Error가 발생할 수 있습니다.

일반적으로 2~3%가 하나의 참고 범위로 사용되기도 하지만, 정확한 허용오차는 MCU의 UART 구조, Oversampling, 데이터 비트 수와 프레임 구성에 따라 달라집니다. 따라서 실제 설계에서는 반드시 해당 MCU 데이터시트의 Baud Rate Error 또는 Operational Range를 확인하는 것이 중요합니다.

moneytoday
함께 보면 좋은 글

댓글 0

첫 댓글을 남겨보세요.

광고 차단 알림

광고 클릭 제한을 초과하여 광고가 차단되었습니다.

단시간에 반복적인 광고 클릭은 시스템에 의해 감지되며, IP가 수집되어 사이트 관리자가 확인 가능합니다.