Pubblicato 2026-04-09
Questa guida fornisce un metodo completo e pratico per controllare aservol’angolo del motore utilizzando un microcontrollore STM32 e un telecomando a infrarossi (IR) standard. Imparerai il cablaggio esatto, la decodifica del segnale IR, la generazione PWM perservoe un esempio di codice pronto per l'uso. Non sono richiesti componenti specifici del marchio; le istruzioni funzionano con i comuni ricevitori IR (ad esempio 1838B) e qualsiasi standard 5Vservo. Un caso d'uso tipico è la regolazione remota dell'inclinazione della telecamera o del giunto del braccio di un robot.
Il sistema funziona su due principi fondamentali:
telecomando IRemette un segnale modulato a 38kHz. Un ricevitore IR lo demodula ed emette una sequenza di impulsi seriali (il protocollo NEC è il più comune).
Servomotorela posizione è impostata da un segnale PWM con un periodo di 20 ms. La larghezza dell'impulso varia da 0,5 ms (0°) a 2,5 ms (180°).
Il tuo STM32 decodifica il codice della chiave IR e lo mappa su un angolo del servo target, quindi aggiorna di conseguenza il ciclo di lavoro PWM.
Collegare esattamente come descritto di seguito. Un cablaggio errato danneggerà i componenti.
Importante: Se il tuo servo assorbe >500mA, usa un'alimentazione separata da 5V con terra comune per l'STM32.
Il protocollo NEC è utilizzato da oltre il 90% dei telecomandi IR consumer. Ogni pressione di un tasto invia: un burst leader di 9 ms, uno spazio di 4,5 ms, quindi 32 bit (indirizzo + comando) seguiti da un bit di stop.
Passo dopo passo per acquisire i codici del telecomando:
1. Collegare l'OUT del ricevitore IR a un GPIO (ad esempio, PB1) configurato come interruzione esterna sul fronte di discesa.
2. Misurare l'ampiezza dell'impulso utilizzando un timer in modalità di acquisizione.
3. Un tipico 0 logico è 0,56 ms alto + 0,56 ms basso; la logica 1 è alta 0,56 ms + bassa 1,69 ms.
Utilizza il seguente snippet di codice verificato (libreria HAL, ma la logica si applica a qualsiasi configurazione):
// Gestore degli interrupt per il segnale IR void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { if (GPIO_Pin == IR_IN_Pin) { uint32_t durata = getPulseWidth(); // misura in noi // Decodifica la logica NEC – memorizza il codice a 32 bit } }
Dopo aver premuto un tasto (ad esempio il numero “1” o “UP”), leggere il valore del comando decodificato. Annota i codici delle chiavi che desideri utilizzare.
I servi si aspettano un segnale di 50 Hz (periodo di 20 ms). Utilizza TIM2 o TIM3 in modalità PWM.
Calcolo per 0° (impulso da 0,5 ms) e 180° (impulso da 2,5 ms):
Orologio timer = 72 MHz, prescaler = 7200-1 → contatore orologio 10 kHz.
Periodo (ARR) = 200 → periodo di 20 ms (2000,1 ms = 20 ms).
Ciclo di lavoro per 0,5 ms = 5 → (0,5 ms / 0,1 ms = 5)
Ciclo di lavoro per 2,5 ms = 25 → (2,5 ms / 0,1 ms = 25)
Passaggi di configurazione:
1. Abilitare il timer e la funzione alternativa GPIO.
2. Impostare TIMx->PSC = 7199, TIMx->ARR = 200.
3. Impostare il valore CCR del canale tra 5 e 25.
4. Avviare l'uscita PWM.
Funzione di esempio per impostare l'angolo:
void setServoAngle(uint8_t angolo) { // angolo: da 0 a 180 uint16_t impulso = 5 + (angolo 20 / 180); // mappa lineare: da 5 (0°) a 25 (180°) __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, impulso); }
Un caso comune nel mondo reale: controllare una piattaforma panoramica della telecamera con quattro pulsanti (Sinistra, Destra, Centro, Stop). Supponiamo di aver catturato:
Codice tasto “Sinistra” = 0x10
Codice tasto “Destra” = 0x11
Codice tasto “Centro” = 0x12
Implementa il ciclo principale:
uint32_t lastIRCode = 0; while (1) { if (nuovoIRCodeAvailable) { ultimoIRCode = decodificatoIRCode; nuovoIRCodeAvailable = 0; switch(lastIRCode) { case 0x10: setServoAngle(0); rottura; // Sinistra – caso 0° 0x11: setServoAngle(180); rottura; // Destra – 180° caso 0x12: setServoAngle(90); rottura; // Centro – 90° predefinito: interruzione; } } }
Per un controllo incrementale uniforme, è possibile aumentare/diminuire l'angolo di 5° ogni volta che si preme "SU" o "GIÙ".
Da asporto fondamentale: Per controllare un servo con un telecomando IR su STM32, è sufficiente (1) decodificare correttamente il protocollo IR NEC utilizzando un interrupt e un timer esterni, (2) generare un segnale PWM a 50 Hz con ciclo di lavoro regolabile (0,5–2,5 ms) e (3) mappare i codici chiave catturati agli angoli desiderati.
Passaggi di azione immediati per il tuo progetto:
1. Cablare il circuito come mostrato nella Sezione 3.
2. Carica un semplice schizzo del decodificatore IR (usa la logica nella Sezione 4) per acquisire i codici chiave univoci del tuo telecomando.
3. Testare il movimento del servo con angoli fissi utilizzando il codice PWM della Sezione 5.
4. Unisci entrambe le funzioni e assegna i codici acquisiti ad angoli specifici.
5. Aggiungere un piccolo ritardo (50 ms) dopo ogni movimento per evitare l'inondazione dei comandi.
Seguendo esattamente questa guida, avrai un servosistema affidabile controllato a infrarossi in meno di 30 minuti. Per funzionalità avanzate (ad esempio, memorizzazione di posizioni, rampa di velocità), estendere lo stesso principio di mappatura. Questo approccio funziona su tutte le serie STM32 e su qualsiasi telecomando compatibile con NEC.
Tempo di aggiornamento: 09-04-2026
Contatta lo specialista di prodotto Kpower per consigliare il motore o il riduttore adatto al tuo prodotto.