Hallo, ich habe eine Lade und Entladeschaltung für Kondensatoren aufgebaut und beschäftige mich gerade mit der Programmierung. Mit der Schaltung kann ich die Spannung am Kondensator messen, den Innenwiderstand messen und den Kondensator auf und entladen. Aktuell habe ich das Problem, dass wenn ich den Kondensator auf die gewünschte Spannung (selectedCapVoltage) auf-, oder entladen möchte, der Spannungswert kurz vor Ende hin und her zappelt. Das heißt wenn ich zum Beispiel auf 2 Volt laden möchte, das Display zwischen 1,9 und 2,0 Volt hin und her zappelt, so schnell, dass ich es nicht richtig sehen kann. Ich denken ich brauche eine Art Hysteresecode, damit der Transistor beim Erreichen der Auf-, oder Entladespannung schaltet. Vorab Danke für nützliche Tipps. Hier ist mein aktueller Code bzw. Die entsprechende Funktion: void chargeModeHandler() { float hysteresis = 0.005; if ((capVoltage + hysteresis) == selectedCapVoltage || (capVoltage - hysteresis) == selectedCapVoltage ) { holdCapvoltage(); } else if (capVoltage < selectedCapVoltage) { chargeCapvoltage(); } else if (capVoltage > selectedCapVoltage) { dischargeCapvoltage(); } }
Peter M. schrieb: > if ((capVoltage + hysteresis) == selectedCapVoltage || (capVoltage - > hysteresis) == selectedCapVoltage ) Floats sind nie exakt gleich. Für alles andere braucht man den Schaltplan.
Das Gleichheitszeichen sollte in Verbindung mit Fließkommazahlen
verboten werden.
Größer: Ja
Kleiner: Ja
Gleich: Selbst dran schuld
>float hysteresis = 0.005
Auf dem Papier: Ja
aber sind Deine A/D-Wandler überhaupt so genau?
Ich würde einfach die Anzeige auf dem Display nur 1x pro Sekunde updaten.
Beitrag #6464455 wurde vom Autor gelöscht.
Hier ist eine Schaltung, welche meiner ähnlich ist. Der AD Wandler hat 10 Bit. Also bei 5V Spannung eine Auflösung von ca. 4,8 mV. Ja aber wie bekomme ich es jetzt hin, das die Transistoren nicht mehr hin und her schalten. Das Auf und Entladen funktioniert, nur wenn der Wert sich dem Zielwert nähert, fängt er an zu schwanken. Ich will einfach nur, dass wenn die Zielspannung erreicht ist beide Schalter auf Low bleiben und nicht hin und her schwanken. Ladelogik: S1 S2 Laden HIGH LOW Entladen LOW HIGH Halten LOW LOW
Hi, wie wärs mit --> if (capVoltage <= (selectedCapVoltage + hysterese) && capVoltage >= (selectedCapVoltage - hysterese)) { holdCapvoltage(); } Gruß
Vielen Dank für die Antwort. Hat aber leider nicht funktioniert. Schalter springen immer noch hin und her.
Wenn der Kondensator die Schnauze voll hat, tut sich S1/Q1 mit dem Durchschalten schwer. Genaugenommen schon kurz vorher (Vcc - ~0,7).
Peter D. schrieb: > Floats sind nie exakt gleich. Natürlich können Floats exakt gleich sein. Das Problem ist, dass z.B. Konstanten, die als Dezimalzahl eingegeben werden, oft nur näherungsweise in einen ähnlichen Float-Wert konvertiert werden können. Aber ich stimme dir zu: Floatvergleich auf Gleichheit geht (meist) daneben.
Ja aber muss halt leider float verwenden. Oder wie soll ich sonst z.B. den Kondensator 2.15 Volt aufladen?
Pedro E. schrieb: > Ja aber muss halt leider float verwenden. Oder wie soll ich sonst z.B. > den Kondensator 2.15 Volt aufladen? ist die Frage ernst gemeint? Lade ihn einfach auf 2150mV auf, dann hat du einen integer. Pedro E. schrieb: > Hat aber leider nicht funktioniert. Schalter springen immer noch hin und > her. dann musst du die Hysterese großer machen. sie muss z.B. großer sein als der Spannungssprung, der sich bei der Stromänderung am ESR ergibt.
Hallo, versuch mal deine Hysterse ein bisschen gößer zu machen. +-1 ADC Wert ist evtl. bisschen schmal gewählt. oder mach das messen unabhänig von der Anzeige. Lass den immer messen und die Transitoren steuern, aber du updatest das Diyplay nur alle 0.5s-1s. Welche größe haben denn die Kondensatoren, so wie in dem Bild von dir mit nur paar pF's ? der Messvorgang zeiht ja auch Strom (also Ladung vom Kondensator der zu ein Spannungsfall führt) zwar wenig aber evtl doch so das der ADC Wert um >+-1 schwankt. Ansonsten hier im Forum bei Projekt&Code ist auch der Transistortester zu finden. Da kannste ja mal im Code reinschauen wie die das da gelöst haben. Gruß
Es gibt mehrere Möglichkeiten das "Hin-Und-Her-Schalten" abzustellen: 1. Du fragst nicht so schnell wie möglich ab, oder 2. Du baust eine sinnvolle Hysterese ein, oder 3. Du verwendest eine Kombination mit variablen Schaltschwellen, oder 4. Du implementierst einen, einer Dissertation würdigen, Regler. Und, und, und. Noch was zur Abfrage von Fließkommazahlen: Natürlich funktionieren die üblichen Verdächtigen wie ">", "=" und "<" auch bei Fließkommazahlen, aber die Abfrage auf Gleichheit funktioniert nur sonntagnachmittags um exakt 3 Uhr wenn gerade der frische Kaffee auf dem Tisch steht. Willst Du also auf Nummer sicher gehen, so frage im Intervall: < ... >= ... oder <= ... > ... Damit erschlägst Du dann auch den "Sonderfall".
Pedro E. schrieb: > Oder wie soll ich sonst z.B. > den Kondensator 2.15 Volt aufladen? ich würde den auf 215 centi Volt aufladen ist integer
Hat sich eigentlich noch nirgends herumgesprochen, dass Computer mit dezimalen Zahlen, im Grunde genommen, nichts anfangen können? Gehe ich von einem 10 Bit A/D-Wandler aus, so liegen 5V bei 1023 (3FFh). Diesen Wert tut auch der A/D-Wandler - ohne Umrechnung - direkt kund. Also kann eine Abfrage nach 2,0V auch durch eine Abfrage nach 408 (198h) erledigt werden. An welcher Stelle hier eine Umrechnung nötig ist - außer bei der Definition der Konstanten für den Präprozessor - erschließt sich mir nicht. Auch sehe ich keinen Grund dafür irgendwo Fließkommabibliotheken vorzusehen. Einzige Ausnahme: Die Darstellung im Display, bei der eine fixe Darstellung mit fixem Komma (Punkt für die Ausländer) am sinnvollsten ist. Also ein bisschen itoa () statt (?)printf () - in welcher Form auch immer - und sogar der freie Speicher wird sich freuen.
:
Bearbeitet durch User
Achim S. schrieb: > ist die Frage ernst gemeint? Lade ihn einfach auf 2150mV auf, dann hat > du einen integer. Joachim B. schrieb: > ich würde den auf 215 centi Volt aufladen ist integer Die Lösung ist manchmal zu einfach, um von selbst drauf zu kommen.
Wie gesagt ich bin Anfänger in der Programmierung. Werde eure Lösungsvorschläge ausprobieren. Dank an alle für die nützlichen Infos.
Pedro E. schrieb: > Hier ist eine Schaltung, welche meiner ähnlich ist. Nun, bei 0,5Ω und 5V fließen bis zu 10A, d.h. Du hast große Spannungsabfälle an den Leitungen. Da ist es kein Wunder, daß die gemessene Spannung beim Ein-/Ausschalten ordentlich schwankt. In der Praxis löst man das so, daß zum Messen der Strom kurzzeitig abgeschaltet wird (Sperrverzögerung der Transistoren beachten).
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.