Pubblicato 2026-03-10
Lo vedo durante ilservoprocesso di debug, ti capita spesso di avere mal di testa riguardo al valore PWM corrispondente a quell'angolo? L'angolo è stato calcolato accuratamente, ma il motore non può ruotare nella posizione specificata o continua a tremare. In effetti, dietro a tutto ciò c’è una semplice formula matematica. Una volta compreso, puoi controllare accuratamente ogni grado delservo.
Per dirla senza mezzi termini, la funzione delservoLa formula di calcolo PWM serve per aiutarti a stabilire una corrispondenza uno a uno tra "angolo" e "larghezza dell'impulso".
Il segnale di servocomando comunemente utilizzato è PWM a 50 Hz con un periodo di 20 ms. All'interno di questo intervallo di periodi, la larghezza del livello alto è generalmente compresa tra 0,5 ms e 2,5 ms e l'intervallo dell'angolo corrispondente a questo intervallo di larghezza è compreso tra 0° e 180°.
La formula di calcolo può essere scritta come:larghezza dell'impulso target = larghezza dell'impulso minima + (angolo/180°) × (larghezza dell'impulso massima - larghezza dell'impulso minima). Questa formula mostra chiaramente come calcolare l'ampiezza dell'impulso target in base a parametri specifici. Ad esempio, nel contesto del servocontrollo, se il tuo servo 0° corrisponde a 0,5 ms e 180° corrisponde a 2,5 ms, calcola la posizione di 90° tramite questa formula e il risultato sarà 1,5 ms. Questo processo di calcolo è di grande importanza nella corrispondenza tra l'angolo dello sterzo e l'ampiezza dell'impulso e può determinare con precisione il valore dell'ampiezza dell'impulso richiesto dallo sterzo a diversi angoli.
Conoscere l'ampiezza dell'impulso non è sufficiente, perché solitamente il registro del duty cycle deve essere configurato nel microcontrollore. Ciclo di lavoro = larghezza dell'impulso target/20 ms. Ad esempio, se è necessaria una larghezza di impulso di 1,5 ms, il ciclo di lavoro è 1,5/20 = 0,075, ovvero 7,5%.
Implementato specificatamente nel codice, ad esempio, se si sceglie STM32 e si desidera impostare il valore di ricarica automatica su 2000 (questo valore rappresenta 20 ms), il valore di confronto deve essere impostato su 150 (questo valore rappresenta 1,5 ms). Questo processo converte effettivamente il rapporto temporale in un valore di registro per garantire che l'hardware possa emettere una forma d'onda accurata.
Nell'operazione di codice effettiva, prendendo STM32 come esempio, quando si imposta il valore di ricarica automatica su 2000 (che rappresenta 20 ms), il valore di confronto deve essere impostato su 150 (che rappresenta 1,5 ms). Questo processo di conversione delle proporzioni temporali in valori di registro svolge un ruolo chiave nel garantire che l'hardware generi forme d'onda accurate.
Questa è molto probabilmente la trappola più facile in cui cadere. Marche e modelli diversi di servi, o anche servi dello stesso modello ma lotti diversi, hanno gamme PWM diverse. Il valore PWM corrispondente di alcuni servi quando nello stato 0° è 0,5 ms, mentre altri sono 0,6 ms; quando nello stato di 180°, il valore PWM corrispondente di alcuni servi può essere 2,5 ms, mentre altri possono essere 2,4 ms.
Pertanto, quando si utilizza il servo, assicurarsi di comprendere in anticipo il suo intervallo PWM specifico, altrimenti è facile causare vari problemi dovuti alla mancata corrispondenza dei parametri, influenzando il normale utilizzo del servo e il funzionamento delle apparecchiature correlate.
Il modo più sicuro è controllare la scheda tecnica ufficiale del servo. Se non riesci a trovare il manuale, ti consigliamo di misurarlo tu stesso: prima aumenta lentamente l'ampiezza dell'impulso per trovare il valore minimo al quale il servo inizia a ruotare, quindi trova il valore massimo al quale il servo smette di ruotare. Sostituire questi due valori ottenuti attraverso misurazioni effettive nella formula, in modo che il servo possa puntare con precisione alla posizione target ed evitare che il motore venga danneggiato a causa di uno stress eccessivo.
La conseguenza più diretta di calcoli imprecisi è la "non linearità". Ad esempio, quando ci si aspetta che il servo ruoti di 45°, la situazione reale è che ruota solo di 40°. La cosa più grave è che una volta che l'ampiezza dell'impulso supera l'intervallo consentito dal servo, ad esempio, se viene fornita un'ampiezza dell'impulso di 2,6 ms, il limitatore all'interno del servo verrà bloccato, causando il sovraccarico del servo, la generazione di calore e persino la bruciatura del chip del driver.
D'altra parte, se l'intervallo di larghezza dell'impulso è troppo stretto, ad esempio, viene utilizzato solo da 1 ms a 2 ms, l'intervallo di rotazione effettivo del servo potrebbe essere solo di 120°, il che spreca le sue prestazioni meccaniche. Pertanto, i due valori finali nella formula devono corrispondere accuratamente ai limiti fisici dello sterzo.
Quando scriviamo il codice, solitamente incapsuliamo la formula in una funzione. L'input è l'angolo desiderato e l'output è il valore di confronto del timer. I passaggi sono semplici:
1. Innanzitutto definire due costanti:E, corrispondente alle larghezze di impulso misurate di 0° e 180°.
2. Quindi utilizzare la formula:= + (angolo / 180,0) * ( - ) .
3. Non dimenticare di convertire il risultato in virgola mobile in un numero intero e assegnarlo direttamente al registro di confronto acquisizione del timer.
In questo modo, ogni volta che viene richiamata la funzione, il servo può ruotare dolcemente in qualsiasi angolazione desiderata.
Se stai lavorando su un braccio robotico o su un progetto di tracciamento visivo che richiede un'elevata precisione, potresti prendere in considerazione l'introduzione del controllo a circuito chiuso. La formula ad anello aperto di cui sopra può solo garantire "quanta ampiezza di impulso viene data, quanto angolo di rotazione", ma se il servo viene bloccato a causa della forza, la posizione andrà persa.
A questo punto, è possibile aggiungere un potenziometro o un encoder all'albero di uscita del servo per leggere l'angolo effettivo in tempo reale, quindi utilizzare l'algoritmo PID per regolare dinamicamente il valore PWM. In questo modo, anche in presenza di interferenze esterne, il sistema può riportare automaticamente la scatola dello sterzo nella posizione target, ottenendo un controllo davvero preciso.
Mi chiedo se nei progetti reali hai mai riscontrato una situazione in cui il range di oscillazione di entrambi i lati dell'intero meccanismo è asimmetrico a causa del valore mediano del servo impreciso (90°). Benvenuto per parlare della tua esperienza di debug nell'area commenti. Se lo trovi utile, non dimenticare di mettere mi piace e condividerlo con più amici.
Tempo di aggiornamento: 2026-03-10
Contatta lo specialista di prodotto Kpower per consigliare il motore o il riduttore adatto al tuo prodotto.