Frequenz, bzw. Periodendauer genau erfassen

Hemi

Premium Benutzer
30 Nov 2008
1.012
11
38
Korntal-Münchingen, Germany
Sprachen
C, C++, PHP, Java
Moinsen Kollegen,

ich habe einen Sensor, der zwei Ausgänge hat, an denen eine Frequenz anliegt.

Erklärung:
- Ausgang 1: ist die Referenzfrequenz. Der Sensor besitzt keinen internen Quarzoszillator, deswegen muss der Drift, der bei der Temperaturänderung entsteht, korrigiert werden. Der Korrekturfaktor wird über Korrekturfaktor = *Referenzwert/tatsächlicher Wert berechnet.

-Ausgang 2: Hier ist die Frequenz, die den "Wert" repräsentiert. Um den richtigen Wert zu erhalten, muss der Wert von diesem Ausgang mit dem Drift, bzw. dem Korrekturfaktor verrechnen.

Jedoch werden nicht die Frequenzen gemessen, sondern die Periodendauer, bzw. der zeitliche Abstand zwischen zwei aufeinanderfolgenden fallenden Flanken.

Die MCU ist eine STM32M405RG, mit 168MHz.

Ich erfasse diese Zeiten über Input Capture. Als Timer stehen mir 16-bit und 32-bit Timer zur Verfügung, mit einer maximalen Frequenz zwischen von 84 bzw. 168Mhz, Prescaler kann ein Int zwischen 1 und 65536.

Jetzt die Frage: Wie soll ich ihn (=Timer) einstellen? Die Periodendauer am Ausgang 1 liegt zwischen 40 und 60ms und der *Referenzwert ist 52,4288ms. Ich kann den Timer so laufen lassen, dass er alle 60ms überläuft oder aber auch dass er alle 500ms überläuft. Über Auflösung des Timers steht im Datenblatt leider nichts drin :(

Danke Euch :)
 

addi

Mitglied
2 Sep 2013
116
4
18
Hamminkeln
Sprachen
BascomAVR, C, Assembler
Hmmm....
Rechteckspannung mit 20ms oder 40ms periodendauer an den capture-eingang anlegen und den timer auslesen.
So eine art try and error
73 de addi
 

Hemi

Premium Benutzer
30 Nov 2008
1.012
11
38
Korntal-Münchingen, Germany
Sprachen
C, C++, PHP, Java
Du meinst 40 bis 60ms, nicht 20 bis 40 :)
 

Mikro23

Aktives Mitglied
2 Jan 2017
324
25
28
Großraum Hannover
Sprachen
C, Assembler
Wenn 60 ms die längste zu messende Zeit ist, stellst Du den Prescaler so ein, daß der Timer nach etwas mehr als 60 ms überläuft.
Dann startest Du den Timer bei der nächsten Flanke und wenn er im Input Capture-Mode läuft, dann solltest Du im Input Capture Register nach jeder Flanke den aktuellen Wert der Periodendauer auslesen können. (Bei geeigneter Timerkonfiguration und Hardwarebeschaltung, versteht sich.)
Ich kenne die STMs zwar nicht, aber das sollte bei allen Timern ähnlich funktionieren.
 

Hemi

Premium Benutzer
30 Nov 2008
1.012
11
38
Korntal-Münchingen, Germany
Sprachen
C, C++, PHP, Java
@Mikro23: Also im Datenblatt steht, dass Tsoll ist 52,4288ms (das ist der feste Wert gegen den der Korrekturfaktor berechnet wird) und Tref ist min 40 und max 60ms. Korrekturfaktor berechnet sich dann als k = Tsoll/Tref. Dein erster Satz, ist genau die Antwort auf die Frage. Wie man sonst den Timer für IC einstellt, weiß ich, die Frage war die Auflösung...

@addi: Warum 20ms?

Also insgesamt habe ich zwei Sensoren dieser Art, zwei Referenzleitungen und zwei richtige Leitungen. Je ein Timer wird je ein Sensor bedienen. Da gibt es mehr zu rechnen, unter Anderem zwei Mal ein Polynom 3. Grades... deswegen eine so große MCU.
 

addi

