Hallo, ich habe ein Problem bei der Spannungsmessung an meinem ATmega. Folgendes Problem, über eine ACS712 wird ein Strom an einer Glühlampe gemessen. Der gewandelte Spannungswert wird an den ADC meines ATmega übergeben. Komischerweise zeigt mir aber der Atmega bei unterschiedlichen Strömen an der Glühlampe oftmals die gleiche Spannung an. Z.b. wenn an der Lampe 3A anliegen bekomme ich den Wert 500, genau so aber ab und an wenn 3,5 A anliegen kommt der Wert 500. An der Glühlampe und an der Hardware und Software wird aber nichts geändert. Die Spannungsversorgung habe ich mit einem USB Netzteil gestaltet. Wenn ich mir nun das Messsignal vom Sensor ansehe sind da ziemliche Wellen drauf. Wenn ich den Atmega aber über die USB Buchse vom PC versorge sind diese weg. Kann es sein, dass der Atmega die "Oberweillen" mit misst? Wenn ja wie kann ich bei Verwendung des USB Netzteils diese wegbekommen?
Sorry habe beides gerade nicht zu Hand, aber ist es dein therotisch möglich, dass das Netzteil die Fehlerverursacht?
Peter schrieb: > Bis wie viel Herz registriert der ADC denn Spannungen? Das musst du doch wissen. Du hast das Programm geschrieben. In welchen Zeitabständen misst du und mit welcher Frequenz lässt du den ADC laufen.
Bekomme die ACS7.. auch nicht wirklich zum laufen. Die Ausgabespannung rauscht viel zu stark. Die Null-Strom-Spannung passt auch nie. Sogar bei Typen welche extra einen Referenzspannungsausgang haben. Dort misst man auch nie diesselbe Spannung. Das liegt nicht am Mega oder an dessen ADC. Das liegt am ACS bzw. an dessen Benutzung. Evt. gibts da nen Trick? gruß cyblord
Peter schrieb: > ich habe ein Problem bei der Spannungsmessung an meinem ATmega. > Komischerweise zeigt mir aber der Atmega bei unterschiedlichen > Strömen an der Glühlampe oftmals die gleiche Spannung an. Dann stimmt wohl Dein "analoges Frontend" nicht. Schaltplan? Gruss Harald
Schaltplan ist ganz einfach, am Eingang des ACS ist in Reihe die Lampe, Sekundär sind 5V und GND angeschlossen, am Filter ein 2,2 uF wie von Allegro vorgeschlagen, am Ausgang ein 2 KiloOhm Widerstand, dann eine Diode und Parallel ein Kondensator und dazu ein Widerstand 1Mega damit sich der Kondensator wieder entlädt, das ganze geht dann in den ADC
In meinem Datenblatt ist am Filter ein 10n Kondensator. Lass man die Diode weg, die stört für deine Messung.
Die Diode benutze ich zur Gleichrichtung!? Ist im Datasheet bei den Anwendungsfällen so drin...
Wen willst du Gleichrichten? Die Spannung die am Kondensator ansteht wird langsam über den 1M Widerstand entladen. Die gemessene Spannung kann schon irgendwo tiefer sein.
Schon klar, du misst Wechselstrom. ICh habe mich mit den Dingern nur mit Gleichstrom beschäftigt. Sind etwas pingelig die Dinger. Stromversorgung muss ganz sauber sein, den Filterkondensator sucht man am besten nach geringstem Rauschen aus. Wirklich wiederholbare Messergebnisse gab es erst ab min. 20 Messungen und Mittelwertbildung.
Also sollte ich lieber 10-20 mal hinter einander messen und den Mittelwert bilden? Habe jetzt alles 10ms gemessen und daraus ein Mittelwert gemacht, also sind ca. 150ms vergangen bei 15 Messungen und dem Mittelwert. Wenn ich dann evtl ein Phasenanschnitt mache, ist das quatsch oder? Also wirklich in den 10ms 10 mal messen oder?
Ich habe in Freerunning Modus dann letztendlich 64mal gemessen und den Mittelwert gebildet. Dann war das Ergebnis durchaus brauchbar. Den Zyklus habe ich alle 200msec gestartet, für eine Ausgabe auf ein LCD schnell genug.
Naja ich könnte in den 10ms vllt 10 mal messen und die vergangene Zeit messen, die ich dann wieder vom Phasenanschnitt abziehe, dann sollte ich auch ordentliche Werte erreichen oder? Ich muss ja definitiv aller 10ms die Triac an der Lampe neu zünden
Peter schrieb: > Die Diode benutze ich zur Gleichrichtung!? Ist im Datasheet bei den > Anwendungsfällen so drin... Diese Applikationsschaltung habe ich nicht verstanden. Schauen wir uns das einmal für einen 5A-Typ an. Du hast einen Stromsensor für Gleich- und Wechselströme mit einer unipolaren Versorgungsspannung auf der Ausgangsseite. Bei Strom 0A gibt der Sensor eine Spannung von Vcc/2 aus, bei 5V-Versorgung also 2,5V. Bei +5A peak erhälst Du eine Ausgangsspannung (gemäß Grafik "Output Voltage versus Sensed Current" auf S.6 des Datenblatts) von 3,5V. Bei -5A peak erhälst Du eine Spannung von 1,5V am Ausgang des Sensors. Die Diode sorgt jetzt nur dafür, dass sich der Kondensator auf die max. Ausgangsspannung des Sensors auflädt. Du bekommst also als Ergebnis den Peak-Wert deines Stroms. Gleichrichten tut die Diode nicht, da bereits Gleichspannung aus dem Sensor herauskommt. Wenn Du jetzt eine Phasenanschnittsteuerung damit realisierst, so ist der Peak-Wert Deines Stromes - wenn Du nicht mehr als 50% einer Halbwelle wegschneidest - immer gleich groß. Damit erhältst Du immer den gleichen Wert.
Also habe heute nochmals die Mittelwert-Messung verbessert und so weiter. Das komische ist, dass ich einmal bei 4 A am ADC 600 Bit ausgegeben bekomme und von jetzt auf gleich bei 4,5A 600 Bit. Kann es sein, dass die Spannungsquelle Einbricht oder woher können solche Schwankungen kommen?
Peter schrieb: > Das komische ist, dass ich einmal bei 4 A am ADC 600 Bit > ausgegeben bekomme und von jetzt auf gleich bei 4,5A 600 Bit. Hast Du Deinen µC + SW auch mal ohne ACS712 getestet, indem Du statt VIOUT eine Gleichspannung anlegst (z.B. mit Poti an +5V)? Dann weisst Du wenigstens, ob Du Dich auf diesen Teil verlassen kannst oder nicht. Gruß Dietrich
Nein habe ich noch nicht, was mich verwundert ist, dass ich 10 mal hintereinander die gleichen Werte bekomme, und dann von jetzt auf gleich steigen die Stromwerte an und bleiben dann viel höher Konstant. Der ADC bringt aber immer die gleichen Werte, also Kurzfassung, Strom steigt an, ADC Bit bleibt gleich...
Mach doch einfach mal 16 Messungen in 20ms (also 1259µs Intervall) oder 32 Messungen in 20ms (also 625µs Intervall) und bilde den Mittelwert.
Was bringt mir das? ich mache in 1400us 10 Messungen und bilde den Mittelwert.
Dann miss doch mal die Eingangsspannung am ADC mit nem Multimeter nach. Ansonsten is doch stochern im Dunklen!
Peter schrieb: > Was bringt mir das? ich mache in 1400us 10 Messungen und bilde den > Mittelwert. Wenn ich es richtig verstanden habe, befeuerst du deine Lampe mit WECHSELSPANNUNG. Stimmts? (Bitte beantworten) Eine volle Periode der 50Hz Wechselspannung dauert 20ms. Du misst aber nur in einem Zeitraum von 1,4ms. Fällt dir was auf?
Ja das ganze ist an Wechselspannung, ich messe nur 1,4 ms da ich ja auch noch den Phasenanschnitt mache, und ich da paar delays benötige
Und wenn du mal den Phasenanschnitt weg lässt? Wie sehen deine Messwerte dann aus?
Nein noch nicht, weiß auch nicht ob das die Ursache sein kann, dass ich nur 1,4 ms messe, Es funktioniert ja mehmals hintereinander und dann auf einmal kommt quatsch raus. Oder sehe ich da was falsch?
Peter schrieb: > Habe ich bereits, diese ist jedes mal gleich. Ich glaube du solltest erstmal überlegen was du da eigentlch machst: Du misst 50Hz Wechselspannung, tastest aber alle 1,4ms ab! Aha... Dann misst du mit nem Multimeter die eingangswechselspannung, die immer gleich ist, und wunderst dich darüber das der ADC immer das selbe misst? Oder verstehe ich das falsch?
Peter schrieb: > Nein noch nicht, Dann mach mal. > weiß auch nicht ob das die Ursache sein kann, dass ich nur > 1,4 ms messe, Das kann nicht nur die Ursache sein, sondern es IST die Ursache. > Es funktioniert ja mehmals hintereinander und dann auf > einmal kommt quatsch raus. Dass kommt daher, dass dein Abtastfenster (die 1,4ms, in denen du deine Messungen ausführst) nicht synchron zur Wechselspannung startet. Was willst du denn eigentlich mit deiner Strommessung bezwecken?
Ich Messe einen 50Hz Wechselstrom mit einem ACS712. Das Signal wird über eine Schaltung wie oben zu sehen. Durch einen Kondensator wird die Sinuswelle geglättet. Dann werden aller 10ms für 1,4ms die Spannungswerte vom ACS712 abgetastet und ausgewertet. Nun das Problem, ich weiß zwar dass der Strom am ACS712 sich verändert hat, bekomme aber trotzdem am ADC den gleichen Wert.
Peter schrieb: > Durch einen Kondensator wird die > Sinuswelle geglättet. Dann sag mal die Werte. Wie groß ist C1? Der in der Schaltung nicht eingezeichnete Parallelwiderstand soll ja 1MOhm sein. Dann kann man die Zeitkonstante rechnen und abschätzen, wieviel sich die Spannung in 20ms ändert. Gruß Dietrich
Peter schrieb: > Sinuswelle geglättet. Dann werden aller 10ms für 1,4ms die > Spannungswerte vom ACS712 abgetastet und ausgewertet. Nun das Problem, > ich weiß zwar dass der Strom am ACS712 sich verändert hat, bekomme aber > trotzdem am ADC den gleichen Wert. Soll das heissen dass alle Messwerte aus deiner 1,4ms Messung gleich sind?
Die Messwerte innerhalb der 1,4ms sind gleich ja, da der Strom sich langsam ändert.
Dann geh doch jetzt bitte mal Systematisch vor. Gib deinem ADC mal eine Variable Eingangsspannung und guck ob sich die ADC-Werte ändern. Schritt für Schritt
Ich glaube jetzt wird es Zeit, mit einem Oszi zu messen, was da genau passiert.
Ok versuche es mit nem Oszi. Die Werte am ADC ändern sich, nur manchmal sind 4A und 4,5A gleich am ADC!
Gut! Dann nimm bitte mal die Diode raus und guck mal ob das was ändert.
Welche Messgeräte stehen dir denn zur Verfügung? - Oszilloskop [ja] [nein] - Digitalmultimeter [ja] [nein] - Analogmultimeter [ja] [nein] - Phasenprüfer [ja] [nein] - (nasser) Finger [ja] [nein] - Fieberthermometer [ja] [nein] - Meterstab [ja] [nein] - Geodreieck [ja] [nein] - Küchenmesser [ja] [nein] - ... =)
Der Kondensator am Filter ist mit 2,2µ viel zu groß. In den diversen Applikationen ist er zwischen 1n und 10n.
Ok das Oszi hab ich erst morgen. Was mich ja immer noch wundert ist, dass ich mehrere male hintereinander die scheinbar richtigen Werte bekommen und auf einmal ohne eine Änderung kommen da andere Werte an. Wo kann die Hardware da spinnen?
Habe ein Oszi, und Digitalmultimeter, Phasenprüfer. Am Filter der C ist 0,1n, hinter der Diode habe ich noch ein Kondensator zur Masse mit 2,2 uF und Parallel ein 1 mOhm Widerstand.
Ich glaube du hast deine Schaltung noch nicht verstanden. Mit dieser Diode und dem C und R dazu parallel baust du eine Art Hüllkurvendemodulator. Willst du nicht. Nimm die Diode und alles dahinter mal raus. Und mach aus dem 100pF mal n 10nF!
Irgendwie hab ich den Sinn deines ganzen Vorhabens noch nicht ganz verstanden. Willst du deinen Phasenanschnitt so regeln, dass durch die Lampe ein bestimmter Strom (Effektivwert) fliesst?
Ja habe es gegoogelt, versteh nur nicht warum die werte am AdC mal tief sind und dann wieder hoch Der Sinn ist, durch den Phasenanschnitt die Helligkeit der Glühlampe zu Regeln und durch die Strommessung den Strom darzustellen
Wie ich schon mal geschrieben habe, habe ich bisher mit den ACSxxx nur Gleichstrom gemessen. Bei Wechselstrom ist das doch anders. Ist der Strom 0A hast du am Ausgang 2,5V oder am ADC etwa 512. Je nach Stromrichtung addiert oder subtrahiert sich der Wert mV/A von oder zu den 2,5V Bei 5A hast du am Ausgang zwischen 3,425V und 1,575V oder 701 und 322. Bei Batterien z.B. kann man damit recht gut den Lade und Entladestrom messen. Wie man allerdings Wechselstrom damit messen kann ist mir nicht klar, hab mich damit allerdings noch nicht ernsthaft auseinandergesetzt.
und wie sollte die beschaltung dann sein? Ich dachte mir ich lass den Kondensator laden zur Glättung und lassen den Kondensator durch den widerstand parallel dazu entladen aber da war wohl falsch
Pack mal an deinen Ausgang nur einen Widerstand mit 1k5 und ein 10nF nach Masse (Tiefpass).
Ausserdem brauchts die RC Kombination am Ausgang auch nicht. Die Tiefpassfilterung macht der Allegro mit dem externen Cf bereits selbst.
Also einfach den nackten Ausgang vom ACS an den ADC und die Kurve abtasten? Was macht nun dieser Hüllkurvendemodulator an meiner Schaltung?
Peter schrieb: > Also einfach den nackten Ausgang vom ACS an den ADC und die Kurve > abtasten? Im Prinzip ja. Ein wenig Gehirnschmalz gehört aber noch dazu. > Was macht nun dieser Hüllkurvendemodulator an meiner Schaltung? Er macht etwas, das du nicht willst / nicht gebrauchen kannst.
Wie im Prinzip? Wäre dir sehr dankbar wenn Du mir einfach sagen könntest, wie man das am dümmsten machst mit dem Anschluss an den ADC. Ok das das ding was macht, was ich nicht will ist mir klar, nur was? Ich will es ja verstehen.
Ich versuche mal ein wenig zu erklären. Hier einige Aussagen: 1. Beim Phasenanschnitt ist die Spitzenspannung bis zum Winkel von 90° immer gleich (http://de.wikipedia.org/wiki/Phasenanschnittsteuerung). 2. Der Widerstand einer Glühbirne ist nicht konstant. Ist der Glühfaden kalt, ist der Strom etwa 10x so groß. (http://de.wikipedia.org/wiki/Gl%C3%BChlampe#Elektrische_Eigenschaften) 3. Bei z.B. 90° Phasenanschnitt ist der Glühfaden kälter als bei 0°, der Spitzenstrom ist daher größer. 4. Entscheident für die Helligkeit ist der Effektivwert des Stromes (bzw. der Leistung). Der Zusammenhang zwischen elektrischem Strom (bzw. Leistung) und Lichtstrom ist (vermutlich) nicht linear. 5. Peters Schaltung macht eine Spitzenwertgleichrichtung. Die Folge ist, dass bei z.B. 90° Phasenanschnitt der gemessene Wert größer wird (siehe 3.), obwohl die Glühbirne weniger hell leuchtet. 6. Wie Peter den angegebenen Strom gemessen hat, ist noch unbekannt. Je nach Messgerät wird das ein Mittelwert nach Gleichrichtung oder ein "richtiger" Effektivwert (RMS) sein. Das ist zu berücksichtigen, wenn man den Wert mit dem Ergebnis des µC vergleicht. 7. Eine "vernünftige" Strommessung mit dem µC könnte z.B. sein: 7.1. ungefiltert häufig abtasten und Effektivwert per SW rechnen 7.2. Strom per HW aufbereiten: 7.2.1. Gleichrichten und Mittelwert bilden (nicht Spitzenwertgleichrichtung!) 7.2.2. Effektivwert bilden Dies möge erstmal genügen, um die Zusammenhänge klar zu machen. Auf die mögliche Umsetzung gehe ich jetzt hier nicht ein. Das kann ja dann noch folgen... Gruß Dietrich
Hallo, danke für die lange und sehr interessante Ausführung. Ich habe nun den nackten Ausgang des ACS 712 an mein ADC gehangen. Nun die Frage, wie kann ich am besten dieses Signal abtasten? Zwischen zwei Nulldurchgängen sollte die Spannung sehr oft abgetastet werden und dann ein Mittelwert gebildet werden. Nur wie geht man da vor? Nulldurchgang erkennen und einfach messen bis der nächste ankommt? Dann das Ergebnis einfach durch die Anzahl der Messungen teilen? Wie bekomme ich dann mit der gleichen MCU den Phasenanschnitt hin? wenn ich in den 10ms nur messe, kann ich ja sonst nix mehr machen oder?
Für meine Meinung zu den eingebauten A/D-Wandlern müsste man mich eigentlich verhaften aber... wenn ich diese denn doch nutzen muss, spendiere ich ihnen als erstes ein niederohmiges Eingangssignal. Wenn ich deine Schaltung richtig verstanden habe, misst Du hinter einem 2/10K Spannungsteiler. Das ist nach meiner Meinung grenzwertig. Spätestens wenn es aber um Spannungen unter 0,?V geht wird dir die Diode sämtliche Messwerte um die Löffel hauen. Ich denke also dass Dein Analogkonzept stark verbesserungsbedürftig ist.
Wenn du zwischen zwei Nulldurchgänge die Werte aufsummierst und dann durch die Anzahl der Messungen dividierst, kann ich dir jetzt schon sagen was herauskommt, ~512. Innerhalb einer positiven und einer negativen Halbwelle wird sich der Strom kaum ändern. Du musst von dem Wert der über 512 ist, 512 abziehen und den Wert der unter 512 ist musst du von 512 abziehen. Dann hast du umgerechnet den tatsächlichen Strom. Wie du allerdings den Nulldurchgang synchronisierst und auch noch deinen Phasenanschnitt mit einbringst, kann ich dir aus dem Stegreif nicht sagen.
Peter schrieb: > Nur wie geht man da vor? Wenn Du es ausschließlich per SW machen willst, könnte das so gehen: 1. Der Ausgang des ACS712 geht direkt auf den ADC-Eingang. 2. Der Wert wird z.B. im 1-ms-Raster abgefragt und 20 Werte gespeichert. Eine Synchronisierung mit dem Nulldurchgang ist nicht nötig, denn 20ms ist ja genau eine Periode, da sind alle Abtastwerte genau einmal drin. Das Ganze lässt sich am besten mit einem 1ms-Timerinterrupt in der ISR machen. 3. Dann wird gerechnet. Dabei ist zu Bedenken, dass der 0-Punkt des ACS bei 2,5V liegt. Am einfachsten wäre Gleichrichten und Mittelwert bilden: der Betrag ("Gleichrichten") der Abweichung aller 20 Werte vom 2,5V-Wert (0-Punkt) wird addiert und durch 20 geteilt. Den echten Effektivwert berechnen ist etwas aufwändiger. Das ist mal so spontan hingeschrieben. Wahrscheinlich gibt es schönere / bessere Lösungen... Zu berücksichtigen ist dabei auch noch die Frage der Genauigkeit: - Reicht die 1-ms-Auflösung? - Die 2,5V (O-Punkt) hat Toleranzen, ist das OK? Oder eventuell rechnen des 0-Punkts aus den Abtastwerten: der 0-Punkt ist die Summe aller 20 Werte dividiert durch 20 (Mittelwert ohne "Gleichrichten"). - Richtige Wahl der Referenzspannung, damit die Auflösung fein genug ist. Gruß Dietrich
Hallo, Danke erst mal für alle Tipps und Hinweise. Habe heute also direkt den Eingang an meinen ADC gelegt und ab Nulldurchgang 23 mal gemessen und die Kurve abgetastet. Mit dem Ergebnis konnte ich auch arbeiten aber trotzdem bin ich schwer verwundert. Anbei ist der Schaltplan wie die Strommessung und der Phasenanschnitt bisher gemacht wurden also noch mit allen Kondensatoren. Ergebnis mit dieser Beschaltung: Messungen in einer Woche immer gleich, Ergebnisse sehr zufriedenstellend, nur es gibt dann Momente, da bekomme ich am ADC zwar den gleichen Wert wie immer, jedoch ist der Strom nachweißlich gestiegen. Diese "falschen" Werte werden dann auch mehrmals hintereinander ausgeben, teils auch Tagelang, bis es wieder wie durch Gotteshand die "richtigen" Werte sind wo abgeschaltet wird. Diese fehlerhafte Ausgabe der Werte passiert von jetzt auf gleich. Dabei wird die Software nicht neugestartet oder sonst irgendwas geändert. Auch die Auflösung ist viel besser bei dieser Beschaltung. eine Änderung von 100 Bit bewirkt beim Strom eine Änderung von 1A. Am Oszi habe ich dann eine Gleichspannung die nicht pulsiert und mit Anstieg des Stroms, steigt auch diese Gleichspannung an. Bei dem direkten Anschluss des Ausganges an den ADC, schwanken die Werte erst einmal viel mehr, was daran liegt, dass die Auflösung viel schlechter ist. Für 1A Änderung stehen mir nur noch 20 Bit zur Verfügung. Am Oszi ist eine pullsierende Gleichspannung zusehen, die von 2,0V bis 3,0 schwingt. Ich kann mir also gar nicht erklären wieso die Auflösung bei beiden Beschaltungen so unterschiedlich ist. Wieso Ändern sich die Werte so abrupt. Wobei der Wert im ADC immer gleich bleibt aber nachweißlich der Strom ansteigt. Woher soll dieser Effekt dieses Hüllkurvendemodulators kommen? Wo soll ich jetzt Anetten.
Ist echt komisch, bekomme zehn mal hintereinander genau den gleichen Wert vom Strom und am ADC und dann auf einmal ist der Wert am ADC zwar immer noch gleich aber der Strom ist viel höher. Den ADC-Wert lass ich mir Serial anzeigen.
Könnte ich erfolg haben, wenn ich einfach den Widerstand parallel zu dem Kondensator weg lasse? Das größte Problem ist, dass ich beim testen nie weiß ob es nun funktioniert oder nicht, da ich ja mit der jetzigen Lösung auch perfekte Werte bekomme und auf einmal sind diese anders, das kann nach 5 Versuchen passieren oder nach 5 Tagen.
Was soll das ganze Kauderwelsch? Hast du jetzt endlich mal den Ausgang des ACS ohne weitere passive Bauteile (Widerstände, Kondensatoren, Dioden) mit dem ADC verbunden? JA oder NEIN ? Was kam dabei raus?
Ja habe ich, wie bereits oben geschrieben. Habe auch die Schwingung (keine volle 50Hz Schwingung sondern nach dem Nulldurchgang eine kurz Welle ca. 4ms lang. steigt der Strom an, so wird die Welle höher aber nicht wirklich breiter. Sie wandert eher mehr zum Nullpunkt) aller 300ms abgetastet und ein Ergebnis erhalten. Nur bin ich mir nicht sicher ob das Ergebnis richtig ist und die Auflösung ist auch mies. Bei der Lösung vorher hatte ich 100 Bit für 1 Ampere zur Verfügung nun nur noch 20.
Peter schrieb: > Ja habe ich, wie bereits oben geschrieben. Soso... > Habe auch die Schwingung (keine volle 50Hz Schwingung sondern nach dem > Nulldurchgang eine kurz Welle ca. 4ms lang. Zu kurz. Du musst über einen Zeitraum von 10ms in regelemäßigen Abständen messen. > steigt der Strom an, so wird die Welle höher aber nicht wirklich > breiter. Hä...? > Sie wandert eher mehr zum Nullpunkt) ??? > aller 300ms abgetastet und ein Ergebnis erhalten. Wie jetzt? 300ms? > Bei der Lösung vorher hatte ich 100 Bit für 1 Ampere zur Verfügung > nun nur noch 20. Kannst du uns mal eben aufklären was du uns immer mit deinen Bit-Angaben sagen willst? Der ADC der AVRs hat eine Aufläsung von 10 Bit. Was meinst du also mit "100 Bit"?
Peter schrieb: > Ist echt komisch, bekomme zehn mal hintereinander genau den gleichen > Wert vom Strom und am ADC und dann auf einmal ist der Wert am ADC zwar > immer noch gleich aber der Strom ist viel höher. Den ADC-Wert lass ich > mir Serial anzeigen. Ein ähnliches Problem hatte ich neulich mit einem ATMega 168. Ich änderte die Spannung am ADC, der eingelesene Wert änderte sich jedoch nicht! Ich hatte vergessen, die ADC Prescaler Select Bits (Register ADCSRA) zu initialisieren. Schau das mal nach. Grüße Michael
Sorry, ein ADC hat die Auflösung von 10-bit richtig und dieser Teilt sich in Werte von 0-1023, also sagen wir ich hatte bei meiner Lösung vorher für 1 Ampere 100 Werte zur Verfügung nun mit dem direkten Anschluss nur noch 20 Werte. Die Welle dich ich sehe ist nur ca 4ms breit eine normale Sinus Schwingung ja 10ms, die restlichen 6ms sind aber glatt bei 2,5 V. Wenn der Strom nun ansteigt, wird die Welle die ich sehe höher also der Effektivwert der Spannung wird größer. Und die Welle steht nicht sonder bewegt sich nach links, was aber auch am Oszi liegen kann. Auf dieser Welle habe ich auf den 10ms aller 300uS abgetastet, sorry.
Peter schrieb: > ein ADC hat die Auflösung von 10-bit richtig und dieser Teilt sich in > Werte von 0-1023, Richtig erkannt. > also sagen wir ich hatte bei meiner Lösung vorher für > 1 Ampere 100 Werte zur Verfügung nun mit dem direkten Anschluss nur noch > 20 Werte. Nach Aufsummieren, Messwertkorrektur und Mittelwertbildung? > Die Welle dich ich sehe ist nur ca 4ms breit Wenn du nur in einem Zeitraum von 4ms abtastest, ist das nicht weiter Verwunderlich. > eine normale Sinus Schwingung ja 10ms, Falsch. Eine Komplette Periode einer 50Hz Schwingung dauert 20ms. Die Halbwelle (sowohl positiv, als auch negativ) dauert 10ms. > die restlichen 6ms sind aber glatt bei 2,5 V. Das ist die Zeit, in der der Stromfluss durch deine Glühbirne =0A beträgt. > Und die Welle steht nicht sonder bewegt sich nach links, was aber auch > am Oszi liegen kann. Wie triggerst du dein Oszi denn? Worauf triggerst du? > Auf dieser Welle habe ich auf den 10ms aller 300uS abgetastet, sorry. Wat denn nun? 4ms oder 10ms?
Magnus M. schrieb: >> also sagen wir ich hatte bei meiner Lösung vorher für >> 1 Ampere 100 Werte zur Verfügung nun mit dem direkten Anschluss nur noch >> 20 Werte. > > Nach Aufsummieren, Messwertkorrektur und Mittelwertbildung? > >> Die Welle dich ich sehe ist nur ca 4ms breit Nein einfach beim Nulldurchgang der Spannung gemessen, da es ja eine gerade Gleichspannung ist also keine pulsierende ist das ja kein Problem. > > Wenn du nur in einem Zeitraum von 4ms abtastest, ist das nicht weiter > Verwunderlich. > Das Oszi tastet doch alles ab nicht nur 4 ms. >> eine normale Sinus Schwingung ja 10ms, > > Falsch. Eine Komplette Periode einer 50Hz Schwingung dauert 20ms. Die > Halbwelle (sowohl positiv, als auch negativ) dauert 10ms. > >> die restlichen 6ms sind aber glatt bei 2,5 V. > > Das ist die Zeit, in der der Stromfluss durch deine Glühbirne =0A > beträgt. Also durch den Phasenanschnitt? > >> Und die Welle steht nicht sonder bewegt sich nach links, was aber auch >> am Oszi liegen kann. > > Wie triggerst du dein Oszi denn? Worauf triggerst du? Ist ein Uraltes Oszi kann da nicht viel Einstellen sorry. > >> Auf dieser Welle habe ich auf den 10ms aller 300uS abgetastet, sorry. > > Wat denn nun? 4ms oder 10ms? Also mit dem ADC habe ich in den 10ms die eine Halbwelle braucht aller 300us abgetastet. das Oszi zeigt mir eine Welle an die 4ms breit ist.
Peter schrieb: > Nein einfach beim Nulldurchgang der Spannung gemessen, Du hast mit deinen Messungen also beim Nulldurchgang angefangen zu messen? JA / NEIN ? > da es ja eine gerade Gleichspannung ist also keine pulsierende > ist das ja kein Problem. 1. Was ist für dich eine "gerade Gleichspannung"? 2. Was ist für dich eine "pulsierende Gleichspannung? >> Das ist die Zeit, in der der Stromfluss durch deine Glühbirne =0A >> beträgt. > > Also durch den Phasenanschnitt? Ja. >> Wie triggerst du dein Oszi denn? Worauf triggerst du? > > Ist ein Uraltes Oszi kann da nicht viel Einstellen sorry. Ist egal. Auch ein uraltes Oszi triggert auf irgendwas. Also: WORAUF TRIGGERT ES? > Also mit dem ADC habe ich in den 10ms die eine Halbwelle braucht aller > 300us abgetastet. das Oszi zeigt mir eine Welle an die 4ms breit ist. Nun machen wir mal Nägel mit Köpfen: 1. Mach mal ein Foto von dem, was du auf deinem Oszi siehst. 2. Poste mal dein Programm.
Magnus M. schrieb: > Peter schrieb: >> Nein einfach beim Nulldurchgang der Spannung gemessen, > > Du hast mit deinen Messungen also beim Nulldurchgang angefangen zu > messen? > > JA / NEIN ? ja > >> da es ja eine gerade Gleichspannung ist also keine pulsierende >> ist das ja kein Problem. > > 1. Was ist für dich eine "gerade Gleichspannung"? eine gerade Linie zieht sich übers Oszi, bei der jetzigen Lösung stieg diese Linie bei zunehmende Strom an, wohl durch die Spitzenwertmessung durch den Kondensator. > 2. Was ist für dich eine "pulsierende Gleichspannung? Das was der ACS ausgibt direkt am Vout ohne jegliches Gemüse danach. > >>> Das ist die Zeit, in der der Stromfluss durch deine Glühbirne =0A >>> beträgt. >> >> Also durch den Phasenanschnitt? > > Ja. > >>> Wie triggerst du dein Oszi denn? Worauf triggerst du? >> >> Ist ein Uraltes Oszi kann da nicht viel Einstellen sorry. > > Ist egal. Auch ein uraltes Oszi triggert auf irgendwas. > > Also: WORAUF TRIGGERT ES? Keine Ahnung habe da keine Einstellung vorgenommen, was sollte man da Einstellen? > >> Also mit dem ADC habe ich in den 10ms die eine Halbwelle braucht aller >> 300us abgetastet. das Oszi zeigt mir eine Welle an die 4ms breit ist. > > Nun machen wir mal Nägel mit Köpfen: > > 1. Mach mal ein Foto von dem, was du auf deinem Oszi siehst. > > 2. Poste mal dein Programm. Habe ich gerade nicht zur Hand. Wieso ist die Lösung die ich am Anfang hatte so schlecht?
Peter schrieb: > Das größte Problem ist, dass ich beim testen nie > weiß ob es nun funktioniert oder nicht, Vielleicht hast Du ja irgendwo einen Wackelkontakt drin. Gruss Harald
Peter schrieb: >> Du hast mit deinen Messungen also beim Nulldurchgang angefangen zu >> messen? >> >> JA / NEIN ? > > ja Und wie stellst du sicher, dass deine Messung auch beim Nulldurchgang beginnt? >> 1. Was ist für dich eine "gerade Gleichspannung"? > > eine gerade Linie zieht sich übers Oszi, bei der jetzigen Lösung stieg > diese Linie bei zunehmende Strom an, wohl durch die Spitzenwertmessung > durch den Kondensator. Du arbeitest also immer noch mit dem Widerstands- Kondensator- Diodenschlonz??? >> Also: WORAUF TRIGGERT ES? > > Keine Ahnung habe da keine Einstellung vorgenommen, was sollte man da > Einstellen? Triggere am besten auf die Netzspannung. Das sollte bei den meisten Oszis (auch bei den Alten) möglich sein. >> 1. Mach mal ein Foto von dem, was du auf deinem Oszi siehst. >> >> 2. Poste mal dein Programm. > > Habe ich gerade nicht zur Hand. Schlecht. > Wieso ist die Lösung die ich am Anfang hatte so schlecht? JA!
Peter schrieb: > Ist alles auf einer richtigen Platine aufgebracht! - Mach Fotos vom Oszi (-schirm) - Mach Fotos von deiner Platine - Poste dein Programm !!!
Nein habe bei der Dioden Kondensator Lösung auch mit dem Oszi das ganze ausgewertet. Ich habe eine Nulldurchgangserkennung, die auch funktioniert da bin ich mir sicher :) Wieso ist die Lösung so schlecht. Und wie sollte denn nun die "richtige Lösung" aussehen? Also ACS direkt an ATmega und wie soll das Programm dann aussehen? Wie gesagt die 20 Werte für 1 Ampere sind mir zu wenig, wenn ich vorher 100 Werte hatte. und Wieso hatte ich da so viel?
Peter schrieb: > Nein habe bei der Dioden Kondensator Lösung auch mit dem Oszi das > ganze ausgewertet. Willst du jetzt damit sagen dass du immer nur von deinen Oszimessungen an deinem ursprünglichen Konstrukt erzählt hast, nachdem du nach Messergebnissen an der abgeänderten Schaltung gefragt wurdest? Sag jetzt bitte nicht "JA" ! > Ich habe eine Nulldurchgangserkennung, die auch funktioniert da bin ich > mir sicher :) Und wie machst du die Nulldurchgangserkennung? > Wieso ist die Lösung so schlecht. Wurde schon weiter oben diskutiert. > Und wie sollte denn nun die "richtige Lösung" aussehen? Also ACS > direkt an ATmega Nochmal: JA (Jott Aaaah)! Mit anderen Worten: Das Gegenteil von "Nein"! > und wie soll das Programm dann aussehen? Wie sieht denn dein jetziges Programm aus? (nochmalfrag) > Wie gesagt die 20 Werte für 1 Ampere sind mir zu wenig, wenn > ich vorher 100 Werte hatte. und Wieso hatte ich da so viel? Weil dein Konzept und dein Programm nix taugt. kopfschüttel
Magnus M. schrieb: > Peter schrieb: >> Ist alles auf einer richtigen Platine aufgebracht! > > - Mach Fotos vom Oszi (-schirm) Foto kann ich erst morgen machen. > > - Mach Fotos von deiner Platine Morgen aber ist eine richtig Industriegeätzte Platine und Maschinenbestückt. > > - Poste dein Programm void loop() { if (Nulldurchgang == 0) { var = 0; while (var < 23) { currentMicros = Micros(); Strom = analogRead(0); var++; Strom = Strom / var; Micros = Micros(); zeit = Micros - currentMicros; wait = 300-zeit; delay(wait); } digitalWrite(pintriac,High); digitalWrite(pintriac,LOW); } if (Strom > 520) { Stopp(); } } so sieht es aus und ist im Ardino C geschrieben > > !!!
Magnus M. schrieb: > Willst du jetzt damit sagen dass du immer nur von deinen Oszimessungen > an deinem ursprünglichen Konstrukt erzählt hast, nachdem du nach > Messergebnissen an der abgeänderten Schaltung gefragt wurdest? > > Sag jetzt bitte nicht "JA" ! Nein, das Oszibild mit der 4ms Welle ist ohne jegliches Gemüse. Wie sollte das Konzept dann aussehen?
Magnus M. schrieb: >> Ich habe eine Nulldurchgangserkennung, die auch funktioniert da bin ich >> mir sicher :) > > Und wie machst du die Nulldurchgangserkennung? Mittels eines Optokopplers und Widerständen sowie eines Transistors, die Sache funktioniert gut, habe das Ausgangssignal am Oszi ausgewertet. > >> Wieso ist die Lösung so schlecht. > > Wurde schon weiter oben diskutiert. Jas das weiß ich aber ich will es ja verstehen wieso.
Peter schrieb: >> - Mach Fotos vom Oszi (-schirm) > > Foto kann ich erst morgen machen. Na dann... gehts wohl morgen weiter. >> - Mach Fotos von deiner Platine > > Morgen aber ist eine richtig Industriegeätzte Platine und > Maschinenbestückt. Macht nix. >> - Poste dein Programm > void loop() (...) > var = 0; > so sieht es aus und ist im Ardino C geschrieben Das ist kein Programm sondern ein Codeschnipsel!
Magnus, ich weiß grad nicht ob du mir helfen willst oder nur alles schlecht machen willst. Ich will dir nicht zu nahe treten und bin dir für jeden Tipp dankbar aber wirklich hilfreich war es bis jetzt nicht.
Peter schrieb: > Magnus, ich weiß grad nicht ob du mir helfen willst oder nur alles > schlecht machen willst. Doch. Der Wille zum Helfen ist da. > Ich will dir nicht zu nahe treten Keine Angst, bin durchaus strapazierfähig. Diese Strapazierfähigkeit hat aber auch irgendwo ihre Grenzen. > und bin dir für jeden Tipp dankbar aber wirklich hilfreich war > es bis jetzt nicht. Das tut mir leid.
Danke, dass du es verstehst. Das Programm oben ist kein Schnipsel, ich habe nur auf die Setup Sachen verzichtet da diese nur aus Zuweisungen zu Ein und Ausgängen bestehen. Wichtig ist der Abschnitt den ich geschrieben habe. Siehst du da einen Fehler bzw klar wie macht man sowas richtig?
Peter schrieb: > Danke, dass du es verstehst. Bitte. > Das Programm oben ist kein Schnipsel, Doch, es ist ein Schnipsel. > ich habe nur auf die Setup Sachen verzichtet da diese nur > aus Zuweisungen zu Ein und Ausgängen bestehen. Die gehören auch zu einem komletten Programm. Ausserdem fehlen die einzelnen Funktionen: Peter schrieb: > if (Nulldurchgang == 0) Es ist nicht ersichtlich, wie "Nulldurchgang" zustande kommt. > currentMicros = Micros(); Die Funktion "Micros()" ist nicht zu sehen. > Stopp(); Ist "Stopp()" eine Standardfunktion von Arduino? Was bewirkt sie? > Wichtig ist der Abschnitt den ich geschrieben habe. Siehst du da einen > Fehler bzw klar wie macht man sowas richtig? Ohne komplettes Programm werden die wenigsten hier dazu bereit sein, dein Programm zu interpretieren. Erst recht wenn die Kommentare fehlen.
Magnus M. schrieb: >> so sieht es aus und ist im Ardino C geschrieben > > Das ist kein Programm sondern ein Codeschnipsel! an dem aber schon ein Fehler zu erkennen ist, was soll denn das werden: Strom = Strom / var; Aber ich halt mich daraus, denn Peter ist gegenüber den Helfern nicht besonders hilfsbereit und stellt auch auf Nachfrage kaum Infos zu Verfügung
Magnus M. schrieb: > Peter schrieb: >> if (Nulldurchgang == 0) Nulldurchgang ist ein digitalRead eines Pins, also wenn der Pin Null ist dann mach was. > > Es ist nicht ersichtlich, wie "Nulldurchgang" zustande kommt. > >> currentMicros = Micros(); > > Die Funktion "Micros()" ist nicht zu sehen. MIcros ist eine Arduino Funktion und wird nicht deklariert. > >> Stopp(); > > Ist "Stopp()" eine Standardfunktion von Arduino? Was bewirkt sie? in Stopp steht nur Trias Low, also die Lampe geht aus wenn der Strom zu hoch war > >> Wichtig ist der Abschnitt den ich geschrieben habe. Siehst du da einen >> Fehler bzw klar wie macht man sowas richtig? > > Ohne komplettes Programm werden die wenigsten hier dazu bereit sein, > dein Programm zu interpretieren. Erst recht wenn die Kommentare fehlen. ich Erwarte auch kein fertiges Programm sondern Tipps zur Lösung. Z.b. wie kann ich die Welle sehr oft abtasten und trotzdem einen Phasenanschnitt machen
Walter S. schrieb: > an dem aber schon ein Fehler zu erkennen ist, > was soll denn das werden: > Strom = Strom / var; Sorry Fehler endeckt, Die MIttelwert rechnung also Strom / 23 erfolgt erst später habe beim abtippen das übersehen. > > Aber ich halt mich daraus, denn Peter ist gegenüber den Helfern nicht > besonders hilfsbereit und stellt auch auf Nachfrage kaum Infos zu > Verfügung Ich Bemühe mich sehr aber verstehe leider nicht alles.
Peter schrieb: > Nulldurchgang ist ein digitalRead eines Pins, also wenn der Pin Null ist > dann mach was. Kann man ja nicht riechen. (wäre mit nem kompletten Programm einfacher) >> Ist "Stopp()" eine Standardfunktion von Arduino? Was bewirkt sie? > in Stopp steht nur Trias Low, Was ist "Trias Low"? http://de.wikipedia.org/wiki/Trias > also die Lampe geht aus wenn der Strom zu hoch war >> Ohne komplettes Programm werden die wenigsten hier dazu bereit sein, >> dein Programm zu interpretieren. Erst recht wenn die Kommentare fehlen. > > ich Erwarte auch kein fertiges Programm sondern Tipps zur Lösung. Ich meinte DEIN fertiges Programm! Peter schrieb: > erst später habe beim abtippen das übersehen. So etwas tippt man nicht ab, sondern kopiert es und fügt es ein ("Copy&Paste"). Eine weitere Möglichkeit bestünde darin, die Datei mit dem Programm einfach als Dateianhang zu posten. Ist sogar (fast) "idiotensicher".
Triac sorry... ist auch eine Pin zuweißung. komme an das Programm erst morgen wieder ran dann poste ich es. Hast du nicht trotzdem ein paar tipps? ich mein bei dem codeschnippsel würde dich ja sicherlich ein grober fehler auch auffallen oder?
Peter schrieb: > Triac sorry... ist auch eine Pin zuweißung. Es sei dir vergeben :) > komme an das Programm erst morgen wieder ran dann poste ich es. Gerne. > Hast du nicht trotzdem ein paar tipps? ich mein bei dem > codeschnippsel würde dich ja sicherlich ein grober fehler auch > auffallen oder? Möglich. Bin aber mittlerweile nicht mehr ganz in der Verfassung, den unkommentierten Code sinnvoll zu interpretieren. Lass uns dann lieber morgen weiter machen, nach dem du den kompletten Code mit den dann vorhandenen Kommentaren geposted hast.
1 | int pinEin = 2; // Trigger Einschalten |
2 | int pinNull = 3; // Nulldurchgänge |
3 | int pinTriac = 8; // Ausgang Triac |
4 | unsigned long Strom; // Variable für den Strom |
5 | int var; // Variable zum Berechnen des Zündzeitpunktes |
6 | unsigned long previousMicros = 0; // Variable zum messen der Zeit |
7 | unsigned long currentMicros; // Variable zum messen der Zeit |
8 | long Dauer; // Variable zum Berechnen der Zeit |
9 | int wait; // Variable für die Wartezeit |
10 | int Stopp; // Variable zum Abschalten |
11 | int igno; // Variable zum ignorieren von Spitzen |
12 | int Messung; // Variable zum Zählen der Messungen |
13 | int firstrun; // Variable für Sanftanlauf |
14 | int x; // Variable für den Zündzeitpunkt |
15 | int Stromwert; // Variable zum Zählen der Ströme über dem Sollwert |
16 | |
17 | void setup() |
18 | {
|
19 | pinMode(pinEin,INPUT); // PinEin ist ein Eingang |
20 | pinMode(pinNull,INPUT); // PinNull ist ein Eingang |
21 | pinMode(pinTriac,OUTPUT); // pinTriac ist ein Ausgang |
22 | }
|
23 | |
24 | void Nulldurchgang() // Interruptprogramm bei Nulldurchgang |
25 | {
|
26 | digitalWrite(pinTriac,LOW); // pinTriac auf Null setzen |
27 | var = 0; // Variable var auf Null setzen |
28 | }
|
29 | |
30 | void loop() |
31 | {
|
32 | while (digitalRead(pinEin) == 0 && Stopp == 0) // Sollange der Einschalter gedrückt ist und Stopp Null ist bleibe in dieser Schleife |
33 | {
|
34 | if (firstrun == 0) // Beim ersten Start hier durch |
35 | {
|
36 | x = 40; // X mit 40 laden |
37 | firstrun = 1; // firstrun auf 1 setzen damit man hier nicht mehr durch muss |
38 | }
|
39 | attachInterrupt(1, Nulldurchgang, FALLING); // Bei eine falenden Flanke am Nulldurchgang gehe zum Interruptprogramm |
40 | previousMicros = micros(); // Merke dir wie viel Mikrosekunden seit dem Start des Programmes bis jetzt vergangen sind |
41 | Strom = Strom + analogRead(0); // Messe den Strom und addiere diesen an den Wert Strom |
42 | var++; // var um eins erhöhen |
43 | Messung++; // Messung um eins erhöhen |
44 | if (Messung == 45) // Wenn 45 mal gemessen wurde hier lang |
45 | {
|
46 | Strom = Strom / Messung; // Errechne den Mittelwert aus den Stromwerten |
47 | if (igno <= 100) // Wenn die erste Sekunde nicht ignoriert wurde hierlang |
48 | {
|
49 | igno++; // igno um eins erhöhen |
50 | }
|
51 | if (Strom >= 600 && igno >= 100) // Wenn der Mittelwert des Stroms größer 600 ist und mehr alseine Sekunde vergangen ist |
52 | {
|
53 | Stromwert++; // Stromwert um eins erhöhen |
54 | if (Stromwert == 3) // Wenn 3 mal der Mittelwert größer 600 war |
55 | {
|
56 | Stopp = 1; // Stopp auf eins setzen |
57 | }
|
58 | }
|
59 | }
|
60 | currentMicros = micros(); // Merke dir wie viel Mikrosekunden seit dem Start des Programmes bis jetzt vergangen sind |
61 | Dauer = currentMicros - previousMicros; // Errechne wie lange der Vorgang eben gedauert hat |
62 | wait = 200 - Dauer; // Ziehe die Dauer von 200us ab |
63 | delayMicroseconds(wait); // Warte die verbleibende Zeit bis 200us |
64 | if (var == x) // Wenn var gleich x ist |
65 | {
|
66 | Strom = 0; // Strom auf Null setzen |
67 | Messung = 0; // Messung auf Null setzen, damit wird nur zwischen den Zündungen des Triacs gemessen |
68 | if (x > 25) // Wenn x größer 25, Sanftanlauf |
69 | {
|
70 | x--; // x um eins verringern |
71 | }
|
72 | digitalWrite(pinTriac,HIGH); // Triac Zünden |
73 | }
|
74 | }
|
75 | if (digitalRead(pinEin) == 1) // Wenn ein nicht gedrückt |
76 | {
|
77 | detachInterrupt; // Interrupts deaktivieren |
78 | Stopp = 0; // Stopp auf Null setzen |
79 | igno = 0; // igno auf Null setzen |
80 | var = 99; // var auf 99 setzen damit beim Einschalten auf den ersten Nulldurchgang gewartet wird |
81 | Strom = 0; // Strom auf Null setzen |
82 | Messung = 0; // Messung auf Null setzen |
83 | firstrun = 0; // firstrun auf Null setzen |
84 | Stromwert = 0; // Stromwert auf Null setzen |
85 | digitalWrite(pinTriac,LOW); // pinTriac auf Null setzen |
86 | }
|
87 | }
|
Anbei jetzt das Programm. Was macht es meiner Meinung nach: Bei einem Nulldurchgang wird eine Variable auf Null gesetzt, diese wird dann aller 200us um eins addiert. Wenn dieses Variable dann gleich einem vorgegeben Wert ist, Zündet der Triac. Dieser Abschnitt setzt auch die Strommessung auf null. Nun wird aller 200us die Spannung des ACS direkt abgetastet. Nach 45 Messungen wird dann noch der Mittelwert errechnet und entschieden, ob Abgeschalten wird. Ich Messe also immer die Spannung zwischen zwei Triac Zündungen. Somit ist immer sichergestellt, das die Spannung entweder größer 2,5V ist oder kleiner. Zum Auswerten genügt jede zweite Halbwelle. Habe das Programm auch getestet, und den Ausgang des ACS direkt an den ADC angeschlossen. Ergebnis: Mehrmals hintereinander schaltet sich die Lampe bei dem gleichen Strom ab, aber dann schwankt das ganze auch wieder. Die MCU ist also der Meinung dass der Mittelwert wieder der gleiche ist wie immer, aber die Lampe geht später oder eher aus. Beispiel: - bei 4A gibt die MCU einen ADC Mittelwert von 600 aus - Schwanken, also die MCU gibt einen ADC Mittelwert von 600 aus, der Strom ist aber 3,8A oder auch mal 4,2 A und so weiter. Der Abschaltzeitpunkt schwankt also wild umher und schaltet nicht immer gleich ab. Da ja nun der ACS direkt an den ADC geht kann ja nichts mehr das Ergebnis verfälschen meiner Meinung nach.
Kann das Schwanken der Werte vom ACS kommen? Wie groß sollte der Filter am PinFilter sein? Brauch ich noch ein Tiefpass Filter?
Servus, Eine frage startet der Arduino das Programm neu wenn es durchgelaufen ist? Oder kommt das von dem void loop() konstrukt? Egal wie firstrun könnte man sich sparen, einfach x vor die while schleife zieghen. Wird beim Arduino der ADC nicht initialisiert? Gegen welche Referenzspannung wird den gemessen? Dein Interupt kozept macht keinen sinn für mich. Deine Schleife läuft doch weiter nach dem attachInterrupt egal ob da ein interrupt da war oder nicht. Bei einem Interrupt wird var zwar auf 0 gesetzt messung kann aber 34 sein. Da kann ja gar kein bezug zwischen Messung und Nullpunkt entstehen. Wie misst du die 3,8A / 4,2A? Mit einem Multimeter das willkurlich mittelt? Um eine aussage trefffen zu können ob dein ADC richtig funktioniert müsstest du doch z.B. ab einem Nulldurchgang parallel mit dem Oszi messen das bild speichern und dann mit den vom ADC genau zum Messzeitpunk aufgenommenen Werten vergleichen. Wie schnell reagiert dieser ACS Chip/wandler überhaupt? Schwingt das Ausgangs signal wirklich mit der selben Frequenz? Oder gibt es da Verzögerungen veränderungen. Kann man da mal Bilder sehen? Oszi: Spannung vs. Strom ohne das das kudel mudel Programm läuft. Wo wird der Nulldurchgang gemessen Strom oder Spannungseitig? Dein Ziel ist es den Triac anfänglich bei 144° und dann abnehmend bis 93,6° zu zünden. Richtig? Bei welchem Strom soll er ganau abschalten nach einer Sekunde? Meine vermutung wäre jetzt 0,85A. Ich bleibe weiterhin sehr interessiert.
wieOskar schrieb: > Servus, > Eine frage startet der Arduino das Programm neu wenn es durchgelaufen > ist? Oder kommt das von dem void loop() konstrukt? Egal wie firstrun > könnte man sich sparen, einfach x vor die while schleife zieghen. stimmt hast recht das kann ich ändern und mir speicher sparren. > > Wird beim Arduino der ADC nicht initialisiert? Gegen welche > Referenzspannung wird den gemessen? Referenz wenn nicht angegeben ist die an Aref also in dem Fall 5V. Da der ACS mit VCC/2 am Nullpunkt arbeitet dachte ich ist das das beste,. > > Dein Interupt kozept macht keinen sinn für mich. Deine Schleife läuft > doch weiter nach dem attachInterrupt egal ob da ein interrupt da war > oder nicht. Bei einem Interrupt wird var zwar auf 0 gesetzt messung kann > aber 34 sein. Da kann ja gar kein bezug zwischen Messung und Nullpunkt > entstehen. Darf es auch nicht. Der Interrupt soll nur var auf null setzen damit nach 35 mal 200us 7000us abgelaufen sind und der triac zündet. Dann wird Messung auf Null gesetzt damit ich immer zwischen den Trias Zündungen Messe. Damit habe ich immer nur die Welle größer 2,5 volt oder tiefer 2,5 volt. Würde ich von Nulldurchgang zum Nulldurchgang messen hätte ich ein Teil größer ein Teil tiefer. > > Wie misst du die 3,8A / 4,2A? Mit einem Multimeter das willkurlich > mittelt? Mit einem Analogen Amperemeter mit Schlepzeiger also Maximal anzeige, die ich nach dem einschalten wieder Nulle. > > Um eine aussage trefffen zu können ob dein ADC richtig funktioniert > müsstest du doch z.B. ab einem Nulldurchgang parallel mit dem Oszi > messen das bild speichern und dann mit den vom ADC genau zum > Messzeitpunk aufgenommenen Werten vergleichen. > Wie schnell reagiert dieser ACS Chip/wandler überhaupt? Schwingt das > Ausgangs signal wirklich mit der selben Frequenz? Oder gibt es da > Verzögerungen veränderungen. Das signal ist um 6us verschoben zum eingang. > > Kann man da mal Bilder sehen? Oszi: Spannung vs. Strom ohne das das > kudel mudel Programm läuft. > > Wo wird der Nulldurchgang gemessen Strom oder Spannungseitig? Spannungsseitig > > Dein Ziel ist es den Triac anfänglich bei 144° und dann abnehmend bis > 93,6° zu zünden. Richtig? Ja also nur zum Anlaufen dann läuft er immer an 93,6° also der Phasenanschnitt wird nicht verändert. > > Bei welchem Strom soll er ganau abschalten nach einer Sekunde? Meine > vermutung wäre jetzt 0,85A. Er soll ja nach einer Sekunde nicht abschalten sondern wenn der Strom wert größer als der Sollwert ist. Die Sekunde wird nur wegen der Einschaltspitze ignoriert > > Ich bleibe weiterhin sehr interessiert.
Peter schrieb: >> Um eine aussage trefffen zu können ob dein ADC richtig funktioniert >> müsstest du doch z.B. ab einem Nulldurchgang parallel mit dem Oszi >> messen das bild speichern und dann mit den vom ADC genau zum >> Messzeitpunk aufgenommenen Werten vergleichen. Am ende wird eine zuweißung gemacht z.b. 600 ADC werte entsprechen 4A nur das bei mir auch mal der ADC den Wert 600 ausgibt wenn 3,8A da sind oder 4,2 als Beispiel
Peter schrieb: > 600 ADC werte entsprechen 4A Was sind 600 ADC Werte? Im deutsch das mir beigebracht wurde heist das du hast von ADC 600 Werte bekommen, also 600 mal gemessen was 4A entspricht? Ergibt für mich keinen sinn. Dein Mittelwert ist 600 und soll 4A entsprechen? Andere frage wie viel Bit hat dein ADC? Ich vermute 10. Dementsprechend misst du Werte im Bereich von 0-1023? Gregor B. schrieb: > Bei Strom 0A gibt der Sensor eine Spannung von Vcc/2 aus, bei > 5V-Versorgung also 2,5V. > > Bei +5A peak erhälst Du eine Ausgangsspannung (gemäß Grafik "Output > Voltage versus Sensed Current" auf S.6 des Datenblatts) von 3,5V. > > Bei -5A peak erhälst Du eine Spannung von 1,5V am Ausgang des Sensors. Stimmt das? Damit sollte bei 4A ca. 676 raus kommen? 2,9A entsprechen dann 600. Woher weist du das der Strom einen Wert von 600 hat? Dein Programm macht doch gar keine Ausgabe? Mit welcher genauigkeit misst du deinen Strom? Sind die 0,4A vielleicht eine Messungenauigkeit? Du zählst doch var und Messung gleichzeitig hoch. Fragst erst ob die Messung 45 ist und danch ob var 26 ist wenn var 26 ist stellst du Messung und Strom zurück auf 0. Da bist du bei ca. 93° bei 180 ist wieder ein Nulldurchgang der var ja wieder auf null setzen sollte und den Triac ausschaltet. Du misst also weniger als eine halbe Periodendauer über einen Nulldurchgang bei dem die Last abgeschaltet wird? Ein konstantes Messergebnis wäre doch gut nach dem Sanftanlauf. Ich Rechne für deine Zeiten einen theoretischen Mittelwert von 582 aus.
Ok anderes Beispiel um es genauer zu machen: Angenommen wir haben einen Motor, dieser soll immer bei 100Nm ausschalten. Damit das passiert messe ich den Strom am Motor und werte diesen mit meiner MCU aus. Durch einen Test weiß ich, dass der ADC Wert 600, 100 Nm entspricht. Nun will ich also immer bei 100Nm abschalten. Nur bei mir schaltet der Motor mal bei 80 Nm ab oder bei 120 Nm. Besser?
wieOskar schrieb: > Du zählst doch var und Messung gleichzeitig hoch. Fragst erst ob die > Messung 45 ist und danch ob var 26 ist wenn var 26 ist stellst du > Messung und Strom zurück auf 0. Da bist du bei ca. 93° bei 180 ist > wieder ein Nulldurchgang der var ja wieder auf null setzen sollte und > den Triac ausschaltet. Gemessen soll immer nach dem der Triac gezündet wurdet bis 9ms danach. Darum wird beim zünden vom Triac nur Messung auf Null gesetzt, aber beim nulldurchgang der Spannung var.
Peter schrieb: > Durch einen Test weiß ich, dass der ADC Wert > 600, 100 Nm entspricht. Du meinst durch ein Test glaubst du zu wissen. Hast du es auch mal durchgerechnet? Wenn Gregors angabe stimmt dann hab ich es ja oben schon mal geschrieben passen deine Werte nicht zusammen. Deswegen: ADC Werte speichern und parallel mit dem Oszi den Spannungsverlauf messen. Und dann die Bilder hier einstellen.
Trotzdem müssen immer wenn ich bei 600 abschalte das gleiche Ergebnis rauskommen und nicht mal 200 mA mehr oder weniger, darum geht es ja im eigentlichen oder besser der Motor muss immer bei 100 Nm abschalten und nicht mal bei 80 oder 120 also die wiederholgenauigkeit ist schlecht
Gibt's den keine Hinweise mehr? Ich kann mir nicht erklären wo dieses Problem her kommt.
Hast du die Messung schon mal ohne Triac-Steuerung gemacht. Also eine ganze Halbwelle messen.
Ja auch da schwanken die Werte. Der Triac hat auch bereits einen Snubber.
Peter schrieb: > Gibt's den keine Hinweise mehr? Ich kann mir nicht erklären wo dieses > Problem her kommt. Du hast du Schaltung! Also musst du auch Infos liefern. Sonst kann man nur weiter raten und du sagst dann einfach "Nein daran liegt es aber nicht". Ohne es belegen zu können! Also wie hast du überprüft das dein Messverfahren zum Strom messen a) die erforderliche genauigkeit besitzt und b) zeitlich auch im selben Bezug bzw. direkten Bezug zur ADC Messung steht? Du hast trotz mehrfacher Aufforderung noch kein brauchbares Material geliefert mit dem man dir vernünftig helfen könnte. Selbst auf simple Fragen was du an Messequipment zur verfügung hast bist du nicht eingegangen. Auch vorschläge zur eingrenzung des fehlers werden von dir völlig ignoriert. Warum? Bist du einfach nicht in der Lage diese zu verstehen oder umzusetzen? Schreib doch mal zusammen was du meinst das du über deine Schaltung weist und dann zeige was du davon belegen kannst. Auf mich wirkt es als ob es dir an wissen/erfahrung fehlt um das Problem selbst zu lösen. Einen beitrag zur Lösung willst du anscheinend nicht liefern aber eine Lösung hättest du gerne. Peter schrieb: > Ja auch da schwanken die Werte. Komplett wertlose Aussage. Sorry du hättest auch einfach 42 schreiben können. Was interessiert bei so einer Frage: Eingangsgröße, Messgröße, Messverfahren, Statistischesverfahren, Meßaufbau.
Kollege, Schaltplan ist schon lange gepostet und und ausgewertet sowie mit Hilfe der Forums abgeändert. Des weiteren ist ein Programm gepostet. Dass ich ein Oszi, digital Multimeter und analog Multimeter habe wurde auch erwähnt. Des Weiteren Versuche ich immer schnellstmöglich auf Fragen und Vorschläge einzugehen. Es tut mir leid, wenn ich nicht alles zur Zufriedenheit aller Beantworten kann.
wieOskar schrieb: > Also wie hast du überprüft das dein Messverfahren zum Strom messen > a) die erforderliche genauigkeit besitzt und Praktisch noch nicht, rechnerisch müsste es ausreichend sein. Werte morgen das Oszi-Bild filmen und dann wenn ich die Schwankungen habe die Bilder übereinander legen. Dann sehe ich wie viel wirklich die Änderung des Stroms war, bzw. der Spannung die am ADC ankommt. > b) zeitlich auch im selben Bezug bzw. direkten Bezug zur ADC Messung > steht? Wie testet man das?
Na du misst genau in der selben zeit wie dein ADC Misst. z.B.: Mit dem starten der Messung einen Triggerausgang setzen und damit das Strommessgerät ansteuern. Bei einem Periodischen Signal muss es auch nicht parallel gemessen werden aber die Zeitlichen bezügen müssen Korellieren. Sonst haben deine Messungen die selbe aussage kraft wie die Temperatur heute und die vom 12. Dezember 1873. Die frage was dir dieser Vergleich bringt bleib dann dir überlassen.
Ah ok verstehe gemessen wird ja aller 200us da werden es paar viele Signale dich ich kaum auswerten kann oder?
Das ist ja nur die Abtastfrequenz deiner Messung. Du müsstest zum Beispiel während der 9ms messen und diesen messwert genau so berechnen wie du es digital auch machst. Wenn du also Messdaten für die 9ms Digital abgetastet hast und daraus den Mittelwert bildest, kannst du für die selbe zeit analog messen(zum selben zeitpunkt) und musst natürlich auch den selben mittelwert bilden. Dann kannst du eine Aussage darüber treffen wie sich dein analoges messsystem zu deinem digitalen verhält.
Ok verstehe. Leider stehen mir Messmittel nicht zur Verfügung die das messen könnten... Ist das Programm denn so verwendbar wie ich es oben gepostet habe? Dann bin ich mir erst mal sicher, dass es von der Hardware kommt.
Sieht auf den ersten Blick ein bisschen chaotisch aus aber lönnte theoretisch funktionieren. Du solltest sicherstellen das deine 200us ca hinkommen. Also am besten einen Pin setzen wenn der zyklus beginnt und rücksetzen wenn er endet. An den Pin das Oszi ran und dann sollte da ein stabiles bild rauskommen. Kritisch könnte es sein wenn der Mittelwert gebildet wird. Je nachdem wie lange die Berechnung braucht könnte es mit den 200us eng werden. Das hängt ja auch mit der Taktfrequenz zusammen. Weil teilen recht lange dauern kann sind Teiler die sich durch einen shift realisieren lassen beliebt. Ich habe mal ein ADC Meswert umrechnung gemacht und einfach die dazugehörige Formel verwendet und das mal gegen die Optimiere Lösung mit geringfügigem Fehler, der im Rauschen des ADC unter geht gemessen mit 137us zu 12us. Was schon interessant sein kann wenn man viele zu tun hat. Deswegen würde ich die einzelnen teile testen. Am besten mit einem Poti am ADC eingang damit du stabile Werte bekommst und auch die Summe der Messwerte hochtreiben kannst. Ich würde mir an deiner stelle auch ein kleines Programm schreiben was einfach die eingelesenen Werte des ADC per UART an den PC sendet ohne regelung. Einfach Messen und senden. Die empfangenen werte einfach mit nem kleinen uart server zusammen basteln und als csv abspeichern. Das in Excel importiert und geplottet oder mit gnuplot und du siehst was da am ADC los ist dann kannst du auch sinnvolle aussagen darüber treffen was da los ist. Wenn du einen debugger hast kannst du sie auch einfach im Ram speichern und per debugger auslesen. Wenn du mit so einem Programm ohne den Phasen anschnitt was sinnvolles Messen kannst bist du einen schritt weiter in richtung messsicherheit. Persönlich denke ich das es sehr schwer ist jemandem hilfestellung zu geben wenn man nur brocken vorgeworfen bekommt. Viele sagen zwar sie haben ein Oszi aber bei den wenigsten habe ich den eindruck das sie damit umgehen können. Ok das kann man lernen und auch da kann man hilfe bekommen. Oftmal sind die Probleme eben nicht so trivial und auf den ersten Blick Lösbar. Wichtige infos sind immer welche Hardware mit welchen Parametern z.B.:Takt, Spannung. Schaltpläne, Programmcode nicht nur schnipsel. Wenn irgend möglich Bilder ven den Messungen die das Problem zeigen. Oftmals sind Probleme auch da wo man sie nicht vermutet. Man weis im Normalfall auch nicht wie die Person vorgebildet ist und ob sie versteht was man meint. Auch weis man bei der angabe ja ich habe ein Oszi ob das ein Halbdefektes 20MHz Analogoszi oder ein Hochklassiges DSO mit GBIP. Auf tagelanges informationen ausquetschen habe ich meistens keine lust. Da Arbeite auch ich lieber an meinen eigenen Projekten.
Vielen dank zunächst für deine Hilfe. Kann gut verstehen dass irgendwann die Lust fehlt zu helfen wenn man sich nur im Kreis dreht. Mir geht es genau so. Jeden Tag sieht man die Schaltung und das Programm und bei jeder Änderung bleibt das positive Ergebnis aus. Werde wie du vorschlägst zu nächst ein Pin bei der Messung setzen und auswerten. Eine Frage zum Mittelwert, ist es so richtig die 45 Messwerte zusammen zuziehen und durch 45 zu teilen oder gibt es da bessere Lösungen? Als ich den ACS mit dem Kondensator und Zubehör als Spitzenwertdedektor betrieben habe am ADC war die Wiederholgenauigkeit sehr gut nur die Sprünge waren unerklärlich. Bei der Lösung jetzt sind ja keine Bauteile mehr dazwischen und meine Wiederholgenauigkeit ist schlechter. Mit dem Kondensator musste ich für eine kleine Änderung am Abschaltstrom recht viel Werte höher gehen jetzt reicht schon die Hälfte für das gleiche Ergebnis. Man könnte meinen die Auflösung sei schlechter aber das geht ja nicht.
Zum Mittelwert: Ja das passt soweit. Geschickter könnte es sein mit 2,4,8,16,32,64 Werten zu arbeiten da kannst du anstelle der division einen Bitshift machen. Ganz klar ganzhal operation also verlusst der Nachkomma stellen aber die brauchst du ja eh nicht. Beim Abschalt kriterium würde ich auf größer gleich prüfen nicht auf ist gleich. Wie schon mal erwähnt bin ich von der Messidee nicht überzeugt. Wenn ich das jetzt richtig verstanden habe schaltest du im eingeschwungenen zustand jeweil bei 93° ein und bei 180° aus auf der positiven wie auf der negativen halbwelle. D.h. nur dann kann Strom fließen den du mit deiner Messvorichtung auswerten kannst. Ich würde nur dort messen woch ich auch etwas messbares erwarte. Zeitlich gesehen zwischen 5,2ms und 10ms sowie 15,2ms und 20ms. Jetzt müsste man sich anschauen mit welcher Geschwindigkeit die Messung durchgeführt wird, langsamere Messung entspricht dem besseren Ergebnis bei quasi stationären signalen und wie viel zeit zur verarbeitung zur verfügung steht. Das kann ich aber auch so aus dem stehgreif nicht beantworten. Also Messen, auswerten, verbessern und alles wieder von vorne, bis es passt ;-) So isses leider. Ich würde meine Messung nach dem Einschalten starten und versuchen 8, 16 oder 32 Werte zu bekommen, wahrscheinlich eher 16. In der zeit in der der Triac aus ist kannst du ja rechnen und gegebenenfals abschalten. Um ein gefühl für die Werte zu bekommen könne man auch den ADC Wert in einen timer laden der dann als one shot den ADC Wert z.B. in us als geschaltete Zeit an einem Pin repräsentiert. Da würdest du dann eine flakernde fallende flanke als messwert variation des ADC sehen. Falls das Oszi die Auflösung schaft. Peter schrieb: > Jeden Tag sieht man die Schaltung und das Programm und bei > jeder Änderung bleibt das positive Ergebnis aus. Dann ist Forschung und Entwicklung der falsche Beruf für dich ;-) Das gehört dazu das man viele Stunden damit verbring eine ordentliche Messung zu bekommen. Je nach Messung kann es schon mal Tage bis Wochen dauern nur den Messplatz einzurichten. Bei der Fehlersuche ist es besser das Problem in kleine happen zu zerlegen. und dan stück für stück die Verarbeitungskette vor arbeiten. Wenn man es bei der Entwicklung nicht gleich gemacht hat oder konnte alle Einzelteile seperat prüfen. JA das ist viel Arbeit aber wenn man es richtig macht macht man das auch nur einmal. Bzw man hat dann sein toolkit mit dem man schnell einzelne sachen testen kann. Auch das teure Messequipment ist manchmal fehlerhaft/defekt was man auf den ersten Blick nicht mitbekommt trotz Kalibirerung durch den Hersteller eine Woche zuvor. Kostet dann halt mal nen Tag. Was deine reproduzierbarkeit angeht kann man schlecht sagen ob das das normale rauschen / schwanken der Messwerte ist. Man kann mitunter große Probleme bekommen wenn man neben der ADC Leitung z.B. eine Leitung liegen hat die mit steilen Flanken schaltet. Wie sauber ist deine Versorgungsspannung? Schwank die wenn der Triac geschaltet wird? Hast du irgendwelche Störstrahler in der nähe? Wichtig ist das man sich eine Methode ausdenkt um reproduzierbare Ergebnisse zu bekommen und diese dann Auswertet. Eine frage wäre z.B.: mit welchem Eingangsstrom musst du deinen ADC Eingang treiben um bei der von dir gewünschten Messrate die richtigen Ergebnisse zu bekommen? Da ist schließlich ein Kondensator der ge/entladen werden will. Da sind wir wieder beim Thema testschaltung mit z.B.: bekanntem Sinus als Eingangsgröße. Wenn ich es richtig verstanden habe verschwendest du eh viel Leistungsfähigkeit des ADCs wenn deine Messwerte nur zwischen 1,5V und 3,5V liegen. Falls das von Gregor richtig war. Das heist du hast Vss 2V. Damit könntest du deinen Eingangswert, mit einem geeigneten Spannungsteiler den du einmisst, in einen Bereich von 0-2,56V Schieben. Damit könntest du die Quanisierungsstufen verkleinern und die interne referenzspannung benutzen. Wenn es dann nicht gut genug ist könnte man über einen Eingangstiefpass (RC) nachdenken da du ja dann dein R schon drin hast. Du könntest also Spannungsteiler und tiefpass kombinieren.
Habe jetzt das Programm so geändert, dass nur Messwerte in die Berechnung mit eingehen, die größer sind als die Null-Spannung. Ergebnis: Die "Auflösung" wird besser sprich um einen kleinen Stromwert später abzuschalten muss ich mehr ADC-Werte im Programm ändern als zuvor. Der Grund ist mir auch klar. Jedoch ist die Wiederholgenauigkeit immer noch sehr schlecht. Nun habe ich ganz einfach an den Ausgang des ACS eine Diode und dahinter parallel einen Kondensator gesteckt. Also habe ich nun wieder die Spitzenwert Detektion wie bereist am Anfang, nur die ganzen Widerstände habe ich weggelassen. Die Wiederholgenauigkeit ist viel besser. Auch die "Auflösung" wird um vieles besser. Wo ich vorher für 1A ca. 50 ADC Werte ändern musste, muss ich nun für 1A 200 ADC-Werte ändern. Mache ich doch etwas bei der Mittelwertberechnung falsch oder warum ist die Auflösung um so viel höher? Der Unterschied zum Anfang ist also nun, das alle Widerstände weg sind hinter dem ACS und dass ich jetzt aller 200us messe und nicht wie am Anfang nur aller 10ms. Jetzt gehen in die Berechnung 45 Werte aus 10ms ein vorher 15 Werte aus 150ms. Ich hoffe das die Probleme nun gelöst sind. Am Anfang war ja die Widerholgenauigkeit bereits super nur es gab diese Augenblicke wo auf einmal bei einem viel höheren Strom die MCU die gleichen ADC-Werte aus gab als kurz zuvor.
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.