51 Guida all'impostazione del servo dell'azionamento del microcontroller_Custom Drive_Industry Insights_Kpower
Casa > Approfondimenti sul settore >Guida personalizzata
SUPPORTO TECNICO

Supporto al prodotto

51 Guida all'impostazione del servo dell'azionamento del microcontrollore

Pubblicato 2026-04-29

01Il microcontrollore 51 può azionare lo sterzo? Come configurarlo?

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.

02Principio di funzionamento della scatola dello sterzo e requisiti del microcontrollore

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.

03Schema di connessione hardware (deve includere un'alimentazione indipendente)

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.

单片机可以直接驱动舵机吗_单片机怎么驱动舵机_51单片机可以驱动舵机吗怎么设置

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.

04Metodi di impostazione del software (due soluzioni tradizionali)

Soluzione 1: simulazione timer PWM (consigliata, adatta a qualsiasi microcontrollore 51)

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); }

Opzione 2: simulazione della funzione di ritardo (solo per test, non consigliata per progetti reali)

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.

05Domande frequenti e soluzioni (formato Q/A)

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?

单片机可以直接驱动舵机吗_51单片机可以驱动舵机吗怎么设置_单片机怎么驱动舵机

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.

06Tabella corrispondenza impulsi per diversi modelli di timoneria (verificata)

Serie di modelli Impulso 0° Impulso di 90° Impulso di 180° Corrente massima
SG90(9g) 0,5 ms 1,5 ms 2,4 ms 250 mA
MG995R 0,6 ms 1,6 ms 2,5 ms 800mA
DS3218 0,5 ms 1,5 ms 2,5 ms 1,2A
Servo analogico standard 1,0 ms 1,5 ms 2,0 ms 300mA

Fonte dati: manuale ufficiale dei dati di ciascuna scatola dello sterzo (edizione 2023-2025)

07Passaggi di debug e verifica

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.

08Applicazione avanzata: aziona 8 servi contemporaneamente (soluzione di test effettiva YPMFG)

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.

09Conclusioni fondamentali e raccomandazioni di azione

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

Alimentare il futuro

Contatta lo specialista di prodotto Kpower per consigliare il motore o il riduttore adatto al tuo prodotto.

Invia una e-mail a Kpower
Invia richiesta
Messaggio WhatsApp
+86 0769 8399 3238
 
kpowerMap