Pubblicato 2026-02-13
Hai mai riscontrato questa situazione: hai unservocon grande gioia e volevi farlo muovere, ma di conseguenza hai scritto molto codice e ilservoo non si è mosso o ha tremato come in preda a una convulsione? Non preoccuparti, probabilmente è perché non capisco la PWM (Modulazione della larghezza dell'impulso). In poche parole, il PWM è come un "segnale" specifico inviato allo sterzo. Modificando l'ampiezza dell'impulso, gli viene detto di "girare a questo angolo" o "girare a quell'angolo". In questo articolo comprenderemo a fondo questo "segnale segreto" e renderemo obbediente il tuo timone.
Se si desidera che il servo ruoti ad un angolo specificato, il core deve inviargli un segnale PWM con un periodo di 20 millisecondi (ms), quindi regolare la durata del livello alto, che è l'ampiezza dell'impulso. Generalmente un impulso di 1ms corrisponde a -90°, 1,5ms corrisponde a 0° e 2ms corrisponde a +90°.
Nel codice non è necessario contare manualmente queste decine di microsecondi. La maggior parte delle schede di sviluppo (come) hanno funzioni di libreria già pronte. Ad esempio, utilizzando ilServo.hlibreria, devi solo farlo.scrivi(90)e calcolerà automaticamente la larghezza dell'impulso corrispondente e continuerà a emettere il segnale e il servo ruoterà costantemente a 90°.
Il jitter è sicuramente la cosa più fastidiosa per i neofiti. La ragione più probabile è che la corrente fornita al servo non è sufficiente. Il servo richiede una corrente relativamente grande durante la rotazione. Se si utilizza direttamente il pin da 5 V sulla scheda di sviluppo per alimentarla, la tensione diventerà facilmente instabile, con conseguente confusione del segnale e il servo inizierà a contrarsi. A questo punto, preparare un'alimentazione esterna separata per il servo, ad esempio diverse batterie, e collegare il filo di terra dell'alimentatore al filo di terra della scheda di sviluppo e il problema potrà essere sostanzialmente risolto.
Un'altra causa comune è l'interferenza sulla linea del segnale. Se la linea di collegamento è molto lunga o nelle vicinanze sono presenti apparecchiature elettriche potenti come motori e trasformatori, i segnali di interferenza si mescoleranno. La soluzione è utilizzare linee DuPont più corte possibile o tenere le linee dei segnali del servo lontano da fonti di interferenza.
Esistono tre parametri PWM più rilevanti per le prestazioni del servo: frequenza, ciclo di lavoro e risoluzione. La frequenza PWM richiesta dal servo è fissa a 50 Hz, ovvero un periodo di 20 ms, e non può essere modificata in modo casuale.
Il ciclo di lavoro è la proporzione del tempo di alto livello rispetto all'intero ciclo. Ad esempio, a un livello elevato di 2 ms, il ciclo di lavoro è del 10%. Regoliamo l'angolo del servo modificando questo rapporto. La risoluzione si riferisce a quante parti il vostro pannello di controllo può suddividere in un ciclo. Ad esempio, la risoluzione a 8 bit è divisa in 256 parti. Maggiore è la risoluzione, più fluida e precisa sarà la rotazione del servo, senza la sensazione di saltare da un fotogramma all'altro.
Quando inizi a scrivere codice per la prima volta, l'errore più comune che commetti è dimenticare di inizializzare. Ho solo scritto.(9), ma ho dimenticato di scriverloimpostare()funzione, oppure il numero del pin è stato scritto in modo errato e ovviamente il servo non ha risposto. Ricordati di controllare il tuo codice per assicurarti che l'oggetto servo sia collegato correttamente al pin a cui lo hai effettivamente collegato.
Un’altra trappola riguarda la funzione tempo. Se vuoi realizzare "prima gira di 90°, aspetta 2 secondi e poi gira di 0°", non usare moltoritardo()Inperloop per ottenere una rotazione lenta, altrimenti l'intero programma verrà bloccato. L'approccio corretto è utilizzare il file()funzione per la temporizzazione o l'uso.scrivere()con un metodo non bloccante per aumentare gradualmente il valore dell'angolo, in modo che il servo possa gestire altre attività effettuando una transizione graduale.
Quando devi realizzare un braccio per un robot e controllare più servi contemporaneamente, va bene semplicemente collegare i pin uno per uno, ma occuperà molte risorse pin e il codice sarà molto complicato da scrivere. Un'opzione migliore è utilizzare una scheda servoazionamento, come questa.
Può controllare fino a 16 servi attraverso due linee di segnale (protocollo I2C) e gli impulsi di ciascun canale possono essere regolati in modo indipendente. Nel codice, devi solo chiamare la funzione di libreria corrispondente, comeppm.(0, 0, 300), per controllare il servo sul canale 0. In questo modo, la scheda di controllo principale è libera, la struttura del codice è molto più chiara ed è facile controllare dozzine di servi.
Una volta scritto il codice, come fai a sapere rapidamente se è corretto? La cosa più semplice è scrivere un programma "sweeping leg": girare lentamente il servo da 0° a 180°, e poi indietro, e il ciclo continua. Se non si verificano ritardi o jitter durante la rotazione e l'intervallo dell'angolo è accurato, significa che la connessione hardware di base e la logica del codice funzionano sostanzialmente bene.
️ I passaggi specifici sono molto semplici:
1. Dentroimpostare(), collegare il servo al pin specificato.
2. Dentrociclo continuo(), utilizzare prima aperloop per aumentare l'angolo da 0 a 180, aumentando di 1 grado ogni volta e aggiungendo un piccolo ritardo.
3. Usane un altroperloop per ridurre l'angolo da 180 a 0 e aggiungere anche un ritardo.
Guardare il servo oscillare avanti e indietro dolcemente con i tuoi occhi ti dà un senso di realizzazione molto maggiore rispetto a fissarlo direttamente in un angolo, e ti aiuta anche a comprendere l'essenza del controllo PWM.
Vedendo questo, dovresti avere una buona idea di come usare PWM per controllare il servo. Sbrigati e provalo. Se nel tuo progetto viene utilizzato un servo, pensi che il problema più grande sia il problema dell'alimentazione o la codifica del controllo multicanale? Benvenuto per condividere le tue opinioni nell'area commenti e non dimenticare di mettere un mi piace e condividere queste informazioni utili con più amici che ne hanno bisogno!
Tempo di aggiornamento: 2026-02-13
Contatta lo specialista di prodotto Kpower per consigliare il motore o il riduttore adatto al tuo prodotto.