www.mikrocontroller.net

Forum: PC-Programmierung Auswertung Temperatursensor über RS232


Autor: blubb (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe einen Temperatursensor SMT 160-30, der ein PWM-Signal ausgibt 
über die serielle Schnittstelle an meinen Rechner angeschlossen. Die 
Abfrage des Signals funktioniert auch. Jetzt habe ich aber noch Probleme 
mit der Auswertung.

Das PWM-Signal hat eine Frequenz von 2-4 KHz. Ich arbeite mit Visual C++ 
6.0.
Ich muss nun das Verhältnis zwischen High- und Low-Pegel-Dauer messen.


Bisher habe ich folgenden Code:

int k=0;
int high=0;
int Signal;
double Durchl=100000.0;    //double um beim teilen einen float-Wert zu 
erhalten

while(k<Durchl)
{
  Signal=m_rs232.GetCDHolding();   //Signal neu einlesen
  high+=Signal;
  k++;
}

m_Temp=(((high/Durchl)-0.32)*212.77);

Mit diesem Code habe ich nun leider Schwankungen von teilweise mehr als 
4° und eine CPU-Auslastung von 60-100%.

Hat jemand eine Idee wie ich die Auswertung verbessern kann? Habe schon 
versucht, zuerst eine Flanke zu erkennen und dann erst mit der Messung 
zu starten um nicht mittendrin zu zählen anzufangen. Geht mit wenig 
Aufwand jedoch nur beim Start der Messung. Und es treibt die 
CPU-Belastung noch weiter hoch.... :(

Autor: H.H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin,es wäre vielleicht sinnvoller das PWM Signal mit einem Mikro 
auszuwerten, und dann die Daten seriell zum PC schicken

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Problem dürfte an dieser Stelle wohl Windows sein.
In Windows hast du nun mal keine Garantie dafür, dass
du absolut konstate Durchlaufzeiten durch dein Programm
hast. Windows ist nun mal ein Multitasking System, dass
deinem Prozess zu jeder Zeit den Prozessor entziehen kann.
Und wenn Windows im Hintergrund beschliesst den Speicher
aufzuräumen, hast du sowieso schlechte Karten.

Die einfachste Lösung, wie H.H. schon anmerkte, dürfte
wohl der Einsatz eines externen µC seins, der die
Messwerte ausmisst und das Ergebnis über RS232 mitteilt.

Autor: blubb (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Problem ist, dass mir die Aufgabe so vorgegeben wurde und ich das 
jetzt irgendwie lösen muss ohne µC.

Die Durchlaufzeit der Schleife wäre ja prinzipiell egal um lediglich das 
Verhältnis zu kriegen, das Problem ist glaub nur, dass dann bei 
Unterbrechungen auch bei "unvollständigen" Peridoden gezählt wird.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
dann miss die Zeit nicht über Schleifendurchläufe
sondern mittels clock()

Also:
Warten auf steigende Flanke
momentane Zeit mittels clock feststellen -> T1
Warten auf fallende Flank
momentane Zeit mittels clock feststellen -> T2
Warten auf steigende Flanke
momentane Zeit mittels clock feststellen -> T3


gesammte Zeit:  T3 - T1
Low-Zeit  T3 - T2
High-Zeit T2 - T1

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn clock() nicht genügend Auflösung bietet:
Entweder über mehrer Flanken messen
oder einen höher auflösenden Timer benutzen.
Die High-Performance-Counter von Windows könnten
da weiter helfen.

Autor: Johnny (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ohne Zusatzhardware wird das auf diese Weise nie vernünftig 
funktionieren mit dem seriellen Port.

Evtl. kannst Du mit dem Signal auf den Eingang der Soundkarte gehen und 
dann in der Software einen Mittelwert des PWM-Signals bilden.

Autor: Karl heinz Buchegger (kbucheg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ohne Zusatzhardware wird das auf diese Weise nie vernünftig
> funktionieren mit dem seriellen Port.

Da hat er allerdings recht.

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.