Pagina 1 di 1

ADC con trigger esterno in STM32

MessaggioInviato: 17 ott 2022, 15:23
da Andrea96
Ciao a tutti,
ho un dubbio su come implementare una conversione analogica-digitale usando un ADC interno al microcontrollore STM32 (non ha importanza quale nello specifico). Vorrei che la conversione avvenisse dopo X tempo dal fronte di salita di un segnale onda quadra periodico fornito esternamente. Per esempio, il segnale esterno si presenta ogni secondo e dopo ogni fronte di salita voglio che passati 200ms sia effettuato un campionamento con l'ADC.
Ho pensato di utilizzare un timer in modalità Input Capture triggerato dal fronte di salita del segnale esterno, in modo che il timer conti X tempo prima di generare un interrupt dove richiamare la conversione ADC, però non so se sia possibile. Qualche idea? Sto usando la libreria HAL.

Re: ADC con trigger esterno in STM32

MessaggioInviato: 17 ott 2022, 16:07
da gvee
Ciao,
Andrea96 ha scritto:però non so se sia possibile

Io per il momento, salvo sviste, lo vedo fattibile.

La cosa migliore è sempre procurarsi una evaluation board (le ST sono proprio economiche) e fare le dovute prove.

O_/

Re: ADC con trigger esterno in STM32

MessaggioInviato: 17 ott 2022, 16:30
da Andrea96
Io per il momento, salvo sviste, lo vedo fattibile.


Lo pensavo anche io, però mi sono accorto che in modalità Input Capture, dopo aver impostato il periodo, il timer agisce come un qualunque timer. Cioè, non inizia a contare sul fronte del segnale esterno, ma conta ciclicamente. Di conseguenza la callBack che utilizzo per avviare l'ADC viene richiamata ciclicamente ogni X tempo, a prescindere dal segnale esterno.

La cosa migliore è sempre procurarsi una evaluation board (le ST sono proprio economiche) e fare le dovute prove.


Uso una nucleo board con microcontrollore stm32f446

Re: ADC con trigger esterno in STM32

MessaggioInviato: 17 ott 2022, 16:36
da Andrea96
Un'altra idea potrebbe essere quella di usare un timer normale azionato da un interrupt da GPIO (porta collegata al segnale esterno), dunque nella routine di interrupt potrei avviare il timer che conta X tempo, dunque nella routine di interrupt del timer (che avviene allo scadere del conteggio) fermo il timer (per evitare che ripeti il conteggio) e avvio l'ADC. Questa potrebbe essere un'altra soluzione, però mi piacerebbe sapere se c'è modo di farlo in Input Capture, senza scomodare gli interrupt da GPIO.

Re: ADC con trigger esterno in STM32

MessaggioInviato: 17 ott 2022, 17:04
da lelerelele
Da quel che ricordo, il timer può essere inizializzato con GATE esterno, quindi conta solo in presenza di questo gate, raggiunto il trigger, lo riporti al valore dovuto per il nuovo conteggio

Per controllare ADC, credo so possa fare direttamente da hardware, prova a leggere qua, ma ci sono numerosi link sul web come "adc-timer-tirggering". Se non hai problemi di brevisisiimi ritardi, puoi sempre controllare ADC con interrupt.

Di solito, in fondo al manuale "reference" del tuo micro, ci sono le funzioni di controllo per il gate esterno del timer ed anche quelle di controllo dell'adc.

saluti.

Re: ADC con trigger esterno in STM32

MessaggioInviato: 17 ott 2022, 17:27
da EcoTan
Penso che ci vogliano due interrupt, il segnale esterno fa partire un timer e poi lo stesso timer fa partire lo ADC. Non otterrai una temporizzazione esattissima, se qualcuno trova un rimedio resto in ascolto.
PostScriptum input capture serve per copiare in un registro il contenuto del timer appena arriva il segnale esterno.

Re: ADC con trigger esterno in STM32

MessaggioInviato: 17 ott 2022, 23:16
da gvee
Andrea96 ha scritto:Un'altra idea potrebbe essere quella di usare un timer normale azionato da un interrupt da GPIO (...)

Se hai bisogno di agire solo su un fronte allora questa è molto probabilmente la soluzione più veloce.
Avrai un piccolo ritardo addizionale dovuto all'esecuzione dell'istruzione per attivare il timer ed avviare l'ADC, che comunque puoi ovviare in qualche giocando con l'intervallo del timer...

Altra possible soluzione è usare il DMA in double buffered mode e giocare con i threshold della FIFO in base al ritardo richiesto. Si tratterebbe solo di contare le interrupt necessarie per poi processare quello che devi dei dati acquisiti con l'ADC. È una idea che mi è venuta adesso mentre scrivevo..

O_/

Re: ADC con trigger esterno in STM32

MessaggioInviato: 18 ott 2022, 4:51
da luxinterior
Se i dati che hai fornito come esempio sono quelli effettivi puoi risolvere in modo moooooolto semplice
Se i 200ms sono indicativi e non tassativi potrebbero essere 205ms oppure 210ms io farei le cose senza scomodare interrupt
Non voglio aggiungere cose inutili meglio prima sapere come vanno considerati quei tempi