Pubblicato 2026-03-29
Quando ci si impegna nell'innovazione del prodotto, il timore più grande è che, se il chip di controllo principale viene sostituito, quello originariamente ben regolatoservosmetterà di girare. Molti amici hanno ricevuto una nuova scheda di sviluppo STM32 e volevano spostarlaservooriginariamente utilizzato su altre schede, ma ha riscontrato che non rispondeva o tremava violentemente. In effetti, purché si chiariscano alcuni punti chiave del trapianto, non è affatto complicato. Oggi parleremo di come "spostare" senza problemi ilservoprogramma tra diversi modelli STM32.
Il nucleo del servocontrollo è quello di emettere un'onda PWM con un periodo di circa 20 ms e un tempo di alto livello compreso tra 0,5 ms e 2,5 ms. Pertanto, il primo passo nella migrazione del codice è trovare i timer e i canali sulla nuova scheda in grado di generare PWM. Il tuo programma originale utilizzava CH1 di TIM2, ma ora potresti doverlo cambiare in CH2 di TIM3. Tale corrispondenza dovrà essere confermata chiaramente nella scheda tecnica del chip. Il cambiamento è in realtà solo una questione di pochi parametri. Una volta modificati il numero del timer e il numero del canale, è possibile utilizzare la maggior parte del codice.
Dopo aver modificato la configurazione del timer, non dimenticare di controllare la frequenza dell'orologio. Diversi modelli di STM32 possono avere sorgenti di clock diverse per l'orologio e il timer del sistema. Ad esempio, la frequenza principale originale di 72 MHz utilizzata nella serie F1 potrebbe diventare 48 MHz quando si passa alla serie F0. A questo punto, è necessario ricalcolare il coefficiente di divisione della frequenza PWM e ricaricare il valore per garantire che il periodo PWM di uscita finale sia ancora di 20 ms. In parole povere, i due parametri ARR e PSC vengono ricalcolati in base all'orologio del nuovo chip per garantire che il servo possa ricevere i segnali che riconosce.
Quando selezioni i pin, non limitarti a trovare un GPIO e collegarlo. Dovresti prima cercare quei pin con la funzione "", che sono pin di uscita PWM hardware. Il vantaggio dell'utilizzo del PWM hardware è che non occupa risorse della CPU, l'uscita dell'impulso è molto stabile e il servo ruota senza intoppi. Se devi utilizzare un normale GPIO per simulare tramite la funzione di ritardo, la CPU si esaurirà e se il programma diventa leggermente più complicato, i tempi verranno facilmente sbagliati e il servo tremerà sicuramente.
Dopo aver selezionato il pin, nella parte di inizializzazione del programma, è necessario impostare la modalità di funzionamento GPIO sull'uscita push-pull multiplexata. È come assegnare responsabilità lavorative a questo pin e dirgli "sei responsabile dell'emissione del segnale PWM". Inoltre, se la scheda originale ha una resistenza di pull-up ma quella nuova no, è necessario considerare se abilitare il pull-up interno nel codice per garantire che il pin abbia un certo stato di livello quando è inattivo per evitare interferenze di segnale.
Molte persone hanno mal di testa quando calcolano la frequenza. In effetti, esiste un modo semplice. Il ciclo PWM richiesto dal servo è di 50 Hz, ovvero un ciclo di 20 ms. Indipendentemente dal timer utilizzato, l'obiettivo è portare la frequenza a 50 Hz. La formula di calcolo è semplice: frequenza di uscita del timer = orologio di sistema / (PSC+1) / (ARR+1). Per prima cosa imposti il PSC su un numero conveniente, come 7200-1, quindi inverti il valore ARR in modo che il risultato finale sia vicino a 50Hz.
Ad esempio, se l'orologio di sistema è 72 MHz e si imposta PSC su 7200-1, la frequenza di conteggio del timer diventa 10 kHz. Per fare in modo che la frequenza di uscita raggiunga 50 Hz, ARR deve essere impostato su 200-1, in modo che vengano contati ogni 200 numeri, ovvero 20 ms. Chip diversi hanno frequenze principali diverse, quindi è possibile calcolare in base a questa idea per garantire che l'ARR e il PSC calcolati finali siano entrambi numeri interi e che l'ARR non superi il valore di conteggio massimo del timer, in modo che il programma venga eseguito senza problemi.
Se vuoi che una scheda controlli più servi contemporaneamente, dipende da quanti canali ha il timer. Un timer di solito ha 4 canali, ciascun canale può emettere in modo indipendente un PWM e la frequenza è condivisa. Pertanto, finché i tuoi servi funzionano tutti a 50 Hz, puoi utilizzare un timer per pilotare 4 servi, il che può far risparmiare molte risorse del timer. È sufficiente configurare diversi canali durante l'inizializzazione e impostare rispettivamente i relativi valori di confronto.
Se è necessario controllare più di 4 servi, è necessario abilitare un secondo timer. Durante il trapianto, puoi scrivere il codice di inizializzazione per controllare un singolo servo come funzione, chiamarlo tutte le volte che desideri controllare e passare il numero del timer e il numero del canale come parametri. In questo modo, il codice è altamente riutilizzabile e sarà facile mantenerlo, indipendentemente dal numero di servi aggiunti in futuro. Ricorda, il registro di confronto di ciascun canale è indipendente e puoi utilizzarlo separatamente quando imposti il ciclo di lavoro.
Il programma è masterizzato, ma il servo non risponde? Non preoccuparti, inizia con l'hardware più semplice. Utilizzare un multimetro per verificare se l'alimentazione e la terra del servo sono collegate correttamente. Il servo ha requisiti di corrente elevati, quindi è necessario utilizzare un alimentatore esterno. Non aspettarti che i 3,3 V sulla scheda di sviluppo siano in grado di accendersi. Se non ci sono problemi con l'alimentazione, utilizzare un oscilloscopio o un analizzatore logico per vedere se è presente una forma d'onda di uscita sui pin del chip e verificare se il periodo e l'ampiezza dell'impulso sono corretti.
Se la forma d'onda è corretta ma il servo continua a non girare, potrebbe esserci un problema con la logica del codice. È possibile scrivere prima il programma di test più semplice ed emettere un livello alto fisso di 1,5 ms per riportare il servo nella posizione centrale. Se è possibile attivarlo, significa che non c'è alcun problema con il driver sottostante e il problema risiede nella logica di controllo. Aggiungi gradualmente funzioni, modificale un po' alla volta e utilizza il metodo di eliminazione per individuare rapidamente il problema, che è molto più veloce che indovinare da solo.
Ora che il trapianto di base è terminato, possiamo applicare alcuni trucchi. Ad esempio, se si desidera che il servo ruoti secondo un angolo specifico, è possibile scrivere una funzione di conversione dell'angolo per mappare da 0 a 180 gradi su un valore di larghezza dell'impulso compreso tra 0,5 ms e 2,5 ms. In questo modo, non è necessario ricordare quei complicati valori temporali. Puoi chiamare direttamente la funzione e passare l'angolo. La leggibilità e la portabilità del codice saranno notevolmente migliorate e gli altri lo capiranno a colpo d'occhio.
Per fare un altro esempio, è anche possibile aggiungere un filtraggio software per evitare cambiamenti improvvisi nel segnale di controllo che facciano "tremare" il servo. Nei progetti reali, i dati restituiti dal sensore presenteranno inevitabilmente jitter. Se aggiungi un semplice filtro a media mobile al programma e poi lo invii al servo, il movimento sarà molto più fluido. Incapsula queste funzioni estese in moduli indipendenti. La prossima volta, quando verranno trasferiti ad altri progetti, questi "accumuli" potranno essere utilizzati direttamente e l'efficienza dello sviluppo sarà raddoppiata.
Dove è bloccato il tuo progetto di servotrapianto? È perché la configurazione dei pin non è chiara o il calcolo della frequenza è sempre sbagliato? Ti invitiamo a lasciare un messaggio nell'area commenti per parlare della tua esperienza. Se ritieni che questo articolo ti sia utile, ricordati di mettere mi piace e salvarlo. Puoi anche cercare nel sito Web ufficiale della nostra azienda casi più pratici e modelli di codici!
Tempo di aggiornamento: 29-03-2026
Contatta lo specialista di prodotto Kpower per consigliare il motore o il riduttore adatto al tuo prodotto.