Publicado 2026-04-09
Esta guía proporciona un método completo y práctico para controlar unservoángulo del motor utilizando un microcontrolador STM32 y un control remoto infrarrojo (IR) estándar. Aprenderá el cableado exacto, la decodificación de la señal IR y la generación de PWM para elservoy un ejemplo de código listo para usar. No se requieren componentes específicos de marca; Las instrucciones funcionan con receptores IR comunes (por ejemplo, 1838B) y cualquier estándar de 5 V.servo. Un caso de uso típico es el ajuste remoto de una cámara con giro e inclinación o la articulación de un brazo robótico.
El sistema opera según dos principios fundamentales:
control remoto por infrarrojosEmite una señal modulada de 38kHz. Un receptor de infrarrojos lo demodula y emite una secuencia de pulsos en serie (el protocolo NEC es el más común).
servomotorLa posición se establece mediante una señal PWM con un período de 20 ms. El ancho del pulso varía de 0,5 ms (0°) a 2,5 ms (180°).
Su STM32 decodifica el código de la clave IR y lo asigna a un ángulo de servo objetivo, luego actualiza el ciclo de trabajo PWM en consecuencia.
Conecte exactamente como se describe a continuación. El cableado incorrecto dañará los componentes.
Importante: Si su servo consume >500mA, use un suministro separado de 5V con tierra común al STM32.
El protocolo NEC es utilizado por más del 90% de los controles remotos por infrarrojos de consumo. Cada pulsación de tecla envía: una ráfaga líder de 9 ms, un espacio de 4,5 ms, luego 32 bits (dirección + comando) seguido de un bit de parada.
Paso a paso para capturar los códigos de tu control remoto:
1. Conecte la SALIDA del receptor de IR a un GPIO (por ejemplo, PB1) configurado como interrupción externa en el flanco descendente.
2. Mida los anchos de pulso usando un temporizador en modo de captura.
3. Un 0 lógico típico es 0,56 ms alto + 0,56 ms bajo; La lógica 1 es 0,56 ms de alto + 1,69 ms de bajo.
Utilice el siguiente fragmento de código verificado (biblioteca HAL, pero la lógica se aplica a cualquier configuración):
// Controlador de interrupciones para señal IR void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { if (GPIO_Pin == IR_IN_Pin) { uint32_t duración = getPulseWidth(); // medir en nosotros // Decodificar la lógica NEC – almacenar código de 32 bits } }
Después de presionar una tecla (por ejemplo, el número “1” o “ARRIBA”), lea el valor del comando decodificado. Anote los códigos de las claves que desea utilizar.
Los servos esperan una señal de 50 Hz (período de 20 ms). Utilice TIM2 o TIM3 en modo PWM.
Cálculo para 0° (pulso de 0,5 ms) y 180° (pulso de 2,5 ms):
Reloj temporizador = 72 MHz, preescalador = 7200-1 → contador de 10 kHz.
Período (ARR) = 200 → período de 20 ms (2000,1 ms = 20 ms).
Ciclo de trabajo para 0,5 ms = 5 → (0,5 ms / 0,1 ms = 5)
Ciclo de trabajo para 2,5 ms = 25 → (2,5 ms / 0,1 ms = 25)
Pasos de configuración:
1. Habilite el reloj temporizador y la función alternativa GPIO.
2. Configure TIMx->PSC = 7199, TIMx->ARR = 200.
3. Configure el valor CCR del canal entre 5 y 25.
4. Inicie la salida PWM.
Función de ejemplo para establecer el ángulo:
void setServoAngle(uint8_t ángulo) { // ángulo: 0 a 180 uint16_t pulso = 5 + (ángulo 20/180); // mapa lineal: 5 (0°) a 25 (180°) __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, pulse); }
Un caso común del mundo real: controlar una plataforma de panorámica de cámara con cuatro botones (Izquierda, Derecha, Centro, Detener). Supongamos que capturó:
Código de tecla "izquierda" = 0x10
Código clave "derecho" = 0x11
Código de clave “Centro” = 0x12
Implementar el bucle principal:
uint32_t últimocódigoIR = 0; mientras (1) { if (newIRCodeAvailable) { lastIRCode = decodedIRCode; nuevoIRCodeAvailable = 0; switch(lastIRCode) { caso 0x10: setServoAngle(0); romper; // Izquierda – 0° caso 0x11: setServoAngle(180); romper; // Derecha – 180° caso 0x12: setServoAngle(90); romper; // Centro – 90° predeterminado: romper; } } }
Para un control incremental suave, puede aumentar/disminuir el ángulo en 5° cada vez que presione “ARRIBA” o “ABAJO”.
Conclusión principal: Para controlar un servo con un control remoto IR en STM32, solo necesita (1) decodificar correctamente el protocolo NEC IR usando una interrupción y un temporizador externos, (2) generar una señal PWM de 50 Hz con un ciclo de trabajo ajustable (0,5 a 2,5 ms) y (3) asignar los códigos clave capturados a los ángulos deseados.
Pasos de acción inmediata para su proyecto:
1. Conecte el circuito como se muestra en la Sección 3.
2. Cargue un boceto simple del decodificador de infrarrojos (use la lógica de la Sección 4) para capturar los códigos clave únicos de su control remoto.
3. Pruebe el movimiento del servo con ángulos fijos usando el código PWM de la Sección 5.
4. Fusione ambas funciones y asigne sus códigos capturados a ángulos específicos.
5. Agregue un pequeño retraso (50 ms) después de cada movimiento para evitar la inundación de comandos.
Si sigue exactamente esta guía, tendrá un sistema servo confiable controlado por infrarrojos en menos de 30 minutos. Para funciones avanzadas (por ejemplo, almacenamiento de posiciones, aumento de velocidad), amplíe el mismo principio de mapeo. Este enfoque funciona en todas las series STM32 y en cualquier control remoto compatible con NEC.
Hora de actualización: 2026-04-09
Comuníquese con el especialista en productos de Kpower para recomendarle un motor o caja de cambios adecuado para su producto.