Forum: Mikrocontroller und Digitale Elektronik STM32 Input capture Synch/Trigger (SPL)


von NoUSB (Gast)


Lesenswert?

Ich möchte ein Funksignal z.B. an PB8 eines STM32F103 dekodieren 
(Puls-Pausen-Modulation). Dazu sind die Puls- bzw. Pausenzeiten zu 
bestimmen.

Puls: Dauer zwischen steigender und fallender Flanke
Pause: Dauer zwischen fallender und steigender Flanke
(Periode: Dauer zwischen zwei [steigenden] Flanken)

Da gibt es einige Möglichkeiten: Polling, Interrupts, Timer Capture.
Offenbar ist es aber auch möglich, den Timer bzw. zwei Capture Units so 
zu konfigurieren, dass mit ein und demselben Pin (PB8 = TIM4_CH3) beide 
Zeiten (low/high oder Puls und Periode) messen lässt.

Sinnvoll wäre evtl. ein Reset des Timers bei steigender Flanke sowie 
jeweils Capture bei fallender (Pulsdauer prüfen) und steigender Flanke 
(Periode, Pause berechnen).
Der Interrupt nach einer Periode könnte die Dekodierung durchführen.

Leider finde ich aber bislang keine Doku (AN4013), die die Möglichkeiten 
dieser Timer/Capture-Verknüpfung etwas ausführlicher darstellt. In 
"Figure 100. General-purpose timer block diagram" (RM0008 
www.st.com/resource/en/reference_manual/cd00171190.pdf ) sind die 
Capture-Einheiten 1&2 sowie 3&4 paarweise verknüpft, jedoch ist TI3FP4 
kein gültiger Parameter für die Funktion TIM_SelectInputTrigger(). Ist 
die Master/Slave-Funktion nur für Channels 1 und 2 möglich? Auch AN4776 
beschreibt dies nicht explizit.

Eine (andere?) Art der paarweise Zuordnung lässt sich wohl über die 
TIM_ICInitTypeDef.TIM_ICSelection vornehmen? Lässt sich dort auch der 
automatische Reset konfigurieren?

von K.A. (Gast)


Lesenswert?

Ich verstehe nicht, wodurch im Slave-Mode die zweite Capture-Einheit 
ausgewählt wird.

ST Beispiele der SPL, einzusehen z.B. 
https://github.com/g4lvanix/STM32F1-workarea/tree/master/Project/STM32F10x_StdPeriph_Examples/TIM/PWM_Input

Die readme.txt erwähnt den verwendeten Master/Slave Mode überhaupt 
nicht.
1
  /* TIM3 configuration: PWM Input mode ------------------------
2
     The external signal is connected to TIM3 CH2 pin (PA.01), 
3
     The Rising edge is used as active edge,
4
     The TIM3 CCR2 is used to compute the frequency value 
5
     The TIM3 CCR1 is used to compute the duty cycle value
6
  ------------------------------------------------------------ */
7
8
  TIM_ICInitStructure.TIM_Channel = TIM_Channel_2;
9
  TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;
10
  TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
11
  TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
12
  TIM_ICInitStructure.TIM_ICFilter = 0x0;
13
14
  TIM_PWMIConfig(TIM3, &TIM_ICInitStructure);
15
16
  /* Select the TIM3 Input Trigger: TI2FP2 */
17
  TIM_SelectInputTrigger(TIM3, TIM_TS_TI2FP2);
18
19
  /* Select the slave Mode: Reset Mode */
20
  TIM_SelectSlaveMode(TIM3, TIM_SlaveMode_Reset);
21
22
  /* Enable the Master/Slave Mode */
23
  TIM_SelectMasterSlaveMode(TIM3, TIM_MasterSlaveMode_Enable);
24
25
  /* TIM enable counter */
26
  TIM_Cmd(TIM3, ENABLE);
27
28
  /* Enable the CC2 Interrupt Request */
29
  TIM_ITConfig(TIM3, TIM_IT_CC2, ENABLE);


Soweit klar: Capture mit Channel 2. Nur wie kommt Channel 1 ins Spiel? 
Er wird nicht explizit konfiguriert. Der ausgewählte "Input Trigger" 
TIM_TS_TI2FP2 führt laut o.g. Diagramm gar nicht auf IC1, das wäre 
TI2FP1. Ist das Beispiel also fehlerhaft? Oder ist TI2FP2 nur für den 
Reset per "Slave mode controller" zuständig? Dann stellt sich die Frage, 
was IC1 auslöst ja erst recht (und wieso ist das dann eine fallende 
Flanke?).

von Axel S. (a-za-z0-9)


Lesenswert?

Postest du hier unter verschiedenen Namen in einem Thread?
Das ist ein absolutes No-Go!

von No Go (Gast)


Lesenswert?

Tut mir sehr leid. Hat auf die Fragen aber keinen Einfluss.

Ich habe noch folgende Dokumente gefunden:

http://www.st.com/content/ccc/resource/training/technical/product_training/c4/1b/56/83/3a/a1/47/64/STM32L4_WDG_TIMERS_GPTIM.pdf/files/STM32L4_WDG_TIMERS_GPTIM.pdf/jcr:content/translations/en.STM32L4_WDG_TIMERS_GPTIM.pdf

Sehr allgemein. Schlagworte: "input remapping", "clear-on-capture mode", 
"PWM input mode".

http://homepage.cem.itesm.mx/carbajal/Microcontrollers/SLIDES/STM32F3%20Timers.pdf

"PWM Input mode" ist widersprüchlich zum Beipiel:
- "IC1 and IC2 must be configured to be connected together to the PWM 
signal" (passiert im Beispiel nicht)
- "IC1 and IC2 active edges must have opposite polarity" (passiert im 
Beispiel nicht)
- "IC1 or IC2 is selected as trigger input and the slave mode controller 
is configured in reset mode" (passiert im Beispiel)

von No Go (Gast)


Lesenswert?

Das Geheimnis liegt in der Funktion TIM_PWMIConfig(). Sie konfiguriert 
den anderen Kanal (1 oder 2, nicht 3/4) gleich mit!

von Axel S. (a-za-z0-9)


Lesenswert?

No Go schrieb:
> Tut mir sehr leid. Hat auf die Fragen aber keinen Einfluss.

Aber vielleicht auf die (fehlenden) Antworten?

Daß du jetzt mit dem 3. Nicknamen in deinem eigenen Thread schreibst, 
kann man nur noch unverschämt nennen.

von unverschämt (Gast)


Lesenswert?

Hihi, du hast Sorgen :-)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.