www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Differenzzeitmessung


Autor: Marc T. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich möchte gerne die Differenzzeit zwischen 2 Signalen messen!
Genauer! Ich habe eine Nulldurchgangserkennung mit einem Komparator
realisiert der mir halt beim Nulldurchgang der Spannung einen
Rechteckimpuls erzeugt der durch den Folgenden Nulldurchgang beendet
wird. Eine zweite Schaltung macht dieses für den Strom.
Nun möchte ich moglichst einfach die Zeit zwischen den Signalen messen
um auf die Belastung ( Ohmsch,Induktiv,Kapazitiv ) zu schliessen und
diese auch über an anderer Stelle gemessenen Werte berechnen zu
können.
Mit anderen Worten ich möchte den Phasenwinkel messen.

Autor: The Daz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmm, kleiner Taktgenerator (z.B. NE555) an nen Zaehler anschliessen und
dessen Ausgabe auf nem 7-Segment Display anzeigen. Allerdings kannst du
kapazitive von Induktiven lasten nicht wirklich unterscheiden, weil du
t=0 nicht kennst und damit nicht weisst, ob der Strom der Spannung
voraus- oder nacheilt.

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenns nur um den Betrag der Phasenverschiebung geht, dann die beiden
Rechtecksignale mit einem Exklusiv-ODER verknüpfen. Du bekommst dann am
Ausgang vom EXOR einen Impuls, wenn die beiden Signale nicht gleich sind
(also für die Zeit zwischen Spannungs- und Stromnulldurchgang,
unabhängig von der Reihenfolge). Die Länge dieses Impulses entspricht
der Phasenverschiebung. Die lässt sich dann leicht mit einem Timer (mit
einem kleinen µC mit Input Capture oder eben einem diskreten Zähler)
erfassen und ausgeben.

Autor: Marc T. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die ganze Geschichte soll mit einem µC realisiert werden!
Doch das müste eigentlich gehen wenn ich die Spannung als 1.Trigger
nehme egal zu welchem zeitpunkt dann kann bei Kapazitiver Belastung
erst 270° später eine Steigende Flanke kommen und bei induktiver
Belastung kommt spätestens 90° später eine steigende Flanke das müsste
doch zu unterscheiden sein.

Autor: The Daz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok, solange du nur +/- 90 Grad messen koennen willst, ist das ok. Dann
nimmst du einen uC und schliesst die beiden Komparatoren an jeweils
einen interrupt Eingang an. Wenns nicht extrem genau sein soll, reicht
beim AVR der interne Takt als Zeitreferenz. Bleibt nur noch das LCD-
oder 7-Segment Display.

Autor: Marc T. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie ist das mit input capture da ist doch die Timerfunktion schon
integriert oder?

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit meinem Vorschlag könntest Du das Vorzeichen übrigens auch ermitteln,
indem Du das Spannungssignal an einen weiteren Pin des µC führst und bei
der steigenden Flanke des EXOR-Ausgangs den Zustand sicherst und bei der
fallenden Flanke ebenfalls. Dann die beiden Werten wieder
EXOR-verknüpfen. Ist das Ergebnis 1, dann eilt der Strom nach, ist es
0, dann eilt er vor (Wenn ich nichts übersehen habe...)

Überlegung: Wenn die steigende Flanke auftritt (weil entweder der Strom
durch Null gegangen ist oder die Spannung) registriert der µC durch den
Capture den Impuls, sichert einen Timerwert und gleichzeitig den
Zustand des Spannungssignals. Wenn dann die fallende Flanke kommt, wird
der zweite Capture-Wert gesichert und wiederum der Zustand des
Spannungssignals. Hat das Spannungssignal in der Zwischenzeit seinen
Zustand geändert (also ist die Spannung durch null gegangen), dann
bedeutet das, dass der Strom noch nicht durch null gegangen ist und
demzufolge nacheilt. In dem Fall ergibt eine EXOR-Verknüpfung des
Spannungssignals mit dem ersten Wert eine '1', andernfalls (wenn der
Strom voreilt) eine '0'. Da bei induktiven und kapazitiven Lasten die
Phasenverschiebungen im Bereich +-90° liegen, müsste das so gehen.

Problematisch ist bei der Sache das Timing und damit die Auflösung, um
auch kleinere Verschiebungen erfassen zu können. Wenn Du eine
einigermaßen vernünftige Auflösung erreichen willst, ist es ein klarer
Fall für Assembler, da bei einer Interrupt-Steuerung sonst durch den
Compiler u.U. zu viel Overhead durch das Sichern von Registern beim
Einsprung in die ISR entsteht.

Mit externen Interrupts wird das ganze möglicherweise noch ungenauer,
weil man erst verzögert in der ISR den Timer bearbeitet. Mit Capture
benötigt man im Prinzip nur einen Interrupt, dessen Handler man in
Assembler dann auch sinnigerweise direkt in die Vektortabelle schreibt
(im Falle der Verwendung eines AVR natürlich), um die drei Taktzyklen
für den Sprung zu vermeiden. Außerdem sichert das Capture-Ereignis
verzögerungsfrei den Timerwert bei Auftreten der Flanke.

Autor: Marc T. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für eure Vorschläge mal schaun wie ich es umsetze

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.