Frequenz, bzw. Periodendauer genau erfassen

Dieses Thema im Forum "Software" wurde erstellt von Hemi, 14. Dezember 2018.

  1. Hemi

    Hemi Premium Benutzer

    Registriert seit:
    30. November 2008
    Beiträge:
    991
    Zustimmungen:
    11
    Punkte für Erfolge:
    18
    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 :)
     
  2. addi

    addi Mitglied

    Registriert seit:
    2. September 2013
    Beiträge:
    115
    Zustimmungen:
    4
    Punkte für Erfolge:
    18
    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
     
  3. Hemi

    Hemi Premium Benutzer

    Registriert seit:
    30. November 2008
    Beiträge:
    991
    Zustimmungen:
    11
    Punkte für Erfolge:
    18
    Sprachen:
    C, C++, PHP, Java
    Du meinst 40 bis 60ms, nicht 20 bis 40 :)
     
  4. Mikro23

    Mikro23 Mitglied

    Registriert seit:
    2. Januar 2017
    Beiträge:
    283
    Zustimmungen:
    21
    Punkte für Erfolge:
    18
    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.
     
  5. addi

    addi Mitglied

    Registriert seit:
    2. September 2013
    Beiträge:
    115
    Zustimmungen:
    4
    Punkte für Erfolge:
    18
    Sprachen:
    BascomAVR, C, Assembler
  6. Hemi

    Hemi Premium Benutzer

    Registriert seit:
    30. November 2008
    Beiträge:
    991
    Zustimmungen:
    11
    Punkte für Erfolge:
    18
    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.
     
  7. LotadaC

    LotadaC Sehr aktives Mitglied

    Registriert seit:
    22. Januar 2009
    Beiträge:
    3.047
    Zustimmungen:
    54
    Punkte für Erfolge:
    48
    Sprachen:
    BascomAVR, Assembler
    Das Horner-Schema ist Dir ein Begriff?
     
  8. addi

    addi Mitglied

    Registriert seit:
    2. September 2013
    Beiträge:
    115
    Zustimmungen:
    4
    Punkte für Erfolge:
    18
    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
     
  9. Hemi

    Hemi Premium Benutzer

    Registriert seit:
    30. November 2008
    Beiträge:
    991
    Zustimmungen:
    11
    Punkte für Erfolge:
    18
    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??? :(
     
  10. addi

    addi Mitglied

    Registriert seit:
    2. September 2013
    Beiträge:
    115
    Zustimmungen:
    4
    Punkte für Erfolge:
    18
    Sprachen:
    BascomAVR, C, Assembler
    Hmmm...
    Zu hohe spannung? Mal nachmessen ohne ntc( quasi leerlaufspannung).
    Welche grenzdaten kann der verwendete ntc ab?
    73 de addi
     
  11. Hemi

    Hemi Premium Benutzer

    Registriert seit:
    30. November 2008
    Beiträge:
    991
    Zustimmungen:
    11
    Punkte für Erfolge:
    18
    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...
     
  12. Dirk

    Dirk Administrator
    Mitarbeiter

    Registriert seit:
    28. Januar 2007
    Beiträge:
    4.202
    Zustimmungen:
    121
    Punkte für Erfolge:
    63
    Sprachen:
    C, Assembler, Pascal, C++, 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.
     
  13. Hemi

    Hemi Premium Benutzer

    Registriert seit:
    30. November 2008
    Beiträge:
    991
    Zustimmungen:
    11
    Punkte für Erfolge:
    18
    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...
     
  14. addi

    addi Mitglied

    Registriert seit:
    2. September 2013
    Beiträge:
    115
    Zustimmungen:
    4
    Punkte für Erfolge:
    18
    Sprachen:
    BascomAVR, C, Assembler
    Shit happens
     
  15. Hemi

    Hemi Premium Benutzer

    Registriert seit:
    30. November 2008
    Beiträge:
    991
    Zustimmungen:
    11
    Punkte für Erfolge:
    18
    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. :)
     
    #15 Hemi, 16. Dezember 2018
    Zuletzt bearbeitet: 17. Dezember 2018
  16. Hemi

    Hemi Premium Benutzer

    Registriert seit:
    30. November 2008
    Beiträge:
    991
    Zustimmungen:
    11
    Punkte für Erfolge:
    18
    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

    Unsere immer weiter wachsende Community beschäftigt sich mit Themenbereichen rund um Mikrocontroller- und Kleinstrechnersysteme. Neben den Themen Design von Schaltungen, Layout und Software, beschäftigen wir uns auch mit der herkömmlichen Elektrotechnik.

    Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  • Coffee Time

    Unser makerconnect-Team arbeitet hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und unser eigener makerconnekt-Server regelmäßig gewartet wird. Wir nehmen das Thema Datensicherung und Datenschutz sehr ernst und sind hier sehr aktiv, auch sorgen wir uns darum, dass alles Drumherum stimmt!

    Dir gefällt das Forum und die Arbeit unseres Teams und du möchtest es unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft, unser Team freut sich auch über eine Spende für die Kaffeekasse :-)
    Vielen Dank!
    Dein makerconnect-Team

    Spende uns! (Paypal)
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren und die Seite optimal für dich anzupassen. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden