Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

[STM32] Modulo Capture, per campionare un fronte d'onda

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[1] [STM32] Modulo Capture, per campionare un fronte d'onda

Messaggioda Foto Utenteharpefalcata » 3 gen 2021, 15:58

Buonasera a tutti,

Ho un microcontrollore: STM32F103. Con questo vorrei campionare un fronte d'onda, del quale devo sapere quanto dura. In particolare un dispositivo connesso al pin del timer mi genera, dopo un impulso di reset, un "echo response" che deve durare 60 microsecondi, e deve essere di tipo low, perché il canale di comunicazione è in pull-up alla tensione di alimentazione.

La mia domanda è questa: il modulo "capture" associato al timer stesso, è in grado di campionare il solo fronte d'onda negativo in arrivo sul psuo pin associato?

Mi viene questo dubbio, perché, leggendo il datasheet, io posso selezionare la polarita del fronte d'onda entrante, ma non ho capito se il conteggio del modulo capture viene arrestato, quando rileva un secondo fronte d'onda della medesima polarità, oppure se si arresta, quando rileva una variazione del fronte d'onda, quindi anche di diversa polarità, rispetto a quello entrante.

In alternativa ho pensato di poter usare due moduli del timer (ogni timer ha quattro distinti moduli da poter usare), uno dei due moduli lo sincronizzo sul fronte d'onda negativa, ed avvia il conteggio quando rileva l'abbassamento dell'onda, e poi, quando l'onda si alza, tornando positiva, dovrebbe entrare in funzione il secondo modulo, che ho configurato per rilevare questo fronte positivo e, almeno nelle mie intenzioni, ma non ho capito se è cosi che funzioni, dovrebbe semplicemente arrestare il conteggio precedentemente avviato dal precedente modulo, che lo ha avviato sul fronte negativo.

Oppure il secondo modulo, semplicemente avvierebbe un secondo modulo diverso dal primo e quindi il primo continuerebbe a contare ignorando il fronte?

Non sono sicuro di essermi spiegato, ma spero che il mio problema sia chiaro, e spero che ci sia qualcuno qui che usa il modulo "capture" del timer, per cronometrare il solo fronte negativo dell'onda.

Grazie mille a tutti.
Avatar utente
Foto Utenteharpefalcata
306 1 3 6
Stabilizzato
Stabilizzato
 
Messaggi: 376
Iscritto il: 28 lug 2015, 21:03

0
voti

[2] Re: [STM32] Modulo Capture, per campionare un fronte d'onda

Messaggioda Foto UtenteEcoTan » 3 gen 2021, 16:09

harpefalcata ha scritto:se il conteggio del modulo capture viene arrestato, quando rileva

Il modulo capture non arresta il timer (o contatore) ma ne copia in un registro il valore corrente quando si verifica il capture event prescelto. Il timer poi si azzera quando raggiunge il proprio periodo e può anche venire sovrascritto dal programma.
Avatar utente
Foto UtenteEcoTan
5.934 4 10 13
Expert EY
Expert EY
 
Messaggi: 3848
Iscritto il: 29 gen 2014, 8:54

0
voti

[3] Re: [STM32] Modulo Capture, per campionare un fronte d'onda

Messaggioda Foto UtenteWALTERmwp » 3 gen 2021, 19:11

harpefalcata ha scritto:(...) vorrei campionare un fronte d'onda, del quale devo sapere quanto dura (...)
i livelli logici sono una cosa, i livelli di tensione, tra 0 e 3.3 o 5.0 sono più di due.
Come stabilisci quando è iniziata la discesa o la salita ?

Saluti
W - U.H.F.
Avatar utente
Foto UtenteWALTERmwp
23,8k 4 8 13
G.Master EY
G.Master EY
 
Messaggi: 7097
Iscritto il: 17 lug 2010, 18:42
Località: le 4 del mattino

0
voti

[4] Re: [STM32] Modulo Capture, per campionare un fronte d'onda

Messaggioda Foto Utentestefanopc » 3 gen 2021, 22:55

La tuo quesito non è chiarissimo
Il manuale del costruttore è veramente poco esaustivo specialmente il paragrafo relativo ai counter.
Ti allego questo pdf trovato in internet che mi ha un po' chiarito il tutto.
Ciao
Allegati
Timer-tcnt1-3.pdf
(203.99 KiB) Scaricato 10 volte
600 Elettra
Avatar utente
Foto Utentestefanopc
2.320 1 3 12
Expert EY
Expert EY
 
Messaggi: 699
Iscritto il: 4 ago 2020, 9:11

0
voti

[5] Re: [STM32] Modulo Capture, per campionare un fronte d'onda

Messaggioda Foto Utenteharpefalcata » 4 gen 2021, 10:30

WALTERmwp ha scritto: i livelli logici sono una cosa, i livelli di tensione, tra 0 e 3.3 o 5.0 sono più di due.
Come stabilisci quando è iniziata la discesa o la salita ?

Saluti


