Publié 2026-04-09
Ce guide fournit une méthode complète et pratique pour contrôler unservomoteurl'angle du moteur à l'aide d'un microcontrôleur STM32 et d'une télécommande infrarouge (IR) standard. Vous apprendrez le câblage exact, le décodage du signal IR, la génération PWM pour leservomoteur, et un exemple de code prêt à l'emploi. Aucun composant spécifique à la marque n'est requis ; les instructions fonctionnent avec les récepteurs IR courants (par exemple, 1838B) et tout standard 5Vservomoteur. Un cas d’utilisation typique consiste à régler à distance l’inclinaison et la rotation d’une caméra ou l’articulation d’un bras de robot.
Le système fonctionne sur deux principes fondamentaux :
Télécommande infrarougeémet un signal modulé de 38 kHz. Un récepteur IR le démodule et émet une séquence d'impulsions en série (le protocole NEC est le plus courant).
Servomoteurla position est définie par un signal PWM avec une période de 20 ms. La largeur d'impulsion varie de 0,5 ms (0°) à 2,5 ms (180°).
Votre STM32 décode le code de la clé IR et le mappe à un angle de servo cible, puis met à jour le cycle de service PWM en conséquence.
Connectez-vous exactement comme décrit ci-dessous. Un câblage incorrect endommagera les composants.
Important: Si votre servo consomme >500 mA, utilisez une alimentation 5 V séparée avec une masse commune au STM32.
Le protocole NEC est utilisé par plus de 90 % des télécommandes IR grand public. Chaque appui sur une touche envoie : une salve leader de 9 ms, un espace de 4,5 ms, puis 32 bits (adresse + commande) suivis d'un bit d'arrêt.
Étape par étape pour capturer les codes de votre télécommande :
1. Connectez la sortie du récepteur IR à un GPIO (par exemple, PB1) configuré comme interruption externe sur front descendant.
2. Mesurez les largeurs d'impulsion à l'aide d'une minuterie en mode capture.
3. Un 0 logique typique correspond à 0,56 ms haut + 0,56 ms bas ; la logique 1 est de 0,56 ms haut + 1,69 ms bas.
Utilisez l'extrait de code vérifié suivant (bibliothèque HAL, mais la logique s'applique à toute configuration) :
// Gestionnaire d'interruption pour le signal IR void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { if (GPIO_Pin == IR_IN_Pin) { uint32_t duration = getPulseWidth(); // mesurer en nous // Décoder la logique NEC – stocker le code 32 bits } }
Après avoir appuyé sur une touche (par exemple, le chiffre « 1 » ou « UP »), lisez la valeur de commande décodée. Notez les codes des clés que vous souhaitez utiliser.
Les servos attendent un signal de 50 Hz (période de 20 ms). Utilisez TIM2 ou TIM3 en mode PWM.
Calcul pour 0° (impulsion de 0,5 ms) et 180° (impulsion de 2,5 ms) :
Horloge de minuterie = 72 MHz, préscaler = 7200-1 → compteur d'horloge de 10 kHz.
Période (ARR) = période de 200 → 20 ms (2000,1 ms = 20 ms).
Cycle de service pour 0,5 ms = 5 → (0,5 ms / 0,1 ms = 5)
Cycle de service pour 2,5 ms = 25 → (2,5 ms / 0,1 ms = 25)
Étapes de configuration :
1. Activez l’horloge et la fonction alternative GPIO.
2. Définissez TIMx->PSC = 7199, TIMx->ARR = 200.
3. Réglez la valeur CCR du canal entre 5 et 25.
4. Démarrez la sortie PWM.
Exemple de fonction pour définir l'angle :
void setServoAngle(uint8_t angle) { // angle : 0 à 180 uint16_t pulse = 5 + (angle 20 / 180 ); // carte linéaire : 5 (0°) à 25 (180°) __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, pulse); }
Un cas concret courant : contrôler une plate-forme panoramique de caméra avec quatre boutons (Gauche, Droite, Centre, Arrêt). Supposons que vous ayez capturé :
Code clé « Gauche » = 0x10
Code clé « droite » = 0x11
Code clé « Centre » = 0x12
Implémentez la boucle principale :
uint32_t lastIRCode = 0 ; while (1) { if (newIRCodeAvailable) { lastIRCode = decodedIRCode ; nouveauIRCodeAvailable = 0 ; switch(lastIRCode) { case 0x10 : setServoAngle(0); casser; // Gauche – 0° cas 0x11 : setServoAngle(180); casser; // Droite – 180° cas 0x12 : setServoAngle(90); casser; // Centre – 90° par défaut : break ; } } }
Pour un contrôle incrémentiel fluide, vous pouvez augmenter/diminuer l'angle de 5° à chaque fois que vous appuyez sur « UP » ou « DOWN ».
À retenir: Pour contrôler un servo avec une télécommande IR sur STM32, il vous suffit (1) de décoder correctement le protocole NEC IR à l'aide d'une interruption externe et d'une minuterie, (2) de générer un signal PWM de 50 Hz avec un rapport cyclique réglable (0,5 à 2,5 ms) et (3) de mapper les codes clés capturés aux angles souhaités.
Étapes d'action immédiates pour votre projet:
1. Câblez le circuit comme indiqué dans la section 3.
2. Téléchargez un simple croquis de décodeur IR (utilisez la logique de la section 4) pour capturer les codes clés uniques de votre télécommande.
3. Testez le mouvement du servo avec des angles fixes à l'aide du code PWM de la section 5.
4. Fusionnez les deux fonctions et attribuez vos codes capturés à des angles spécifiques.
5. Ajoutez un petit délai (50 ms) après chaque mouvement pour éviter l'inondation des commandes.
En suivant exactement ce guide, vous disposerez d'un système d'asservissement fiable à commande infrarouge en moins de 30 minutes. Pour les fonctionnalités avancées (par exemple, stockage de positions, rampe de vitesse), étendez le même principe de cartographie. Cette approche fonctionne sur toutes les séries STM32 et sur toutes les télécommandes compatibles NEC.
Heure de mise à jour:2026-04-09
Contactez le spécialiste des produits Kpower pour recommander un moteur ou une boîte de vitesses adapté à votre produit.