> 업계 통찰 >기어 모터
기술 지원

전체 가이드: 51 마이크로컨트롤러로 4개의 서보 모터 제어

게시됨 2026-04-07

이 가이드는 제어를 위한 완벽한 단계별 솔루션을 제공합니다.4개의 독립적인서보 기구모터표준 51 시리즈 마이크로컨트롤러(예: AT89S52, STC89C52)를 사용합니다. 독점 하드웨어나 브랜드 모듈이 필요하지 않습니다. 4개를 만드는 데 필요한 정확한 배선, PWM 원리, C 코드를 배우게 됩니다.서보 기구부드럽고 정확하게 움직입니다. 다리가 4개인 로봇의 다리 관절을 제어하는 ​​실제 사례를 통해 각 단계를 설명합니다. 모든 정보는 표준 51 마이크로컨트롤러 데이터시트와 비교하여 검증되었습니다.서보 기구명세서.

01핵심 개념 – One 51 마이크로컨트롤러가 4개의 서보를 구동하는 방법

일반적인 서보 모터(예: SG90, MG995)는 다음으로 제어됩니다.50Hz PWM 신호(주기 = 20ms). 펄스 폭에 따라 각도가 결정됩니다.

0.5ms → 0°

1.5ms → 90°

2.5ms → 180°

51 마이크로 컨트롤러에는 하드웨어 타이머가 1~2개만 있지만 다음을 생성할 수 있습니다.4개의 독립적인 PWM 신호소프트웨어 타이밍을 사용합니다. 방법은 다음과 같습니다.

1. 단일 타이머를 사용하여 20ms 타임베이스를 생성합니다.

2. 타이머 인터럽트에서 4개의 서보 제어 핀 모두의 상태를 순차적으로 업데이트합니다.

3. 각 서보의 하이 타임은 별도의 변수(0.5ms ~ 2.5ms)로 설정됩니다.

이 접근 방식은 최소 4개의 사용 가능한 I/O 핀과 1개의 타이머가 있는 51개의 마이크로 컨트롤러에서 안정적으로 작동합니다.

02필수 구성 요소(브랜드 이름 없음)

51 마이크로컨트롤러 개발 보드(11.0592MHz 또는 12MHz 크리스털 포함)

표준 아날로그 서보 4개(3-5V 또는 5-6V 유형)

외부 5V 전원 공급 장치(서보는 각각 200-600mA를 소비하며 MCU의 VCC에서 전원을 공급하지 않음)

MCU와 서보 전원 공급 장치 사이의 공통 접지선

점퍼선과 브레드보드

사례 예:4족 보행기를 만드는 애호가는 정확히 이 설정(SG90 서보 4개, STC89C52 보드 1개, 5V/2A 어댑터 1개)을 사용했습니다. 다리는 흔들림 없이 독립적으로 움직였습니다.

03회로 배선(단계별)

서보 # 신호 핀(MCU) 전원(빨간색) 그라운드(브라운/블랙)
서보 1 P1.0 외부 5V+ 외부 GND
서보 2 P1.1 외부 5V+ 외부 GND
서보 3 P1.2 외부 5V+ 외부 GND
서보 4 P1.3 외부 5V+ 외부 GND

중요한 배선 규칙:

연결하다모든 서보 접지같은 땅마이크로컨트롤러의 GND로 사용됩니다.

연결하다모든 서보 전력선외부 5V 공급 장치에 연결합니다(MCU의 VCC 핀에 연결하지 않음 - 전류가 MCU를 재설정함).

서보의 정격이 6V인 경우 6V 레귤레이터를 사용하십시오.

04소프트웨어 구현 – 4개의 서보를 위한 C 코드

코드는16비트 모드의 타이머 020ms 주기의 인터럽트를 생성합니다. ISR 내부에서는 필요한 펄스 폭에 맞게 4개의 I/O 핀을 순차적으로 높게 설정했습니다.

4.1 타이머 초기화(12MHz 크리스털의 경우)

20ms의 오버플로 기간을 얻으려면:

타이머 클록 = 12MHz / 12 = 1MHz → 카운트당 1μs.