Non capisco a cosa faccia riferimento il tuo messaggio. Non ho mai menzionato le tensioni. Ho sempre fatto riferimento a livelli logici.

Sono interessato al principio di funzionamento del modulo "capture" in particolare, e di come si comporta rispetto al timer.

Credo che @EcoTan mi abbia chiarito questo dubbio.

Credo che avessi questo dubbio perche in controller di altra marca lo stesso modulo arrestava il counter, se non mi ricordo male, comunque credo di aver risolto.

Uso due moduli, il primo acquisisce la lettura al fronte basso, il secondo al fronte alto, poi faccio la differenza fra i due campioni ed ottengo la durata del fronte.

Saluti
Avatar utente
Foto Utenteharpefalcata
306 1 3 6
Stabilizzato
Stabilizzato
 
Messaggi: 376
Iscritto il: 28 lug 2015, 21:03

0
voti

[6] Re: [STM32] Modulo Capture, per campionare un fronte d'onda

Messaggioda Foto UtenteWALTERmwp » 4 gen 2021, 14:39

harpefalcata ha scritto:(...) Ho sempre fatto riferimento a livelli logici (...)
dove ?
Potrei essere io a fraintendere, ma a mio parere hai lasciato spazio a più interpretazioni.
La mia osservazione assume che il livello di una tensione varia in un tempo finito passando da un limite all'altro, limiti che non coincidono con gli stati logici, caratterizzati da una tolleranza.
Se sono questi che ti interessano allora è tutto più semplice.

Saluti
W - U.H.F.
Avatar utente
Foto UtenteWALTERmwp
23,8k 4 8 13
G.Master EY
G.Master EY
 
Messaggi: 7097
Iscritto il: 17 lug 2010, 18:42
Località: le 4 del mattino

0
voti

[7] Re: [STM32] Modulo Capture, per campionare un fronte d'onda

Messaggioda Foto Utentelelerelele » 4 gen 2021, 15:29

Sono abbastanza acerbo con i micro, specie gli STM32.

Sto cercando di usare un STM32F0, il mio scopo è misurare un tempo che intercorre dalla lettura di N° impulsi di un onda quadra all'ingresso, in altre parole, quanto tempo necessito per contare 300 impulsi dell'onda quadra.

Pensavo di usare il modulo compare, in quanto raggiunto il limite di 300 impulsi, la comparazione con l'onda di entrata mi da un interrupt, questo usa l'ingresso TIM1_EGR. Non sono sicuro da avere capito, questo ingresso genera il conteggio del timer, quindi il timer incrementa ad ogni fronte?

Ho realizzato anche la scheda, con la predisposizione della lettura sul pin "External clock source mode 1", in questa modalità, se imposto il timer in conteggio down, con autoreload, dovrei avere lo stesso funzionamento, dopo N° impulsi ho un interrupt. No?

Non vedo quali siano le differenze dei due tipi!

Altro dubbio, se imposto il TIM1 con l' UPDATE_EVENT, riesco con questo ad avviare/stoppare un altro timer, mi pare, sbaglio?
Avatar utente
Foto Utentelelerelele
2.622 3 7 9
Expert EY
Expert EY
 
Messaggi: 2995
Iscritto il: 8 giu 2011, 8:57
Località: Reggio Emilia

0
voti

[8] Re: [STM32] Modulo Capture, per campionare un fronte d'onda

Messaggioda Foto Utenteharpefalcata » 4 gen 2021, 20:08

Per lelerelele, se ho ben capito ik tuo problema, credo tu lo possa risolvere semplicemente, impostando il prescaler del filtro d'ingresso a 300.

Otterresti un segnale T1 polarizzato secondo il fronte d'onda che ti interessa, e filtrato con un prescaler a 300.

In questo modo otterresti unnsegnale che ti copia sul CCP2 il 300esimo fronte, e su CCP1 il segnale d'avvio.

Ti basterà sottrarre CCP2-CCP1 e saprai quanto durano.
Avatar utente
Foto Utenteharpefalcata
306 1 3 6
Stabilizzato
Stabilizzato
 
Messaggi: 376
Iscritto il: 28 lug 2015, 21:03

0
voti

[9] Re: [STM32] Modulo Capture, per campionare un fronte d'onda

Messaggioda Foto Utentelelerelele » 5 gen 2021, 16:36

Sai Foto Utenteharpefalcata, non avevo pensato ad una soluzione come questa.

impostando la lettura del timer1, ingresso in MODE1 ?

Dovrei avere il prescaler a 300, timer1 canale1 , usando lo stesso sengnale su timer2, andare a fare la differenza dei due contatori, ho il tempo.

Però, per avere il tempo, dovrei avere il valore della frequenza?
Mi sembrava che sull'ingresso del timer non avessi il prescaler.

Devo pensarci su, mi pare buono. :ok:

saluti.
Avatar utente
Foto Utentelelerelele
2.622 3 7 9
Expert EY
Expert EY
 
Messaggi: 2995
Iscritto il: 8 giu 2011, 8:57
Località: Reggio Emilia


Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 2 ospiti