Moin, ich lese Spannungen über einen MCp3008 aus und auf meinem Raspi
habe ich ein Phyton Programm. wenn meine Spannung z.B. 14 V ist dann
sprint der Wert am Programm von 13,9 auf 13,97 und auf 14,05. Gibts da
einen Befehl wie man den Mittelwert bildet??
luky schrieb:> wenn meine Spannung z.B. 14 V ist dann> sprint der Wert am Programm von 13,9 auf 13,97 und auf 14,05.
Das sind weniger als 7 Bit (der Wert schwankt ein hundertstel), die du
tatsächlich verwenden kannst. Du hast offenbar einen ziemlich schlechten
Hardwareaufbau, wahrscheinlich mit Störeinkopplung und Brummschleifen.
An dieser Stelle solltest du zuerst angreifen, das ist die Ursache
deines Problems.
> Gibts da einen Befehl wie man den Mittelwert bildet??
Man kann das aus ein paar Befehlen selbst zusammenbauen...
Dazu musst du in bestimmten Zeitabständen mehrere Werte einlesen (das
nimmt dir auch ein "fertige" Mittelwertfunktion nicht ab), diese dann
zusammenaddieren und durch die Anzahl der eingelesenen Werte teilen.
Und wenn mir das zu viel Aufwand wäre, dann würde ich einfach mal Google
benutzen:
https://www.google.com/search?q=python+mittelwertbildung+funktion
luky schrieb:> Eventuell> Tiefpassfilter oder was gäbe es noch
Ein gleitender Mittelwert ist im Prinzip ein Software-Tiefpass.
Aber das würde eben eventuell nur das Symptom unterdrücken und nicht die
Ursache eines nicht optimalen Aufbaus lösen.
luky schrieb:> ok danke wie denkst du ist die Störung zu lösen ?
Man muss erst mal wissen, welche Störung das ist. Und dazu braucht man
Informationen zum Aufbau, also was wie womit verdrahtet ist. Denn "in
der Theorie" sollte da bei 14V am ADC dieser auch 14V sehen, in der
Praxis funktioniert das offenbar nicht.
> Tiefpassfilter oder was gäbe es noch
Kommt drauf an, wie schnell der Filter reagieren muss. Aber wenn du
hochfrequente, schnelle Störungen herausfiltern willst, wird es
letztlich immer eine Art Tiefpassfilter sein, das nur langsame, also
niederfrequente Änderungen durchlässt.
luky schrieb:> Eventuell Tiefpassfilter oder was gäbe es noch
Du hast Lothar glaube ich falsch verstanden. Er schlägt dir als erstes
vor deinen Aufbau zu verbessern.
Ein paar Dinge hat er ja bereits genannt.
Lothar M. schrieb:> Du hast offenbar einen ziemlich schlechten Hardwareaufbau,> wahrscheinlich mit Störeinkopplung und Brummschleifen. An dieser Stelle> solltest du zuerst angreifen, das ist die Ursache deines Problems.
Zusätzlich noch die Fragen zu den Basics:
Wie sieht dein Aufbau aus? (Mach ein Bild)
Hast du am ADC die im Datenblatt vorgeschlagenen 1uF, 10uF Kondensatoren
und am besten noch ein 100nF parallel?
Woher kommt dein Messsignal und wie hast du den ADC daran abgeschlossen?
Was für eine Bandbreite hat dein Messsignal? Und hast du einen
Eingangsfilter der Nyquist/Shennon erfüllt?
MaNi schrieb:> Was für eine Bandbreite hat dein Messsignal?
14V Gleichspannung, also annähernd 0 Hz.
> Und hast du einen Eingangsfilter der Nyquist/Shennon erfüllt?
Das mit den Herren Nyquist und Shannon wird erst später interessant,
wenn mal ein echtes Signal angelegt wird.
Weil diese Fragen für luky vermutlich zu abstrakt sind, probieren wir
das andersrum:
- was für ein Signal soll da gemessen werden?
- was soll hinterher mit dem Signal passieren?
- warum ist es ein Problem, dass der Signalwert ein wenig "zappelt"?
luky schrieb:> Phyton
Die von dir verwendete Sprache heißt übrigens nicht "Faiton", sondern
"Paison" (= Python). Zugegebenermaßen schieriger als "C"...
Lothar M. schrieb:> Die von dir verwendete Sprache heißt übrigens nicht "Faiton", sondern> "Paison" (= Python). Zugegebenermaßen schieriger als "C"...
Wikipedia --> "Der Name geht nicht, wie das Logo vermuten lässt, auf die
gleichnamige Schlangengattung Python zurück, sondern bezog sich
ursprünglich auf die englische Komikertruppe Monty Python."
Ja, wieder was gelernt...
Lothar M. schrieb:> Die von dir verwendete Sprache heißt übrigens nicht "Faiton", sondern> "Paison" (= Python). Zugegebenermaßen schieriger als "C"...
Python ([ˈpʰaɪθn̩], [ˈpʰaɪθɑn], auf Deutsch auch [ˈpʰyːtɔn]) Quelle:
Wikipedia
Ansonsten: Jeder soll nach seiner Façon selig werden.
Martin schrieb:> auf Deutsch auch [ˈpʰyːtɔn])
Uah, "Püüton", sagt das echt wer? Das sind dann die gleichen, die zu QT
auch "kuh tee" oder auch "kiu tii" statt wie vorgesehen einfach "kiut"
sagen?
Ist blöd wenn der Messwert zappelt da ich mit diesem noch weiterrechne.
Messsignal kommt von einer Batterie und nein ich habe keine
Kondensatoren verbaut
Lothar M. schrieb:> Martin schrieb:>> auf Deutsch auch [ˈpʰyːtɔn])> Uah, "Püüton", sagt das echt wer? Das sind dann die gleichen, die zu QT> auch "kuh tee" oder auch "kiu tii" statt wie vorgesehen einfach "kiut"> sagen?
Zu der Schlange sage ich tatsächlich "Pühton". Ist schließlich ein
Lehnswort, da gibt es keinen Grund, das "y" nicht als "ü" zu sprechen.
Lothar M. schrieb:> luky schrieb:>> wenn meine Spannung z.B. 14 V ist dann>> sprint der Wert am Programm von 13,9 auf 13,97 und auf 14,05.> Das sind weniger als 7 Bit (der Wert schwankt ein hundertstel)
Woher hast Du diese Information?
Falls die Beschaltung auf "max. 75V" Messen ausgelegt ist, wäre ein Bit
etwa 70mV, das Zappeln also eigentlich nur +/- 1 bit um die 13,97V.
Bevor man vorschlägt den Aufbau zu verbessern, sollte man ihn doch
zumindest ein bisschen kennen.
luky schrieb:> und nein ich habe keine Kondensatoren verbaut
Ja, war zu erwarten und deshalb zum wiederholten Mal: lass doch mal
deinen Schaltplan und deinen realen Aufbau sehen. Sonst postet doch auch
jeder sofort irgendwohin ein Foto von seiner Pizza beim
Hipster-Italiener. Warum schafft man das hier im Forum nicht.
> Ist blöd wenn der Messwert zappelt
Jeder Messwert wird immer zappeln. Nur mit gutem Aufbau bei weitem nicht
so stark. Trotzdem muss dein Programm damit zurechtkommen.
> da ich mit diesem noch weiterrechne.
Ja, war zu erwarten. Und was passiert deshalb?
mm schrieb:> Woher hast Du diese Information?
So kurz im Kopf überschlagen: 14V/0,15V (wegen 14,05-13,9) = 93 =
weniger als 7 brauchbare Bits, weil 7 Bits nämlich 2^8 = 128 sind.
> Falls die Beschaltung auf "max. 75V" Messen ausgelegt ist,
Was man mangles Plan und sonstiger Informatioenn nicht weiß...
> wäre ein Bit etwa 70mV
Bei einem 10-Bit ADC mit 1024 Schritten wäre 1 LSB nicht nur 70mV,
sondern es ist 70mV.
> das Zappeln also eigentlich nur +/- 1 bit um die 13,97V.
Ist es aber nicht. Es gehen also deutlich mehr Bits verloren, sodass
letztlich weniger als 7 übrig bleiben.
Wenn ich mir die 10k wegdenke und Vref=VCC=5V annehme, komme ich auf
63,5mV pro bit. Also wäre das Zappeln tatsächlich in der Größenordnung
2-3 digits - was mit Vref=VCC gar nicht so schlecht wäre.
Zum Ausrechnen mit den 10k bin ich grad zu faul, macht die Auflösung
aber schlechter und somit den Fehler kleiner.
Lothar M. schrieb:> Martin schrieb:>> auf Deutsch auch [ˈpʰyːtɔn])> Uah, "Püüton", sagt das echt wer?
Klar gibt es Leute die ˈpʰyːtɔn sagen. Warum auch nicht?
Noch was... in den meisten Zeichenprogramme gibt es Werkzeuge um Linien,
Rechtecke und Texte so zu "malen", dass sie auch ohne Mühen erkennbar
sind.
In der Regel werden Schaltpläne auch so dargestellt, dass der
Signalfluss zumindest der ortsüblichen Leserichtung entspricht. Hier
wäre das links nach rechts - also Eingänge der Schaltung (die zu
messende Batterie) links, der ADC rechts.
mm schrieb:> ... und wie ist Vref beschaltet? Vref=Versorgung?
jap Vref = 5V und das ist eine Sternschaltung die ich hierangebracht
habe die muss so sein damit die Spannungen die höhe haben mit denen der
MCP arbeiten kann und Anmerkung noch meine widerstände sind sehr genau
sorry ich weis dass es nicht schön gezeichnet ist aber grob ist alles
erkennbar
Bei ADC ist saubere Leitungsführung nach den Regeln der Kunst elementar
wichtig, um saubere Messergebnisse zu erhalten.
Vermutlich benutzt der ADC die 5V Versorgung als Referenz. Dadurch wird
die Leitungsführung doppelt so wichtig. Ich bezweifle allerdings, dass
die 5V stabil genug sind. Vermutlich brauchst du für den ADC eine
bessere Referenzquelle.
ja benutzt er auch der Wert an sich passt auch nur die leichten
Schwankungen sind nervig. Würde mir auch Vref messen lassen und den
gemessenen Wert als Vref nehmen allerdings ist der MCP auf 5v ausgelegt
und bei 5,1 wirds schwierig
die einen Diskutieren noch wie man Python auspricht, andere nutzen das
schon für ML, da läuft gerade ein schönes Heise Webinar...
Natürlich muss die analoge Seite sauber sein, die Frage nach Mittelwert
in Py ist aber auch einfach mit fertigen Statistikpaketen beantworten,
z.B.:
https://docs.python.org/3/library/statistics.html
Ich mag mich täuschen. Aber für mich sind "luky (Gast)" und "sebi
(Gast)" aus dem Beitrag "Spannungsstabilisierung" ein und
dieselbe Person. Immerhin beschreiben sie mehr oder weniger dasselbe
Problem und auch die Merkbefreitheit ist dieselbe.
luky schrieb:> hab mich bei Python hald verschrieben omg wie schlimm
So ist das, wenn man zwischen selbsternannte Deutschlehrer, Mediziner
und Juristen gerät. Lass sie einfach reden:
https://www.youtube.com/watch?v=LWU0hJ4K24s
luky schrieb:> hab mich bei Python hald verschrieben omg wie schlimm
Das kann passieren, das ist nicht schlimm. Es ist auch nicht schlimm,
daß Du da anscheinend etwas machen willst, von dem Du offensichtlich
nicht so sehr viel Ahnung hast. Schlimm ist, daß Du nicht sagst, was das
Ganze überhaupt werden soll, oder, kurz gefragt: WARUM Du das machen
willst und WOZU Du so eine hohe Genauigkeit brauchst.
luky schrieb:> jap Vref = 5V und das ist eine Sternschaltung die ich hierangebracht> habe die muss so sein damit die Spannungen die höhe haben mit denen der> MCP arbeiten kann und Anmerkung noch meine widerstände sind sehr genau
Äääh... bin ja jetzt schon eine Weile im Geschäft, aber von einer
"Sternschaltung" am ADC höre ich zum ersten Mal. Beim Drehstrommotor ja,
aber beim ADC???
Google findet da auch nur Forenposts, in denen eine sternförmige
Leitungsführung für Masse/Versorgung gemeint ist.
Normalerweise nimmt man einen ganz einfachen Spannungsteiler. Evtl. noch
einen Kondensator (100p .. 1n) oder einen Impedanzwandler falls der
Spannungsteiler zu hochohmig wird.
Zusammenfassend würde ich sagen, dass das "zappeln" bei Vref=Vcc sogar
weniger ist, als ich da erwartet hätte. Vielleicht dadurch, dass die
"Sternschaltung" einen Teil des "Drecks" aus der 5V-Versorgung mit ins
Messignal einprägt...
Jetzt zur ursprünglichen Frage:
Ich würde es wahrscheinlich manuell implementieren: Liste der letzten X
Werte und ganz klassisch Mittelwert darüber bilden - ist natürlich nicht
optimal/effizient, aber sonst langweilt sich der RaspPi ja.
Wenn man fertige Sachen nutzen will, wären numpy_ringbuffer und
numpy.mean Kandidaten.
mm schrieb:> Äääh... bin ja jetzt schon eine Weile im Geschäft, aber von einer> "Sternschaltung" am ADC höre ich zum ersten Mal.
Den Offset des Widerstands gegen eine feste positive Spannung braucht
man auch nur, wenn man auf einfach Art negative Spannungen mit einem
unipolaren ADC messen will. Siehe Spannungsteiler
Lothar M. schrieb:> mm schrieb:>> Äääh... bin ja jetzt schon eine Weile im Geschäft, aber von einer>> "Sternschaltung" am ADC höre ich zum ersten Mal.> Den Offset des Widerstands gegen eine feste positive Spannung braucht> man auch nur, wenn man auf einfach Art negative Spannungen mit einem> unipolaren ADC messen will. Siehe Spannungsteiler
Ja, mit der Schaltung wird ein Offset addiert. Aber der Name
"Sternschaltung" ist mir dafür noch nie unter gekommen.
Auch kann ich keinen Grund sehen, die Messung einer Batteriespannung mit
einem (positiven) Offset zu beaufschlagen. Wenn sich die Batterie der
Null auch nur nähert ist sie ja schon lange kaputt.
mm schrieb:> Auch kann ich keinen Grund sehen, die Messung einer Batteriespannung mit> einem (positiven) Offset zu beaufschlagen. Wenn sich die Batterie der> Null auch nur nähert ist sie ja schon lange kaputt.
Dann wäre so eine Schaltung sinnvoller? Mit R1 = 15kΩ, R2 = 47kΩ (und C1
= 100nF um ganz ganz ganz sicher zu gehen)?
luky schrieb:> hab mich bei Python hald verschrieben omg wie schlimm
Komisch, dass solche "Verschreiber" immer an Stellen passieren, die
massive Unkenntnis durchblicken lassen. Verschreiben tut man sich
gewöhnlich nicht systematisch ;-)
luky schrieb:> jap Vref = 5V und das ist eine Sternschaltung die ich hierangebracht> habe die muss so sein damit die Spannungen die höhe haben mit denen der> MCP arbeiten kann
Was soll denn dein Messbereich sein? Von minus 10 V bis etwa 50V? Falls
weniger, wird auch die Streuung weniger. Eine echte Referenzspannung
hilft wie schon gesagt, natürlich auch.
> und Anmerkung noch meine widerstände sind sehr genau
Das spielt hier keine Rolle.
Wenn Du 100 (oder mehr) Rohwerte im festen Zeittakt (z.b. 10 ms)
aufnimmst und hier postest (als Text, nicht handschriftlich), dann kann
man ggf. Muster erkennen (zyklische Streuung, rauschen,
Auflösungsprobleme, ...)