32 Input Capture auf STM32

OP #5313776
Lesenswert?

Das mit Tim2 und Tim5 sehe ich ja erst jetzt, das wäre ja prima.

Ich möchte halt eine langsame Frequenz mit einer sehr hohen Genauigkeit 
messen. Also 32bit, ohne Prescaler.

Kann ich auch ein input capture eines anderen Timers als Event für 
TIM2/5 benutzen, so dass dieser ein Capure-EVent macht? Oder kann ich 
per DMA dann einfach das CNT Register des 32bit timers verwenden?

Das CNT Register bei TIM2/TIM5 wird mir aber im Datenblatt nur 16bit 
wertig angezeigt.
Gast #5314120
Lesenswert?

Max M. schrieb:
> Ich habe es jetzt hinbekommen mit zwei Timern. TimerA generiert
> ein
> Input Capture, erzeugt jedoch nur einen Trigger. Der zweite 32bit TIM2
> Timer erzeugt auch bei genau diesem Trigger ein Input Capture und löst
> ein DMA aus.
>
> Tolle Sache!

Zeig mal her.
OP #5314248
Lesenswert?

In TIMx_CR2_MMS auf 0b011(Compare Pulse) setzen, das erzeugt bei einem 
Inputcapture einen Trigger.

Dann in TIM2_SMCR_TS den Timer, welcher den Trigger erzeugt als Quelle 
auswählen.

Anschließend in TIM2_CCMR1_CC1 auf 0b11 setzen, das bewirkt, dass der 
Trigger einen Input Capture beim CC1 auslöst.

Der rest ist ja bekannt, DMA auslösen auf TIM2, ARR Register setzen, RCC 
und TEN.

Man kann bei dem Trigger-Quelle-Timmer auch Ch1-3 mit XOR verknüpfen, so 
dass  ein Input Capture auf einem dieser Kanäle einen Trigger auslöst.
OP #5314530
Lesenswert?

Weil es dann per DMA voll parallel geht. Ich habe nun mal weder von TIM2 
noch TIM5 einen Channel an einem der Eingangspins. Und so wird das 
Signal des dort tatsächlich anliegenden Timers direkt an einen 32bit 
Timer weitergegeben, welcher dann per DMA den Input Capture durchführt.

Keine Interrupts und zerbrochene Capture Messung mit irgendeinem 
Überlauf Interrupt, welches noch eine zweite variable hochzählen muss.
Gast #5314588
Lesenswert?

Du nimmst also lieber einen 2. Timer als eine Variable hochzuzählen?

Ich weiß nicht, was für Dich eine langsame Frequenz ist. Sind es 10 mHz?
Auch ein 32 Zähler hat irgendwann einen Überlauf. Was machst Du damit?

Na gut, Du löscht den Zähler immer wieder, aber was machst Du, wenn 
Löschsignal und Captureimpuls gleichzeitig eintreffen? Wenn Du Pech 
hast, hast Du nur fünf Fehlmessungen am Tag. Da kann man schon mal 
länger suchen.

Anstatt eines einzigen Timers brauchst Du derer zwei, noch einen 
DMA-Kanal und ein unausgegohrenes Vorgehen, wenn Ereignisse gleichzeitig 
eintreffen.
Aber vielleicht willst Du ja auch 10 kHz messen und brauchst 10000 
Ergebnisse/s?
Bei unbekannten Anforderungen kann ich aber auch nur mutmaßen.
OP #5314621
Lesenswert?

Ich persönlich denke, dass der Trigger schneller beim TIM2 ist, um einen 
korrekten 32bit Capture auszuführen, als ein Interrupt, welcher eine 
Variable auch noch hochzählen muss und beim Capture dem Ergebnis 
hinzufügen muss.

Sofern etwas in Hardware geht, tu ich das auch. Der minimale 
Stromverbrauch des zusätzlichen Timers ist unwichtig.

Zusätzlich verwende ich nicht nur ein Capturewert, sondern min. zwei 
(oder praktisch mehrere in Folge). Der Abstand zw. den Messwerten ist 
dann die Zeit. Ein Überlauf ist da unproblematisch.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren