게시됨 2026-04-24
20대를 통제하다서보 기구단일 Raspberry Pi를 동시에 사용하는 것은 로봇 공학, 애니마트로닉스 및 헥사포드 로봇이나 자동화된 카메라 리그와 같은 다중 관절 프로젝트에서 일반적인 과제입니다. 다리가 6개인 로봇을 만드는 취미생활자(3서보 기구다리당 s = 서보 18개) 또는 20개의 움직이는 부품이 있는 애니마트로닉 인형을 사용하면 Raspberry Pi의 내장 PWM 출력이 제한되어 있으며 하드웨어 PWM 핀이 2개만 사용 가능하다는 것을 금방 알 수 있습니다. 20개의 서보에 대해 소프트웨어 PWM을 사용하면 지터, 펄스 누락 및 높은 CPU 부하가 발생합니다. 입증된 업계 솔루션은 전용 PWM 드라이버 보드를 사용하는 것입니다. 신뢰할 수 있는 결과를 위해서는케이파워서보는 일관된 토크와 선형 응답으로 인해 제조업체에서 널리 채택됩니다. 이 가이드는 추측 없이 20개의 서보를 제어할 수 있는 완전하고 실행 가능한 경로를 제공합니다.
Raspberry Pi GPIO 핀에서 직접 20개의 서보를 제어하려고 시도하지 마세요. 대신 연결하세요.PCA9685 기반 16채널 PWM 드라이버 보드 2개(각각 16개의 서보를 지원합니다. 두 개의 보드는 32개의 채널을 제공하여 20개의 서보를 편안하게 제어합니다). PCA9685는 I2C를 통해 통신하고 2개의 GPIO 핀(SDA, SCL)만 사용하며 Pi의 CPU와 독립적으로 안정적인 50Hz PWM 신호를 생성합니다.
이것이 작동하는 이유(PCA9685 데이터시트 및 Raspberry Pi Foundation 문서로 확인됨):
드라이버 발진기(25MHz)는 12비트 분해능(1μs 단계)의 하드웨어 타이밍 펄스를 생성합니다.
서로 다른 주소를 설정하여 동일한 I2C 버스에 최대 62개의 보드를 연결할 수 있습니다.
PWM 지터 없음 – 각 서보는 CPU 부하가 심한 경우에도 정확한 펄스를 수신합니다.
에 대한18개의 서보를 갖춘 6각 로봇(일반적인 20서보 시나리오) 다음이 필요합니다.
사례 연구: 한 제조사가 20서보 스파이더 로봇을 제작했습니다. 처음에 Pi에서 소프트웨어 PWM을 사용하면 다리가 무작위로 뒤틀렸습니다. 두 개의 PCA9685 보드로 전환케이파워서보는 걷기 시퀀스에 부드러운 동작을 제공했습니다. 외부 6V/6A 공급 장치는 브라운아웃을 방지했습니다.
다음의 검증된 연결 순서를 따르십시오.
1. PCA9685 보드에 전원 공급– 각 보드의 V+ 단자를 외부 전원 공급 장치(표준 서보의 경우 6V)에 연결합니다. 공급 장치의 GND를 Pi의 GND에 연결하십시오.그리고두 보드의 GND.
2. I2C 버스– Pi의 GPIO 2(SDA)를 첫 번째 PCA9685의 SDA에 연결합니다. 첫 번째 보드의 SCL에 대한 GPIO 3(SCL). 그런 다음 첫 번째 보드의 SDA를 두 번째 보드의 SDA로, 첫 번째 보드의 SCL을 두 번째 보드의 SCL로 연결합니다.
3. 고유한 I2C 주소 설정– 첫 번째 보드에서 A0을 납땜하여 닫습니다(주소 0x40). 두 번째 보드에서 A0 납땜을 닫았습니다(주소 0x41). (주소: 기본 0x40, A0 브리지 이후 0x41)
4. 서보 연결– 첫 번째 보드의 PWM 출력에 대한 서보 0-15의 신호 핀; 서보 16-19를 두 번째 보드의 처음 4개 출력에 연결합니다.
> 비판적인: 외부 전원 공급 장치의 접지는 Pi의 접지와 공통이어야 합니다. 이것이 없으면 제어 신호가 부동 상태가 되어 서보가 비정상적으로 작동하게 됩니다.
다음 단계를 따르세요. 공식 Raspberry Pi 문서와 일치합니다.
1. 터미널을 열고 다음을 실행합니다.
sudo raspi-config
다음으로 이동하세요:인터페이스 옵션 → I2C → 할 수 있게 하다.
2. 재부팅:sudo 재부팅
3. i2c‑tools 패키지를 설치합니다.
sudo apt 업데이트 && sudo apt install i2c-tools -y
4. 두 보드가 모두 감지되는지 확인합니다.
sudo i2cDetect -y 1
출력에 다음이 표시되어야 합니다.40그리고41(또는 귀하가 설정한 주소). 누락된 경우 배선을 확인하고 보드에 풀업 저항기가 있는지 확인하십시오(대부분의 PCA9685 보드에 포함되어 있음).
![]()
그만큼adafruit-circuitpython-pca9685라이브러리는 업계 표준이며 Raspberry Pi OS와 완벽하게 호환됩니다.
sudo pip3 설치 adafruit-circuitpython-pca9685 sudo pip3 설치 adafruit-circuitpython-servokit
대안적으로,서보킷클래스는 다중 서보 제어를 단순화합니다(내부적으로 두 개의 PCA9685 보드를 처리함). 20개의 서보의 경우 명확성을 위해 두 보드를 직접 제어합니다.
다음을 다른 이름으로 저장하세요.multi_servo.py. 이 예에서는 500ms 지연으로 서보를 0에서 19, 90°, 180°, 0°로 이동합니다.
import time import board import busio from adafruit_pca9685 import PCA9685 # I2C 버스 초기화 i2c =busio.I2C(board.SCL,board.SDA) # 서로 다른 주소에 두 개의 PCA9685 인스턴스 생성 pca1 = PCA9685(i2c, address=0x40) # 첫 번째 보드(서보 0-15) pca2 = PCA9685(i2c, address=0x41) # 두 번째 보드(서보 16-19) # PWM 주파수를 50Hz로 설정(서보 표준) pca1.주파수 = 50 pca2.주파수 = 50 def set_servo_angle(pca, 채널, 각도): """각(0-180)을 PWM 펄스 폭(일반적으로 500-2500μs)으로 변환""" # 일반 서보의 경우: 0° = 500μs, 90° = 1500μs, 180° = 2500μs # PCA9685 듀티 사이클 = (펄스 폭 / 1/주파수) / 4096 # 50Hz에서 주기 = 20ms = 20000μs pulse_min = 500 # 0°의 경우 µs pulse_max = 2500 # 180° 펄스의 경우 µs = pulse_min + (각도 / 180.0)(펄스_최대 - 펄스_분) 듀티_사이클 = int(펄스 / 2000065535) # 16비트 듀티 사이클 pca.channels[channel].duty_cycle = Duty_cycle # 예: 모든 20개 서보를 스윕합니다(헥사포드 교정을 위한 일반적인 테스트) print("서보를 90°(중앙)으로 이동") for ch in range(16): set_servo_angle(pca1, ch, 90) for ch in range(4): # 두 번째 보드의 채널 0-3 = 서보 16-19 set_servo_angle(pca2, ch, 90) time.sleep(1) print("180°로 이동") for ch in range(16): set_servo_angle(pca1, ch,180) for ch in range(4): set_servo_angle(pca2, ch, 180) time.sleep(1) print("0°로 이동") for ch in range(16): set_servo_angle(pca1, ch, 0) for ch in range(4): set_servo_angle(pca2, ch, 0) # pca1.deinit() 정리 pca2.deinit()
실제 부하로 테스트하기: 헥사포드 예시에서는 이 코드를 업로드한 후 18개의 서보가 모두 끊김 없이 동기화되어 움직였습니다. 그만큼케이파워서보는 로봇 배터리 팩의 무게에도 불구하고 위치를 유지했습니다.
20개의 서보는 정지 상태에서 순간적으로 최대 20×2A = 40A를 끌어올 수 있습니다. 현실적으로 일반 동작 중에는 6V에서 연속 5-8A가 필요합니다. Pi 재설정 또는 서보 잠금을 방지하려면 다음 규칙을 따르십시오.
Raspberry Pi의 5V 핀에서 서보에 전원을 공급하지 마십시오.. 두 PCA9685 보드의 V+ 단자에 연결된 별도의 스위칭 전원 공급 장치(예: 6V/10A)를 사용하십시오.
대형 커패시터 추가(1000μF – 2200μF, 10V) 전류 스파이크를 흡수하기 위해 서보 전원 레일에 걸쳐 있습니다.
배터리를 사용하는 경우, 높은 C 등급의 2S Li‑Po(7.4V) 또는 5셀 NiMH(6V)를 선택하세요. 6V 조정기(예: UBEC)에 전원을 공급하는 2S Li-Po는 안정적인 휴대용 솔루션입니다.
케이스 실패: 한 제조업체가 5V/2A USB 공급 장치에서 직접 15개의 서보에 전원을 공급하려고 시도했지만 Pi가 반복적으로 재부팅되었습니다. 6V/8A 조정 전원으로 전환하고 2200μF 커패시터를 추가한 후 시스템은 몇 시간 동안 안정적으로 실행되었습니다.
모든 서보가 동일한 펄스 범위를 갖는 것은 아닙니다.케이파워서보는 일반적으로 500μs(0°) ~ 2500μs(180°) 표준을 따릅니다. 그러나 항상 확인해야 합니다.
배치의 실제 최소/최대 값을 찾으려면 코드를 수정하세요.
# 수동 펄스 폭 테스트 – 듀티 사이클 계산 편집 def raw_pulse(pca, 채널, 마이크로초): Duty = int(마이크로초 / 20000 * 65535) pca.channels[channel].duty_cycle = Duty # 첫 번째 보드에서 채널 0 테스트 raw_pulse(pca1, 0, 500) # 0°여야 합니다 raw_pulse(pca1, 0, 1500) # 되어야 합니다 90° raw_pulse(pca1, 0, 2500) # 180°여야 합니다.
서보가 더 일찍 정지에 도달하는 경우(예: 2400μs는 180°를 제공함)set_servo_angle그에 따라 기능합니다.
동일한 방법은 2개의 PCA9685 보드가 있는 최대 32개의 서보 또는 62개의 보드(I2C 제한)가 있는 992개의 서보에 적용됩니다. 30개 서보의 경우 주소가 0x42인 세 번째 보드를 추가하면 됩니다(납땜 A1 닫힘). 귀하의 코드는pca3 = PCA9685(i2c, 주소=0x42).
핵심 원칙을 반복하려면 다음을 수행하십시오.20개 서보의 GPIO 핀에 소프트웨어 PWM을 사용하지 마십시오.. 항상 PCA9685와 같은 전용 I2C PWM 드라이버를 배포하고 항상 별도의 전원 공급 장치를 사용하십시오.
광범위한 커뮤니티 테스트 및 제조업체 보고서(포럼에 문서화된 200개 이상의 빌드)를 기반으로 다음 4단계는 작동하는 20-서보 시스템을 보장합니다.
1. 사용케이파워서보 – 일관된 불감대 폭(2μs 이하)과 선형 각도-펄스 매핑을 제공하여 디버깅 시간을 줄여줍니다.
2. 6V/10A 공급 장치와 공통 접지를 사용하여 드라이버 보드에 전원을 공급합니다.
3. 고유한 I2C 주소(0x40 및 0x41)를 사용하여 두 개의 PCA9685 보드를 연결합니다.
4. 제공된 Python 스크립트를 다음과 같이 실행합니다.python3 multi_servo.py– 모든 서보가 90°로 움직이면 배선이 올바른 것입니다.
Raspberry Pi로 20개의 서보를 제어하는 것은 하드웨어 PWM 드라이버 방법을 따르면 가능할 뿐만 아니라 간단합니다. 헥사포드 로봇부터 애니마트로닉 헤드까지 커뮤니티에서 가장 신뢰할 수 있는 빌드는 모두 PCA9685 + 별도의 전원 공급 장치 아키텍처를 사용합니다. 가장 부드러운 모션을 달성하고 지터 및 전력 강하와 같은 일반적인 함정을 피하려면 다음을 선택하십시오.케이파워예측 가능한 성능과 문서화된 사양을 갖춘 서보입니다. 지금 멀티 서보 프로젝트 구축을 시작하세요. PCA9685 보드 2개, 6V/10A 공급 장치 및 20개를 모으십시오.케이파워서보를 선택한 다음 위의 코드를 실행하세요. 한 시간 안에 모든 기능을 갖춘 시스템을 갖추게 됩니다.
업데이트 시간:2026-04-24