momentan probiere ich (ohne Erfolg) mit einem General Purpose Timer eingehende Impulslängen zu vermessen. Soweit ich sehe (?) sind alle Beispiele in HAL und Cube immer nur zur Frequenzmessung, als zwischen zwei Flanken in gleicher Richtung. Die Impulslänge müsste doch theoretisch gehen indem man nach einer Flanke einen Interrupt kriegt und darin die Flankenrichtung zum nächsten Signal umdreht. Oder gibt es dazu einen anderen Trick oder vielleicht sogar ein Beispiel? Momentan liegt das Signal auf einem Timer der im Quadratur Mode arbeitet. Das funktioniert gut und auch bei der HW könnte ich das Signal zusätzlich auf einen ETR oder einen der Kanäle eines weiteren Timers verdrahten. Ich möchte neben der Position auch die Geschwindigkeit in einer möglichst kurzen Zeit (1 Impuls) möglichst genau erfassen. Daß dafür vermutlich weitere Eingangspins belegt werden, habe ich mich schon abgefunden.
Das Timer-Cookbook AN4776 sagt dazu (und zu maximalen und minimalen Input-Länge) auf Seite 29 folgendes: https://www.st.com/resource/en/application_note/dm00236305-generalpurpose-timer-cookbook-for-stm32-microcontrollers-stmicroelectronics.pdf
Dein Problem ist unklare Ausdrucksweise, sowie fehlende Angaben zu minimalen und maximalen Werten. Einmalige Messung "nächster Impuls", Polorität. Oder fortlaufende Messung, wie lange, welche Mittelung? Evtl. Skizze. Gruss
J. V. schrieb: > mit einem General Purpose Timer > eingehende Impulslängen zu vermessen dafür kann man den "PWM input mode" verwenden.
Ich wuerde den Zaehler mit geeigneter Aufloesung durchlaufen lassen und mit einer Flanke des zu messenden Impulses ein Capture ausloesen und im Capture Interrupt den vorher "gecapturten" Wert abziehen.
kürzeste Pulslängen werden mit 4mS erwartet. Es ist also genug Zeit, hier was auf andere Flankenrichtung umzuinitialisieren oder einen vorhergehenden Capture Wert abzuholen. > auf Seite 29 folgendes: auch das scheint mir eine Frequenzmessung ? > dafür kann man den "PWM input mode" verwenden. der scheint zwei Kanäle eines Timers zu verwenden. Kanal 1 macht Capture bei der steigenden der Kanal 2 bei der Fallenden Flanke was eigentlich ein guter Ansatz sein solle...
Erich schrieb: > Dein Problem ist unklare Ausdrucksweise, sowie fehlende Angaben zu > minimalen und maximalen Werten. Einmalige Messung "nächster Impuls", > Polorität. Oder fortlaufende Messung, wie lange, welche Mittelung? Evtl. > Skizze. All das brauchst du, um dem TO mitteilen zu können, wie man einen Timer so einstellt, dass er die Dauer von einer Flanke zur dazugehörigen umgekehrten Flanke ermittelt?
Janvi schrieb: > auch das scheint mir eine Frequenzmessung ? Was unterscheidet Dein Anliegen von einer Frequenzmessung? Wills Du jeweils einen Einzelwert für den Abstand zwischen steigener und fallender Flanke und umgekehrt? J. V. schrieb: > f einen ETR oder einen der Kanäle eines weiteren Timers > verdrahten. Ich möchte neben der Position auch die Geschwindigkeit in > einer möglichst kurzen Zeit (1 Impuls) möglichst genau erfassen. Quadratur Decoder klingt nach Drehgeber oder Glasmassstab. In diesem Fall wird das Ergebnis eines direkten Samplings extrem jitterbehaftet sein und ohne tiefpassfilterung absolut unbrauchbar - und dann hat man nichts von der Einzelflankendetektion. Und das auch nur, wenn das mechanische System nicht zittert. Kommt das auch noch, addiert sich das mechanische Zittern zum Jitter der Abtastung. That's a moiré. Unterm Strich ist das wohl eine der Ideen, die man einmal im Leben ausprobiert haben muss, bis man merkt, dass das wohl eine Schnappsidee war.
Hallo janvi Ich programmiere PIC MCU‘s u. Kenne den STM32 nicht aber vielleicht hilft Dir meine Idee weiter. Hier meine Idee: Viele PIC MCU‘s haben einen 16Bit Timer (z. B. Timer1) mit Gate control. Wenn man am CLK Eingang eine Frequ. von z. B. 1Mhz anlegt u. den zu messenden Puls am Gate anlegt dann erhält man die Pulsbreite in μs (siehe Skizze in Anhang). Beim PIC kann man im Timer1 Gate auch die Polarität wählen. Damit könnte man auch negative Pulse messen. Schau mal in Dein Datenblatt, vielleicht hat der STM32 so einen Timer.
Irgendwie funktionierte der Dateianhang nicht. Hier ein neuer Versuch.
Manfred T. schrieb: > Ich programmiere PIC MCU‘s u. Kenne den STM32 nicht aber vielleicht > hilft Dir meine Idee weiter. Ich kenne PIC MCU''''s nicht, aber vielleicht hilft Dir meine Idee weiter. Nimm eine Handvoll SN74LS161, ein paar .... Noch jemand mit 8051 o.ä.? Janvi schrieb: >> dafür kann man den "PWM input mode" verwenden. > > der scheint zwei Kanäle eines Timers zu verwenden. Kanal 1 macht Capture > bei der steigenden der Kanal 2 bei der Fallenden Flanke Es scheint nicht nur, sondern ist auch so. Neben der Erkennung beider Flanken, wird der Zähler auch wieder "geriehzettet". Die notwendigen Befehle für die Initialisierung stehen im Ref.-Handbuch.
m.n. schrieb: > Noch jemand mit 8051 o.ä.? Damit habe ich mal den SMT160 (neu: SMT172) Temperature sensor ausgelesen, geht prima. Ein Timer durchlaufend, den anderen im Gate-Mode und schon hat man das Tastverhältnis.
Einen einzelnen Impuls so zu messen - so hatte ich die Frage des TO verstanden - ist nicht so geschickt. Die Hardware eines STM32 zu nutzen, macht die Sache deutlich einfacher. Insbesondere bei sehr kleinen Tastverhältnissen muß man aufpassen, wenn Flanken per ISR umgeschaltet werden sollen. Wenn es um ein andauerndes Signal geht, gibt es natürlich viele Möglichkeiten. Für STM32 zum Beispiel: Beitrag "Frequenz- und Pulsweitenmessung mit STM32F407" oder Beitrag ""ungenaue" Pulsweiten-Messung" oder wenn es ein ATmega sein soll Beitrag "Stoppuhr – Geschwindigkeit – Pulsweite mit Atmega88" Aber vielleicht erbarmt sich ja jemand, dem TO die Einstellungen für HAL zu nennen. Was dort anzuklicken ist, ist ja weder zündend noch einleuchtend ;-)
Rolf M. schrieb: > Erich schrieb: >> Dein Problem ist unklare Ausdrucksweise, sowie fehlende Angaben zu >> minimalen und maximalen Werten. Einmalige Messung "nächster Impuls", >> Polorität. Oder fortlaufende Messung, wie lange, welche Mittelung? Evtl. >> Skizze. > > All das brauchst du, um dem TO mitteilen zu können, wie man einen Timer > so einstellt, dass er die Dauer von einer Flanke zur dazugehörigen > umgekehrten Flanke ermittelt? Ja, schon. Muss ja erst KLAR sein, WAS man messen möchte. Und Zeiten gibt es von Mikrosekunden (und kleiner) bis zum 2. Durchlauf des Jupitertransits (und größer). Denke aber die Frage hat sich inzwischen erledigt, wie auch immer.
Die Pulslänge funktioniert jetzt im PWM input mode mit zwei verschiedenen Capture Registern. Tatsächlich ist für die zwei Signale InkA und InkB ein dritter HW-pin zu belegen, damit man neben der Positionserfassung (aktuell T2) auf einen weiteren Timer (T21) zur Geschwindigkeitsmessung kommt. Da es in der Anwendung darauf ankommt die Drehzahl möglichst rasch zu erfassen, möchte ich jetzt umgekehrt versuchen T21 als Positionszähler und T2 zur Geschwindigkeitsermittlung zu verwenden. T2 hat bei CH1 und CH2 ein XOR am Eingang welches eine Impulsvervierfachung erlauben könnte. D.h. es wird der Abstand zwischen zwei Flanken von zwei Signalen vermessen. In diesem Fall müssten dann 4 pins für 2 Signale belegt werden was bei einem 14 pin oder 20 pin STM32L schon ziemlich weh tut. Ideal wäre eine Chip-interne Verbindung aber ich sehe keine Möglichkeit wie die einzurichten wäre.
:
Bearbeitet durch User
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.