DIY 드론 빌드: UART의 비밀을 풀다

드론을 처음 만들 때 플라이트 컨트롤러(FC)의 UART라는 단어를 마주했습니다. "이게 뭐지?"라는 궁금증이 시작이었고, GPS 모듈을 연결하면서부터 UART의 세계에 발을 들였습니다. 하지만 연결하고 설정하는 과정에서 자꾸만 새로운 의문이 생겨났습니다. 왜 TX와 RX를 교차로 연결해야 할까? RC 수신기는 왜 RX만 쓰지? UART 포트가 왜 모자라는 걸까? 이 글은 그런 미스터리를 하나씩 파헤쳐가는 여정입니다. 함께 풀어보며 드론의 숨겨진 통신 비밀을 알아가 봅니다.

첫 번째 미스터리: UART란 무엇인가?
UART는 "Universal Asynchronous Receiver/Transmitter"의 약자입니다. 직역하면 "범용 비동기 수신/송신기"인데, 쉽게 말해 FC가 외부 장치와 데이터를 주고받게 해주는 통신 포트입니다. 드론에서 GPS, 텔레메트리, 수신기 같은 장치들을 연결할 때 꼭 거쳐야 하는 관문이죠. 처음엔 단순히 "선 연결하면 되겠지" 했지만, UART가 어떻게 작동하는지 알수록 그 단순함 뒤에 숨은 복잡함이 보였습니다.
UART는 직렬 통신 방식으로 작동합니다. 데이터를 한 비트씩 순서대로 보내고 받는 구조인데, "비동기"라는 점이 핵심입니다. I2C나 SPI 같은 동기 통신은 클럭 신호로 타이밍을 맞추지만, UART는 클럭 없이 데이터를 보냅니다. 대신 Start Bit으로 시작을 알리고, Stop Bit으로 끝을 알려줍니다. 이 간단한 방식 덕분에 배선이 단순해지고, 설정만 잘 맞추면 다양한 장치와 통신할 수 있습니다.
예를 들어, GPS를 연결한다고 해봅시다. FC의 UART 포트에서 TX(송신) 핀을 GPS의 RX(수신)에, FC의 RX를 GPS의 TX에 연결합니다. 그러면 GPS가 위치 데이터를 FC로 보내고, FC는 그 데이터를 읽어 비행에 활용합니다. 이 교차 연결이 처음엔 어색했지만, UART가 데이터를 한 방향씩 주고받는 방식임을 이해하니 납득이 갔습니다. 그런데 왜 비동기인 걸까요? 그 이유가 다음 미스터리로 이어집니다.
두 번째 미스터리: 비동기와 동기, 뭐가 다를까?
UART가 비동기라는 점이 신기했습니다. 동기 통신인 I2C와 SPI는 클럭 신호로 송신과 수신 타이밍을 맞추는데, UART는 왜 클럭 없이 움직이는 걸까요? 이 차이가 드론에서 왜 중요한지 알아봤습니다.
동기 통신은 빠르고 정확합니다. SPI는 자이로 센서처럼 초고속 데이터가 필요한 곳에서 빛을 발하고, I2C는 여러 센서를 적은 배선으로 연결할 때 유용합니다. FC 내부에서 MPU6050(자이로/가속도계)이나 BMP280(기압계)이 I2C나 SPI로 MCU와 통신하는 경우가 많습니다. 반면 UART는 GPS나 텔레메트리처럼 외부 장치와 연결할 때 주로 쓰입니다.
비동기의 장점은 단순함에 있습니다. 클럭 선이 없으니 TX와 RX 두 선만으로 통신이 가능합니다. 드론처럼 작은 공간에서 배선을 깔끔하게 해야 할 때 이점이 큽니다. 또, 장치마다 통신 속도만 맞추면 호환성이 좋아 DIY 빌드에서 유연성을 줍니다. 하지만 속도는 동기 방식보다 느릴 수 있고, 타이밍을 맞추는 보드레이트(Baud Rate) 설정이 필수입니다. 이 설정에서 한 번 고생했던 경험이 떠오릅니다. 그건 나중에 풀어보겠습니다.
FC 안에서는 I2C와 SPI가 센서들과 빠르게 소통하고, UART가 외부로 뻗어나가 장치들과 대화합니다. 예를 들어, SPI로 자이로 데이터를 읽고, I2C로 고도를 파악한 뒤, UART로 GPS 위치를 받아오는 식으로 조화를 이룹니다. 이 연결고리를 이해하니 드론의 통신 구조가 머릿속에 그려졌습니다. 하지만 구체적으로 UART는 어떻게 데이터를 보낼까요?
세 번째 미스터리: TX와 RX, 데이터는 어떻게 흐를까?
UART의 작동 원리를 파고들었습니다. GPS를 연결할 때 보니 전원선(VCC), 그라운드(GND), TX, RX 이렇게 네 선이 필요했습니다. VCC와 GND는 장치에 전기를 공급하고 기준점을 맞춰주지만, 통신의 핵심은 TX와 RX입니다.
UART는 데이터를 비트 단위로 보냅니다. 예를 들어, GPS가 "위도: 37.5"라는 데이터를 보내면, 이를 8비트(1바이트)씩 쪼개서 전송합니다. 각 바이트는 Start Bit으로 시작하고, 데이터 비트를 보내고, Stop Bit으로 끝납니다. TX 선에서 이 신호가 전압으로 표현되는데, 3.3V가 "1", 0V가 "0" 같은 식입니다. FC의 RX는 이 변화를 읽어 데이터를 조합합니다.
보드레이트가 여기서 중요합니다. 115200bps로 설정하면 1비트가 약 8.7마이크로초에 전송됩니다. 송신과 수신 속도가 안 맞으면 데이터가 깨집니다. 처음 GPS를 연결했을 때 신호가 안 잡혀서 당황했는데, FC는 115200bps로 설정돼 있고 GPS는 9600bps로 느리게 보내고 있었습니다. 데이터시트를 찾아 9600으로 맞추니 바로 작동하더군요. 요즘은 Baud Rate Auto 옵션이 있어서 편리하지만, 그땐 직접 맞춘 경험이 교훈이 됐습니다.
그런데 이상한 점이 생겼습니다. RC 수신기를 연결할 땐 왜 RX만 쓰는 걸까요?
네 번째 미스터리: RC 수신기는 왜 TX를 안 쓸까?
RC 수신기를 UART에 연결하면서 의문이 생겼습니다. GPS는 TX와 RX를 다 썼는데, 수신기는 FC의 RX에만 신호선을 연결합니다. TX 핀은 비워두더군요. 이게 왜 그럴까요?
RC 수신기는 조종기 명령(스로틀, 롤, 피치 등)을 FC로 전달하는 역할만 합니다. 단방향 통신이면 충분하죠. SBUS나 CRSF 같은 프로토콜은 수신기에서 FC로 데이터를 보내기만 하면 되니까 RX에 연결됩니다. FC가 수신기로 데이터를 보낼 필요는 거의 없습니다. CRSF는 텔레메트리로 양방향 통신도 가능하지만, 일반 비행에선 RX만 써도 됩니다.
Betaflight에서 UART 포트를 SBUS로 설정하면 RX 핀이 그 신호를 읽습니다. TX는 텔레메트리 같은 추가 기능에나 필요하죠. 처음엔 "통신이 반쪽짜리 아냐?" 했지만, 수신기의 역할이 "말하기"만 하면 된다는 걸 알니 납득이 갔습니다. 그러다 또 다른 문제가 눈에 띄었습니다. UART 포트가 모자라는 경우가 있더군요.
다섯 번째 미스터리: 왜 UART 개수가 제한될까?
FC마다 UART 개수가 다릅니다. 3개인 것도 있고, 6개 넘는 것도 있죠. 주변기기를 더 연결하고 싶어도 포트가 부족하면 막힙니다. 이건 왜 그런 걸까요?
FC의 두뇌인 MCU가 답입니다. MCU에는 하드웨어 UART 모듈이 정해진 개수만큼 내장돼 있습니다. STM32F405는 5개, STM32F1은 3개 정도 지원합니다. MCU 설계 시 제조사가 리소스를 정해놓으니 FC는 그 한계 안에서 만들어집니다. 또, MCU의 핀 수가 한정돼 있어 UART 외에도 I2C, SPI, PWM 등에 핀을 나눠 써야 합니다. UART 하나에 TX/RX 두 핀이 필요하니 개수를 늘리려면 핀이 더 필요하죠.
저가형 FC는 기본 기능만 지원해 UART가 적고, 고급형은 더 강력한 MCU로 포트를 늘립니다. "그럼 소프트웨어로 더 만들면 되지 않나?" 싶었는데, 여기서 재미난 경험이 생겼습니다.
여섯 번째 미스터리: 소프트웨어 시리얼의 함정
UART가 3개뿐인 FC로 SBUS, GPS, 텔레메트리를 연결하니 포트가 찼습니다. 스마트 오디오를 추가하려다 보니 소프트웨어 시리얼을 써봤습니다. 일반 GPIO 핀으로 UART를 흉내 내는 방법이죠. GPS를 Soft Serial로 옮기고 설정했는데, 처음엔 작동이 안 됐습니다.
CPU 사용률을 보니 80% 넘더군요. PID 루프 주파수를 8kHz로 설정해놨던 게 문제였습니다. 자이로와 모터 제어에 CPU가 바빠 GPS 데이터를 처리할 여력이 없었던 거죠. 하드웨어 UART는 전용 회로가 처리하지만, 소프트웨어 시리얼은 CPU가 직접 계산합니다. PID를 4kHz로 낮추니 CPU 사용률이 50% 정도로 떨어지고, GPS가 살아났습니다.
이 경험으로 깨달았습니다. 소프트웨어 시리얼은 CPU 여유가 있어야 안정적입니다. 드론의 실시간성이 중요한 만큼, 하드웨어 UART의 가치가 더 돋보였죠. 결국 UART 넉넉한 FC를 사는 게 낫겠다 싶었습니다.
UART의 여정 끝에서
UART를 파헤치며 드론의 통신 비밀을 하나씩 풀었습니다. 비동기의 단순함, TX/RX의 흐름, RC 수신기의 단방향성, 그리고 하드웨어와 소프트웨어의 한계까지. 이 과정을 통해 FC 설정이 덜 무섭게 느껴졌습니다. 여러분도 UART의 미스터리를 풀며 자신만의 드론을 만들어 보세요. 다음엔 어떤 비밀이 기다릴까요?

댓글

이 블로그의 인기 게시물

드론의 기초 - FPV의 구성과 이해

From BLHeli_32 to AM32: A Guide to Ease Your Transition Concerns

완전 초보도 따라하는 하이엔드 레이싱 드론 만들기 #08 - 베타플라이트(Betaflight) 완전정복 / 컴퓨터에 베타플라이트 컨피규레이터 설치하기