Pubblicato 2026-04-29
Solo quando le condizioni hardware sono soddisfatte è possibile realizzare l'azionamento. Il microcontrollore 51 emette un PWM standard, che è un segnale di modulazione dell'ampiezza dell'impulso, e può controllare l'angolo di sterzata. La fase di impostazione principale consiste nel generare un segnale PWM con un periodo di 20 ms e un tempo di alto livello compreso tra 0,5 ms e 2,5 ms. Il ciclo di lavoro corrisponde ad una rotazione da 0° a 180°. Questo articolo fornisce la connessione completa del circuito e lo schema di configurazione del codice.
La rotazione dello sterzo è determinata dall'ampiezza dell'impulso del segnale di controllo. I servi standard, come SG90 e MG995R, hanno i seguenti requisiti:
periodo del segnale:20ms(50Hz)
La relazione tra tempo di alto livello e angolo:
0,5ms → 0°
1,0 ms → 45°
1,5 ms → 90°
2,0 ms → 135°
2,5 ms → 180°
Per quanto riguarda i requisiti di uscita del microcontrollore 51, uno è che qualsiasi porta I/O possa generare un segnale PWM, e l'altro è che questo processo di generazione deve controllare accuratamente la durata del suo livello.. Per quanto riguarda la frequenza dell'oscillatore a cristallo, il suggerimento è che sia 11.0592 MHz o 12 MHz. Lo scopo di ciò è facilitare il timer per cronometrare con precisione.
Quando il servo funziona, la sua corrente è relativamente grande. Quando è senza carico, la corrente è compresa tra 100 mA e 200 mA. Una volta che si verifica uno stallo, la corrente può raggiungere più di 500 mA. È assolutamente vietato ottenere alimentazione direttamente dalla porta I/O del microcontrollore 51, né ottenere alimentazione dal pin 5V della scheda didattica. In caso contrario, si verificherà un ripristino o il chip verrà bruciato.
Metodo di connessione standard:
1. linea di segnale: collegare a qualsiasi porta I/O del microcontrollore (come P1.0)
2. Il terminale positivo, che è VCC, deve essere collegato a un alimentatore esterno da 5 V, come il modulo di stabilizzazione della tensione LM2596, e un pacco batteria da 4,8 V - 6 V.

3. L'elettrodo negativo, ovvero GND, deve trovarsi nello stesso stato fondamentale del GND del microcontrollore, ovvero l'elettrodo negativo dell'alimentatore deve essere collegato al GND della scheda di sviluppo.
Il caso di riferimento di YPMFG è che un appassionato di elettronica ha utilizzato STC89C52RC per azionare il servo MG995R. Inizialmente, otteneva l'alimentazione direttamente dalla scheda di sviluppo, provocando lo sfarfallio dello schermo. Successivamente venne sostituita con due batterie 18650 collegate in serie e poi ridotte a 5,5V per l'alimentazione. Successivamente, il servo ha funzionato in modo fluido e senza interferenze.
La logica principale consiste nell'utilizzare un timer per generare un interrupt di 100μs e controllare il tempo di alto livello accumulando il numero di interrupt.
passaggi del codice(Prendiamo come esempio un oscillatore a cristallo da 12 MHz):
#includeresputoservo= P1^0; // Conteggio caratteri senza segno del pin del segnale = 0; // Conteggio interrupt caratteri senza segno high_time = 15; // 1,5ms corrisponde a 90° (15×100μs) void Timer0_Init() { TMOD = 0x01; // Modalità 1, timer a 16 bit TH0 = 0xFE; // Valore iniziale 100μs (12MHz: 65536-100=65436→0xFF9C) TL0 = 0x0C; EA = 1; // Attiva l'interrupt totale ET0 = 1; // Abilita l'interrupt del timer 0 TR0 = 1; // Avvia il timer } void Timer0_ISR() interrupt 1 { TH0 = 0xFE; // Ricarica il valore iniziale TL0 = 0x0C; conta++; if(count++; servo = 1; // Il livello alto dura high_time×100μs } else if(count servo = 0; } else { count = 0; // Fine del ciclo, resetta il conteggio } } void main() { Timer0_Init(); high_time = 10; // Imposta l'angolo: 10→45°, 15→90°, 20→135° while(1); }
Gli impulsi vengono generati utilizzando _nop_() o cicli di ritardo, ma l'utilizzo della CPU è elevato e l'angolo non è preciso. Esempio:
servo = 1; ritarda_noi(1500); // Servo di alto livello da 1,5 ms = 0; ritardo_ms(18.5); // Tempo di ciclo rimanente
Svantaggi: incapace di gestire altre attività contemporaneamente, l'errore dell'oscillatore a cristallo ha un grande impatto.
Q1: Cosa devo fare se il microcontrollore 51 è collegato direttamente al servo e non c'è risposta?
A: Controlla se hanno un terreno comune. Il polo negativo dell'alimentatore del servo e il GND del microcontrollore devono essere collegati, altrimenti non ci sarà alcun loop di segnale.
Q2: Come risolvere il problema del scuotimento del servo e dell'impossibilità di fissare l'angolo?
Migliora la precisione del timer, utilizza un oscillatore a cristallo da 12 MHz e reinstalla il valore iniziale ogni 100 μs, in modo che la frequenza di interruzione rimanga stabile.
Q3: È possibile utilizzare una porta I/O per controllare più servi contemporaneamente?

