Forum: Mikrocontroller und Digitale Elektronik stm32 Flankenabstand mit zwei channeln für Interrupt


von markus (Gast)


Lesenswert?

Hallo, ich möchte gern den Abstand zwischen zwei Flanken messen, das 
Problem ist dass es positive und negative Flanken dind und ich nie weiß 
ob als nächstes eine postive oder negative kommt. Positv heißt hier von 
0 auf 5V, dann wieder absinken auf 0 V und negative heißt von 5 auf 0V 
und dann wieder ein ansteigen. Es sind also zwei verschiedene Leitungen. 
Gleichzeitig gibt es keine Flanken. Kann man das über zwei Channel mit 
einem Timer Interrupt eralisieren oder muss das Signal "gleichgerichtet" 
werden und auf einen Channel gegeben werden? Sprich aus der negativen 
mach eine postive Flanke.

Ich verwende den stm32107VC und wollte Timer 2 als Interruptgestuerten 
Timer nutzen.

von Bernd (Gast)


Lesenswert?

Hallo!

> Positv heißt hier von 0 auf 5V, dann wieder absinken auf 0 V und negative > 
heißt von 5 auf 0V und dann wieder ein ansteigen.
> Es sind also zweiverschiedene Leitungen.

Bedeutet das es das Signal mit der "negativen" Flanke liegt einmal an 
einem Pin an und das mit der "positiven" Flanke an einem anderen?

Es gibt die Möglichkeit mehrere Timer zu kaskadieren. Wobei ein Timer 
ein Master Timer ist und der oder die anderen Timer als Slaves dienen. 
Damit kann man z.B.: eine 32bit Auflösung erzielen.
Sieh dir dazu am besten die STM32F10x Standard Peripherals Firmware 
Library an mit den Beispielen zu dem Kapitel TIM.

MfG

von ASCII-Zeichnung (Gast)


Lesenswert?

EXTI Trigger auf 2 Inputs mit den beiden Signalen auf beide Flanken

1. Interrupt startet Timer
2. Interrupt stoppt

Evtl ausserdem noch in der Interruptroutine
den komplementären Flankeninterrupt disabeln
oder ein Ignorier-Flag setzen.

Oder ist das zu einfach gedacht?

Gruss

ASCII-Zeichnung.

von markus (Gast)


Lesenswert?

Hallo,

Ohje, das habe ich schon mal aus einem anderen Grund versucht bzw. um 
eben einen 32 bit Timer zu erhalten... Das auslesen des zweiten Timers 
hatte nicht wirklich funktioniert wenn ich mich recht erinnere und man 
riet mir dann zu einer Variablen als Speicher. Sollte es wirklich ein 
Beispiel geben wo ein 32 Bit Timer aufgebaut wurde? Welches ist das?

Seite 353 und 337 des RM0008 sehen mir so aus als könnte man zwei 
Channel verwenden, ich versuchs mal. Vielleicht gehts so irgendwie.


Und ja die Signale kommen im Endeffekt von zwei verschiedenen Leitungen.

von Bernd (Gast)


Lesenswert?

Hallo!

Wie ASCII-Zeichnung schon schrieb ist es mit 2 EXTI-Lines auch möglich. 
Du könntest dir sogar den Timer sparen und den SysTick im Free-running 
Modus betreiben. Mit dem kannst du die Zeit mit einer Genauigkeit von 
1ms erfassen, wenn dir das ausreicht mache es so.

Auf http://www.st.com/internet/mcu/class/1734.jsp findest du unter der 
Kategorie Resources -> Software Resources -> Firmware die zip-Datei
STM32F10x standard peripheral library. Lade dir das bitte runter und 
schau dir dort die Beispiele an. Der direkte Download-Link ist

http://www.st.com/internet/com/SOFTWARE_RESOURCES/SW_COMPONENT/FIRMWARE/stm32f10x_stdperiph_lib.zip

Ansonsten findest du dort auch wie man zwei Timer verknüpft um 32bit zu 
erzielen -> How to achieve 32bit timer resolution using the link system.

MfG

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.