게시됨 2026-04-08
이 가이드는 최대 20개까지 제어할 수 있는 실용적이고 현장 테스트된 솔루션을 제공합니다.서보 기구Raspberry Pi와 같은 단일 보드 컴퓨터를 동시에 사용합니다. 2개 이상 직접 연결서보 기구GPIO 핀에 연결하면 전압 강하, PWM 타이밍 충돌 및 보드 손상이 발생합니다. 안정적인 방법은 전용 PWM 드라이버 모듈(예: PCA9685)을 사용하는 것입니다. 아래에서는 일반적인 실제 로봇 공학 및 애니마트로닉스 프로젝트를 기반으로 하는 정확한 하드웨어 설정, 배선 다이어그램, 전력 계산, Python 코드 및 문제 해결 단계를 확인할 수 있습니다.
현재 한도: 각 GPIO 핀은 최대 16mA를 공급하는 반면 표준 서보는 이동할 때 150~500mA를 소비합니다. 20개의 서보에는 보드의 3.3V/5V 레일 용량을 훨씬 초과하는 10A 이상이 필요합니다.
PWM 하드웨어 제한: Raspberry Pi에는 하드웨어 PWM 채널이 2개(GPIO 18 및 19)만 있습니다. 다른 핀의 소프트웨어 PWM은 20개의 서보에 지터와 CPU 과부하를 발생시킵니다.
전압붕괴: 보드의 5V 핀에서 20개의 서보를 작동하면 즉시 전압 강하가 발생하여 시스템이 재설정됩니다.
사용I²C 기반 PWM 드라이버 모듈(16채널 PCA9685가 업계 표준입니다). 이러한 모듈 2개(각각 최대 16개의 서보를 처리)를 연결하거나 모듈 1개와 멀티플렉서를 연결합니다. 이 가이드에서는 두 개의 PCA9685 보드(총 32개 채널, 20개만 사용)를 사용합니다.
싱글 보드 컴퓨터 1대(Raspberry Pi 3B+ 이상)
PCA9685 16채널 12비트 PWM 드라이버 보드 2개
20개의 표준 5V 서보(예: SG90, MG90S 또는 MG996R – 필요한 토크에 따라 선택)
1개의 외부 5V DC 전원 공급 장치 – 전류 계산: 20 서보 × 0.5A = 최소 10A. 사용10A~15A 조정 5V 공급.
커패시터: 전력 평활화를 위한 2x 1000μF 전해(≥10V)
점퍼 와이어(I²C의 경우 암-암, 서보 연결의 경우 수-암)
배전용 브레드보드 또는 터미널 블록
1단계 - Raspberry Pi와 첫 번째 PCA9685 간의 I²C 연결
Pi 3.3V → PCA9685의 VCC(참고: 일부 모듈은 5V 로직을 허용합니다. 모듈을 확인하십시오. 5V 로직 모듈의 경우 모듈이 3.3V를 허용하는 경우에만 Pi의 3.3V를 사용하십시오. 더 안전함: 모듈 데이터시트에서 5V 허용 오차를 확인한 경우에만 VCC를 Pi의 5V 핀에 연결하십시오. 대부분의 PCA9685 보드는 3.3V I²C 로직으로 작동하지만 서보 V+에는 5V가 필요합니다. 다음 단계를 참조하세요.)
올바른 표준 배선(PCA9685 보드의 99%):
Pi 5V(핀 2 또는 4) → PCA9685 VCC(칩 로직용 전원 - 예, 대부분은 5V 로직에서 실행됨)
파이 GND → PCA9685 GND
Pi SDA(GPIO 2) → PCA9685 SDA
Pi SCL(GPIO 3) → PCA9685 SCL
2단계 - 서보용 외부 전원
외부 5V 공급 장치(10A+) 양극(+) → PCA9685 V+ 단자(종종 "V+" 또는 "서보 전원"으로 표시됨)
외부 공급 GND → PCA9685 GND(Pi와 공통 접지를 공유해야 함 - 위에서 이미 수행한 대로 Pi GND를 PCA9685 GND에 연결)
역기전력 스파이크를 흡수하려면 PCA9685 근처의 V+ 및 GND에 1000μF 커패시터를 배치하십시오.
3단계 - 서보 연결
각 서보의 빨간색(전원) → PCA9685 V+ 레일(브레드보드 전원 레일 사용)
서보 브라운/블랙(GND) → PCA9685 GND 레일
서보 주황색/노란색(신호) → PCA9685 PWM 출력 핀(첫 번째 보드에서 0~15, 두 번째 보드에서 0~3)
4단계 – 두 번째 PCA9685
두 번째 보드의 I²C 주소 설정: 주소 점퍼를 납땜합니다. PCA9685의 기본 주소는 0x40입니다. 두 번째 보드의 경우: 납땜 A0 점퍼 → 주소가 0x41이 됩니다.
두 번째 보드의 SDA/SCL/GND/VCC를 첫 번째 보드(동일한 I²C 버스)와 병렬로 연결합니다.
V+를 동일한 외부 5V 전원에 연결합니다.
Pi에서 I²C를 활성화합니다.
sudo raspi-config # 인터페이스 옵션 → I2C → 예 sudo 재부팅
필수 라이브러리를 설치합니다:
sudo apt 업데이트 sudo apt 설치 python3-pip python3-smbus i2c-tools sudo pip3 설치 adafruit-circuitpython-pca9685
I²C 장치 확인:
sudo i2cDetect -y 1
0x40 및 0x41이 표시되어야 합니다(두 번째 보드의 주소가 올바르게 지정된 경우).
파일 만들기Servo_control.py:
import time import board import busio from adafruit_pca9685 import PCA9685 # I2C 버스 초기화 i2c =busio.I2C(board.SCL, Board.SDA) # 주소 0x40의 첫 번째 PCA9685 pca1 = PCA9685(i2c, 주소=0x40) pca1.주파수 = 50 # 표준 서보의 경우 50Hz # 두 번째 PCA9685 주소 0x41 pca2 = PCA9685(i2c, 주소=0x41) pca2.주파수 = 50 # 서보 펄스 폭 범위(일반적으로 500~2500마이크로초) # 듀티 사이클로 변환: 듀티 = pulse_us / 2000065535 def angle_to_duty(angle, min_us=500, max_us=2500): 펄스 = min_us + (각도 / 180.0)(max_us - min_us) return int((pulse / 20000.0) * 65535) # 보드 및 채널로 모든 서보 제어 def set_servo(board,channel, angle): if angle 180: angle = 180 board.channels[channel].duty_cycle = angle_to_duty(angle) # 예: 20개 서보 모두를 90°로 이동 Servos = [(pca1, i) for i in range(16)] + [(pca2, i) for i in range(4)] # 보드의 총 20개, ch in Servos: set_servo(board, ch, 90) time.sleep(0.01) # 전류 서지를 줄이기 위한 스태거 # 보드1 채널0의 스윕 서보를 0에서 180까지 print("Sweeping Servo on Board1 ch0") for angle in range(0, 181, 10): set_servo(pca1, 0, angle) time.sleep(0.05) # 모든 서보를 해제합니다(PWM 전송 중지) - 지터 방지에 중요 pca1.deinit() pca2.deinit()
실제 사례: 한 애호가가 10개의 서보를 5V/3A 전원 공급 장치에 직접 연결한 적이 있습니다. 동시 이동 중에 전압이 3.8V로 떨어지고 서보가 정지되었으며 Raspberry Pi가 재부팅되었습니다. 해결책:5V/15A 조정 전원을 사용하세요.(예: LED 전원 공급 장치 또는 컴퓨터 ATX 전원 공급 장치의 5V 레일) 추가하다대형 커패시터(5-8개의 서보당 1000μF) 각 드라이버 보드 근처에 있습니다.
실행 가능한 규칙: 최대 동시 전류를 계산합니다. 20개의 서보가 모두 동시에 움직인다면 10A로 가정합니다. 안전을 위해 마진 30% 추가 →최소 13A. 전원 분배에는 14AWG 이상의 전선을 사용하십시오.
모든 서보가 동일한 최소/최대 펄스를 갖는 것은 아닙니다. 공통 값:
아날로그 서보의 경우 500 µs(0°) – 2500 µs(180°)
많은 디지털 서보의 경우 600 µs(0°) – 2400 µs(180°)
교정 방법: 300~2700μs 범위에서 스윕하는 테스트 스크립트를 작성하고 기계적 한계를 찾은 다음 업데이트합니다.마이너스그리고max_us위의 함수에서.
비틀거리는 움직임: 모든 서보에 정확히 동일한 마이크로초에 각도를 변경하도록 명령하지 마십시오. 추가하다시간.수면(0.005)각각 사이set_servo부르다. 이는 부하를 분산시켜 피크 전류를 줄입니다.
업데이트 속도: 50Hz(20ms 주기)가 표준입니다. 주파수를 100Hz 이상으로 높이지 마십시오. 대부분의 서보는 과열됩니다.
CPU 사용량: PCA9685 하드웨어는 독립적으로 PWM을 생성합니다. Python 스크립트는 각도를 변경할 때마다 I²C 명령만 보냅니다. 정적 위치의 경우 스크립트가 종료될 수 있습니다. 서보는 전원이 공급되는 동안 마지막 위치를 유지합니다.
1. 부품 주문– PCA9685 보드 2개, 서보 20개, 5V/15A 전원 공급 장치, 1000μF 커패시터.
2. 하나의 서보로 테스트– 단일 서보를 첫 번째 PCA9685에 연결하고 스윕 코드를 실행합니다.
3. 전원 공급 장치 추가– 외부 5V/15A를 V+ 레일에 연결하고 서보가 강하게 움직이는지 확인합니다.
4. 5개의 서보로 확장– 전원 공급선의 온도를 모니터링하면서 점차적으로 더 많은 서보를 추가합니다.
5. 두 번째 PCA9685 추가– 주소를 0x41로 설정하고 서보 4개를 연결한 후 테스트합니다.
6. 전체 20서보 테스트– 제공된 코드를 실행하여 모든 서보를 90°로 이동한 다음 모든 채널을 천천히 스윕합니다.
Raspberry Pi의 GPIO에서 직접 20개의 서보를 제어할 수 없습니다. 전용 고전류 5V 전원 공급 장치가 있는 PCA9685 PWM 드라이버 보드를 사용하세요.이 방법은 수천 개의 실제 애니마트로닉스, 헥사포드 로봇 및 자동화 프로젝트에 사용됩니다. 신뢰할 수 있고 확장 가능하며 잘 문서화되어 있습니다. 작은 테스트부터 시작하여 전력 안정성을 확인한 후 확장하세요. 귀하의 성공은 적절한 접지와 충분한 전류량에 달려 있으며 둘 다 협상할 수 없습니다.
이제 조치를 취하십시오. 하나의 PCA9685를 단일 서보 및 외부 5V 공급 장치와 연결하십시오. 작동되면 나머지를 추가하십시오. 조립 후 2시간 이내에 안정적인 20-서보 시스템을 갖게 됩니다.
업데이트 시간:2026-04-08