Benötige etwas Hilfe bei der Wahl von Komponenten. Möchhte gerne eine Multikanal Thermometer Schaltung aufbauen. Auf Basis voon PT100 Wiederständen. Als Grundschaltung für einen Kanal wollte ich die schon bekannte Ausführung mit LM317 als Konstantstrom-Quelle und ein LM324 zum abkoppeln, offset elimienieren und verstärken nutzen. Da ich vor habe 5 Pt100 Wiederstände zu nutzen bin ich mir bei dem Controller noch nicht ganz sicher. Kann ich mit einem ATMega8, 5 separate Spannungen digitalisieren und jeweils an ein 5 Zeilen LCD-Display Anzeigen ? Welches Display würdet ihr mir dafür empfehlen ? Gruß
Biin doch noch ein Anfänger auf dem Gebiet :) Der Offset beträgt beim LM324 3,5mV. Hab jetzt mal bei einem elektronik anbieter die OP's verglichen und bin auf den LMC6484 gestossen. Der ist relativ günstig knapp 2,5€ und hat einen Offset von 0,75mV Denke der sollte für meinen Einsatz ok sein :)
Suchst du Schaltungen zum PT100 guckst du hier Beitrag "Temperaturmessschaltung möglichst genau?" Gruss Helmi
Da habe ich schon etwas gelesen. Wie ich sehen konnte bevorzugen tust du den OPA2340 .... Kostet aber fasst das doppelte wie ein IC LMC6484AIN
und da ich mindestens 4 davon benötige sammelt sich der Preisunterschied :)
Schon mal eine Fehlerrechnung gemacht ? Welchen Temperaturfehler produziert 1mV offsetspannung ?
@thermo Wenn du dir die PT100 Box ansiehst ist dort eine moeglichkeit der automatischen Kalibrierung anhand von 2 Festwiderstaenden beschrieben. Wenn du das in regelmaessigen Abstaenden machst fallen Offset und Gainfehler der Schaltung raus und Stabilitaet und Genauigkeit wird nur noch durch die beiden Festwiderstaende bestimmt. Und die sind wesentlich besser als die OPs . Damit kannst du auch TL062 und Konsorten einsetzen. Gruss Helmi
Nur mal als Hinweis. Es kommt nicht darauf an sehr genau zu messen. Auch ein Fehler von 0.5° C ist für meine Anwendung OK! Das Thermometer soll für kryotech Anwendungen benutzt werden. Messbereich -200°C bis 50°C. Wichtig ist die schnelle Reaktionszeit (Ansprechzeit) Ein weiterer Chip im Bereich von 2,5€ ist der IC AD8604ARU ( Drift 2µV / °C) , Offset 0.6mV
Weil ein OP07 ein einfacher OP ist ich brauche aber 4 Stück in einem Gehäuse :) @Helmi Danke für den Tip bezüglich PT100box ! Muss es nur noch schaffen die Schaltung zu verstehen. Deine Multiplexer Variante ist sicherlich eleganter und Kostengünstiger. Aber ich wollte es erstmal mit 4 quad Op's machen. Der ATMega8 hat 6 ADC Kanäle wenn ich an 4 davon 4 Verstärkte PT100 Spannungen lege müsste ich doch in der Lage sein auch ohne multiplexer auszukommen. Ich bin Softwareentwickler also sollte der Assembler / C Teil für mich kein Problem darstellen. Stellt sich die Frage welches 4 Zeiliges Display für die anzeige verwenden. Und kann ich über den ATMega8 dieses ansteuern ?
>Deine Multiplexer Variante ist sicherlich eleganter und Kostengünstiger. >Aber ich wollte es erstmal mit 4 quad Op's machen. Aber dann hast du den Verstaerker mit den ganzen Widerstaenden 4 mal und dann 4 mal abgleich der Schaltung. Bei meiner Schaltung kannst du auch einen 8-fach Multiplexer nehmen und hast 8 Kanaele. Wenn du jetzt meine Variante mit den Festwiderstaenden nimmst brauchst du 2 Kanaele fue rfuer die Festwiderstaende und hast 6 Kanaele fuer die Messung. Vorteil du brauchst nur 2 genaue Festwiderstaende an hand deren die anderen Kanaele softwaremaessig kalibriert werden. Also keine Potis in der Schaltung. >Der ATMega8 hat 6 ADC Kanäle wenn ich an 4 davon 4 Verstärkte PT100 >Spannungen lege müsste ich doch in der Lage sein auch ohne multiplexer >auszukommen. Schon aber der Aufwand ist hoeher. Siehe oben. >Ich bin Softwareentwickler also sollte der Assembler / C Teil für mich >kein Problem darstellen. Das ist auch immer der Teil der die geringsten Probleme macht. >Stellt sich die Frage welches 4 Zeiliges Display für die anzeige >verwenden. Da kannst du wohl jedes gaengige Display verwenden. Die sind fast alle gleich. >Und kann ich über den ATMega8 dieses ansteuern Das sollte wohl moeglich sein. Haben viele andere auch hinbekommen. Koennte die da auch Code fuer geben. Schaltung anbei. Gruss Helmi
Ok, Helmi hasst mich überzeugt ! Werde dein Board so wie es ist nachbauen ! Was muss ich an deiner Schaltung anpassen damit der Messbereich für die 4 PT100 Wiederstände für -200°C bis +50°C ausgelegt wird ? Gruß
OK, hab deine Beschreibung nochmal genauer durchgelesen. Die zwei anderen Kanäle kalibrieren sich anhand von zwei Festwiederständen. -200C entspricht 18,49 Ohm +50°C entspricht 119,40 Ohm Demzufolge müsste ich sowieso um die Werte einzustellen Potis verwenden da es keine Festwiederstände mit diesen werten gibt :)
Nimm einfach Festwiderstände und als Softwareprofi sollte es für Dich kein Problem sein, die Meßwerte auf °C entsprechend genau umzurechnen.
@thermo Potis haben eine "Schleifbahn". Die ist niemals ganz exakt. Möglicherweise bei Verwendung von 10-Gang-(Spindel-) Poti lässt sich das hinreichend genau einstellen. Aber Du brauchst ein exaktes Multimeter mit mind. 4 1/2 Stellen Genauigkeit im 200 Ohm Messbereich. Beachte: Nicht nur der Anzeigeumfang des Ohmmeters, sondern die WIRKLICHE spezifizierte Genauigkeit muss stimmen. Und das Gerät muss neu sein, oder gültig kalibriert. Wer hat sowas schon? Alternative: =========== Festwiderstände ( ja, nur mit einfachem "i" ): Hast Du schonmal was von Reihen- oder Parallelschaltung gehört ? 119,40 Ohm Aus einem Vorrat von 120 Ohm Werten, mit 1% Toleranz, da findet sich bestimmt ein "passender". Allerdings wieder das Problem des Herausmessens mit exaktem Ohmmeter... Wert kann theoretisch exakt erreicht werden durch Parallelschalten eines 24 kOhm zum 120 Ohm. Wenn der 120 Ohm ein hochgenauer Messwiderstand ist (z.B. 0,01%), so wird durch einen 1% Wert des 24k das Ergebnis trotzdem im 0,01% Genauigkeitsbereich liegen. Nachteil ist: Messwiderstände mit 0,01% sind leider recht teuer. 18,49 Ohm Kann sinngemäß ebenso zusammengesetzt werden. Wichtig wäre wiederum ein hochgenauer Grundwert, möglichst exakt am Wunschwert. Z.B. zwei 10 Ohm Messwiderstände (0,01%), in Reihe, gibt 20 Ohm. Dazu fehlt jetzt die Parallelschaltung eines 245 Ohm (rechnerisch ermittelt). Wenn sowieso die obigen 120 Ohm als hochgenaue Werte vorrätig sind, bietet sich an, zwei davon in Reihe, also 240 Ohm, ergänzt um einen 4,99 oder 5,11 aus der E96 Reihe. Ob allerdings deine restliche Schaltung die hiermit erzielte Genauigkeit hergibt, kann ich nicht beurteilen.
Ich bin zwar kein Elektroniker aber Reihen oder Parallelschaltung ist mir bekannt :) Die 119,4 Ohm sollten denke ich mit etwas Auswahl der 1% Metallschichtwiderstände leicht ausgepickt werden können mit entsprechendem DMM. R2 = 18,49 Ohm / (1 - 18,49/R1) Hab auf die schnelle etwas C-Code geschrieben um zu ermitteln welche Widerstandskombination bis 100 Ohm rein rechnerisch am besten passen müsste. Hier der Source :
1 | #include "stdafx.h" |
2 | #include <math.h> |
3 | |
4 | const int widcount = 23; |
5 | |
6 | float rg = 18.49f; |
7 | float r1[]={20.0f, |
8 | 22.0f, |
9 | 23.2f, |
10 | 24.0f, |
11 | 24.9f, |
12 | 27.0f, |
13 | 30.0f, |
14 | 33.0f, |
15 | 36.0f, |
16 | 39.0f, |
17 | 43.0f, |
18 | 47.0f, |
19 | 51.0f, |
20 | 51.1f, |
21 | 56.0f, |
22 | 62.0f, |
23 | 68.0f, |
24 | 68.1f, |
25 | 75.0f, |
26 | 82.0f, |
27 | 90.9f, |
28 | 91.0f, |
29 | 100.0f}; |
30 | |
31 | |
32 | int findeoptimalenR2(float r2) |
33 | {
|
34 | float difopt = 0.0f; |
35 | int opt = 0; |
36 | |
37 | for(int n=0;n<widcount;n++) |
38 | {
|
39 | if(difopt == 0.0f) |
40 | difopt = (float) fabs(r2 - r1[n]); |
41 | else
|
42 | {
|
43 | if(fabs(r2 - r1[n]) < difopt) |
44 | {
|
45 | difopt = (float) fabs(r2 - r1[n]); |
46 | opt = n; |
47 | }
|
48 | }
|
49 | }
|
50 | |
51 | return opt; |
52 | }
|
53 | |
54 | int main(int argc, char* argv[]) |
55 | {
|
56 | float r2 = 0; |
57 | |
58 | printf("R1 R2 Ropt (r2-Ropt) RGes=18,49 Ohm\n"); |
59 | printf("-------------------------------------------------------------\n"); |
60 | |
61 | for(int i=0;i<widcount;i++) |
62 | {
|
63 | r2 = rg / (1 - (rg/r1[i])); |
64 | |
65 | int opt = findeoptimalenR2(r2); |
66 | printf("%7.3f %7.3f %7.3f %7.3f\n",r1[i],r2,r1[opt],(float) fabs(r2 - r1[opt])); |
67 | }
|
68 | |
69 | return 0; |
70 | }
|
Hab mir die verfügbaren Metallschicht-Widerstände (1%) bis 100 Ohm bei rs-online ausgepickt und darauf ist der surcecode entstanden. Als Ergebnis bekommt man eine Tabelle mit den einzelnen verfübaren Widerständen für R1 dann den entsprechend idealen Wert für R2 bzw. den nächsten optimalen und die diferenz von tatsächlich errechneten und verfügbaren R2. Rein rechnerisch bekommt man mit der Kombination aus R1=91 Ohm und R2=23.2 Ohm das nächst beste Ergebnis um auf den Wert von 18.49 Ohm zu kommen.
@thermo Du brauchst die Widerstaende gar nicht exakt bei -200Grad (18.49) und 50 Grad einzustellen. Es gehen auch die naechsten glatten Normwerte. Z.B. 20 Ohm und 120 Ohm. Die Temperaturen die denen entsprechen kennst du und damit kannst du den Rest kalibrieren. Die must doch nur 2 Punkte kennen und damit kannst du deine lineare Funktion doch bestimmem. Die Werte sollten nur moeglichst am Anfang und am Ende deines Messbereiches liegen. Von daher brauchst du dir keine krummen Werte zusammenzuschalten. Dem Prozessor ist es ziemlich egal mit welchen Werten er rechnen muss. Gruss Helmi
Trotzdem hier der Sourcecode für das Reichelt Sortiment bis 1KOhm Metalschicht 1% // parallel.cpp : Definiert den Einsprungpunkt für die Konsolenanwendung. // #include "stdafx.h" #include <math.h> const int widcount_reichelt = 151; float r1_reichelt[]={19.1f, 20.0f, 21.0f, 22.0f, 22.1f, 24.0f, 24.9f, 25.5f, 26.1f, 27.0f, 27.4f, 30.0f, 30.1f, 33.0f, 33.2f, 34.8f, 36.0f, 36.5f, 38.3f, 39.0f, 39.2f, 40.2f, 43.0f, 46.4f, 47.0f, 47.5f, 49.9f, 51.0f, 51.1f, 52.3f, 56.0f, 56.2f, 59.0f, 60.4f, 61.9f, 62.0f, 63.4f, 66.5f, 68.0f, 68.1f, 69.8f, 71.5f, 75.0f, 80.6f, 82.0f, 82.5f, 84.5f, 86.6f, 88.7f, 90.9f, 91.0f, 93.1f, 95.3f, 97.6f, 100.0f, 102.0f, 105.0f, 110.0f, 113.0f, 115.0f, 120.0f, 121.0f, 124.0f, 127.0f, 130.0f, 133.0f, 137.0f, 140.0f, 150.0f, 154.0f, 158.0f, 160.0f, 169.0f, 174.0f, 180.0f, 182.0f, 196.0f, 200.0f, 210.0f, 215.0f, 220.0f, 221.0f, 232.0f, 237.0f, 240.0f, 243.0f, 249.0f, 255.0f, 261.0f, 270.0f, 274.0f, 280.0f, 294.0f, 300.0f, 301.0f, 316.0f, 324.0f, 330.0f, 332.0f, 340.0f, 348.0f, 357.0f, 360.0f, 365.0f, 374.0f, 383.0f, 390.0f, 392.0f, 402.0f, 412.0f, 422.0f, 430.0f, 432.0f, 442.0f, 453.0f, 464.0f, 470.0f, 475.0f, 487.0f, 499.0f, 510.0f, 511.0f, 523.0f, 536.0f, 549.0f, 560.0f, 562.0f, 590.0f, 604.0f, 619.0f, 620.0f, 634.0f, 649.0f, 665.0f, 680.0f, 681.0f, 698.0f, 715.0f, 732.0f, 750.0f, 787.0f, 806.0f, 820.0f, 825.0f, 845.0f, 866.0f, 887.0f, 909.0f, 910.0f, 953.0f, 976.0f}; int findeoptimalenR2(float* r1,float r2,const int anzahl) { float difopt = -1; int opt = 0; for(int n=0;n<anzahl;n++) { float dif = (float) fabs(r2 - r1[n]); if(difopt == -1) difopt = dif; else { if(dif < difopt) { difopt = dif; opt = n; } } } return opt; } void rechne_tabelle(float rg,float* r1,const int anzahl) { float r2 = 0; float optdif = -1; float bestr1 = 0; float bestr2 = 0; printf("R1 R2 Ropt (r2-Ropt) RGes=%7.3f Ohm\n",rg); printf("---------------------------------------------------------------- ------\n"); for(int i=0;i<anzahl;i++) { if(rg < r1[i]) { r2 = rg / (1 - (rg/r1[i])); int opt = findeoptimalenR2(r1,r2,anzahl); float dif = (float) fabs(r2 - r1[opt]); printf("%9.3f %9.3f %9.3f %9.3f\n",r1[i],r2,r1[opt],dif); if(optdif == -1) optdif = dif; else { if(dif < optdif) { optdif = dif; bestr1 = r1[i]; bestr2 = r1[opt]; } } } } printf("\n\n beste kombination r1=%9.3f || r2=%9.3f\n",bestr1,bestr2); } int main(int argc, char* argv[]) { rechne_tabelle(18.49f,r1_reichelt,widcount_reichelt); printf("\n\n"); rechne_tabelle(119.4f,r1_reichelt,widcount_reichelt); return 0; }
beste Werte für 18,49Ohm mit 63,4 Ohm || 26,1 Ohm und für 119,4 Ohm -> 470 Ohm || 160 Ohm
@thermo Du machst die das Leben unnoetig kompliziert. Mach 20 u. 120 Ohm rein. Die dementsprechenden Temperaturen must du sowieso in der Software eintragen. Ob du das jetzt -200 und 50 eintraegst oder -19xx und 5x eintraegst ist der CPU egal. Fue rdie CPU gibt es keine schoenen Zahlen. Gruss Helmi
So, hab nun nach Helmis Vorschlag eine Schaltung mit einem OPA4340 aufgebaut. Kontsantstromquelle über den ersten OP und dann einen Differenzverstärker dahinter. Als Spannungs-Referenz füt die Konstantstromquelle habe ich einen REF5050 von TI eingesetzt. Liefert konstant 5.02V laut meinem Multimeter. Funktioniert auch alles Prima ! Die gemässene Spannung am Ausgang entspricht relativ genau der erforderlichen Spannung in Bezug auf die Temperatur. Mein nächstes Problem liegt darin das ich zwei externe SPI Devices an den ATMega16 anschliessen muss. Einen externen 12Bit ADC + das Siemens S65 Display. Wie geht man da am besten vor ? Das Display soll unter anderem die Temperatur von vier PT100 Sensoren anzeigen die über multiplexer geschaltet werden. Der Ablauf sollte wie folgt sein : - Multiplexer auf PT100-1 schalten. - ADC initialisieren. - Wert digitalisieren - ADC deaktivieren - Digitalisierten Wert auf Temperatur umrechnen - Wert auf dem Display anzeigen. Die oben aufgeführten Schritte für die anderen drei PT100 Widerstände wiederholen. Wie am besten beide SPI Interfaces ansteuern ? Gruß
>Wie geht man da am besten vor ? >Das Display soll unter anderem die Temperatur von vier PT100 Sensoren >anzeigen die über multiplexer geschaltet werden. >Der Ablauf sollte wie folgt sein : >- Multiplexer auf PT100-1 schalten. >- ADC initialisieren. >- Wert digitalisieren >- ADC deaktivieren >- Digitalisierten Wert auf Temperatur umrechnen >- Wert auf dem Display anzeigen. Sollte schon so funktionieren. Wobei man das vielleicht noch etwas anders machen kann. Am besten schaltest du den MUX direkt nach der AD-Wandlung schon um. Dann hat die Schaltung Zeit sich einzuschwingen waehrend du den Wert umrechnen kannst und zur Anzeige bringst. So hast du etwas schnellere Messzyklen. Aber wenn du Zeit hast geht das auch so. Aber wie gesagt nach dem Umschalten des MUX etwas warten damit die Schaltung sich einschwingen kann. Gruss Helmi
Danke Helmi für den Vorschlag , hört sich logisch an. Als Multiplexer habe ich die ADG709BRUZ im Auge. Haben 14nS Umschaltzeit und einen relativ geringen Wiederstand von 3 Ohm. Mall sehen wie Weit ich komme.
>Haben 14nS Umschaltzeit und einen relativ geringen Wiederstand von 3 >Ohm. Es ist nicht nur die Umschaltzeit des MUX sondern auch die einschwingzeit der OPs mit ihren Kapazitaeten usw. Rechne mal mit mS Umschaltzeit.
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.