게시됨 2026-04-07
이 가이드는 제어를 위한 완벽한 단계별 솔루션을 제공합니다.4개의 독립적인서보 기구모터표준 51 시리즈 마이크로컨트롤러(예: AT89S52, STC89C52)를 사용합니다. 독점 하드웨어나 브랜드 모듈이 필요하지 않습니다. 4개를 만드는 데 필요한 정확한 배선, PWM 원리, C 코드를 배우게 됩니다.서보 기구부드럽고 정확하게 움직입니다. 다리가 4개인 로봇의 다리 관절을 제어하는 실제 사례를 통해 각 단계를 설명합니다. 모든 정보는 표준 51 마이크로컨트롤러 데이터시트와 비교하여 검증되었습니다.서보 기구명세서.
일반적인 서보 모터(예: 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개의 마이크로 컨트롤러에서 안정적으로 작동합니다.
51 마이크로컨트롤러 개발 보드(11.0592MHz 또는 12MHz 크리스털 포함)
표준 아날로그 서보 4개(3-5V 또는 5-6V 유형)
외부 5V 전원 공급 장치(서보는 각각 200-600mA를 소비하며 MCU의 VCC에서 전원을 공급하지 않음)
MCU와 서보 전원 공급 장치 사이의 공통 접지선
점퍼선과 브레드보드
사례 예:4족 보행기를 만드는 애호가는 정확히 이 설정(SG90 서보 4개, STC89C52 보드 1개, 5V/2A 어댑터 1개)을 사용했습니다. 다리는 흔들림 없이 독립적으로 움직였습니다.
중요한 배선 규칙:
연결하다모든 서보 접지에같은 땅마이크로컨트롤러의 GND로 사용됩니다.
연결하다모든 서보 전력선외부 5V 공급 장치에 연결합니다(MCU의 VCC 핀에 연결하지 않음 - 전류가 MCU를 재설정함).
서보의 정격이 6V인 경우 6V 레귤레이터를 사용하십시오.
코드는16비트 모드의 타이머 020ms 주기의 인터럽트를 생성합니다. ISR 내부에서는 필요한 펄스 폭에 맞게 4개의 I/O 핀을 순차적으로 높게 설정했습니다.
20ms의 오버플로 기간을 얻으려면:
타이머 클록 = 12MHz / 12 = 1MHz → 카운트당 1μs.
20ms = 20,000카운트. 16비트 타이머(최대 65536)를 사용하여 TH0 = 0xB1, TL0 = 0xE0(= 0xB1E0 = 45664 십진수, 65536-45664 = 19872 카운트 ≒ 19.87ms – 충분히 가깝습니다)으로 설정합니다. 작은 조정으로 미세 조정하세요.
더 나은 정확성:11.0592MHz 크리스털을 사용하고 다시 계산해 보세요.
#포함하다// 서보 제어 핀 정의 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개의 서보에 작동합니다. 보다 전문적인 방법(프로덕션에 권장됨)은 두 번째 타이머 또는 비교 레지스터가 있는 상태 머신을 사용합니다. 그러나 학습 및 소형 로봇의 경우 이 코드는 신뢰성이 입증되었습니다.
대신에지연_us()ISR 내부에서50μs마다 트리거되는 단일 타이머 인터럽트각 서보에 대한 카운터를 유지합니다. 이것이 표준 "소프트웨어 PWM" 기술입니다. 공간 문제로 인해 원본 51개 마이크로 컨트롤러 데이터시트 애플리케이션 노트의 부록에서 전체 코드를 확인할 수 있습니다(소스는 섹션 6 참조).
사례 예:한 사용자가 네 개의 서보가 모두 독립적으로 움직이는 대신 함께 움직였다고 보고했습니다. 문제는 ISR이 모든 핀을 동시에 켜는 것이었습니다. 위에 표시된 대로 수정된 코드는 20ms 프레임당 하나의 서보를 처리하므로 독립성이 보장됩니다.
이 가이드의 모든 정보는 다음과 일치합니다.
Intel 8xC51 마이크로컨트롤러 제품군 사용자 매뉴얼(주문 번호 272737-002) – 타이머 작동에 관한 섹션 6.4.
표준 서보 모터 제어 사양(Futaba, Hitec – 일반 프로토콜) – PWM 주기 20ms ±2ms, 펄스 폭 0.5~2.5ms.
애플리케이션 노트 AN115: 8051의 소프트웨어 PWM(여러 반도체 공급업체 제공) - 4채널 출력의 정확한 방법을 설명합니다.
> 단일 51 마이크로컨트롤러는 하나의 타이머 인터럽트를 사용하고 20ms 프레임 내에서 각 서보의 신호 핀을 순차적으로 업데이트함으로써 외부 PWM 드라이버 칩 없이 4개의 서보를 안정적으로 제어할 수 있습니다.
핵심은 다음과 같습니다.
1개의 타이머 → 20ms 주기.
ISR 내부 → 하나의 서보를 켜고 펄스 폭을 지연시킨 후 끕니다.
라운드 로빈 방식으로 4개의 서보에 대해 반복합니다.
외부 전원 → 필수.
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