Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

ADC con trigger esterno in STM32

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[1] ADC con trigger esterno in STM32

Messaggioda Foto UtenteAndrea96 » 17 ott 2022, 15:23

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.
Avatar utente
Foto UtenteAndrea96
150 1 6
Frequentatore
Frequentatore
 
Messaggi: 133
Iscritto il: 28 gen 2021, 8:49

0
voti

[2] Re: ADC con trigger esterno in STM32

Messaggioda Foto Utentegvee » 17 ott 2022, 16:07

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_/
Avatar utente
Foto Utentegvee
1.055 2 7
Stabilizzato
Stabilizzato
 
Messaggi: 375
Iscritto il: 11 feb 2018, 20:34

0
voti

[3] Re: ADC con trigger esterno in STM32

Messaggioda Foto UtenteAndrea96 » 17 ott 2022, 16:30

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
Avatar utente
Foto UtenteAndrea96
150 1 6
Frequentatore
Frequentatore
 
Messaggi: 133
Iscritto il: 28 gen 2021, 8:49

0
voti

[4] Re: ADC con trigger esterno in STM32

Messaggioda Foto UtenteAndrea96 » 17 ott 2022, 16:36

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.
Avatar utente
Foto UtenteAndrea96
150 1 6
Frequentatore
Frequentatore
 
Messaggi: 133
Iscritto il: 28 gen 2021, 8:49

1
voti

[5] Re: ADC con trigger esterno in STM32

Messaggioda Foto Utentelelerelele » 17 ott 2022, 17:04

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.
Avatar utente
Foto Utentelelerelele
3.877 3 7 9
Master
Master
 
Messaggi: 4535
Iscritto il: 8 giu 2011, 8:57
Località: Reggio Emilia

0
voti

[6] Re: ADC con trigger esterno in STM32

Messaggioda Foto UtenteEcoTan » 17 ott 2022, 17:27

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.
Avatar utente
Foto UtenteEcoTan
7.129 4 11 13
Expert EY
Expert EY
 
Messaggi: 4941
Iscritto il: 29 gen 2014, 8:54

0
voti

[7] Re: ADC con trigger esterno in STM32

Messaggioda Foto Utentegvee » 17 ott 2022, 23:16

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_/
Avatar utente
Foto Utentegvee
1.055 2 7
Stabilizzato
Stabilizzato
 
Messaggi: 375
Iscritto il: 11 feb 2018, 20:34

0
voti

[8] Re: ADC con trigger esterno in STM32

Messaggioda Foto Utenteluxinterior » 18 ott 2022, 4:51

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
Avatar utente
Foto Utenteluxinterior
3.779 3 4 9
Master
Master
 
Messaggi: 2400
Iscritto il: 6 gen 2016, 17:48


Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 6 ospiti