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?
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
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...
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?
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?
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
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
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.
intvar;// Variable zum Berechnen des Zündzeitpunktes
6
unsignedlongpreviousMicros=0;// Variable zum messen der Zeit
7
unsignedlongcurrentMicros;// Variable zum messen der Zeit
8
longDauer;// Variable zum Berechnen der Zeit
9
intwait;// Variable für die Wartezeit
10
intStopp;// Variable zum Abschalten
11
intigno;// Variable zum ignorieren von Spitzen
12
intMessung;// Variable zum Zählen der Messungen
13
intfirstrun;// Variable für Sanftanlauf
14
intx;// Variable für den Zündzeitpunkt
15
intStromwert;// Variable zum Zählen der Ströme über dem Sollwert
16
17
voidsetup()
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
voidNulldurchgang()// Interruptprogramm bei Nulldurchgang
25
{
26
digitalWrite(pinTriac,LOW);// pinTriac auf Null setzen
27
var=0;// Variable var auf Null setzen
28
}
29
30
voidloop()
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.
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
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.
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.