51 programmi di servocontrollo a chip singolo per completare la rotazione del servo in tre passaggi_Custom Drive_Industry Insights_Kpower
Casa > Approfondimenti sul settore >Guida personalizzata
SUPPORTO TECNICO

Supporto al prodotto

51 programmi di controllo servo a chip singolo per controllare la rotazione del servo in tre fasi

Pubblicato 2026-05-06

Ti è mai capitato di riscontrare questa situazione?

Dopo aver collegato il servo all'alimentazione, non si verifica alcuna risposta. Dopo aver scritto il programma, si sono verificati nervosismi casuali. Ovviamente ho seguito le istruzioni, ma non sono riuscito a girarlo.

Niente panico. Non sei solo.

In questo articolo di oggi, con l'aiuto del microcontrollore 51, spiegheremo approfonditamente il controllo del servo. Non esiste alcun contenuto matematico complicato, nessuna tabella di registro incomprensibile, solo le idee più dirette e la struttura del codice più pratica.

Ricorda questo punto chiave: se il servo rimane fermo, è in gran parte dovuto a un problema di temporizzazione; se il servo si muove in modo casuale, probabilmente è causato da un'alimentazione insufficiente.

Sei pronto?

01 Cos'è esattamente una scatola dello sterzo?

Molte persone acquistano un servo per la prima volta e pensano che sia un motore. Può essere acceso quando l'elettricità è accesa.

Sbagliato.

Lo sterzo non è un motore normale. È più come un piccolo robot con un "cervello".

Gli dai un comando e gira all'angolo specificato. Allora fermati. Fermati di colpo.

Come si ottiene questo risultato con il piccolo potenziometro e la scheda di controllo interna? Quando invii un impulso, esegue alcuni gesti e si blocca una volta raggiunta la posizione.

Pertanto, per controllare la scatola dello sterzo, non è necessario scrivere il PID o eseguire calcoli a circuito chiuso. Devi solo imparare una cosa: inviare un impulso.

02 Principio fondamentale: un numero può cambiare la situazione

Apri la tua scheda tecnica. Trova questa frase: L'ampiezza dell'impulso di alto livello corrisponde all'angolo.

In termini semplici: un livello elevato di 0,5 millisecondi ruoterà a 0 gradi, se dura 1,5 millisecondi girerà di 90 gradi e se dura 2,5 millisecondi girerà di 180 gradi.

Il periodo è fissato a 20 millisecondi.

È chiaro? Controllare il servo in realtà significa controllare una porta IO, sollevarla, attendere per un periodo di tempo, quindi abbassarla e quindi attendere il tempo rimanente.

È così semplice.

Ad esempio, l'impulso che ruota di 90 gradi:

Innanzitutto, eseguire un'operazione di pull-up verso l'alto, quindi eseguire un ritardo della durata di 1,5 millisecondi, quindi eseguire un'operazione di pull-down verso il basso, quindi eseguire un ritardo della durata di 18,5 millisecondi, quindi ripetere i passaggi precedenti in un ciclo infinito.

Questo è un ciclo di controllo completo.

03 Prima di scrivere un programma, configurare innanzitutto l'ambiente

Non hai bisogno di attrezzature fantasiose.

Un microcontrollore 51 (STC89C52 è sufficiente)

单片机控制舵机来回摆动_舵机控制程序51单片机_单片机程序控制舵机原理

Un servo (andrà bene il comune SG90 o MG995)

Alcuni cavi Dupont

C'è un alimentatore da 5 V, quindi non aspettarti che sia alimentato da un microcontrollore. Lasciatemi dire cose importanti tre volte, non aspettatevi che sia alimentato da un microcontrollore.

I servi di molte persone tremano e non girano correttamente. Non è un errore di programma, ma potenza insufficiente.

Quando il servo è al momento dell'avvio, la corrente può raggiungere più di 1 A e la piccola quantità di energia assorbita dall'USB non può alimentarlo completamente.

cosa fare? Alimentazione esterna. Terreno comune. Terreno comune. Terreno comune.

Il terminale positivo dell'alimentatore dovrebbe essere VCC e il terminale negativo dell'alimentatore dovrebbe essere GND. Anche il GND del microcontrollore deve essere collegato al GND dell'alimentatore, quindi la linea del segnale deve essere collegata alla porta IO del microcontrollore.

