게시됨 2026-04-04
이 기사는 표준을 제어하는 프로그램 작성에 대한 완전하고 실용적인 가이드를 제공합니다.서보 기구모터. 정확한 코드 구조, 중요한 PWM 신호 매개변수, 일반적인 마이크로컨트롤러를 사용하여 실제 예제를 구현하는 방법을 배우게 됩니다. 브랜드별 플랫폼이나 독점 플랫폼은 필요하지 않습니다. 원칙은 보편적으로 적용됩니다.
에이서보 기구모터의 위치는 반복 펄스의 폭(Pulse Width Modulation, PWM)에 의해서만 결정됩니다.서보 제어 프로그램을 작성하려면 50Hz 신호(주기 = 20밀리초)를 생성하고 높은 펄스 폭을 1.0ms에서 2.0ms 사이로 변경해야 합니다.이 단일 규칙은 모든 표준 서보 프로그래밍의 기초입니다.
1.0ms 펄스 → 0도(시계 반대 방향으로 완전히)
1.5ms 펄스 → 90도(중앙 위치)
2.0ms 펄스 → 180도(시계방향으로 전체)
이 가이드를 따르려면 다음 구성 요소를 준비하십시오(일반 설명, 브랜드 이름 없음).
표준 5V 서보 모터 1개(3선: 전원, 접지, 신호)
마이크로컨트롤러 보드 1개(일반 5V 로직 보드)
외부 5V 전원 공급 장치 1개(서보가 높은 전류를 소비하는 경우)
점퍼선과 브레드보드
코드를 작성하기 전에 물리적 연결을 설정하십시오.
일반적인 사례 예:초보자는 종종 서보의 전원을 마이크로컨트롤러의 5V 핀에 직접 연결합니다. 서보가 움직이면 전류 서지로 인해 보드가 재설정됩니다. 해결 방법: 접지가 공유된 외부 5V 공급 장치(예: 4xAA 배터리)를 사용하십시오.
모든 서보 프로그램은 먼저 PWM 신호 매개변수를 설정해야 합니다. 다음은 일반적인 코드 구조입니다(C와 유사한 환경에 적용 가능).
// 1. 상수 정의(이 값을 변경하지 마십시오) #define SERVO_PIN 9 #define PWM_FREQUENCY_HZ 50 // 50Hz = 20ms 주기 #define PULSE_MIN_US 1000 // 0°의 경우 1.0ms #define PULSE_MID_US 1500 // 90°의 경우 1.5ms #define PULSE_MAX_US 2000 // 180°의 경우 2.0ms// 2. 설정 기능(전원을 켤 때 한 번만 실행)void setup() { // 핀을 출력으로 구성 pinMode(SERVO_PIN, OUTPUT); // 50Hz 및 1.5ms 초기 펄스(중앙 위치)에 대해 PWM 하드웨어를 구성합니다.configurePWM(SERVO_PIN, PWM_FREQUENCY_HZ, PULSE_MID_US); 지연(1000); // 서보가 안정화되도록 허용 }// 3. 도우미: 각도(0-180)를 마이크로초 단위의 펄스 폭으로 변환합니다.int angleToPulse(int angle) { // 선형 매핑: 각도 0 -> 1000us, 각도 180 -> 2000us return PULSE_MIN_US + (각도(PULSE_MAX_US - PULSE_MIN_US) / 180); }
서보를 특정 각도로 이동시키는 주요 논리:
// 서보를 주어진 각도(0~180)로 이동하고 해당 위치를 유지합니다.void setServoAngle(int angle) { // 유효한 범위 내의 클램프 각도 if (angle 180) angle = 180; int pulseWidthUs = angleToPulse(각도);// 지정된 하이 펄스로 단일 20ms 주기를 생성합니다.generatePulse(SERVO_PIN, pulseWidthUs); // pulseWidthUs 마이크로초 동안 높음 DelayMicroseconds(pulseWidthUs); digitalWrite(SERVO_PIN,LOW); 지연(20 - (pulseWidthUs / 1000.0)); // 나머지 20ms 기간 }
![]()
메모:그만큼펄스 생성()추상화는 직접적인 하드웨어 레지스터 조작을 나타냅니다. 실제 구현에서는 마이크로 컨트롤러에 내장된 PWM 주변 장치 또는 소프트웨어 비트 뱅킹 방법을 사용합니다.
다음은 서보를 0°에서 180°까지 스윕하고 지연을 통해 움직임을 관찰하는 전체 프로그램입니다. 이 예에서는 모든 디지털 핀에서 작동하는 일반적인 비트뱅킹 접근 방식을 사용합니다.
// 전체 작업 코드(라이브러리가 필요하지 않음, 플랫폼에 구애받지 않음) int ServoPin = 9; 부호 없는 긴 이전Micros = 0; int currentAngle = 0; int stepDirection = 1; // 1 = 각도 증가, -1 = 감소 void setup() { pinMode(servoPin, OUTPUT); // 90°(중앙)에서 시작 currentAngle = 90; } void loop() { unsigned long currentMicros = micros(); // 20ms(50Hz)마다 서보 위치 새로 고침 if (currentMicros - PreviousMicros >= 20000) { PreviousMicros = currentMicros; // 현재 각도에 대한 PWM 펄스를 보냅니다. int pulseWidth = 1000 + (currentAngle 1000 / 180); // 1000us ~ 2000us digitalWrite(servoPin, HIGH); DelayMicroseconds(pulseWidth); digitalWrite(서보핀, LOW); // 스위핑 효과의 각도 변경(선택 사항) currentAngle += stepDirection; if (currentAngle >= 180) { currentAngle = 180; stepDirection = -1; 지연(500); // 극단적인 경우 일시 중지 } else if (currentAngle
일반적인 사례 예:사용자는 20ms 대신 5ms마다 펄스를 보내는 코드를 작성합니다. 서보가 신호를 너무 빨리 수신하여 과열되고 진동합니다. 해결 방법은 각 펄스 시작 사이에 정확히 20ms를 보장하는 것입니다.
멀티태스킹(예: 서보를 이동하는 동안 센서 읽기)이 필요한 프로젝트의 경우 상태 머신을 사용하지 않고지연():
부호 없는 긴 lastPulseTime = 0; int targetAngle = 90; int currentPulseWidth = 1500; // 중앙에서 시작 void updateServoNonBlocking() { unsigned long now = micros(); if (now - lastPulseTime >= 20000) { // 20ms 경과 lastPulseTime = now; // targetAngle에서 목표 펄스 폭을 계산합니다. int targetPulse = 1000 + (targetAngle * 1000 / 180); // 점진적으로 대상으로 이동합니다(더 부드러운 동작). if (currentPulseWidth targetPulse) currentPulseWidth--; digitalWrite(서보핀, HIGH); DelayMicroseconds(currentPulseWidth); digitalWrite(서보핀, LOW); } }
부르다updateServoNonBlocking()메인 루프에서 반복적으로.
1. 서보 위치는 높은 펄스 폭에만 의존합니다.– 1.0ms(0°), 1.5ms(90°), 2.0ms(180°). 다른 것은 각도를 바꾸지 않습니다.
2. 펄스는 20ms(50Hz)마다 반복되어야 합니다.– 편차가 있으면 지터, 과열 또는 움직임이 발생하지 않습니다.
최소한의 테스트 프로그램으로 시작하세요서보를 90°로만 설정하고 유지합니다. 뿔이 중앙에 있는지 각도기로 확인하십시오. 이는 스윕이나 센서 로직을 추가하기 전에 타이밍이 올바른지 확인합니다.
로직 분석기 또는 오실로스코프 사용신호 핀의 실제 신호를 측정합니다. 측정된 펄스 폭을 코드의 의도된 값과 비교하십시오. 이는 가장 안정적인 디버깅 방법입니다.
항상 별도의 전원 공급 장치를 사용하십시오.200mA 이상을 소비하는 서보의 경우. 마이크로컨트롤러와 전력을 공유하면 재설정 및 불규칙한 동작이 발생합니다. 모든 접지를 함께 연결하십시오.
100-470μF 전해 커패시터 추가서보 근처의 서보 전원 및 접지 단자 전체에 걸쳐. 이는 전기적 잡음을 줄이고 제어 신호를 안정화시킵니다.
펄스 타이밍 상수를 문서화하세요.코드에서 직접 마이크로초 단위로. 이는 몇 달 후에 프로젝트를 다시 방문할 때 도움이 됩니다.
이 가이드를 따르면 미리 만들어진 라이브러리에 의존하지 않고도 모든 마이크로컨트롤러 플랫폼에서 안정적인 서보 제어 프로그램을 작성할 수 있습니다. 핵심 PWM 원리는 모든 시스템에서 동일하게 유지됩니다. 실시간 애플리케이션을 위한 비차단 예제를 구현하고 항상 측정 도구를 사용하여 펄스 폭을 검증하십시오.
업데이트 시간:2026-04-04