LabVIEWForum.de - Tastverhältnis Binärsignal

LabVIEWForum.de

Normale Version: Tastverhältnis Binärsignal
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hello World,

Daten:

- Verwendete Version: LV 11.0.1
- Verwendete Messkarte: Velleman K8055N
- Know-how: blutiger Anfänger

Vorhaben:

Ziel ist es, ein relativ genaues Thermometer zu realisieren. Hierfür möchte ich einen digitalen Temperatursensor (SMT 160-30) mit linearer Kennlinie verwenden, d.h. den Sensor über einen Transistor an einen digitalen Eingang der Messkarte klemmen und das entsprechende Signal mit LabVIEW weiterverarbeiten. Die Frequenz des Sensors liegt zwischen 1kHz und 4kHz, ist aber nur von der Versorgungsspannung abhängig und transportiert keine Temperaturinformation.
Der entsprechende Treiber (K8055D.dll) ist eingebunden und funktioniert. Das Signal des Sensors liegt somit in LV als boolescher Wert vor. Die Temperatur kann über das Tastverhältnis des Signals ermittelt werden, womit ich nun zum "Problem" komme.

Problem:

Das Tastverhältnis eines booleschen Signals bestimmen.

Gibt es eine einfache Möglichkeit, ein Tastverhältnis (true-Zeit/(true-Zeit+false-Zeit) zu bestimmen, ohne das ganze in ein analoges Signal umzuwandeln, bzw. jeweils die true-Zeit und false-Zeit zu messen? Dies kann im prinzip auf eine Sekunde erfolgen, welches dann auch das Aktualisierungintervall der Temperaturanzeige sein soll.

Lösungsansatz

Der Lösungsansatz befindet sich im Anhang. Leider funktioniert das ganze wohl nicht so einfach. Liegt es am fehlenden Bezugspotential? Wenn ja, wie sollte ich dieses definieren?

Oder bin ich absolut auf dem Holzweg?



Danke im Voraus für jegliche Hilfe.
Hallo isl,

unterstützt die K8055 überhaupt so schnelle Signale?
- Kannst du mit dieser Karte Digitalsignale mit ~400kHz samplen? Dann kannst du dein 4kHz-Signal auf 1% genau auswerten...
- Kannst du mit dieser Karte spezielle Counterfunktionen verwenden, um den Dutycycle auszuwerten?
- Kannst du mit dieser Karte Analogsignale mit ~400kHz samplen, um wie beim Digitalinput dein 4kHz-Signal auf 1% genau auszuwerten?
- Kann die Karte mit Triggersignalen umgehen? Kann sie auf steigende und fallende Flanken reagieren (und jeweils einen Timestamp dazu ausgeben)?
Kurzum: Hast du dir schon mal Gedanken darüber gemacht, ob deine DAQ-Hardware überhaupt zum Sensor passt?

Ansonsten:
Bastel dir einen kleinen Tiefpass, der dein Duty-Signal in eine analoge Spannung umsetzt. Die kannst du dann relativ langsam samplen, was die K8055 definitiv kann.
Hallo GerdW,

danke für Deine schnelle Antwort. Da war bei mir wohl ein dicker Denkfehler drin, denn die Spezifikation ist wie folgt:

Zähler-Funktion bei Eingängen 1 und 2 mit anpassbarer Entprellung (max. 20KHz, hängt von der gesamten I/O-Belastung ab.)

Da hatte ich mich wohl irgendwie vom verbauten 4MHz-Quarz täuschen lassen.

Mein Ursprüngliches Vorhaben war auch die Verwendung eines NTC in Kombination mit einem Spannungsteiler auf dem Analogkanal. Leider ist auch das mit 8bit sehr ungenau, da ich effektiv über die Spannungsteilung nur ein DeltaV von ca. 1 V erreiche.

Um ehrlich zu sein weiß ich gerade nicht, welches der sinnvollste Ansatz zu realisierung meines Vorhabens ist. Da muss ich wohl nochmal ein Konzept entwickeln.

Für Vorschläge bin ich sehr dankbar. Blush
So, nochmal...

nachdem ich jetzt einiges verworfen habe, gibt es einen neuen Ansatz:

Ich werde mir eine elektronische Schaltung bauen welche ein Rechecksignal (Information in Periodenlänge, nicht mehr in Tastverhältnis) generiert und über einen Transitor einen digitalen Input kurzschließt. Diesmal bestimme ich die Frequenz durch die Schaltungsauslegung selbst!

Zwar habe ich einen Treiber für meine Messkarte, leider ist meines Wissens aber der Counter der Karte nicht in den Treiber implementiert - leider! Laut Spezifikation haben DI Kanal 1 und 2 eine interne Timerfunktion mit einstellbarem debounce. Dies ist auch in der Testsoftware ersichtlich.
Bilder und .dll im Anhang!

Ich muss nun also die Periodendauer des booleschen Signals messen. Wie stelle ich das am einfachsten an?
Nehme auch gerne ein fertiges vi Big Grin

PS: Oder sollte ich lieber das Signal über den analogen Eingang jagen? Wenns das programmieren erleichtert gerne, ansonsten würde ich schon gern den digitalen nutzen. Was ist sinnvoller?

Tips und Kritik bitte! Guru1

Danke im Voraus
Das Tastverhältnis direkt zu messen würde ich ganz schnell vergessen. Normalerweise wird man das Ausgangssignal mit einem RC-Glied (Zeitkonstante z.B. 1 sec) glätten (wurde von Gerd schon erwähnt). Da die Zustände das binären Ausgangssignals 0 und Versorgunsspannung sind, ist das Tastverhältnis dann gleich der geglättetem Ausgansspannung, geteilt durch die Versorgunsspannung. Wenn die Versorgungsspannung des Sensors hinreichend stabilisiert ist, läuft die Messung auf eine einfache Spannungsmessung hinaus - einfacher gehts wirklich nicht.
Allerdings hat deine antiquierte Katre nur einen 8 bit ADC. Die Auflösung im Temperaturbereich von -45°..+135° wäre nur wenig besser als 1° - wenn überhaupt. Wenn man die Karte unbedingt benutzen will und den vollen Temperatorbereich nicht braucht, kommt man um etwas Operationsverstäker-Schaltungstechnik nicht herum. Wenn man beispielsweise nur den Temperaturbereich 10°..35.5° braucht, könnte man mittels Offset und Gain diesen Bereich in den Focus des ADC-Bereiches schieben und hätte dann eine Auflösung von 0.1°.
So weit ich sehe kannst du mit deiner Karte:

- softwaregetaktete Einzelabfrage der DI/AI
- Zählen von Ereignissen (nur Zählen, ohne sonstige Auswertungen wie Frequenz oder Tastverhältnis)
- softwaregetaktetes Setzen der AO/DO

Somit folgt: Auch eine Periodenlänge kannst du nur mit der Genauigkeit des Computers über häufige Einzelwertabfrage des DI bestimmen. LabVIEW bietet dir eine minimale "verlässliche" Schleifenzeit von 1 ms, unter Windows kommt da aber gerne ein Jitter von 1-2 ms drauf. Also, auch die Periodendauer eines DI-Signals wirst voraussichtlich nur auf ca. 2-3 ms genau bestimmen können. Langt dir das?

Gruß, Jens

EDIT:
Aus den technischen Daten auf der Velleman Seite:
Zitat:allgemeine Konvertierungszeit: 2ms pro Befehl
Wenn das auch für die DI-Abfrage gilt, kommst du auf eine Genauigkeit von minimal 4-5 ms.
Danke für die Mühe. Die Genauigkeit genügt mir, da ich eine wesentlich langsamere Frequenz auswerten will (Periodenlänge ca. 0,5s). Das wäre geklärt, jetzt das wie?

Messen der Periode von aufsteigender True-flanke bis zu dieser nächsten und Ausgabe der Zeit als numerischer Wert mit aktualisierungsintervall von 1s.
Hallo isl,

- DI im 5ms-Takt abfragen (so genau es eben geht...)
- EdgeDetection durchführen
- Zeitpunkt der Flanken in Schieberegister merken
- Zeit zwischen den Flanken berechnen

Zitat:Tips und Kritik bitte!
- Was soll man mit einer nackten DLL anfangen? Du hast weder .h-Daten noch eine Beschreibung beigefügt. (Abgesehen davon ist die Internetquelle bekannt...)
- Was soll man mit dem Bild des BD anfangen, wenn man fast ausschließlich die Terminals von Bedienelementen sieht (und nebenbei das Rube-Goldberg-Konstrukt des Umwandelns eines Arrays in einen Cluster, um an die Elemente zu kommen - als wenn es keine IndexArray-Funktion gäbe...)?
- Was soll man mit dem Bild des FP anfangen, wenn man weder das VI zur Verfügung hat noch die Hardware?
Wenn du hier Attachment anhängst, dann doch bitte sachdienliche... Big Grin
Referenz-URLs