Mitglied
2 Sep 2013
116
4
18
Hamminkeln
Sprachen
BascomAVR, C, Assembler
Nunja...20ms sind leicht mit jedem nf-generator zu erzeugen und irgendwie praktisch.
Wenn die berechnungen in dieser zeit fertig sind...gut, dann brauch man keine optimierungen bei längeren zeiten machen
 

Hemi

Premium Benutzer
30 Nov 2008
1.012
11
38
Korntal-Münchingen, Germany
Sprachen
C, C++, PHP, Java
@LotadaC : Ja, ist es. Ich muss mir eh nochmal Gedanken machen wie ich es mache. Denke mal mit einer LUT und dann etwas rechnen...

@addi: Ah, okay, jetzt verstehe ich es.

Ich habe da noch was "Komisches". So sieht das Schaltbild aus (nur ein Ausschnitt):

ntc.png
Ich habe Ubat angeschlossen (13,8V, ist mit 6V bis 17V definiert) und GND. Das Netzteil eingeschaltet und der NTC hat nur kurz geleuchtet.... und ich habe es zu spät gemerkt und konnte nicht mehr reagieren.
Warum das denn jetzt??? :(
 

addi

Mitglied
2 Sep 2013
116
4
18
Hamminkeln
Sprachen
BascomAVR, C, Assembler
Hmmm...
Zu hohe spannung? Mal nachmessen ohne ntc( quasi leerlaufspannung).
Welche grenzdaten kann der verwendete ntc ab?
73 de addi
 

Hemi

Premium Benutzer
30 Nov 2008
1.012
11
38
Korntal-Münchingen, Germany
Sprachen
C, C++, PHP, Java
Kann eigentlich nicht sein, denn nur Pin 1 und 3 sind verschaltet, Pin 4 ist offen!

Ich glaube, dass der Sensor nicht zum Datenblatt passt...
 

Dirk

Administrator
Teammitglied
28 Jan 2007
4.271
135
63
Mittelhessen, Giessen
Sprachen
C, C++, C#, Pascal, Assembler, PHP, Java
Aus dem obigen Auszug des Schaltbildes und deiner Beschreibung lässt sich die Fehlerursache eigentlich gar nicht finden. Nun schreibst du noch, der "Pin 4 ist offen" ... Somit liegt keine Spannung am NTC an, aber ...

Ich könnte mir noch vorstellen, dass sich der NTC in einem Metallgehäuse befindet und eventuell nicht isoliert ist und nach Gehäuse o.ä. kurzgeschlossen ist, was nicht GND Potential hat.
 

Hemi

Premium Benutzer
30 Nov 2008
1.012
11
38
Korntal-Münchingen, Germany
Sprachen
C, C++, PHP, Java
Also, das Datenblatt passt nicht zum Sensor, das ist Fakt. Ich habe eine andere Belegung gefunden und da ist es so, dass der Pin 1 am NTC (die andere Seite vom NTC an der Masse) hängt und der Pin 3 auf Masse. Ich habe Pin 1 an die Masse und Pin 3 an Ubat, das Ergebnis ist der verdampfte NTC...
 

Hemi

Premium Benutzer
30 Nov 2008
1.012
11
38
Korntal-Münchingen, Germany
Sprachen
C, C++, PHP, Java
Mal abwarten, was Bosch dazu sagt...

EDIT: Jupp, Bosch hat das falsche Datenblatt zum Sensor geschickt. Im Richtigen hängt der NTC zwischen den Pins 1 und 3. Nun wissen wir, was passiert, wenn man ein 13,8V Netzteil mit 6A an einen 2kOhm NTC hängt: es wird hell, aber nur kurz :D

Habe jetzt das richtige Datenblatt und bekomme einen neuen Sensor. :)
 
Zuletzt bearbeitet:

Hemi

Premium Benutzer
30 Nov 2008
1.012
11
38
Korntal-Münchingen, Germany
Sprachen
C, C++, PHP, Java
Habe nun alles richtig verkabelt und das Signal mit dem "Oszi" angeschaut...

hfm7.PNG

Im Leerlauf um die 1,8kHz, passt. Laut dem Datenblatt sollen es im Leerlauf 1,809kHz (Periodendauer 552,79µs) und bei max. sollen es dann 11,8273kHz (Periodendauer 88,55µs) sein.
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)