아래는 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

+ Recent posts