> 업계 통찰 >커스텀 드라이브
기술 지원

서보 모터 제어 프로그램 작성 방법: 완전한 단계별 가이드

게시됨 2026-04-04

이 기사는 표준을 제어하는 ​​프로그램 작성에 대한 완전하고 실용적인 가이드를 제공합니다.서보 기구모터. 정확한 코드 구조, 중요한 PWM 신호 매개변수, 일반적인 마이크로컨트롤러를 사용하여 실제 예제를 구현하는 방법을 배우게 됩니다. 브랜드별 플랫폼이나 독점 플랫폼은 필요하지 않습니다. 원칙은 보편적으로 적용됩니다.

01핵심 개념: 하나의 필수 규칙서보 기구제어

에이서보 기구모터의 위치는 반복 펄스의 폭(Pulse Width Modulation, PWM)에 의해서만 결정됩니다.서보 제어 프로그램을 작성하려면 50Hz 신호(주기 = 20밀리초)를 생성하고 높은 펄스 폭을 1.0ms에서 2.0ms 사이로 변경해야 합니다.이 단일 규칙은 모든 표준 서보 프로그래밍의 기초입니다.

1.0ms 펄스 → 0도(시계 반대 방향으로 완전히)

1.5ms 펄스 → 90도(중앙 위치)

2.0ms 펄스 → 180도(시계방향으로 전체)

02코드를 작성하기 전에 필요한 것

이 가이드를 따르려면 다음 구성 요소를 준비하십시오(일반 설명, 브랜드 이름 없음).

표준 5V 서보 모터 1개(3선: 전원, 접지, 신호)

마이크로컨트롤러 보드 1개(일반 5V 로직 보드)

외부 5V 전원 공급 장치 1개(서보가 높은 전류를 소비하는 경우)

점퍼선과 브레드보드

03단계별 프로그램 작성 과정

1단계: 하드웨어를 올바르게 연결하세요.

코드를 작성하기 전에 물리적 연결을 설정하십시오.

서보 와이어 연결 대상
브라운/블랙(그라운드) 마이크로컨트롤러의 GND
빨간색(전원, 5V) 5V 출력(또는 외부 5V 공급 공통 접지)
주황색/노란색(신호) PWM 가능 디지털 핀(예: 핀 9)

일반적인 사례 예:초보자는 종종 서보의 전원을 마이크로컨트롤러의 5V 핀에 직접 연결합니다. 서보가 움직이면 전류 서지로 인해 보드가 재설정됩니다. 해결 방법: 접지가 공유된 외부 5V 공급 장치(예: 4xAA 배터리)를 사용하십시오.

2단계: 초기화 코드 작성

모든 서보 프로그램은 먼저 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); }

3단계: 핵심 제어 기능 작성

서보를 특정 각도로 이동시키는 주요 논리:

// 서보를 주어진 각도(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 주변 장치 또는 소프트웨어 비트 뱅킹 방법을 사용합니다.

4단계: 완전한 작업 예제 작성

다음은 서보를 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

5단계: 일반적인 문제 테스트 및 디버깅

문제 가장 가능성이 높은 원인 검증방법
서보가 전혀 움직이지 않습니다 접지 연결 누락 멀티미터를 사용하여 서보 접지와 마이크로컨트롤러 접지 사이의 연속성을 확인하세요.
서보가 흔들리거나 진동합니다. 펄스 타이밍이 일관되지 않습니다. 펄스 간 지연이 정확히 20ms(±1ms 허용 오차)인지 확인하세요.
서보는 극단적인 끝으로만 움직입니다. 잘못된 펄스 폭 범위 오실로스코프 또는 로직 분석기를 사용하여 실제 펄스 폭 측정
서보가 예상과 반대로 움직입니다. 신호선과 전원선이 교체됨 데이터시트와 비교하여 와이어 색상을 다시 확인하세요.

일반적인 사례 예:사용자는 20ms 대신 5ms마다 펄스를 보내는 코드를 작성합니다. 서보가 신호를 너무 빨리 수신하여 과열되고 진동합니다. 해결 방법은 각 펄스 시작 사이에 정확히 20ms를 보장하는 것입니다.

04고급: 비차단 서보 프로그램 작성

멀티태스킹(예: 서보를 이동하는 동안 센서 읽기)이 필요한 프로젝트의 경우 상태 머신을 사용하지 않고지연():

부호 없는 긴 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()메인 루프에서 반복적으로.

05요약: 반복해야 할 두 가지 중요한 사항

1. 서보 위치는 높은 펄스 폭에만 의존합니다.– 1.0ms(0°), 1.5ms(90°), 2.0ms(180°). 다른 것은 각도를 바꾸지 않습니다.

2. 펄스는 20ms(50Hz)마다 반복되어야 합니다.– 편차가 있으면 지터, 과열 또는 움직임이 발생하지 않습니다.

06결과를 강화하기 위한 실행 가능한 권장 사항

최소한의 테스트 프로그램으로 시작하세요서보를 90°로만 설정하고 유지합니다. 뿔이 중앙에 있는지 각도기로 확인하십시오. 이는 스윕이나 센서 로직을 추가하기 전에 타이밍이 올바른지 확인합니다.

로직 분석기 또는 오실로스코프 사용신호 핀의 실제 신호를 측정합니다. 측정된 펄스 폭을 코드의 의도된 값과 비교하십시오. 이는 가장 안정적인 디버깅 방법입니다.

항상 별도의 전원 공급 장치를 사용하십시오.200mA 이상을 소비하는 서보의 경우. 마이크로컨트롤러와 전력을 공유하면 재설정 및 불규칙한 동작이 발생합니다. 모든 접지를 함께 연결하십시오.

100-470μF 전해 커패시터 추가서보 근처의 서보 전원 및 접지 단자 전체에 걸쳐. 이는 전기적 잡음을 줄이고 제어 신호를 안정화시킵니다.

펄스 타이밍 상수를 문서화하세요.코드에서 직접 마이크로초 단위로. 이는 몇 달 후에 프로젝트를 다시 방문할 때 도움이 됩니다.

이 가이드를 따르면 미리 만들어진 라이브러리에 의존하지 않고도 모든 마이크로컨트롤러 플랫폼에서 안정적인 서보 제어 프로그램을 작성할 수 있습니다. 핵심 PWM 원리는 모든 시스템에서 동일하게 유지됩니다. 실시간 애플리케이션을 위한 비차단 예제를 구현하고 항상 측정 도구를 사용하여 펄스 폭을 검증하십시오.

업데이트 시간:2026-04-04

미래에 힘을 실어주다

귀하의 제품에 적합한 모터 또는 기어박스를 추천하려면 Kpower 제품 전문가에게 문의하십시오.

케이파워에 메일보내기
문의 제출
+86 0769 8399 3238
 
kpower지도