A ha detto di no. Ogni servo necessita di una linea di segnale separata. Più servi possono condividere i cavi positivo e di terra, ma l'alimentatore deve avere potenza sufficiente.
Q4: Qual è il motivo per cui gira effettivamente a 30° quando è impostato su 45°?
R: C'è un errore nella frequenza dell'oscillatore a cristallo, oppure l'ora di alto livello non è precisa. Utilizzare un oscilloscopio per misurare l'ampiezza dell'impulso PWM, quindi regolare il valore high_time.
Q5: Suggerimenti per la scrittura dell'articolo: come prolungare la durata della scatola dello sterzo?
R: Per evitare lo stallo, aggiungere un condensatore. Collegare un condensatore elettrolitico da 100μF in parallelo tra i terminali positivo e negativo del servoalimentatore per filtrare le increspature.
Fonte dati: manuale ufficiale dei dati di ciascuna scatola dello sterzo (edizione 2023-2025)
1. Ottenere la forma d'onda misurata e utilizzare un oscilloscopio o un analizzatore logico per verificare se il ciclo PWM rientra nell'intervallo di 20 ms più o meno 0,5 ms.
2. Angolo di verifica: Scrivere 1,5 ms di livello alto, il servo dovrebbe essere fermo nella posizione di 90°
3. prova di carico: Ruotare delicatamente a mano il braccio del servo, la fluttuazione della tensione non deve superare 0,3 V
4. Passare da più angolazioni, assegnargli un valore di 1,0 ms, quindi un valore di 1,5 ms e quindi un valore di 2,0 ms in sequenza, quindi osservare attentamente la sua rotazione per vedere se ha caratteristiche fluide.
Tabella tipica di risoluzione dei problemi:
Il servo non gira → Controllare la terra comune e la tensione di alimentazione (4,8 V-6 V)
Tremore e agitazione → Alimentazione insufficiente o conflitti di interruzione (disattivare le interruzioni irrilevanti)
Può ruotare solo di 0° e 180°, il che fa sì che il tempo di alto livello non cambi linearmente. In questo caso è necessario verificare la variabile count nel codice.
Utilizzando un microcontrollore 51, con l'aiuto di due timer e un array, può pilotare fino a 8 servi. I metodi chiave sono:
Il timer 0 attiva un interrupt di 2,5 millisecondi e controlla i momenti di avvio di alto livello delle 8 porte I/O in modo sequenziale.
Ogni servo viene memorizzato in modo indipendentehigh_timevettore
È necessario utilizzare un alimentatore switching esterno da 5 V/10 A o superiore per l'alimentazione
quadro del codice:
carattere senza segno servo_high[8] = {15,10,20,5,15,12,18,8}; //Valore dell'impulso di ciascun servo senza segno char current_servo = 0; //Nell'interruzione, il servo precedente viene abbassato e il servo attuale viene alzato.
L'utilizzo della CPU di questa soluzione è di circa il 40% ed è comunque in grado di gestire attività semplici come la scansione dei tasti.
Con un microcontrollore 51, è completamente in grado di pilotare il servo. I principali fattori di successo sono l'alimentazione indipendente, la tempistica precisa, ovvero un'interruzione di 100 μs e la connessione a terra comune. Per i principianti, dovresti iniziare con un singolo servo, un oscillatore a cristallo da 12 MHz e una soluzione di interruzione del timer ed evitare di utilizzare direttamente la funzione di ritardo.
Esegui la lista di controllo ora:
1. Preparare un alimentatore regolato da 5 V/1 A o superiore o un pacco batteria da 4,8 V
2. Scrivi il codice di inizializzazione del timer (interruzione di 100μs)
3. Utilizzare un multimetro per misurare le tensioni positive e negative del servo (nessun carico non deve essere inferiore a 4,5 V)
4. Testare prima la posizione di 90° (impulso da 1,5 ms), quindi espandere ad altri angoli
Suggerimenti per la scrittura dell'articolo: Se il microcontrollore viene ripristinato durante il funzionamento del servo, collegare immediatamente un condensatore da 470μF in parallelo all'estremità di alimentazione del servo e accorciare la lunghezza del cavo di alimentazione (meno di 20 cm). Segui questa guida e sarai in grado di ottenere un controllo preciso dell'angolo entro 30 minuti.
Tempo di aggiornamento: 29-04-2026
Contatta lo specialista di prodotto Kpower per consigliare il motore o il riduttore adatto al tuo prodotto.