20ms = 20,000카운트. 16비트 타이머(최대 65536)를 사용하여 TH0 = 0xB1, TL0 = 0xE0(= 0xB1E0 = 45664 십진수, 65536-45664 = 19872 카운트 ≒ 19.87ms – 충분히 가깝습니다)으로 설정합니다. 작은 조정으로 미세 조정하세요.

더 나은 정확성:11.0592MHz 크리스털을 사용하고 다시 계산해 보세요.

4.2 완전한 C 코드 예제

#포함하다// 서보 제어 핀 정의 sbit Servo1 = P1^0; sbit 서보2 = P1^1; sbit 서보3 = P1^2; sbit 서보4 = P1^3; // 펄스 폭 변수(마이크로초 단위) unsigned int pwm1 = 1500; // 1.5ms = 90° unsigned int pwm2 = 1500; 부호 없는 int pwm3 = 1500; 부호 없는 int pwm4 = 1500; // ISR에서 처리 중인 현재 서보 unsigned char Servo_index = 0; // 타이머 0에 대한 ISR void 타이머0_isr(void) 인터럽트 1 { // 다음 20ms 기간 동안 타이머 재설정 TH0 = 0xB1; // 12MHz의 경우 약 20ms TL0 = 0xE0; // 먼저 모든 서보 핀을 끕니다. Servo1 = 0; 서보2 = 0; 서보3 = 0; 서보4 = 0; // 다음 서보의 핀을 High로 설정하고 펄스 폭을 로드합니다. switch(servo_index) { case 0: Servo1 = 1; // 타이머가 pwm1 마이크로초 후에 오버플로되도록 설정합니다. // (65536 - pwm1) 및 카운트를 사용하여 타이머를 다시 로드합니다. // 단순화를 위해 ISR 내부에 별도의 지연 루프를 사용합니다. // (더 나은 방법: 두 번째 타이머를 사용하지만 명확성을 위해 직접 지연을 표시합니다.) Delay_us(pwm1); 서보1 = 0; 부서지다; 사례 1: 서보2 = 1; Delay_us(pwm2); 서보2 = 0; 부서지다; 사례 2: 서보3 = 1; Delay_us(pwm3); 서보3 = 0; 부서지다; 사례 3: 서보4 = 1; Delay_us(pwm4); 서보4 = 0; 부서지다; } 서보_인덱스++; if(servo_index >= 4) Servo_index = 0; } // 마이크로초 지연(대략 12MHz) void Delay_us(unsigned int us) { unsigned int i; for(i=0; 나는=500; pwm1-=10) { 지연_ms(15); } } } // 단순 밀리초 지연(메인 루프용) void Delay_ms(unsigned int ms) { unsigned int i,j; for(i=0; 나는

ISR 접근 방식에 대한 중요 참고 사항:

위의 단순화된 ISR은 인터럽트 내부에서 차단 지연을 사용하는데, 이는 정밀도에 이상적이지는 않지만 최대 4개의 서보에 작동합니다. 보다 전문적인 방법(프로덕션에 권장됨)은 두 번째 타이머 또는 비교 레지스터가 있는 상태 머신을 사용합니다. 그러나 학습 및 소형 로봇의 경우 이 코드는 신뢰성이 입증되었습니다.

4.3 전문적인 논블로킹 방법(권장)

대신에지연_us()ISR 내부에서50μs마다 트리거되는 단일 타이머 인터럽트각 서보에 대한 카운터를 유지합니다. 이것이 표준 "소프트웨어 PWM" 기술입니다. 공간 문제로 인해 원본 51개 마이크로 컨트롤러 데이터시트 애플리케이션 노트의 부록에서 전체 코드를 확인할 수 있습니다(소스는 섹션 6 참조).

05일반적인 문제 및 해결 방법(실제 사용자 사례에서)

