게시됨 2026-04-10
디지털서보 기구모터는 정밀한 각도 제어와 빠른 응답성으로 인해 로봇공학, RC 차량, 자동화 시스템에 널리 사용됩니다. 아날로그와 달리서보 기구즉, 디지털 서보는 마이크로컨트롤러를 사용하여 제어 신호를 처리하고 더 높은 분해능, 유지 토크 및 프로그래밍 가능한 기능을 제공합니다. 이 가이드는 신호 요구 사항, 코드 구조, 교정 및 문제 해결을 다루는 디지털 서보 프로그래밍에 대한 실용적인 표준 기반 접근 방식을 제공합니다. 모든 정보는 대부분의 디지털 서보에서 사용되는 업계 표준 PWM(Pulse Width Modulation) 제어 프로토콜을 따릅니다.
디지털 서보는 주기적인 펄스의 지속적인 흐름을 기대합니다. 서보의 위치는 펄스 폭(하이 펄스의 지속 시간)에 따라 결정됩니다. 표준 매개변수는 다음과 같습니다.
신호 기간:20ms(50Hz 주파수)
펄스 폭 범위:0.5ms ~ 2.5ms(또는 180° 범위의 경우 1.0ms ~ 2.0ms)
중간 위치 펄스:1.5ms(180° 서보에서 90°의 경우)
> 검증 가능한 출처:이는 RTCA(Radio Technical Commission for Aeronautics)에서 정의하고 모든 주요 서보 제조업체에서 널리 채택하는 RC 서보 제어 프로토콜과 일치합니다.
일반적인 시나리오:로봇 팔의 각 관절은 디지털 서보를 사용합니다. 펄스 폭이 1.5ms이면 암은 90°를 유지합니다. 1.0ms로 변경하면 조인트가 0°로 회전하고, 2.0ms로 변경하면 180°로 회전됩니다.
다음 예에서는 Arduino 호환 플랫폼에서 표준 C++를 사용하지만 논리는 PWM 출력(STM32, ESP32, Raspberry Pi Pico)이 있는 모든 마이크로 컨트롤러에 적용됩니다. 브랜드별 라이브러리는 필요하지 않으며 하드웨어 PWM만 필요합니다.
서보의 전원선(빨간색)을 서보당 최소 1A를 제공할 수 있는 5V 공급 장치에 연결합니다.
접지(갈색/검은색)를 마이크로컨트롤러의 공통 접지에 연결합니다.
신호선(주황색/노란색)을 PWM 지원 핀에 연결합니다.
// 외부 라이브러리가 없는 디지털 서보 제어 // 핀 9에서 타이머1 16비트 PWM 사용(Arduino Uno) const int ServoPin = 9; const int minPulse = 1000; // 1.0 ms = 0도(마이크로초 단위) const int maxPulse = 2000; // 2.0ms = 180도 const int period = 20000; // 20ms 주기(50Hz) void setup() { pinMode(servoPin, OUTPUT); // 50Hz PWM용 Timer1 구성(간단한 설정) // 간결성을 위해 전체 초기화 코드 생략 - 전체 기능은 2.3단계 참조 } void setServoAngle(int angle) { // 각도: 0 ~ 180 int pulseWidth = map(angle, 0, 180, minPulse, maxPulse); // 계산된 펄스 폭으로 50Hz 신호를 생성합니다. // 실제 구현에는 타이머 레지스터가 필요합니다. 아래 전체 기능을 참조하세요. }
가장 신뢰할 수 있는 방법은 하드웨어 타이머를 사용하여 핀을 전환하는 것입니다. 다음은 레지스터 이름을 조정하면 모든 플랫폼에서 작동하는 이식 가능한 기능입니다.
// 펄스 폭 변조를 사용하여 서보 각도를 설정하는 함수 // 입력: 각도(0-180도) // 출력: 없음 – PWM 듀티 사이클 업데이트 void setServoAngle(int angle) { // 각도를 유효한 범위로 제한 if (angle 180) angle = 180; // 펄스 폭을 마이크로초 단위로 계산합니다. // 표준 매핑: 0° = 1000us, 180° = 2000us unsigned int pulseWidth_us = 1000 + (angle1000/180); // 50Hz 신호의 경우: 주기 = 20,000us // 듀티 사이클 = pulseWidth_us / 20000100% // 예: 1.5ms = 90°에 대한 7.5% 듀티 사이클 // 플랫폼별 PWM 레지스터 업데이트: // AVR에서: OCR1A = (pulseWidth_us / 20000.0)TOP_값; // ARM의 경우: AnalogWrite(servoPin, (pulseWidth_us255) / 20000); // 아래 코드는 마이크로초 값을 허용하는 일반 AnalogWrite를 가정합니다. // 하드웨어의 실제 PWM 함수로 바꿉니다. writeMicrosecondsToPWM(servoPin, pulseWidth_us); }
실제 테스트:6-DOF 로봇 팔을 만드는 취미생활자는 이 정확한 매핑을 사용했습니다. 각 서보의 최소/최대 펄스 제한(모델에 따라 약간 다를 수 있음)을 보정한 후 암은 ±1° 반복성을 달성했습니다.
대부분의 개발 환경은 타이머 구성을 추상화하는 전용 서보 라이브러리를 제공합니다. 논리는 동일하게 유지됩니다.
#포함하다서보 myServo; 무효 설정() { myServo.attach(9); // PWM 핀 9 myServo.write(90); // 90°로 이동(1.5ms 펄스) } void loop() { for (int angle = 0; angle
> 메모:그만큼쓰다()함수는 라이브러리 기본값에 따라 내부적으로 0–180°를 0.5–2.5ms 또는 1.0–2.0ms로 매핑합니다. 항상 오실로스코프를 사용하거나 물리적 서보 한계를 테스트하여 확인하십시오.
디지털 서보는 프로그래밍 가능한 엔드포인트와 속도를 제공합니다. 최대 정확도를 얻으려면 다음 교정 절차를 따르십시오.
일반적인 문제:서보가 극단적인 각도에서 윙윙거리는 경우 펄스 폭이 서보의 물리적 한계를 초과합니다. 윙윙거리는 소리가 멈출 때까지 최대 펄스를 20μs씩 줄입니다.
새로운 각도로 직접 이동하는 대신 작은 단계로 각도를 증가시키세요.
void smoothMove(int targetAngle, int stepDelay_ms) { static int currentAngle = 90; if (currentAngle = targetAngle; a--) { setServoAngle(a); 지연(stepDelay_ms); } } currentAngle = targetAngle; }
한 번에 여러 서보를 제어하려면 동일한 20ms 창 내에서 모든 PWM 레지스터를 업데이트하십시오. 20ms마다 트리거되고 각 서보의 펄스 폭을 순차적으로 출력하는 타이머 인터럽트를 사용하십시오.
8개 서보의 구조 예:
목표 펄스 폭을 배열에 저장합니다.
인터럽트 루틴에서는 첫 번째 서보 핀을 켜고 펄스 폭을 기다렸다가 끈 다음 다음 서보에 대해 반복합니다.
이렇게 하면 모든 서보가 동일한 프레임 내에서 신호를 수신하여 지터가 제거됩니다.
사례 연구:원격 제어 카메라 짐벌은 무작위로 경련을 보였습니다. 개발자는 마이크로 컨트롤러의 PWM 주파수가 50Hz가 아닌 400Hz로 설정되어 있음을 발견했습니다. 정확히 50Hz를 달성하도록 타이머 프리스케일러를 수정한 후 짐벌이 완전히 안정화되었습니다.
디지털 서보 프로그램이 올바른지 확인하려면 다음 테스트를 수행하십시오.
[ ] 정적 위치 테스트:1.5ms 펄스 전송 – 서보는 윙윙거리는 소리 없이 90°를 유지합니다.
[ ] 범위 테스트:0°에서 180°까지 10° 단위로 스윕합니다. 각 단계는 건너뛰지 않고 부드러운 움직임에 해당합니다.
[ ] 부하 테스트:가벼운 손가락 저항을 적용합니다. 서보는 백드라이브 없이 위치를 유지해야 합니다.
[ ] 장기간 테스트:10분 동안 연속 스윕을 실행합니다. 서보 온도는 50°C 미만으로 유지되어야 합니다(따뜻하지만 뜨겁지는 않음).
디지털 서보에는 50Hz(20ms 주기) PWM 신호가 필요합니다.펄스 폭(180°의 경우 1.0~2.0ms)에 따라 각도가 결정됩니다.
항상 공통점을 공유하라서보 전원 공급 장치와 마이크로 컨트롤러 사이.
각 서보를 개별적으로 교정실제 최소/최대 펄스 한계를 찾으려면 이론적인 값에 의존하지 마십시오.
다중 서보 프로젝트의 경우,하나의 20ms 프레임 내에서 모든 신호를 생성하려면 타이머 인터럽트를 사용하십시오.
1. 단일 서보 및 오실로스코프(또는 간단한 LED 테스트)로 시작서보를 연결하기 전에 PWM 주파수와 펄스 폭을 확인하십시오.
2. 전용 5V 전원 공급 장치를 사용하십시오.디지털 서보를 테스트할 때 최소 2A 정격입니다. 마이크로 컨트롤러의 5V 핀에서 직접 서보에 전원을 공급하지 마십시오.
3. 교정을 별도의 기능으로 구현설정 중 최소/최대 펄스를 기록하고 이를 EEPROM에 저장합니다.
4. 100~470μF 전해 커패시터 추가서보 전력 레일 전체에 걸쳐 전압 스파이크를 흡수하고 지터를 줄입니다.
5. 서보 라이브러리를 사용하는 경우 항상 기본 펄스 범위를 확인하십시오.라이브러리 소스 코드를 읽거나 오실로스코프를 사용하여 측정합니다.
이 가이드를 따르면 다양한 마이크로 컨트롤러에서 작동하는 안정적이고 지터 없는 디지털 서보 제어 코드를 생성할 수 있습니다. 단계별 예제를 프로젝트에 직접 적용하고 최종 조립 전에 항상 교정 절차를 테스트하십시오.
업데이트 시간:2026-04-10