Pubblicato 2026-05-08
a tarda notte. Le luci del laboratorio sono ancora accese.
Fissavo attentamente il servo immobile, tenendo saldamente in mano la scheda di sviluppo STM32. La compilazione del codice era andata a buon fine e il download era andato a buon fine, ma perché era immobile?
Il debugger tremolava sullo schermo, come se ridesse di me.
Ti è mai capitato di sfogliare ripetutamente la scheda tecnica, ma di non riuscire a trovare quella riga di configurazione che gioca un ruolo chiave?
Quella notte di quattro anni fa, ho usato per la prima volta STM32 per controllare il servo. Penso che PWM sia facile quanto cambiare il ciclo di lavoro. Di conseguenza, il servo ha tremato e poi è diventato completamente silenzioso.
Successivamente mi sono reso conto di aver dimenticato il passaggio più critico: abilitare l'orologio.
Suggerimenti per la scrittura: scrivere driver da zero
Il servo è un bambino obbediente. Richiede solo una lingua: PWM.
Il periodo è di 20 millisecondi e il tempo di alto livello è compreso tra 0,5 millisecondi e 2,5 millisecondi, che è correlato al servo standard.
È possibile selezionare un gran numero di modalità timer STM32. Qual è la differenza tra PWM1 e PWM2? Contando verso l'alto e contando verso il basso, il servo si preoccupa davvero di queste situazioni?
Ci sono tre servi a prezzi diversi che ho testato su un progetto. Uno dei servi entry-level ha una buona prestazione di risposta di 0,5 ms. Ma un altro servo di livello industriale ha il requisito di rendere il tempo morto preciso a 1us.
C'è un caso come questo: l'anno scorso ho aiutato un amico a eseguire il debug di un braccio robotico a cinque assi. Quello che viene utilizzato è il comune servo a coppia media.Il codice sembra essere in perfette condizioni. Quando il ciclo di lavoro viene regolato dal 5% al 10%, il servo salta semplicemente in due posizioni estreme.。
Calcolo dei valori di prescaler e ricarica automatica.
Per STM32 nello stato 72 MHz, se si desidera ottenere una frequenza PWM di 50 Hz, il coefficiente di divisione della frequenza non è determinato arbitrariamente. Ogni servo ha sensibilità diverse, zone morte diverse e persino tensioni di alimentazione diverse, che causeranno un cambiamento del suo "udito".
Ho visto troppe persone collegare il servo direttamente al pin PWM da 3,3 V.
Poi si è lamentato: "La capacità del driver STM32 è troppo debole."
No, hai dimenticato di mettere in quarantena.
Suggerimenti scritti: comprendere il significato più profondo della scheda tecnica
Il debug è durato fino a tre ore. Ho usato un oscilloscopio per indagare filo per filo. Durante l'indagine, ho scoperto che quando il servo ruotava, la corrente aumentava a 1,2 A. Poi mi sono reso conto che il regolatore di tensione da 3,3 V della scheda di sviluppo non poteva sopportare una corrente del genere.
La soluzione è semplice: alimentazione esterna, terra comune.
![]()
Da allora ogni mio progetto di timoneria ha seguito tre ferree regole:
Alimentazione separata per servo (4,8 V-6 V)
Resistenza da 1kΩ della stringa del segnale di controllo
Il filo di terra dell'alimentazione è collegato in modo affidabile al filo di terra STM32.
Questi tre elementi valgono tutto il tempo di debug.
Ma la sola alimentazione non basta. La precisione è l'anima del servocontrollo.
Che dire delle normali funzioni simili al ritardo? Dimenticatelo, rinunciate con decisione. Che dire delle interruzioni causate dai timer? Va bene ed è utilizzabile.Il metodo operativo che può veramente essere definito professionale consiste nell'utilizzare il timer avanzato di STM32 per emettere PWM complementare e attivare la funzione di frenatura.。
Perché? Perché quando il servo si blocca, non vuoi che si bruci.
Apri il manuale di riferimento STM32. Il capitolo 14 appartiene ai timer, il capitolo 15 appartiene ai timer, il capitolo 16 appartiene ai timer e il capitolo 17 appartiene ai timer.
I principianti hanno le vertigini guardando gli elenchi dei registri. Anche io.
Ma c'è una pagina che ha la proprietà più importante: la tabella di configurazione della modalità di confronto degli output. Può dirti quale registro controlla il ciclo di lavoro, quale registro controlla la polarità e quale registro controlla la zona morta.
Suggerimento di scrittura: l'importanza dei tempi morti
Il mio prossimo progetto richiede una precisione dell'angolo del servo di 0,5 gradi. La maggior parte dei servi sul mercato generalmente supporta solo una risoluzione di 1us.; In un periodo di 20ms, 1us corrisponde esattamente a 0,18 gradi. Da un'analisi teorica, questa precisione è sufficiente.
Tuttavia, i test effettivi hanno rilevato che la differenza di rendimento dei servi economici è solo di 2us.
cosa fare?
Compensazione del software.
Nel codice ho creato una tabella di mappatura per associare il ciclo di lavoro teorico all'angolo effettivo secondo la relazione corrispondente. Ho utilizzato l'interpolazione lineare per correggerlo e la precisione finale ha raggiunto 0,3 gradi.
Questo caso ci dice: l’hardware ha dei limiti, ma gli algoritmi possono porvi rimedio.
Domande/risposte
D: Il servo non si muove affatto, cosa devo fare?
R: Controllare innanzitutto la tensione di alimentazione e la terra comune. Utilizzare un oscilloscopio per vedere se il segnale PWM è presente.
D: Il servo vibra seriamente, qual è la ragione?

