Sommario:
- Passaggio 1: elenco delle parti
- Passaggio 2: la soluzione ovvia
- Passaggio 3: timer a cascata per una risoluzione più elevata
Video: Generazione del segnale PWM ad alta risoluzione per servocomandi RC con dispositivi STM32: 3 passaggi
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:01
Attualmente sto costruendo un trasmettitore/ricevitore RC basato sul chip RF SX1280. Uno degli obiettivi del progetto è che voglio una risoluzione del servo a 12 bit dagli stick fino ai servo. In parte perché i moderni servi digitali hanno una risoluzione di 12 bit, in secondo luogo un trasmettitore di fascia alta utilizza comunque 12 bit. Stavo studiando come posso generare segnali PWM ad alta risoluzione su dispositivi STM32. Sto usando la pillola nera (STM32F103C8T8) al momento per il prototipo.
Passaggio 1: elenco delle parti
Hardware
- Qualsiasi scheda di sviluppo STM32F103 (pillola blu, pillola nera, ecc.)
- Un power bank USB come alimentatore
- Programmatore STM32 (Segger j-links, ST-LINK/V2, o semplicemente un clone di st-link)
Software
- STM32CubeMX
- Atollic TrueSTUDIO per STM32
- Fonte del progetto da github
Passaggio 2: la soluzione ovvia
Probabilmente la soluzione più semplice è utilizzare uno dei timer in grado di generare segnali PWM, come TIM1-3 su un STM32F103. Per un moderno servo digitale il frame rate può scendere a circa 5 ms, ma per un vecchio servo analogico dovrebbe essere di 20 ms o 50 Hz. Quindi, come scenario peggiore, generiamolo. Con un clock di 72 MHz e una risoluzione del contatore del timer a 16 bit, è necessario impostare il prescaler del timer su un minimo di 23 per coprire il frame rate di 20 ms. Ho selezionato 24 perché quindi per 20 ms ho bisogno di impostare il contatore esattamente su 60000. Puoi vedere l'impostazione CubeMX e i segnali PWM generati da 1 e 1,5 ms negli screenshot. Sfortunatamente, per 1 ms il contatore del timer dovrebbe essere impostato su 3000, il che ci darebbe solo una risoluzione di 11 bit. Non male, ma l'obiettivo era 12 bit, quindi proviamo qualcos'altro.
Ovviamente se scegliessi un micro controller con timer a 32 bit, come STM32L476 questa risoluzione può essere molto più alta e il problema sarebbe risolto.
Ma qui vorrei proporre una soluzione alternativa che aumenterà ulteriormente la risoluzione anche sull'STM32F103.
Passaggio 3: timer a cascata per una risoluzione più elevata
Il problema principale con la soluzione precedente è che il frame rate (20 ms) è relativamente alto rispetto al segnale PWM effettivamente generato (tra 1 e 2 ms), quindi stiamo sprecando alcuni bit di valore per i restanti 18 ms quando stiamo aspettando il fotogramma successivo. Questo può essere risolto collegando i timer a cascata utilizzando la funzione di collegamento timer per la sincronizzazione.
L'idea è che userò TIM1 come master per generare il frame rate (20 ms) e TIM2, TIM3 per far fronte ai segnali PWM come slave. Quando il master attiva gli slave, questi generano solo un segnale PWM in una modalità a impulsi. Quindi ho solo bisogno di coprire 2 ms in quei timer. Fortunatamente puoi mettere in cascata quei timer nell'hardware, quindi questa sincronizzazione non richiede alcun intervento da parte del processore ed è anche molto precisa, il jitter è nella regione di ps. Puoi vedere la configurazione di CubeMX negli screenshot.
Come puoi vedere ho selezionato 3 come prescalare, quindi per i 2 ms ho bisogno di impostare 48000 nel contatore del timer. Questo ci dà 24000 per 1 ms, che in realtà è più di quello di cui abbiamo bisogno per una risoluzione a 14 bit. Tadaaaa…
Si prega di dare un'occhiata agli screenshot dell'oscilloscopio nell'introduzione per il risultato finale. Il canale 3 (viola) è l'interrupt del timer principale che attiverà i salvataggi per generare un impulso. I canali 1 e 4 (raggio giallo e verde) sono i segnali PWM effettivi generati da diversi timer. Nota che sono sincronizzati ma sono sincronizzati ai bordi d'uscita, questo a causa della modalità PWM 2. Questo non è un problema, perché la frequenza PWM per il particolare servo è ancora corretta.
Altro vantaggio di questa soluzione è che cambiare il frame rate significherebbe cambiare il periodo solo in TIM1. Per i moderni servi digitali puoi scendere anche a 200-300 Hz, ma per favore consulta il manuale del servo se vuoi regolarlo.
Consigliato:
Esperimenti PWM del motore CC casuale + Risoluzione dei problemi dell'encoder: 4 passaggi
Esperimenti PWM del motore CC casuali + Risoluzione dei problemi dell'encoder: ci sono spesso momenti in cui la spazzatura di qualcuno è il tesoro di un altro, e questo è stato uno di quei momenti per me. Se mi stai seguendo, probabilmente sai che ho intrapreso un enorme progetto per creare la mia stampante 3D CNC da rottami. Quei pezzi erano
Contatore di frequenza ad alta risoluzione: 5 passaggi (con immagini)
Contatore di frequenza ad alta risoluzione: questo istruibile mostra un contatore di frequenza reciproco in grado di misurare le frequenze velocemente e con ragionevole precisione. È realizzato con componenti standard e può essere realizzato in un fine settimana (mi ci è voluto un po' di più :-))EDIT: Il codice è ora disponibile
Webcam ad alta risoluzione: 9 passaggi (con immagini)
Webcam ad alta risoluzione: per alcuni anni ho utilizzato una webcam basata su RPi (con il modulo PiCam). Le immagini prodotte andavano bene ma poi c'è stato il momento in cui non ero più soddisfatto della qualità. Ho deciso di realizzare una webcam ad alta risoluzione. Le seguenti parti c
OpenLogger: un registratore di dati portatile ad alta risoluzione, abilitato per il Wi-Fi, open source: 7 passaggi
OpenLogger: un data logger portatile ad alta risoluzione, abilitato Wi-Fi, open source: OpenLogger è un data logger portatile, open source, a basso costo e ad alta risoluzione progettato per fornire misurazioni di alta qualità senza richiedere software costosi o scrivere software da zero. Se sei un ingegnere, uno scienziato o un appassionato che ne
Amplificatore di alta qualità con alimentatore USB per dispositivi mobili (PAM8403): 3 passaggi
Amplificatore di alta qualità con alimentatore USB per dispositivo mobile (PAM8403): Abbiamo un problema: basso livello di altoparlanti per notebook! rumore degli altoparlanti del notebook! Non abbiamo alimentazione esterna! Questi problemi sono rilevanti per molti altri dispositivi mobili. Cosa possiamo fare? Idea! Possiamo fare un super amplificatore di altoparlanti con