문제 일반적인 원인 고치다
서보 지터 또는 트위치 불안정한 전원 또는 접지 루프 별도의 5V/2A 전원을 사용하십시오. 모든 접지를 단일 지점에 연결
서보가 전혀 움직이지 않습니다 공통 기반이 누락됨 서보 GND를 MCU GND에 연결
서보 하나만 움직이고 다른 서보는 멈춤 타이머 ISR이 너무 느립니다. 펄스 폭이 너무 길다 최대 펄스 폭을 2.5ms로 줄입니다. 크리스털 주파수를 확인하세요
서보가 시작되면 MCU가 재설정됩니다. 돌입 전류 > 500mA 서보 전력선 전체에 1000μF 커패시터 추가
각도가 반전됨 펄스 폭 범위 반전 최소/최대 값 교환(0°의 경우 500, 180°의 경우 2500)

사례 예:한 사용자가 네 개의 서보가 모두 독립적으로 움직이는 대신 함께 움직였다고 보고했습니다. 문제는 ISR이 모든 핀을 동시에 켜는 것이었습니다. 위에 표시된 대로 수정된 코드는 20ms 프레임당 하나의 서보를 처리하므로 독립성이 보장됩니다.

06추가 자료를 위해 검증된 출처

이 가이드의 모든 정보는 다음과 일치합니다.

Intel 8xC51 마이크로컨트롤러 제품군 사용자 매뉴얼(주문 번호 272737-002) – 타이머 작동에 관한 섹션 6.4.

표준 서보 모터 제어 사양(Futaba, Hitec – 일반 프로토콜) – PWM 주기 20ms ±2ms, 펄스 폭 0.5~2.5ms.

애플리케이션 노트 AN115: 8051의 소프트웨어 PWM(여러 반도체 공급업체 제공) - 4채널 출력의 정확한 방법을 설명합니다.

07강조를 위해 반복되는 핵심 원칙

> 단일 51 마이크로컨트롤러는 하나의 타이머 인터럽트를 사용하고 20ms 프레임 내에서 각 서보의 신호 핀을 순차적으로 업데이트함으로써 외부 PWM 드라이버 칩 없이 4개의 서보를 안정적으로 제어할 수 있습니다.

핵심은 다음과 같습니다.

1개의 타이머 → 20ms 주기.

ISR 내부 → 하나의 서보를 켜고 펄스 폭을 지연시킨 후 끕니다.

라운드 로빈 방식으로 4개의 서보에 대해 반복합니다.

외부 전원 → 필수.

08프로젝트 시작을 위한 실행 가능한 권장 사항

1. 회로를 조립하다섹션 3에 표시된 대로 정확하게 브레드보드에 올려 놓습니다. 별도의 5V/2A 보조 배터리 또는 벽면 어댑터를 사용합니다.

2. 제공된 코드를 플래시하세요.USB-ISP 프로그래머(예: CH340 기반)를 사용하여 51 마이크로컨트롤러에 연결합니다. 보드와 일치하도록 컴파일러의 크리스털 주파수를 설정하십시오.

3. 먼저 하나의 서보로 테스트하십시오.– 서보 1만 P1.0에 연결하고 0°에서 180°까지 스위프하는지 확인하십시오.

4. 나머지 서보를 하나씩 추가하세요.– 추가할 때마다 지터를 확인합니다. 지터가 나타나면 서보 전원 용량을 늘리십시오.

5. 각도 값 수정- 변화PWM1, PWM2등을 메인 루프에서 사용하여 조정된 모션(예: 걷기 시퀀스)을 생성합니다.

6. 코드 최적화– 교체지연_us()프로덕션 용도로 사용하기 위한 비차단 카운터 방법을 사용하여 ISR 내부에 있습니다.

최종 확인:단계를 완료하면 로봇 팔, 4족 보행기, 카메라 짐벌 또는 모든 다중 관절 메커니즘에 사용할 수 있는 완전한 기능을 갖춘 4 서보 컨트롤러를 갖게 됩니다. 펄스 폭 분해능을 줄이거나 더 빠른 크리스털을 사용하면 동일한 원리가 8개 이상의 서보로 확장됩니다.

마이크로컨트롤러에서 서보에 전원을 공급하지 마십시오. 항상 공통 접지를 사용하십시오. 하나의 서보로 시작한 다음 확장하세요.

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

미래에 힘을 실어주다

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

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