Il circuito è collegato? Congratulazioni. La metà più difficile è completata.

04 Codificazione pratica: inizia dal più semplice

Non giochiamo finto. Fornire direttamente il codice che può essere eseguito.

Punti chiave: utilizzare un timer per generare un'interruzione con un periodo di 20 ms e controllare in modo flessibile la durata del livello alto durante l'interruzione.

Idea:

Definisci una variabile per memorizzare il tempo di alto livello attualmente richiesto, proprio come quella 15, e questa 15 rappresenta 1500 microsecondi, ovvero 1,5 ms

All'inizio di ogni periodo di 20 ms, per prima cosa alzare la porta IO.

Ritarda il tempo di alto livello.

Abbassa la porta IO.

Ritarda il tempo rimanente.

Scritto come pseudo codice:

void main() { Inizializza il timer (imposta l'interruzione a 20 ms); while(1) { // Non fare nulla, fai affidamento sugli interrupt } } void timer interrupt () interrupt 1 { Tira alto; ritardo (tempo di alto livello); abbassarsi; ritardo (20ms - tempo di alto livello); }

Importante: ritardi precisi a livello di microsecondi richiedono l'uso di funzioni di ritardo. Quando la frequenza principale del microcontrollore 51 è 11,0592 MHz, un nop equivale approssimativamente a 1,085 microsecondi. Per scrivere una funzione delay_us, la funzione deve passare il numero di microsecondi e implementarlo sottraendolo attraverso un ciclo while.

Non aver paura dei guai. Questo tipo di debugging per approssimazioni successive è la norma nei sistemi embedded.

05 Lascia che il timone si muova: avanti, indietro, con qualsiasi angolazione

Ora devi ottenere: premere il pulsante 1, ruotare a 0 gradi; premere il pulsante 2, ruotare di 90 gradi; premere il pulsante 3, ruotare di 180 gradi.

Aggiungi il rilevamento delle chiavi nello pseudo codice:

se (pulsante 1 premuto) tempo livello alto = 500; // 0,5 ms -> 0 gradi se (viene premuto il pulsante 2) tempo di livello alto = 1500; // 1,5 ms -> 90 gradi se (viene premuto il pulsante 3) tempo di livello alto = 2500; // 2,5 ms -> 180 gradi

单片机程序控制舵机原理_单片机控制舵机来回摆动_舵机控制程序51单片机

Importante: l'unità di tempo di alto livello è i microsecondi. 500, 1500, 2500.

Non scrivere 1, 2, 3. Sono millisecondi. 1000 volte peggio.

E allora? Quindi il servo ruoterà obbedientemente all'angolo corrispondente.

Non ci credi? Ci provi.

06 Insidie ​​in cui potresti essere incappato (Domande/Risposte)

D: Il servo non gira, ma emette solo un ronzio?

Innanzitutto, A, la corrente di alimentazione è insufficiente oppure l'ampiezza dell'impulso non è precisa. È necessario cambiare l'alimentatore con un alimentatore superiore a 5 V/2 A, quindi verificare se il tempo di alto livello è compreso tra 500 e 2500 µs.

D: Il servo può girare ma trema molto?

Aggiungere un condensatore di grandi dimensioni (valore 470uF) a entrambe le estremità dell'alimentazione del servo a causa della situazione menzionata in A, ovvero c'è una differenza eccessiva tra due cicli di controllo adiacenti o l'alimentazione presenta ondulazioni.

D: Non c'è risposta quando il programma viene masterizzato, ma si gira quando il cavo del segnale viene scollegato?

R: Lo stato del livello della porta IO all'inizio è incerto oppure il periodo di tempo in cui è a livello alto supera l'intervallo specificato. Quando si accende il dispositivo, è necessario prima abbassare il livello della porta IO, quindi assegnargli il valore iniziale.

D: Vuoi controllare la rotazione continua (come il servo a 360 gradi)?

Se non funziona, è necessario sostituirlo con un servo in grado di ruotare continuamente di 360 gradi. Se il livello alto è 1,5 ms, il servo smetterà di ruotare. Se è superiore a 1,5 ms, il servo ruoterà in avanti. Se è inferiore a 1,5 ms, il servo ruoterà in senso inverso.

D: Se non ho un oscilloscopio a portata di mano, come posso verificare che gli impulsi siano corretti?

Programmare il servo per alternare tra 0 gradi e 90 gradi ogni 1 secondo. Utilizza un analizzatore logico o un semplice metodo LED per osservare se la sua oscillazione è regolare.

07 Aggiornamento: lascia che il servo si muova secondo la curva che disegni

Un programma con angoli codificati è troppo elementare.

Un modo più avanzato di giocare: lascia che il servo vada lentamente da 0 gradi a 180 gradi, quindi ritorni lentamente indietro.

Come farlo?

Utilizza una variabile di loop chiamata angolo per aumentare da 0 a 180 e il valore del passo non dovrebbe essere troppo grande. Ad esempio, aumenta di 1 grado ogni volta.

Per ogni incremento di 1 grado, ricalcolare il tempo di livello alto:

Il tempo di alto livello è pari a 500 più l'angolo moltiplicato per 2000 diviso per 180.

Va notato che 500 corrisponde a 0 gradi, 2500 corrisponde a 180 gradi e l'intervallo totale è di 2000 microsecondi, diviso in 180 parti uguali.

Quindi ritardare di 20 ms. Fallo di nuovo.

L'effetto è uno swing fluido. Come un robot che saluta.

Puoi chiamarlo qualcosa chiamato "servocinematica", ma non lasciarti spaventare dal suo nome. In sostanza, è una sorta di interpolazione lineare.

08 Fai un ulteriore passo avanti: usa la porta seriale per controllare a distanza il servo

Aggiungi la comunicazione seriale. Il computer invia un numero e il servo gira all'angolo corrispondente.

Ad esempio, pronuncia "0" e ruota di 0 gradi. Di' "90" e gira di 90 gradi.

Punti chiave:

Nella porta seriale del microcontrollore che riceve l'interruzione, la stringa viene analizzata.

Nota: potresti non essere in grado di raccogliere tutto in una volta. Per determinare se viene ricevuto un carattere di nuova riga.

Dopo aver ricevuto il numero completo, l'intervallo è limitato a 0~180.

Converti in tempo di alto livello e aggiorna la variabile.

In questo modo il tuo servo diventa un attuatore programmabile. Dopo aver effettuato la connessione al modulo Bluetooth, anche il tuo telefono cellulare può controllarlo.

09 Riepilogo: tre elementi per il controllo della scatola dello sterzo

Alimentazione elettrica. Fornire corrente sufficiente e stabilizzare la tensione sulla terra comune.

Tempistica. Periodo 20ms, livello alto 500-2500us.

Non eseguire operazioni di blocco, utilizza gli interrupt del timer invece di utilizzare i ritardi che continuano ad attendere, altrimenti non potrai fare nulla.

Una volta padroneggiate queste tre cose, puoi controllare il 99% dei servi sul mercato.

Ricorda: quando scrivi un programma, pensa un passo in più a "cosa succederà se l'alimentatore trema improvvisamente" invece di "è sufficiente che il programma funzioni senza intoppi".

10 Ora tocca a te agire

Non considerare questo articolo solo come una raccolta. Accendi il tuo Keil, collega correttamente la scheda di sviluppo e digita il codice sopra una volta.

C'è un'alta probabilità che le prime tre volte non girino. Non avere fretta. Prendi un multimetro per misurare la tensione e utilizza un analizzatore logico per catturare la forma d'onda. Se davvero non c'è altro modo, prova a cambiare il servo.

Ogni volta che risolvi un problema, la tua comprensione dell’embeddedness si approfondisce.

Guardando indietro qualche anno dopo, scoprirai che il giorno in cui hai imparato a controllare lo sterzo è stato il punto di partenza per comprendere veramente "il controllo del mondo fisico attraverso il codice"

Il piccolo servo ronzante che hai in mano è la prima chiave per accedere al mondo dei robot.

Non aspettare oltre. Accendilo adesso.

Provatelo.

Tempo di aggiornamento: 06-05-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