게시됨 2026-04-09
이 가이드는 완벽하고 실용적인 제어 방법을 제공합니다.서보 기구STM32 마이크로컨트롤러와 표준 적외선(IR) 리모콘을 사용하여 모터 각도를 조정합니다. 정확한 배선, IR 신호 디코딩, PWM 생성에 대해 배우게 됩니다.서보 기구, 바로 사용할 수 있는 코드 예제. 브랜드별 구성 요소는 필요하지 않습니다. 지침은 일반적인 IR 수신기(예: 1838B) 및 모든 표준 5V에서 작동합니다.서보 기구. 일반적인 사용 사례는 카메라 팬틸트나 로봇 팔의 관절을 원격으로 조정하는 것입니다.
이 시스템은 두 가지 기본 원칙에 따라 작동합니다.
IR 리모콘변조된 38kHz 신호를 방출합니다. IR 수신기는 이를 복조하고 직렬 펄스 시퀀스를 출력합니다(NEC 프로토콜이 가장 일반적임).
서보 모터위치는 20ms 주기의 PWM 신호로 설정됩니다. 펄스 폭은 0.5ms(0°)에서 2.5ms(180°)까지 다양합니다.
STM32는 IR 키 코드를 디코딩하고 이를 목표 서보 각도에 매핑한 다음 이에 따라 PWM 듀티 사이클을 업데이트합니다.
아래 설명대로 정확하게 연결하세요. 잘못된 배선은 부품을 손상시킵니다.
중요한: 서보가 500mA를 초과하는 경우 STM32에 공통 접지가 있는 별도의 5V 공급 장치를 사용하십시오.
NEC 프로토콜은 소비자 IR 리모컨의 90% 이상에서 사용됩니다. 각 키를 누를 때마다 9ms 리더 버스트, 4.5ms 공간, 32비트(주소 + 명령) 및 정지 비트가 전송됩니다.
리모컨의 코드를 캡처하는 단계별 방법:
1. IR 수신기의 OUT을 하강 에지에서 외부 인터럽트로 구성된 GPIO(예: PB1)에 연결합니다.
2. 캡처 모드에서 타이머를 사용하여 펄스 폭을 측정합니다.
3. 일반적인 로직 0은 0.56ms 하이 + 0.56ms 로우입니다. 로직 1은 0.56ms 하이 + 1.69ms 로우입니다.
다음 확인된 코드 조각을 사용하세요(HAL 라이브러리, 그러나 논리는 모든 설정에 적용됨).
// IR 신호에 대한 인터럽트 핸들러 void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { if (GPIO_Pin == IR_IN_Pin) { uint32_t Duration = getPulseWidth(); // 우리 안에서 측정 // NEC 논리 디코딩 - 32비트 코드 저장 } }
키(예: 숫자 "1" 또는 "UP")를 누른 후 디코딩된 명령 값을 읽습니다. 사용하려는 키의 코드를 적어 두세요.
서보는 50Hz 신호(20ms 주기)를 예상합니다. PWM 모드에서는 TIM2 또는 TIM3을 사용하십시오.
0°(0.5ms 펄스) 및 180°(2.5ms 펄스) 계산:
타이머 클록 = 72MHz, 프리스케일러 = 7200-1 → 10kHz 카운터 클록.
주기(ARR) = 200 → 20ms 주기(2000.1ms = 20ms).
0.5ms에 대한 듀티 사이클 = 5 → (0.5ms / 0.1ms = 5)
2.5ms에 대한 듀티 사이클 = 25 → (2.5ms / 0.1ms = 25)
구성 단계:
1. 타이머 시계 및 GPIO 대체 기능을 활성화합니다.
2. TIMx->PSC = 7199, TIMx->ARR = 200으로 설정합니다.
3. 채널 CCR 값을 5~25 사이로 설정합니다.
4. PWM 출력을 시작합니다.
각도를 설정하는 예제 함수:
void setServoAngle(uint8_t angle) { // 각도: 0 ~ 180 uint16_t pulse = 5 + (angle 20 / 180); // 선형 맵: 5(0°) ~ 25(180°) __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, pulse); }
일반적인 실제 사례: 4개의 버튼(왼쪽, 오른쪽, 중앙, 정지)으로 카메라 팬 플랫폼을 제어합니다. 다음을 캡처했다고 가정합니다.
"왼쪽" 키 코드 = 0x10
"오른쪽" 키 코드 = 0x11
"중앙" 키 코드 = 0x12
메인 루프를 구현합니다:
uint32_t lastIRCode = 0; while (1) { if (newIRCodeAvailable) { lastIRCode = decodedIRCode; newIRCodeAvailable = 0; 스위치(lastIRCode) { 케이스 0x10: setServoAngle(0); 부서지다; // 왼쪽 – 0° 케이스 0x11: setServoAngle(180); 부서지다; // 오른쪽 – 180° 케이스 0x12: setServoAngle(90); 부서지다; // 중앙 – 90° 기본값: break; } } }
원활한 증분 제어를 위해 "UP" 또는 "DOWN"을 누를 때마다 각도를 5°씩 늘리거나 줄일 수 있습니다.
핵심 테이크아웃: STM32에서 IR 리모컨으로 서보를 제어하려면 (1) 외부 인터럽트 및 타이머를 사용하여 NEC IR 프로토콜을 올바르게 디코딩하고, (2) 조정 가능한 듀티 사이클(0.5~2.5ms)로 50Hz PWM 신호를 생성하고, (3) 캡처된 키 코드를 원하는 각도에 매핑하기만 하면 됩니다.
프로젝트에 대한 즉각적인 조치 단계:
1. 섹션 3에 표시된 대로 회로를 배선합니다.
2. 간단한 IR 디코더 스케치를 업로드하여(섹션 4의 로직 사용) 리모컨의 고유 키 코드를 캡처합니다.
3. 섹션 5의 PWM 코드를 사용하여 고정 각도로 서보 이동을 테스트합니다.
4. 두 기능을 병합하고 캡처한 코드를 특정 각도에 할당합니다.
5. 명령 범람을 방지하려면 각 이동 후에 약간의 지연(50ms)을 추가하십시오.
이 가이드를 정확하게 따르면 30분 이내에 안정적인 적외선 제어 서보 시스템을 갖게 될 것입니다. 고급 기능(예: 위치 저장, 속도 램핑)의 경우 동일한 매핑 원리를 확장합니다. 이 접근 방식은 모든 STM32 시리즈 및 모든 NEC 호환 리모컨에서 작동합니다.
업데이트 시간:2026-04-09