Il periodo è di 20 ms e non sono presenti anomalie nel segnale, ma la frequenza PWM non corrisponde o il ciclo di lavoro non è stabile e deve essere confermato.
D: Cosa devo fare se la risoluzione PWM di STM32 non è sufficiente?
R: Riduci il timer o utilizza la modalità a 16 bit e puoi anche collegare un modulo PCA9685 esterno.
D: Come controllare più servi per muoverli contemporaneamente?
R: Utilizzare più canali dello stesso timer per emettere PWM per evitare conflitti di interruzione.
Molte persone finiscono di scrivere il codice e basta.
Ma uno sterzo è un dispositivo meccanico. Ha il suo carattere.
Suggerimenti scritti: Limiti fisici e tutela della sicurezza
In passato, ho progettato una serratura automatica in cui un servo ruotava di novanta gradi per spingere il catenaccio. A quel tempo, il programma è stato testato fino a un centinaio di volte e i risultati di ciascun test sono risultati normali. Tuttavia, il terzo giorno dopo l'installazione, la serratura si è bloccata.
Quando il servo continua a essere bloccato, la temperatura del chip del driver interno sale a 120 gradi.
Qual è la lezione?
Per ogni progetto di timoneria è necessario aggiungere la protezione dal timeout e il rilevamento della corrente. L'ADC STM32 può monitorare la corrente della scatola dello sterzo in tempo reale. Se la corrente supera la soglia e continua per 0,5 secondi, l'uscita PWM verrà interrotta immediatamente.
Questo non è un eccesso di ingegneria. Questo è lo spartiacque tra professionisti e dilettanti.
C'è anche un punto cieco: la posizione iniziale del servo.
Se il braccio robotico si trova in una posizione pericolosa quando è spento, l'STM32 emetterà il livello predefinito nel momento in cui viene acceso. Se questo livello risulta essere il ciclo di lavoro massimo, il servo sbatterà contro il limite.
Innanzitutto, la soluzione è configurare il pin di uscita del timer su uno stato ad alta impedenza prima di inizializzare il GPIO.In secondo luogo, la soluzione è aggiungere un segnale di abilitazione hardware e attendere che il sistema sia stabile prima di accendere il servo.。
La scheda tecnica non ti dirà questi dettagli.
La scheda di sviluppo STM32 che hai in mano può fare molto di più che semplicemente accendere i LED.
Permette al servo di disegnare cerchi, scrivere, afferrare oggetti e regolare le valvole.
Ma la premessa è che tu sia disposto a prenderti il tempo per comprendere l’origine di ciascun parametro.
Suggerimento di scrittura: il feedback a circuito chiuso è la soluzione definitiva
Se persegui davvero un'elevata precisione, rinuncia al controllo ad anello aperto.
Mi sono dedicato al progetto di un robot bionico e ho aggiunto il feedback del potenziometro a ciascun giunto. STM32 era responsabile della lettura del valore ADC, del confronto con l'angolo target e quindi dell'utilizzo dell'algoritmo PID per regolare il PWM. In questo modo, indipendentemente da come cambia il carico, la posizione è sempre precisa.
Il controllo a circuito aperto è come camminare con gli occhi bendati. Il controllo a circuito chiuso è come camminare con gli occhi aperti.
Quale scegli?
In questo momento, guarda indietro al laboratorio nel cuore della notte. La scatola dello sterzo non girava, non perché ci fosse un errore nel codice, ma perché nella mia conoscenza c'era un punto cieco che non avevo ancora completamente padroneggiato.
Ogni fallimento è un'esperienza di apprendimento.
Se vuoi utilizzare STM32 per controllare realmente il servo, ricorda questi passaggi:
Leggere attentamente la scheda tecnica del servo per confermare il periodo di modulazione dell'ampiezza dell'impulso e l'intervallo dell'ampiezza dell'impulso.
Utilizzare un oscilloscopio per verificare la forma d'onda emessa dall'STM32, non fidarsi del calcolo.
Alimentazione indipendente, terra comune, più resistenza di protezione.
Al software vengono aggiunte la mappatura dell'angolo e la protezione dal timeout.
Testare condizioni estreme: interruzione e riavvio dell'alimentazione, rotore bloccato, interferenza del segnale.
Suggerimenti per la scrittura: ripetere le idee chiave e agire di conseguenza
Il nocciolo della questione è uno solo: la precisione è nascosta nei documenti e la stabilità deriva dai test.
Controlla il tuo codice oggi per vedere se il valore del prescaler è calcolato correttamente, controlla se è messo a terra e controlla se lo stato del pin è sicuro al momento dell'accensione.
Riprogrammare.
Ascolta il suono dello sterzo che gira.
Non trema più.
Funziona per te.
Nel laboratorio, a tarda notte, le luci sono ancora accese.
Ma questa volta stai sorridendo.
Tempo di aggiornamento: 08-05-2026
Contatta lo specialista di prodotto Kpower per consigliare il motore o il riduttore adatto al tuo prodotto.