안녕하세요! 원클릭AI 인턴 이찬송입니다.
라즈베리 파이나 아두이노로 서보 모터를 제어해본 적 있으신가요? 모터가 미세하게 떨리거나 원하는 대로 부드럽게 움직이지 않는 경험을 해보셨을 거예요. 이 문제의 원인은 제어 보드의 한계에 있습니다.
라즈베리 파이는 운영체제(OS)가 돌아가는 작은 컴퓨터예요. 와이파이 통신, 연산 처리 등 여러 작업을 동시에 하다 보면 모터에 보내는 신호가 아주 조금씩 늦어지거나 끊길 수 있어요. 이때 모터가 덜덜 떨리는 현상을 지터(Jitter)라고 합니다. 또한 하드웨어적으로 정밀한 타이머가 부족해서 여러 모터를 동시에 부드럽게 제어하기 어려워요. 이런 문제를 해결하기 위해 사용되는 칩이 바로 PCA9685예요!
PCA9685는 무엇인가요?

PCA9685는 마이크로컨트롤러의 적은 핀으로 다수의 서보 모터나 LED를 제어하기 위해 널리 사용되는 16채널 12-bit PWM 드라이버 칩이에요. 보통 단일 칩보다는 Adafruit 16-Channel PWM/Servo Driver 같은브레이크아웃 보드(모듈) 형태로 많이 사용해요.
이 보드를 보면 크게 4가지 부분으로 나뉘어요.
1. 마이크로컨트롤러 보드와 연결 부분: 라즈베리 파이나 아두이노와 연결돼요.
2. 검은색 핀들 (그라운드): 여기에 서보모터를 연결해요.
3. 외부 전원 공급 단자: 모터를 돌릴 전력을 따로 공급해요.
4. 메인 작동 칩: PCA9685 칩이 여기 있어요.
PCA9685는 어떤 역할을 하나요?
PCA9685는 PWM 신호를 전담해서 만들어주는 칩이에요. 쉽게 말해, 라즈베리 파이가 매 순간 신호를 직접 조절하지 않아도 되게 만들어주는 전용 관리자 같은 존재입니다. 라즈베리 파이는 "1번 모터를 50%로 돌려"라는 명령만 한 번 보내면, 그 이후의 반복적인 신호 생성은 PCA9685가 알아서 처리해요.
이 칩은 내부에 독립적인 클럭과 타이머를 가지고 있어서 라즈베리 파이의 CPU 상태와 상관없이 항상 일정하고 안정적인 신호를 출력할 수 있어요. 덕분에 모터는 훨씬 부드럽고 안정적으로 동작하고, 16개를 동시에 돌려도 전혀 문제가 없답니다!
어떻게 작동하는 걸까요?
PCA9685는 카운터와 비교기를 통한 메커니즘으로 작동해요.
칩 내부에는 시간을 재는 정교한 타이머/카운터가 있어요. 이것이 "지금 켜라", "지금 꺼라"를 결정하는 기준이 된답니다.
각 채널마다 LED_ON과 LED_OFF라는 두 개의 설정값이 있어요.
- 카운터가 LED_ON 값과 같아질 때: 신호를 HIGH(켜짐)로 바꿔요
- 카운터가 LED_OFF 값과 같아질 때: 신호를 LOW(꺼짐)로 바꿔요
단순히 듀티 사이클의 비율만 조절하는 것이 아니라 신호가 켜지는 시점(Phase)도 조절할 수 있어요.
예를 들어, 1번 채널은 0에서 켜고 2번 채널은 200에서 켜지게 설정하면 전류가 한꺼번에 몰리는 현상을 방지할 수 있답니다.

출처: YouTube, 「HiLetgo PCA9685 16 Channel 12-Bit PWM Servo Motor Driver_J Block」
PCA9685의 주요 특징
- 인터페이스: I2C 통신: 선 2개(SDA, SCL)만 연결하면 여러 개의 칩과 데이터를 주고받을 수 있는 효율적인 통신 방법이에요.
- 채널 수: 16개: 서보 모터나 LED를 최대 16개까지 동시에 제어할 수 있어요.
- 해상도: 12-bit (0 ~ 4095 단계): 일반적인 아두이노의 analogWrite(8-bit, 256단계)보다 훨씬 정교한 제어가 가능해요. 제어 값을 0부터 4095까지 아주 잘게 나눌 수 있어서 모터 속도나 위치를 더 자연스럽게 제어할 수 있답니다.
- 주파수: 24Hz ~ 1526Hz 조절 가능: 내부에 25MHz 오실레이터가 내장되어 있어요. 서보 모터 제어 시 주로 50Hz나 60Hz로 설정해서 사용해요.
- 동작 전압: 2.3V ~ 5.5V: 다양한 전압 환경에서 사용할 수 있어요.
I2C 통신으로 제어하기
PCA9685는 I2C 버스를 통해 제어돼요. 기본 주소는 0x40입니다. 칩 위에 있는 주소 점퍼(A0~A5)를 납땜해서 주소를 변경하면 하나의 I2C 버스에 최대 62개의 PCA9685를 연결할 수 있어요. 이론상 16채널 × 62개 = 992개의 모터를 제어할 수 있다는 의미랍니다!
알아두면 좋은 용어들
- I2C 통신: 선 2개만 연결하면 여러 개의 칩과 데이터를 주고받을 수 있는 효율적인 통신 방법이에요.
- 해상도: 제어의 정밀도예요. 12-bit는 힘의 세기를 4,096단계로 아주 잘게 쪼개서 부드럽게 조절할 수 있다는 뜻이랍니다.
- 듀티 사이클: 전기가 들어와 있는 시간의 비율이에요. 듀티 사이클이 50%면 절반은 켜져 있고 절반은 꺼져 있어서 모터가 중간 힘으로 돌아요.
- PWM: 전력의 양을 0과 100 사이에서 아주 빠르게 껐다 켰다 반복하여 조절하는 기술이에요. 전등 스위치를 빠르게 껐다 켜서 밝기를 조절하는 원리와 같답니다.
정리하며
PCA9685는 여러 개의 모터를 동시에 제어해야 하거나 더 부드럽고 안정적인 움직임이 필요한 환경에서 매우 효과적인 솔루션이에요. 제어 보드의 부담은 줄이고, 모터 제어의 품질은 높이고 싶으시다면 PCA9685는 꼭 한 번 고려해볼 만한 선택지랍니다! 🔧
