Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

STM32 Timer input capture, automatic slope detect?

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[1] STM32 Timer input capture, automatic slope detect?

Messaggioda Foto Utenteharpefalcata » 7 nov 2018, 14:16

Buongiorno a tutti,

Utilizzo, come microcontrollore, un STM32F103RB, e questo è il suo Reference Manual:https://www.st.com/content/ccc/resource/technical/document/reference_manual/59/b9/ba/7f/11/af/43/d5/CD00171190.pdf/files/CD00171190.pdf/jcr:content/translations/en.CD00171190.pdf.

Lo scopo del mio progetto è di campionare un'onda quadra in ingresso, e di memorizzare in un frammento di memria SRAM, la durata di ogni singolo fronte d'onda preso separatamente, che compone quest'onda.

Allego a questo post un'immagine di come è composta la quadra entrante nel controller stesso.

Per campionare la durata di ogni singolo fronte, utilizzo il modulo "Input capture", associato al Timer quattro. Il timer è cloccato a 32 Mhz, ma ho impostato un filtro d'ingresso che divide l'intervallo di campionatura per dare modo di stabilizzare la lettura, quindi per quello che riguarda i tempi di campionatura sono abbondantemente entro le specifiche del Timer integrato nel controller.

Il mio problema è questo: per come è realizzato il timer, io devo selezionare manualmente, di volta in volta la pendenza del fronte entrante dell'nda quadra nel pin del timer, attraverso il bit CC1P, del registro TIMx_CCER, come scritto a pagina 417 del Reference Manual che ho linkato proprio qui sopra.

La domanda è: esiste un modo di impostare il riconoscimento automatico del fronte d'onda del timer, in modo da non dover impostare manualmente ogni volta il fronte opposto, per poter campionare tutti i fronti?

L'alternativa altrimenti sarebbe di ripetere due volte la stessa onda composta e campionare una volta tutti i fronti alti, una seconda volta, tutti quelli bassi, e poi combinare le letture, ma non mi sembra affatto una buona idea.

Qualcuno ha qualche idea migliore?

Grazie.

Saluti.
Allegati
Lettura led Rosso lampadina RGB.png
Avatar utente
Foto Utenteharpefalcata
265 3 5
Stabilizzato
Stabilizzato
 
Messaggi: 303
Iscritto il: 28 lug 2015, 21:03

0
voti

[2] Re: STM32 Timer input capture, automatic slope detect?

Messaggioda Foto UtenteEcoTan » 7 nov 2018, 14:42

Ti va di abilitare l'interrupt e nella ISR alternare (toggle) il bit ad ogni intervento?
Avatar utente
Foto UtenteEcoTan
5.310 4 10 13
Expert EY
Expert EY
 
Messaggi: 3119
Iscritto il: 29 gen 2014, 8:54

0
voti

[3] Re: STM32 Timer input capture, automatic slope detect?

Messaggioda Foto Utenteluxinterior » 7 nov 2018, 14:42

se ho capito bene tu vuoi riprodurre una serquenza del genere
Segnale alto per xtempo
Segnale basso per ytempo
e così via, giusto ?

Se è così prendi due dei 4 capture del timer li abiliti il primo su fronte salita il secondo su fronte discesca
Ad ogni interrupt metti in ram il valore del capture
A quanto arriva la frequenza della tua onda quadra?

Se puoi cambiare quarda TIM9-TIm12 puoi avere il capture su entrambi ifronti se non sbaglio (letto in velocità)
Avatar utente
Foto Utenteluxinterior
2.279 2 4 8
Expert EY
Expert EY
 
Messaggi: 1303
Iscritto il: 6 gen 2016, 17:48

0
voti

[4] Re: STM32 Timer input capture, automatic slope detect?

Messaggioda Foto Utenteharpefalcata » 7 nov 2018, 15:15

EcoTan ha scritto:Ti va di abilitare l'interrupt e nella ISR alternare (toggle) il bit ad ogni intervento?


Non capisco in quale modo l'interrupt risolverebbe il problema. Sempre manualmente va cambiata la polarità.

Giusto?

luxinterior ha scritto:se ho capito bene tu vuoi riprodurre una serquenza del genere
Segnale alto per xtempo
Segnale basso per ytempo
e così via, giusto ?


Non devo riprodurla, ma una volta campionati tutti i fronti che compongono l'onda, li memorizzo nella SRAM del controller e, da qui, con tutta la calma li invio al PC con la USART per classificarle come voglio.

luxinterior ha scritto:Se è così prendi due dei 4 capture del timer li abiliti il primo su fronte salita il secondo su fronte discesca
Ad ogni interrupt metti in ram il valore del capture


Non male come idea, ora vedo di studiare se si può fare.

luxinterior ha scritto:A quanto arriva la frequenza della tua onda quadra?


E' l'onda creata da telecomando di una lmapadina RGB, quindi nulla di problematico, ma al momento non te lo saprei dire cn certezza.

luxinterior ha scritto:Se puoi cambiare quarda TIM9-TIm12 puoi avere il capture su entrambi ifronti se non sbaglio (letto in velocità)


Ne sei certo? Io anche l'ho letto sommariamente, e mi sembra che parli di generica "transiction".

La sequenza descritta a pagina 436, è ben specificato che funziona solo quando l'onda è positiva "T1 input rises".

Ma sarei felice di sbagliarmi.

Grazie per il contributo comunque
Avatar utente
Foto Utenteharpefalcata
265 3 5
Stabilizzato
Stabilizzato
 
Messaggi: 303
Iscritto il: 28 lug 2015, 21:03

0
voti

[5] Re: STM32 Timer input capture, automatic slope detect?

Messaggioda Foto Utentemarioursino » 7 nov 2018, 15:47

Di solito, come ti è stato proposto, si cambia fronte nella routine di interrupt.
Avatar utente
Foto Utentemarioursino
3.567 3 9 13
G.Master EY
G.Master EY
 
Messaggi: 1247
Iscritto il: 5 dic 2009, 4:32

0
voti

[6] Re: STM32 Timer input capture, automatic slope detect?

Messaggioda Foto Utenteluxinterior » 7 nov 2018, 15:50

Non è chiarissimo pagina 455
Note: 11: noninverted/both edges
Circuit is sensitive to both TIxFP1 rising and falling edges (capture, trigger in reset,
external clock or trigger mode), TIxFP1 is not inverted (trigger in gated mode). This
configuration must not be used for encoder mode
Avatar utente
Foto Utenteluxinterior
2.279 2 4 8
Expert EY
Expert EY
 
Messaggi: 1303
Iscritto il: 6 gen 2016, 17:48


Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite