아래는 PCA9685PW ↔ Raspberry Pi 연결하여
Python 제어를 실무 기준으로 정리한 가이드입니다.
(서보모터·LED·PWM 제어에 가장 많이 쓰는 방식)
1) PCA9685PW 개요
- 16채널 PWM 컨트롤러
- I2C 통신
- 12bit 해상도 (0~4095)
- 서보모터 / LED / 모터 제어 가능
2) 라즈베리파이 ↔ PCA9685PW 배선
I2C 기본 연결 (필수)
PCA9685Raspberry Pi
| VCC | 3.3V (Pin 1) |
| GND | GND (Pin 6) |
| SDA | GPIO2 (Pin 3) |
| SCL | GPIO3 (Pin 5) |
| OE | GND (항상 활성화) |
⚠️ 주의
- VCC는 반드시 3.3V (5V 연결하면 I2C 손상 가능)
- GND는 반드시 공통 접지
서보모터 전원 (매우 중요 ⚠️)
PCA9685에는 **서보 전원(V+)**이 따로 있음.
PCA9685연결
| V+ | 외부 5~6V 전원 |
| GND | 외부 전원 GND (라즈베리파이 GND와 공통) |
⚠️ 절대 금지
- 라즈베리파이 5V로 서보 구동 ❌ (전류 부족, 보드 손상)
👉 서보 전원은 별도 어댑터 사용 (예: 5V 3A)
서보모터 연결
서보PCA9685
| 빨강(VCC) | V+ |
| 갈색/검정(GND) | GND |
| 노랑/주황(Signal) | PWM0 ~ PWM15 |
3) 라즈베리파이 I2C 활성화
sudo raspi-config
Interfacing Options → I2C → Enable
I2C 장치 확인
sudo apt install i2c-tools
i2cdetect -y 1
정상 출력 예:
40
👉 PCA9685 기본 주소 = 0x40
4) Python 라이브러리 설치
sudo apt update
sudo apt install python3-pip
pip3 install adafruit-circuitpython-pca9685
5) Python 기본 코드 (PWM 출력)
import board
import busio
from adafruit_pca9685 import PCA9685
# I2C 초기화
i2c = busio.I2C(board.SCL, board.SDA)
# PCA9685 객체 생성
pca = PCA9685(i2c)
pca.frequency = 50 # 서보모터 주파수 (50Hz)
# 채널 0 PWM 출력
pca.channels[0].duty_cycle = 2048 # 0~65535
6) 서보모터 제어 코드 (각도 제어 ⭐)
import board, busio
from adafruit_pca9685 import PCA9685
import time
i2c = busio.I2C(board.SCL, board.SDA)
pca = PCA9685(i2c)
pca.frequency = 50
def set_servo_angle(channel, angle):
# 서보 PWM 범위 (보통 500~2500us)
min_pulse = 500
max_pulse = 2500
pulse = min_pulse + (max_pulse - min_pulse) * angle / 180
duty = int(pulse / 20000 * 65535) # 20ms period
pca.channels[channel].duty_cycle = duty
while True:
set_servo_angle(0, 0)
time.sleep(1)
set_servo_angle(0, 90)
time.sleep(1)
set_servo_angle(0, 180)
time.sleep(1)
7) PWM 값 직접 제어 (LED, 모터 등)
pca.channels[1].duty_cycle = 0 # OFF
pca.channels[1].duty_cycle = 32768 # 50%
pca.channels[1].duty_cycle = 65535 # ON
8) PCA9685 주소 변경 (필요 시)
A0~A5 핀으로 주소 변경 가능
예:
- 기본: 0x40
- A0=1 → 0x41
Python에서 주소 지정:
pca = PCA9685(i2c, address=0x41)
9) 실무에서 가장 많이 생기는 문제
❗ 서보가 떨림 / 오동작
✔ 해결:
- 서보 전원 별도 공급
- GND 공통 연결
- pca.frequency = 50 정확히 설정
❗ I2C 인식 안 됨
✔ 해결:
- VCC = 3.3V 확인
- SDA/SCL 교차 확인
- i2cdetect 확인
❗ 라즈베리파이 리셋됨
✔ 원인:
- 서보 전류 과다
- 5V 라인 역류
👉 해결:
- 외부 전원 + 다이오드 + 공통 GND
728x90
'Hardware > 라즈베리파이' 카테고리의 다른 글
| 라즈베리파이 + SH1106 I2C 사용 #2(시스템정보,Python) (0) | 2026.02.04 |
|---|---|
| 라즈베리파이 + SH1106 I2C 사용 #1 (0) | 2026.02.04 |
| 라즈베리파이에서 LLM 사용한 음성 입력/출력 (1) | 2026.01.24 |
| 라즈베리파이 Nodejs 설치 (0) | 2026.01.22 |
| 라즈베리파이 시작하기 - 운영체제 (0) | 2024.07.31 |
