Pubblicato 2026-03-19
Devi averci pensato: il microcontrollore 51 è così classico ed economico che può essere utilizzato per controllare ilservo? La risposta è sì, e in più di un modo. Oggi parleremo di come utilizzare il microcontrollore 51 per riprodurre i fileservoe fai muovere la tua piccola imbarcazione.
Lo sterzo è in realtà un "ragazzo pigro". Finché gli dici dove girare, utilizzerà i suoi circuiti interni e i suoi motori per raggiungere quella posizione. Il modo per dirlo è un'onda PWM, che è un segnale ad onda quadra con larghezza regolabile. Una normaservorichiede un ciclo di impulsi di 20 millisecondi, dove la larghezza del livello alto determina l'angolo del servo.
Sebbene il microcontrollore 51 non disponga di un modulo PWM hardware dedicato (il vecchio modello non ce l'ha e della versione potenziata parleremo separatamente), possiamo utilizzare un timer per simularlo. È come usare un cronometro per misurare il tempo, lasciando che un pin emetta prima un livello alto, quindi abbassarlo quando il timer scade e attendere fino al termine del periodo di 20 millisecondi prima di ripetere. Finché i tempi sono sufficientemente precisi, il microcontrollore 51 è pienamente in grado di svolgere questo compito.
Per far ruotare il servo, il solo microcontrollore non è sufficiente. Prima di tutto, è necessario disporre di un servo, come l'SG90 a basso consumo, che sia facile da usare. Poi c’è l’alimentazione, che è particolarmente importante. La corrente di lavoro del servo non è piccola, soprattutto al momento dell'avvio. Prendere l'alimentazione direttamente dalla scheda di sviluppo del microcontrollore può facilmente causare il riavvio del microcontrollore. Pertanto, è necessario preparare un'alimentazione separata da 5 V per il servo, come un pacco batteria o un modulo di stabilizzazione della tensione.
Indispensabili anche altri piccoli componenti: per il collegamento viene utilizzata una breadboard o un filo DuPont. È meglio preparare un condensatore di circa 100 microfarad e filtrarlo su entrambe le estremità dell'alimentatore del servo. Il condensatore può agire come un piccolo serbatoio, tamponando le fluttuazioni di corrente, rendendo il funzionamento dello sterzo più stabile e impedendo che il microcontrollore venga "coinvolto" nel ripristino.
L'idea centrale della scrittura di un programma è quella di utilizzare un timer per generare un periodo di 20 millisecondi e controllare il pin per emettere impulsi di diversa ampiezza durante il periodo. Ad esempio, impostiamo il timer in modo che interrompa ogni 0,1 millisecondi e poi conteggi. Se si desidera emettere un impulso di 1,5 millisecondi, abbassare il pin quando il conteggio raggiunge 15 nell'interrupt, quindi tirare il pin alto quando il conteggio raggiunge 200 (arrivano 20 millisecondi) e così via.
Anche il codice non è complicato da scrivere. Nella funzione di servizio di interruzione del timer, utilizzare l'istruzione if per determinare se il valore del conteggio corrente raggiunge il valore di larghezza dell'impulso impostato, quindi azzerare il pin del servo. Nel programma principale, è sufficiente modificare la variabile corrispondente al valore dell'ampiezza dell'impulso per modificare facilmente l'angolo dello sterzo. Naturalmente, non dimenticare di inizializzare il timer e l'interrupt, che sono la base per l'esecuzione del programma.
L'angolo di rotazione dello sterzo è direttamente determinato dall'ampiezza dell'impulso di alto livello e la relazione tra i due è sostanzialmente lineare. In generale, un impulso di 0,5 millisecondi corrisponde a 0 gradi, 1,5 millisecondi corrisponde a 90 gradi e 2,5 millisecondi corrisponde a 180 gradi. Marche diverse di servi possono presentare lievi differenze, ma questa è la gamma generale.
Allora come si imposta l'angolo nel programma? Possiamo definire una variabile angolare e quindi utilizzare una semplice formula per calcolare la larghezza dell'impulso richiesta: larghezza dell'impulso = 0,5 + (angolo/180)*2,0, l'unità è millisecondi. Quindi convertire questo tempo in un valore di conteggio del timer. Ad esempio, se è presente un'interruzione in 0,1 millisecondi come menzionato prima, 1,5 millisecondi equivalgono a 15 interruzioni. Infine, basta assegnare questo valore di conteggio alla variabile di confronto nell'interrupt. Semplice, vero?
Spesso in un progetto è presente più di una macchina di governo. Ad esempio, realizzare un robot a sei zampe ne richiede molti. Un metodo comune per utilizzare un microcontrollore 51 per controllare più servi è il "multiplexing con condivisione del tempo". Poiché ciascun servo richiede un impulso con periodo di 20 millisecondi, possiamo dividere 20 millisecondi in più segmenti e ciascun segmento emette un impulso servo. Ad esempio, inviare prima un impulso da 0,5 a 2,5 millisecondi al servo n. 1, quindi inviare immediatamente un impulso al servo n. 2 e così via, purché gli impulsi di tutti i servi vengano inviati entro 20 millisecondi.
Questo metodo richiede più porte IO e il programma di interrupt deve essere organizzato in ordine. Se il tuo microcontrollore è un microcontrollore avanzato con un modulo PWM hardware, sarà più privo di preoccupazioni. Puoi configurare direttamente più uscite PWM, la CPU difficilmente deve preoccuparsene e la precisione è maggiore. Per i principianti, esercitarsi prima nell'uso del multiplexing time-sharing, quindi considerare i metodi di aggiornamento dopo aver compreso i principi.
La cosa più comune che si incontra giocando con i servi è il jitter. Di solito si tratta di un problema di alimentazione. Quando il servo si muove, la tensione viene abbassata e il microcontrollore non funziona correttamente, causando disturbi nel segnale. La soluzione è rafforzare l'alimentazione, utilizzare un alimentatore indipendente e rendere i cavi di alimentazione e di terra il più spessi e corti possibile e il condensatore dovrebbe essere installato vicino al servo.
A volte l'angolo del servo non è corretto o la risposta è lenta. Ciò potrebbe essere dovuto a un'interferenza sulla linea del segnale o alla temporizzazione nel programma non sufficientemente precisa. È possibile collegare un resistore pull-down da 10k alla linea del segnale a terra per migliorare la capacità anti-interferenza. In termini di programma, controlla se l'oscillatore al cristallo è preciso e se il valore iniziale del timer viene calcolato in modo errato. Assicurati che queste basi siano a posto e il tuo servo sarà in grado di colpire dove vuoi.
Utilizzando il microcontrollore 51 per giocare con il servo, hai riscontrato errori particolarmente interessanti o hai trovato applicazioni interessanti? Benvenuto per lasciare un messaggio e condividere nell'area commenti, e non dimenticare di mettere mi piace e salvarlo in modo che più amici possano vedere questi suggerimenti pratici!
Tempo di aggiornamento: 2026-03-19
Contatta lo specialista di prodotto Kpower per consigliare il motore o il riduttore adatto al tuo prodotto.