Hallo, ich möchte gerne einen Druckgeber auswerten. Dazu dachte ich an einen Spannungsteiler mit 200Ohm und eben dem Sensor. Nur wir rechne ich den gelesenen Spannungswert dann in den entsprechenden Druck um? Gruß Uwe
Puh, ich war da ja faul... Ich habe zu jedem Druckwert (volle bar) über den Widerstandswert den Wert des ADCs errechnet und in einer Tabelle abgespeichert. Zur Auswertung: Dann hole ich mir 2 Werte aus der Tabelle und sehe nach, ob der der gelesene Wert dazwischen liegt - wenn nein, 1 bar weiter und den nächsten Wert aus der Tabelle holen. sonst: ich teile die Differenz in x (20) Teile auf und suche den Punkt, wo der gelesene Wert über dem aufaddierten liegt. (Rundungsfehler!) Dann habe ich meinen Wert mit einer Genauigkeit, die mir genügt. Man programmiert diese Routine etwas tricky um die Rundungsfehler in den Griff zu bekommen ! Hier mal mein Basic-Code:
1 | ConvertDruck: |
2 | If Ct_Druck<n_Mittel Then Ct_Druck=Ct_Druck+1 ;Anzahl mitzählen |
3 | I=n_Mittel-1:Repeat:Druck_1[I]=Druck_0[I]:I=I-1:Until I=0;Buffer rotieren |
4 | hDruck_ADC=ADRESH:lDruck_ADC=ADRESL ;Druck-Wert aus ADC lesen |
5 | If_Bit=0:Druck[1]=0 ;Anfangsdruck der Tabelle 0,0 bar |
6 | If Druck_ADC<1000 Then ;kein Kabelbruch Drucksensor ? |
7 | If Druck_ADC>50 Then ;kein Kurzschluß Drucksensor ? |
8 | @ Set_Tbl _Tbl_Druck |
9 | Gosub ReadWord |
10 | If DummyW Then ;Anfangsspannungswert ADC nicht schon 0 ? |
11 | Dummy2W=DummyW |
12 | Repeat |
13 | Dummy1W=Dummy2W:Gosub ReadWord ;alte Obergrenze als Untergrenze übernehmen und nächster Wert aus Tabelle |
14 | If DummyW Then ;auch nicht 0 ? |
15 | Dummy2W=DummyW ;neuen Wert als Obergrenze übernehmen |
16 | DummyW=1000 ;1000 mbar als Default setzen |
17 | If Druck_ADC>=Dummy1W Then |
18 | If Druck_ADC<=Dummy2W Then;gemessener Wert liegt zwischen beiden Tabellenwerten ? |
19 | DummyW=Dummy2W-Dummy1W:Dummy1W=(Druck_ADC-Dummy1W)*1000:DummyW=DIV32 DummyW:If_Bit=1 |
20 | Endif |
21 | Endif |
22 | Druck[1]=Druck[1]+DummyW ;Wert für dieses Intervall addieren |
23 | Else |
24 | If_Bit=1 |
25 | Endif |
26 | Until If_Bit |
27 | Endif |
28 | Endif |
29 | Endif |
30 | |
31 | ;Umrechnung Druck |
32 | ;ADC-Wert für Druck |
33 | Tbl_Druck: ;0-5 bar in 1bar-Schritten |
34 | @ DW 64,248,362,447,505,564,0 |
Hmm dankeschön! Also schon über ne Lookup Tabelle? Wäre es nicht einfacher ne Tabelle mit 1024 Einträgen zu erstellen? Dann spare ich mir das ewige vergleichen. Zumal ich gerne eine Genauigkeit von 0,1Bar hätte. Wie rechne ich überhaupt die entsprechende Spannung aus? Das ist ja dann ein belasteter Spannungsteiler oder?
Ich weiß ja nicht, welchen uC Du nutzen möchtest. Ich habe mit einem PIC gearbeitet, der einen deutlich höheren Eingangswiderstand gegenüber den 200 Ohm Sensoren hat. Er ist sogar so hoch, daß ich ihn in der Rechnung gar nicht berücksichtigt habe. Und wie willst Du mit den Werten auf 0,1 bar genau messen ? Das ist doch auch sicher so eine Druckdose, die einen Schiebewiderstand bewegt. Da kannst Du Dich über 0,5bar freuen. Und laß Dir von dem Rechenpolygon keine Genauigkeit vortäuschen ! Ich wollte auch keinen (kostbaren) Platz für 1024 Werte opfern. Etwas Hirn spart da schon mal knappen Platz.
Ich verwende einen AVR(ATMega 16/32). Da ist der Eingangswiderstand ja auch recht hochohmig. Wie der Druckgeber intern aufgebaut ist, weiß ich nicht. Aber genauer wie 0,5Bar sollte er laut Datenblatt schon messen.
OK, wer ist der Hersteller des Druckgebers, wie heißt die Bestellnummer - ich such mir selbst das Datenblatt. In Deiner Tabelle berühren sich die Worst-Case-Werte ja an den 0,5bar-Schritten. Wie soll da 0,1bar möglich sein ?
Das Datenblatt musst du nicht suchen, das habe ich angehängt :) Stimmt, die Überschneidung ist mir noch gar nicht aufgefallen. Das ist aber schade, ich hätte halt schon gerne eine Schrittweite von 0,1 Bar.
Ja, genau so ein "Ding" habe ich von Motometer hier. Du kannst evtl. Druckänderungen so fein auflösen, aber ich habe hier auch einen Druckmesser, da habe ich das Gefühl, daß der Schleifer manchmal etwas "hängt" und der Druck schon stärker ansteigen muß, damit sich der gemessene Wert ändert. Der absolute Druck ist halt immer mit einem systematischen Fehler behaftet, je nach Kennlinie der Schleifbahn. Für grobe Sachen reicht der aus und ist bezahlbar.
Naja was er in Wirklichkeit misst, ist ja nicht so wild. Wichtig ist halt, dass die Anzeige dann im 0,1 Bar bereich interpoliert. ;) Der kritische Bereich ist eh um 1 Bar oder so. Also erst wenn der Druck um 1 Bar fällt wirds kritisch. Wie hast du den Geber ausgewertet? Ohne Spannungsteiler? Momentan läuft der ADC mit der internen Referenzspannung von 2,56V. Daher hab ich halt den 1:1 Spannungsteiler. Aber ich könnte ja auch auf 5V Referenzspannung gehen.
Also wenn ich mir den Toleranzbereich ansehe, ist da nichts mit 0,1Bar. Bis 2 Bar sinds bestenfalls 0,5 Bar und dann wirds rapide schlechter. Nimm ne simple Tabelle in 0,5Bar Schritten (= 19 Einträge) und gut is. Peter
Ja klar mit einem Spannungsteiler, anders geht es nicht. Ich arbeite hier mit 5V Systemen, wo mir die Genauigkeit der 5V-Versorgung als Referenz ausreicht.
Gemeinerweise ist Kopieren aus dem VDO-PDF verhindert, hier deshalb abgetippt die Kennlinie mit Toleranzschlauch. Die mittlere Linie sieht bis auf einen Versatz nach oben ziemlich linear aus, aber die Abweichungen sind am oberen Ende schon recht groß.
normal wird eh nur bis 6 Bar gemessen. Daher ist es egal wenn er darüber ungenauere Werte anzeigt.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.