Hallo,
ich habe einen Stromwandler vom Typ LTSR 25-NP.
Der Nennstrom ist bei meiner Beschaltung 25A.
Werden 0A gemessen, liefert der Stromwandler 2,5V. Das ist sozusagen die
Null-Linie.
Bei einem Strom von 25A gibt der Stromwandler beim höchsten Peak 3,125V
und beim niedrigsten 1,875V aus.
Der Stromwandler liefert also ein Abbild des Stromes als Spannung
(50Hz).
Ich möchte den positiven Peak mittels ADC herausfiltern und ausgeben
(siehe Bild).
Zum Verständnis gebe ich die Werte in Spannung und alles vereinfacht an:
Wie oft soll das Auslesen erfolgen bzw. muss die Frequenz erhalten
bleiben?
Muss auch ein einmalige Peak sicher erkannt werden?
Falls nicht würde ich erstmal analog gleichrichten & glätten und dann
erst "gemütlich" einlesen...
Grüße
Vielen Dank für die zahlreichen Antworten!
Igor Ebner schrieb:
> Willst Du nur eine Halbwelle messen, oder als Schleife?
Es reicht mir, wenn nur der positive Peak gefunden wird.
Wenn die ADC-Messung unter 2,5V geht, soll der Wert ausgegeben werden.
Tilo schrieb:
> Vor allem wie genau muss das sein?> Du wirst mit einem Abtastwert nie genau den Scheitelpunkt erwischen.
Eine Periode dauert bei 50Hz 20ms. Der positive Peak ist bei 5ms zu
erwarten. Selbst wenn der ADC-Wandler pro Messung gesponnen 0,1ms
braucht, habe ich im positiven Abstastbereich bereits 100 Messungen
eingelesen (10ms).
Da sollte doch der eingelesene Höchstwert fast dem "realen" Peak
entsprechen.
Olaf K. schrieb:
> Wie oft soll das Auslesen erfolgen bzw. muss die Frequenz erhalten> bleiben?
Ich würde den ADC-Wandler im Freerun-Modus betreiben.
Der ATTiny26 (den will ich einsetzen) läuft dann mit dem internen Takt.
Die Frequenz muss nicht erhalten bleiben, es soll nur jeweils der
positive Peak gefunden werden.
Olaf K. schrieb:
> Muss auch ein einmalige Peak sicher erkannt werden?
Es handelt sich um die Messung von Netzstrom.
Idealerweise gehe ich von einem sauberen Sinus aus, da kommt mit
Sicherheit kein Ausreißer-Peak.
Wenn du aber von dem einmaligen Höchstwert sprichst, dann ja, dieser
Peak sollte erkannt werden.
Olaf K. schrieb:
> Falls nicht würde ich erstmal analog gleichrichten & glätten und dann> erst "gemütlich" einlesen...
Darüber habe ich auch nachgedacht, aber wenn ich einen
Präzisionsgleichrichter hinter den Verstärker schalte, ist der Bereich
bis ca. 1.22A verzerrt dargestellt, da die Dioden für den
Präzisionsgleichrichter-OPV eine Schwellspannung von 0,19V haben.
Die Ausgabe soll dann so gemacht werden:
Der eingelesene Peak zwischen 2,5V und 3,125V soll per PWM von 0V bis 5V
ausgegeben werden. Aber das ist erstmal in ferner Zukunft...
Also Dein Programm wird erst einmal einen Durchgang machen und stehen
bleiben. Du brauchst eine Schleife...
z.B. while (1){
...programm...
}
Dann wird Dein Programm so lange den Peak Status ausgeben, wie lang die
negative Halbwelle ist. Wenn das Programm z.B. 1000 Schleifen pro
Sekunde macht, dann hast Du in Deiner negativen Habwelle 500 mal den
Peakwert der vorangegangenen Halbwelle ausgegeben. Also darfst Du nur 1
mal pro negativer Halbwelle ausgeben und danach den Peak Wert löschen
für die nächste Messung.
>if (ADC == NULLPUNKT)
Es kann sein dass Du den NULLPUNKT verpasst, deswegen würde ich nur mit
< und > arbeiten.
Etwa so:
ADC = eingelesener Spannungswert
NULLPUNKT = 2,5V
PEAK = 2,5V
STATUS_SCHON_GESENDET = 0
while (1)
{
if (ADC > PEAK)
{
PEAK = ADC;
}
if (ADC < NULLPUNKT)
{
if (STATUS_SCHON_GESENDET == 0) Ausgabe PEAK;
STATUS_SCHON_GESENDET = 1;
PEAK = 2.5V
}
}
Somit hast Du die Ausgabe z.B. auf 50Hz begrenzt.
Igor Ebner schrieb:
> Also Dein Programm wird erst einmal einen Durchgang machen und stehen> bleiben. Du brauchst eine Schleife...>> z.B. while (1){> ...programm...> }
Das stimmt! Oh, jetzt verstehe ich auch deine erste Frage.
Klar soll das als Schleife eingelesen werden. Ich hatte ja vereinfacht
den Code hier geschrieben und das while(1) weggelassen!
Igor Ebner schrieb:
> Dann wird Dein Programm so lange den Peak Status ausgeben, wie lang die> negative Halbwelle ist. Wenn das Programm z.B. 1000 Schleifen pro> Sekunde macht, dann hast Du in Deiner negativen Habwelle 500 mal den> Peakwert der vorangegangenen Halbwelle ausgegeben. Also darfst Du nur 1> mal pro negativer Halbwelle ausgeben und danach den Peak Wert löschen> für die nächste Messung.
1 zu 0 für dich. ;) Da muss ich dir wieder zustimmen!
Igor Ebner schrieb:
> Es kann sein dass Du den NULLPUNKT verpasst, deswegen würde ich nur mit> < und > arbeiten.
Joah, das hört sich plausibel an. 2 zu 0...
Deinen berichtigten Code habe ich nochmals etwas umgeschrieben, da bei
der positiven Auswertung das Bit STATUS_SCHON_GESENDET zurückgesetzt
werden muss, oder sehe ich das falsch?
Ach, jetzt ist mir noch was eingefallen.
Bei 0A gibt der Wandler stabile 2,5V aus.
Wie verwerte ich denn das? Es fließt ja nicht immer Strom durch den
Wandler.
Mit meinem jetzigen Code wird es dann zu keiner Ausgabe kommen...
Willst Du denn, dass eine Ausgabe erfolgt, wenn kein Strom fliesst? Da
gibt es ja keine Peak Werte. Wenn Du da auch eine Ausgabe haben willst,
dann brauchst Du einen Timer oder ein Delay, der es dann z.B. alle 2
Sekunden macht.
Ausserdem brauchst Du eine Tolenranzgrenze für den NULLPUNKT. Wenn Du
bei den 2.5V am ADC z.B. den Wert "120" gemessen hast, dann musst Du
z.B. schreiben:
if (ADC < 115)
Matze schrieb:
> Ach, jetzt ist mir noch was eingefallen.>> Bei 0A gibt der Wandler stabile 2,5V aus.> Wie verwerte ich denn das? Es fließt ja nicht immer Strom durch den> Wandler.> Mit meinem jetzigen Code wird es dann zu keiner Ausgabe kommen...
Du könntest zb mitzählen, wie oft du durch die Schleife gegangen bist.
Du der ADC seine Zeit braucht und du eine konstante Frequenz hast, ist
die Anzahl der Schleifendurchgänge von einem Nullpunkt zum nächsten
näherungsweise ziemlich konstant. Die kann man aber berechnen (oder
einfach vom Programm messen lassen :-). Diese Anzahl nimmst du noch mal
2 (zur Sicherheit) und wenn du diese Anzahl an Schleifendurchgängen hast
ohne dass es zu einer Ausgabe kam, dann liegt keine Schwingung an :-)
Igor Ebner schrieb:
> Bei seinem Bild geht er von einem 50Hz Signal aus, also braucht er nicht> mitzählen. Wenn innerhalb 40ms nichts kommt
Und wie stellt er die 40ms fest?
Eben. Am einfachsten durch Mitzählen der Schleifendurchgänge
PEAK_COUNT = 0;
while (1)
{
PEAK_COUNT = PEAK_COUNT + 1;
if (ADC > PEAK)
{
PEAK_COUNT = 0;
STATUS_SCHON_GESENDET = 0;
PEAK = ADC;
}
if (ADC < NULLPUNKT)
{
if (STATUS_SCHON_GESENDET == 0) Ausgabe PEAK;
STATUS_SCHON_GESENDET = 1;
PEAK = 2.5V
}
if (PEAK_COUNT > IRGENDEIN_GRENZWERT )
{
Ausgabe "Es liegt kein Eingangssignal an"
PEAK_COUNT = 0;
}
}
PS: Warum sind hier eigentlich die Variablennamen alle in
Grossbuchstaben? In C ist das keine so gute Idee. Die Konvention besagt,
dass Namen komplett in Grossbuchstaben für Makros reserviert sind.
Igor Ebner schrieb:
> Ach so, damit sparst Du Dir den Timer... ja, Du hast recht. Und das mit> den Grossbuchstaben auch.>> Also 2 zu 1 zu 2 für unseren Moderator :c)
Eher
2 : 1 : 0.5
Mein Beitrag war da sehr bescheiden
Meiner doch auch :c)
Ich bin ja absoluter C Anfänger...
Also hat mir Deine Konventionsregel schon einige Augen geöffnet :c)
Mich verwirrte Dein "mit"zählen. Das muss antürlich nur einmal gezählt
werden und als Konstante kompiliert werden, und nicht ständig mitzählen.
Hab ich falsch verstanden...
Karl heinz Buchegger schrieb:
> Eher> 2 : 1 : 0.5> Mein Beitrag war da sehr bescheiden
Igor Ebner schrieb:
> Ha-ha, unser Mod kriegt nen halben Punkt abgezogen, bei>>Ausgabe "Es liegt kein Eingangssignal an"> fehlt das ;> Tut mir leid, das musste jetzt sein :c)
Zwischenstand lautet 2 : 1 : 0 ;o)
Karl heinz Buchegger schrieb:
> PS: Warum sind hier eigentlich die Variablennamen alle in> Grossbuchstaben? In C ist das keine so gute Idee. Die Konvention besagt,> dass Namen komplett in Grossbuchstaben für Makros reserviert sind.
Okay, das stimmt, wollte so auf die Variablen nur aufmerksam machen.
Denn ich kann ja auch nicht schreiben ADC = 2,5V sondern ADC = 511.
Also ziehe ich der Fairness halber einen haben Punkt bei mir ab.
Neuer Zwischenstand: 2 : 0.5 : 0 für Igor!
Karl heinz Buchegger schrieb:
> Und wie stellt er die 40ms fest?> Eben. Am einfachsten durch Mitzählen der Schleifendurchgänge
Das ist eine super Idee!
Hier nun der angepasste Code mit bestem Dank an Herrn Buchegger:
1
ADCW=eingelesenerSpannungswert
2
nullpunkt=2,5V
3
peak=2,5V
4
status_schon_gesendet=0
5
peak_count=0;
6
7
while(1)
8
{
9
peak_count=peak_count+1;
10
11
if(ADCW>peak)
12
{
13
peak_count=0;
14
status_schon_gesendet=0;
15
peak=ADCW;
16
}
17
18
if(ADCW<nullpunkt)
19
{
20
if(status_schon_gesendet==0)Ausgabepeak;
21
status_schon_gesendet=1;
22
peak=2.5V
23
}
24
25
if(peak_count>100)
26
{
27
Ausgabe2,5V;
28
peak_count=0;
29
}
30
}
So sollte es wohl wirklich funktionieren... froi
Die Ausgabe soll dann per PWM ausgegeben werden.
D.h. wenn 2,5V konstant gemessen werden, soll per PWM 0V ausgegeben
werden. Wenn der Maximalstrom von 25A fließt, soll per PWM 5V ausgegeben
werden. Bei 12,5A demnach 2,5V. Mit PWM hab ich zwar noch nichts
gemacht, aber was sagt euer (Bauch-)Gefühl. Ist sowas realisierbar?
Der ATTiny26 reicht für dieses Vorhaben doch massig aus, oder?
Das PWM-Signal liest dann ein weiterer Mikrocontroller per ADC ein, der
dann die Daten per Bus an eine übergeordnete Steuerung weitergibt.
Busse usw. sind nicht das Problem für mich, da kann ich mich gut
reindenken, aber Messtechnik ist Neuland für mich.
Vergiss die Toleranzgrenze nicht
> if (ADCW < (nullpunkt - 0.2V)
Ausserdem erzeugt Deine PWM Ausgabe und wieder Einleserei eine weitere
Ungenauigkeit, die nicht sein muss. Überlege, ob der zweite Prozessor,
der Deine PWM des ersten Prozessors liesst, nicht selbst das Signal des
Spannungsreglers einlesen könnte. Oder ob der erste Prozessor nicht
gleich auf den Bus senden kann. Oder ob sich beide Prozessoren per I2C
oder parallel über mehrere Datenleitungen unterhalten können...
Hallo,
nach etwas Überlegen werde ich das Spannungssignal erst einmal
aufbereiten, d.h ich ziehe mittels OPV die 2,5V auf 0V und die maximale
Sensorspannung von 0,625V verstärke ich auf 5V.
Für den Differenzverstärker nehme ich 0,1%-Widerstände, der
nichtinvertierende OPV bekommt einen Spannungsteiler mit einem Trimmer.
Somit kann ich flexibel den Messbereich für den Nennstrom einstellen.
Der OPV ist ein AD822 (Rail-2-Rail, unipolare 5V Spg.-Versorgung)
Dann sieht das Programm ein wenig anders aus, da die Bezugsspannungen
anders sind. Außerdem soll bei fallender Spannung sofort einmalig die
Ausgabe erfolgen:
1
ADCW=eingelesenerSpannungswert
2
nullpunkt=0V
3
peak=0V
4
status_schon_gesendet=0
5
peak_count=0;
6
7
while(1)
8
{
9
peak_count=peak_count+1;
10
11
if(ADCW>peak)
12
{
13
peak_count=0;
14
status_schon_gesendet=0;
15
peak=ADCW;
16
}
17
18
if(ADCW<peak)
19
{
20
if(status_schon_gesendet==0)Ausgabepeak;
21
status_schon_gesendet=1;
22
peak_count=0;
23
peak=0V;
24
}
25
26
if(peak_count>100)
27
{
28
Ausgabe0V;
29
peak_count=0;
30
}
31
}
Ist dieser Code in Ordnung oder habe ich etwas übersehen?
Werde demnächst die Verstärkerschaltung aufbauen und dann den ATMega8
für diese Messaufgabe vorbereiten.
Es gibt aber auch noch eine andere Idee wie du deinen Maximalwert messen
kannst. Da es sich bei dir ja konstant um 50Hz handelt kannst du bei
deiner Messung neben dem eigentlichen Signal auch das um 90 Grad
Phasenverschobene Signal messen.
Du machst eine Messung und dann eine 2. Messung um exakt 5mS (90 Grad)
später.
Bekanntlich ist ja sin(x)^2 + cos(x)^2 = 1
Dann berechnest du V = sqrt(a^2 + b^2)
a ist deine erste Messung , b ist deine zweite Messung.
Bei welcher Zeit du die Messungen machst ist egal.
Probier es mal aus.
Gruss Helmi
Hallo Helmut,
danke für deinen Vorschlag!
Helmut Lenzen schrieb:
> Da es sich bei dir ja konstant um 50Hz handelt kannst du bei> deiner Messung neben dem eigentlichen Signal auch das um 90 Grad> Phasenverschobene Signal messen.
Das setzt voraus, dass die Netzfrequenz nicht schwankt.
Jedenfalls werde ich deinen Vorschlag auch mal per Software testen.
Anbei habe ich ein Bild angehängt, das den Signalverlauf nach der
OP-Verstärkerstufe zeigt.
Bis jetzt ist noch alles theoretisch, aber ich bin guter Dinge.
Mein Ziel ist eine analoge Signalquelle per Software auszuwerten.
Ich möchte damit mein Wissen erweitern.
LG,
Matze
Helmut Lenzen schrieb:
> So stark schwankt die nicht. Da ist jede Menge rotierendes Eisen im> Netz.
Ganz davon abgesehen ist meine Messung auch nicht 10000000%-ig genau.
Aber ich bin sehr erfreut über deinen Vorschlag!
Wie bereits geschrieben werde ich diesen "Messweg" dann auch testen.
Helmut Lenzen schrieb:
> Berichte mal ob es geklappt hat.
Die Formel kann ich nicht anwenden, da ich mir nun mit dem Oszilloskop
den Signalverlauf angeguckt habe.
Es sieht so aus, als ob ich nur bei Nennstrom die Frequenz 50Hz bekomme.
Bei einen kleinerem Strom werden nur die kleinen Spitzen angezeigt und
das Raster entspricht nicht mehr den 50Hz.
Anbei ein Bild...
Ich verwende zuerst einen OPV als Differenzverstärker um auf 0V zu
kommen und verstärke mit einem weiteren OPV die maximale Spannung von
0,625V auf 5V. Somit habe ich fast 0 bis 5V zur Verfügung!
Igor Ebner schrieb:
> Ich würde das Signal so unverändert messen, wie es aus dem Stromwandler> kommt.
Aber dann ist die zu messende Spanne nicht so groß. Würde aber zur Not
auch gehen, möchte ich aber nicht...
Helmut Lenzen schrieb:
> Poste mal deine komplette Schaltung von Stromwandler bis zum ADC> Eingang.
Siehe angehängtes Bild, ich habs schnell mit MS-Paint gezeichnet.
Sehe gerade das du einen LEM Wandler benutzt. Dir ist bekannt das der
eine Ausgangsspannung von 2.5V +- 0.625 IP/IPN hat ?
Wenn du jetzt einen Differenzverstaerker zwischen 2.5V Ref und Ausgang
schaltest , dann muesste dein Differenzverstaerker aber auch ein Signal
von +- 0.625V IP/IPN machen. Das heist der OP Ausgang muss kleiner als
0V werden koennen. Das kann er aber bei einer unipolaren Versorgung
nicht. Deshalb hast du da auch diesen Gleichrichter aenlichen Effekt.
Du must deine Schaltung etwas aendern.
LEM OP
-------+ +-------+
| | |
Out +---------+ + |
| | +---+-----ADC
| | | |
Ref +----R1-+-+ - | |
| | | | |
-------+ | +-------+ |
| |
+----R2-------+
Mit R1,R2 stellst du deine Verstaerkung so ein das am Ausgang 2.5V
+-2.5V erreicht wird.
Somit gibt du auf dem ADC eine Wechselspannung mit 2.5V Amplitude.
Nullpegel ist dann 2.5V.
In der Software berrechnest du dann:
Val (2.er Komplement) = ADCwert - 512
Mit dem Wert kannst du dann weiter rechnen.
Wenn du es ganz geschickt machen willst kannst du die 2.5V Referenz
ueber einen weiteren ADC-Kanal einlesen lassen und diesen Wert anstatt
der 512 abziehen.
Gruss Helmi
Hallo Helmi!
Helmut Lenzen schrieb:
> Dir ist bekannt das der> eine Ausgangsspannung von 2.5V +- 0.625 IP/IPN hat ?> Wenn du jetzt einen Differenzverstaerker zwischen 2.5V Ref und Ausgang> schaltest , dann muesste dein Differenzverstaerker aber auch ein Signal> von +- 0.625V IP/IPN machen. Das heist der OP Ausgang muss kleiner als> 0V werden koennen. Das kann er aber bei einer unipolaren Versorgung> nicht.
Ja, das ist mir bekannt.
Ich wollte für die Auswertung nur die positive halbwelle im vollen
Bereich 0-5V benutzen, darum habe ich nach dem Differenzverstärker einen
nichtinvertierenden Verstärker geschaltet, der mir die 0-0,625V in 0-5V
umsetzt.
Helmut Lenzen schrieb:
> Deshalb hast du da auch diesen Gleichrichter aenlichen Effekt.
D.h. Therorie und Praxis unterscheiden sich mal wieder?
Vom Logischen her sollte doch meine Schaltung auch funktionieren, oder?
Aber das Ergebnis sieht in der Praxis anders aus.
Helmut Lenzen schrieb:
> Du must deine Schaltung etwas aendern.>> LEM OP> -------+ +-------+> | | |> Out +---------+ + |> | | +---+-----ADC> | | | |> Ref +----R1-+-+ - | |> | | | | |> -------+ | +-------+ |> | |> +----R2-------+>> Mit R1,R2 stellst du deine Verstaerkung so ein das am Ausgang 2.5V> +-2.5V erreicht wird.>>> Somit gibt du auf dem ADC eine Wechselspannung mit 2.5V Amplitude.> Nullpegel ist dann 2.5V.
Damit wäre ich wieder bei meiner ersten Lösung.
Okay, ich werde deinen Schaltungsvorschlag umsetzen.
Helmut Lenzen schrieb:
> Val (2.er Komplement) = ADCwert - 512
2.er Komplement... Da war mal was... ;-)
Gruß,
Matze
Matze schrieb:
> Helmut Lenzen schrieb:>> Deshalb hast du da auch diesen Gleichrichter aenlichen Effekt.>> D.h. Therorie und Praxis unterscheiden sich mal wieder?> Vom Logischen her sollte doch meine Schaltung auch funktionieren, oder?> Aber das Ergebnis sieht in der Praxis anders aus.
Das tun beide doch eigentlich immer.
Deine Schaltung clippt die negativen Halbwellen einfach weg aber eine
Gleichrichtung ist das trotzdem nicht. Von der Linearitaet ganz zu
schweigen.
Nimm lieber die komplette Vollwelle.
Helmut Lenzen schrieb:
> eine Schaltung clippt die negativen Halbwellen einfach weg aber eine> Gleichrichtung ist das trotzdem nicht.
Gleichrichten will ich ja nicht, sondern nur den Peak rausfiltern.
Ich habe meinen Code versuchsweise zusammengeschustert, aber ich habe
das Problem, dass entweder nur der Höchstwert dauerhaft gespeichert
oder, wenn ich den Code umschreibe, die Werte rauf- und runterählen,
also quasi die aktuellen Werte der Sinuswelle ausgegeben werden.
Der Code sieht so aus, wie bereits von mir vorgeschlagen:
1
nullpunkt=0V
2
peak=0V
3
status_schon_gesendet=0
4
peak_count=0;
5
6
while(1)
7
{
8
peak_count=peak_count+1;
9
10
if(ADCW>peak)
11
{
12
peak_count=0;
13
status_schon_gesendet=0;
14
peak=ADCW;
15
}
16
17
if(ADCW<peak)
18
{
19
if(status_schon_gesendet==0)Ausgabepeak;
20
status_schon_gesendet=1;
21
peak_count=0;
22
peak=0V;
23
}
24
25
if(peak_count>100)
26
{
27
Ausgabe0V;
28
peak_count=0;
29
}
30
}
Das Problem mit dem Code ist, dass dauerhaft die Werte der Welle
ausgegeben werden. Eigentlich sollte bei Erreichen der Mindestspannung
der Peak-Wert ausgegeben werden, bis wieder ein neuer Peak erkannt wird.
@Helmi: Ich habe noch nicht deine Schaltung ausprobiert, habe noch immer
meine Schaltung aufgebaut und so, wie es aussieht, stimmen auch die
Peakwerte, nur die rattern so schnell durch.
Morgen werde ich ein wenig weiter rumexperimentieren und ggfs. den Code
posten, den ich bis jetzt schon habe.
Aber ist an meinem Code, den ich oben gepostet habe, etwas falsch?
Weil so geht das nicht gut!
Matze schrieb:
> Das Problem mit dem Code ist, dass dauerhaft die Werte der Welle> ausgegeben werden. Eigentlich sollte bei Erreichen der Mindestspannung> der Peak-Wert ausgegeben werden, bis wieder ein neuer Peak erkannt wird.
Und warum schriebst du das dann nicht auch so?
if (ADCW < peak)
{
if (status_schon_gesendet == 0) Ausgabe peak;
status_schon_gesendet = 1;
peak_count = 0;
peak = 0V;
}
Das hier triggert NICHT das Senden, wenn die Mindestspannung erkannt
wurde, sondern sofort, wenn die Spannung (eigentlich der Messwert vom
ADC) auch nur ein klein wenig abfällt, wird das Senden ausgelöst.
Jetzt muss man noch berücksichtigen, dass ein ADC schon elektronisch
sehr gut aufgebaut sein muss, damit er bei einer konstanten Spannung
auch einen konstanten Messwert bringt. Ein 'Rauschen' von +/- 1 bis 2
Digits ist bei normalen Aufbau praktisch unvermeidlich. D.h. in deinem
Fall: Der ADC teilt deinem Programm ein leichtes Absinken der Spannung
mit, obwohl die Schwingung eigentlich noch im Steigen ist.
Stell dir doch einfach eine Schwellenspannung ein. WEnn meinetwegen der
ADC einen Wert kleiner 100 liefert, dann kann das kein Peak mehr sein.
Aber du kannst diese Schwelle benutzen, um
Einen Peak nur dann als neuen Maximalwert zu akzeptieren, wenn der
ADC Wert größer als 100 + 10 ist
Das Unterschreiten von 100 benutzen um damit das Ausgeben zu
triggern.
Die +10 bei der Maximum-Detektierung sollen einfach nur eine Hysterese
sein. Damit ein leicht zappelnder ADC Wert von 100 (der beim Anstieg der
SChwingung sicherlich irgendwann erreicht wird) nicht ständige
Falschmeldungen liefert.
Hysterese ist übrigens immer gut.
> Weil so geht das nicht gut!
Höchstwahrscheinlich deshalb, weil du zu naiv an die Sache rangehst und
denkst, dass der Messwert eines ADC wie in Stein festgemeisselt steht
und 1:1 der Spannung bis aus µV entspricht
Es kann natürlich auch sein, dass du einen kleinen Ripple auf der
Messspannung hast, den du am Oszi noch gar nicht gesehen hast, den der
ADC aber mitkriegt.
Wie gesagt: Dein Programm gibt aus, sobald die Spannung abfällt. Und
wenn die Spannung nur deswegen abfällt, weil durch einen kleinen Ripple
eine 'Delle' in der Schwingung ist, dann gibt dein Programm auch dann
aus.
PS: In deinen Grafiken
Ist das rote durch tatsächliche Messung entstanden oder hast du das mit
einem Edding reingemalt? Wenn das reale Messungen sind, braucht man nur
2 Sekunden hinzuschauen um zu sehen, dass der Messwert wilde Sprünge
macht, die nichts mit der Sinusschwingung zu tun haben. Immer nur
kleine, lokal begrenzt, aber abstreiten kann man das nicht gerade :-)
Hallo.
Karl heinz Buchegger schrieb:
> Dein Programm gibt aus, sobald die Spannung abfällt. Und> wenn die Spannung nur deswegen abfällt, weil durch einen kleinen Ripple> eine 'Delle' in der Schwingung ist, dann gibt dein Programm auch dann> aus.
In der Tat bin ich davon ausgegangen, dass es keine abfallende "Delle"
auf der eingelesenen Sinus-Kurve gibt, obwohl der Sinus-Wert am Steigen
ist.
Das begründet dann auch die wilden Ausgaben auf der 7-Segment-Anzeige.
Danke, dass du mir das ins Wissenszentrum geredet hast, das werde ich
mir merken! Fit in der Sache bin ich noch lange nicht, aber solange man
aus Fehlern lernt, ist doch alles gut! ;o)
Karl heinz Buchegger schrieb:
> Hysterese ist übrigens immer gut.
Und die werde ich auf jeden Fall einbauen müssen!
Klingt nämlich alles sehr plausibel!
Kommt jetzt nur drauf an, wie genau mit der Hysterese die Messung ist.
Da aber meine Anzeige eh nur auf 0,1A genau sein soll, wird die
Hysterese wohl nicht auffallen.
Karl heinz Buchegger schrieb:
> PS: In deinen Grafiken> Ist das rote durch tatsächliche Messung entstanden oder hast du das mit> einem Edding reingemalt? Wenn das reale Messungen sind, braucht man nur> 2 Sekunden hinzuschauen um zu sehen, dass der Messwert wilde Sprünge> macht, die nichts mit der Sinusschwingung zu tun haben.
Das Rote ist nur mit Paint reingemalt. Leider konnte ich nicht die
gesamte Schwingung rot einfärben, da die Grafik aus dem Internet mit der
Welle bereits durch Bildkonvertierung "vermurkst" war. Beim Einfärben
waren einige Pixel nicht mehr weiß, weshalb nicht die gesamte Welle
eingefärbt werden konnte. Wollte doch nur markieren, um welche Welle es
sich handelt... Sorry für das Missverständnis.
Heute Nachmittag mache ich dann mit dem "Projekt" weiter, wenn nichts
dazwischen kommt.
Vielen Dank nochmal für die Gedankenanstöße!
Gruß,
Matze
Hallo,
ich fand 10min Zeit und habe mir in der Theorie ein paar Gedanken
gemacht. Praktisch kann ich das frühestens erst heute Nachmittag testen.
Vorab: Ich habe bereits festgestellt, dass mein Mindestwert, den mir der
ADC bei 0A einliest, maximal 12 beträgt.
Diese 12 ist dann sozusagen mein "digitaler Nullpunkt".
Matze schrieb:
> Praktisch kann ich das frühestens erst heute Nachmittag testen.
So, ich habs getestet, funktioniert soweit prima, aber die Anzeige ist
zu "empfindlich".
Jetz habe ich mir überlegt zehn ADC-Peaks zu speichern und daraus den
Mittelwert zu bilden.
Jedoch schlugen meine Versuche fehl und habe einen Countup-Counter
gebastelt.
Wollte nur bescheid geben, dass es schon teilweise funktioniert, aber
ich noch nich zufrieden bin und ich weiter daran programmiere.
Tipps und Vorschläge sind immer willkommen! ;o)
Es gibt Neuigkeiten...
Helmut Lenzen schrieb:
> LEM OP> -------+ +-------+> | | |> Out +---------+ + |> | | +---+-----ADC> | | | |> Ref +----R1-+-+ - | |> | | | | |> -------+ | +-------+ |> | |> +----R2-------+>> Mit R1,R2 stellst du deine Verstaerkung so ein das am Ausgang 2.5V> +-2.5V erreicht wird.>>> Somit gibt du auf dem ADC eine Wechselspannung mit 2.5V Amplitude.> Nullpegel ist dann 2.5V.
Diese Verschaltung bringt keinen Vorteil gegenüber meiner Schaltung.
Jedenfalls bemerke ich keinen Unterschied.
ABER: Ich werde das ganz anders lösen, denn wenn ich mittels Software
den Peak aus einer "verkrüppelten" Sinuswelle ermitteln will, vergeude
ich Zeit und der Messwert ist alles andere als genau.
Daher baue ich das anders auf:
Ich werde die Eingangsbeschaltung von Helmut nehmen. Danach schalte ich
einen Gleichrichter mittels OPV. Die daraus entstandene Gleichspannung
lese ich gemütlich mit dem ADC ein. Somit erspare ich mir Berechnungen
im AVR und das macht die Sache wesentlich einfacher und der Code ist
kleiner.
Trotzdem besten Dank an alle, die mir geholfen und die Augen geöffnet
haben.
LG Matze
Matze schrieb:
> Diese Verschaltung bringt keinen Vorteil gegenüber meiner Schaltung.> Jedenfalls bemerke ich keinen Unterschied.
Na dann hast du aber nicht richtig gemessen. Deine 1. Schaltung hat doch
die negativen Halbwellen gekappt. Mit meiner Schaltung passiert das
nicht.
Gruss Helmi
Helmut Lenzen schrieb:
> Matze schrieb:>> Diese Verschaltung bringt keinen Vorteil gegenüber meiner Schaltung.>> Jedenfalls bemerke ich keinen Unterschied.>> Na dann hast du aber nicht richtig gemessen. Deine 1. Schaltung hat doch> die negativen Halbwellen gekappt. Mit meiner Schaltung passiert das> nicht.
Das ist richtig, auf dem Oszibild konnte ich wunderbar erkennen, dass
deine Schaltung den "Nullpunkt" bei 2,5V hat und die Gleichspannung vom
Stromsensor in einer Sinusform schwankt.
Ich habe mich leider nicht gut ausgedrückt und meinte, dass ich auch mit
deiner Schaltung die selbe Ausgabe habe (wenn ich 511 vom Peak abziehe)
wie bei meiner Schaltung (minus Offset von 12).
Kannst du dir bitte nochmal mein Bild mit der Nullpunktverschiebung
angucken?!
http://www.mikrocontroller.net/attachment/67077/messwert_oszi.GIF
Da fällt doch auf, dass ich die "Nulllinie" bei I kleiner Inenn nach
oben verschiebe und der Abstand zwischen den Peaks nicht mehr das
Verhältnis 1:1 hat.
Wie kann ich den Nullpunkt von 2,5V auf 0V verschieben, ohne dass sich
das Verhältnis ändert?
Klar muss ich dann den OPV bipolar versorgen, um auch unter 0V zu
kommen.
Das ist mir soweit klar. Wenn ich aber beim Differenzverstärker den
Nullpunkt auf 0V anstatt 2,5V verschiebe, verschiebe ich auch garantiert
den Sinus-Nullpunkt.
Anbei eine Skizze mit meiner Vermutung.
Grüße, Matze
Matze schrieb:
> Wie kann ich den Nullpunkt von 2,5V auf 0V verschieben, ohne dass sich> das Verhältnis ändert?> Klar muss ich dann den OPV bipolar versorgen, um auch unter 0V zu> kommen.> Das ist mir soweit klar. Wenn ich aber beim Differenzverstärker den> Nullpunkt auf 0V anstatt 2,5V verschiebe, verschiebe ich auch garantiert> den Sinus-Nullpunkt.
Dein ADC im AVR kann aber keine negativen Spannungen verdauen.
Deshalb die verschiebung auf 2.5V.
Helmut Lenzen schrieb:
> Dein ADC im AVR kann aber keine negativen Spannungen verdauen.> Deshalb die verschiebung auf 2.5V.
Auch das ist mir bewusst.
Daher mein Vorhaben genauer...
1. Schritt: 2,5V ± 0,625V auf 0V ± 0,625V verschieben
2. Schritt: 0V ± 0,625 auf 0V ± 5V verstärken
3. Schritt: Gleichrichter mittels zwei OPV ohne "Diodenverluste"
4. Schritt: Spannung glätten und mit ADC einlesen
Ich frage mich, ob nach dem Verschieben des Offsets im 1. Schritt auch
die "Sinuskurve" wie im Bild vom vorherigen Post verschoben wird.
Matze schrieb:
> Ich frage mich, ob nach dem Verschieben des Offsets im 1. Schritt auch> die "Sinuskurve" wie im Bild vom vorherigen Post verschoben wird.
Ja die wird mitverschoben wenn du es so machst. Wenn du die Schritte so
machst sollte es funktionieren
Matze schrieb:
> 1. Schritt: 2,5V ± 0,625V auf 0V ± 0,625V verschieben> 2. Schritt: 0V ± 0,625 auf 0V ± 5V verstärken> 3. Schritt: Gleichrichter mittels zwei OPV ohne "Diodenverluste"> 4. Schritt: Spannung glätten und mit ADC einlesen
Helmut Lenzen schrieb:
> Wenn du die Schritte so machst sollte es funktionieren
So, ich habe mein "mächtiges" Paint beansprucht und einen Schaltplan
gezeichnet. Wird das so, wie es im Anhang zu sehen ist, funktionieren?
Ich möchte nicht wieder eine Schaltung zusammenlöten und erst danach
merken, dass diese murks ist.
Schritt 1 und 2 habe ich zusammengefasst.
Die Widerstände haben eine Toleranz von 0,1%
Für den Schritt 3 verwende ich den AD822, die Gleichrichterschaltung
habe ich im Datenblatt vom AD820 gefunden. Auch hier haben die
Widerstände eine Toleranz von 0,1%.
Was kann ich denn für einen OPV für den ersten Schritt nehmen?
Danke fürs Ansehen des Schaltplans! ;o)
Kommentare sind erwünscht!
Gruß,
Matze
Hallo!
Helmut Lenzen schrieb:
> Schritt 3 u. 4 Funktioniert so nicht.>> Bei 4 belastest du den OP kapazitiv daher er könnte schwingen.
Die Schaltung habe ich aus dem Datenblatt vom AD820, Seite 14, Figure
20.
http://www.datasheetcatalog.org/datasheet/analogdevices/446075391AD820_d.pdf
Auf der ersten Seite steht: Capacitive Load Drive Up to 350 pF
D.h. du hast Recht und die 10µF sind zu viel des Guten.
Schön an deinem Link sind die Oszibilder.
Die Dioden verfälschen wirklich nicht das Ausgangssignal?
Wenn das so ist, dann kann ich auf den teuren AD820 bzw. AD822
verzichten und drei günstigere OPV's nehmen, die ich bipolar mit ±15V
bzw. ±12V versorgen könnte. Damit die Ausgangsspannung am
Präzisionsgleichrichter nicht über 5V steigt und ich den ADC-Eingang
schützen muss, reicht es doch eine 5,1 Z-Diode (mit Vorwiderstand)
parallel zum ADC-Eingang gegen Masse zu schalten, oder?
Für die Glättung und Siebung kann ich folgendes machen?
http://www.elektronik-kompendium.de/sites/slt/0210251.htm
D.h. ich schalte auch einen "dicken" Elko hinter den Ausgang der
Gleichrichterschaltung und dann nochmal ein RC-Glied.
Hat denn dieser "dicke" Elko keine Auswirkung auf den
Präzisionsgleichrichter?
Gruß,
Matze
Matze schrieb:
> Die Dioden verfälschen wirklich nicht das Ausgangssignal?
Nein tun sie nicht , der OP kompensiert die Schwellspannung der Dioden.
> ich den ADC-Eingang> schützen muss, reicht es doch eine 5,1 Z-Diode (mit Vorwiderstand)
Besser eine Schottky Diode nach + und eine nach GND.
Deine Z_Diode würde schon unter 5.1V leitend werden.
+5V
|
Diode
|
>-------R------+-------+------>
| |
Diode C
| |
GND GND
>D.h. ich schalte auch einen "dicken" Elko hinter den Ausgang der>Gleichrichterschaltung und dann nochmal ein RC-Glied.
Kein Elko an den Ausgang vom OP schalten => Schwinggefahr
Machs so wie in dem Plan oben.
Die AD Typen brauchst du nicht, nimm TL08xx.
Gruss Helmi
Vielen Dank für die Antworten, Helmut.
Hier nun meine Bestell-Liste: ;o)
OPV: TL084ACN
DC/DC-Wandler: RB-0512D (+5V -> ±12V)
2,5V Referenz: IC LM336Z-2,5
Shottky-Dioden: BAT46
Widerstände: diverse 0,1%
Die 2,5V-Referenz brauche ich, da ich auch noch einige LTS 25-NP ohne
2,5V-Referenzpin habe.
Der Widerstandswert bezieht sich auf den Kondensator, oder?
D.h. ich baue einfach nur einen Tiefpass auf?
Gruß,
Matze
Matze schrieb:
> Der Widerstandswert bezieht sich auf den Kondensator, oder?> D.h. ich baue einfach nur einen Tiefpass auf?
Richtig, für die Dioden passt dann auch.
Super, Helmut!
Wie berechne ich denn am geschicktesten den Tiefpass?
Beziehen sich die Werte auf die Frequenz? Wenn ja, dann muss ich alles
bis ca. 60Hz durchlassen...
Sorry für die blöde Frage, aber ich kenne sonst nur
Gleichrichterschaltungen mit dem "dicken" Elko als Glättung.
Nun werde ich die benötigten Sachen bestellen und dann aufbauen.
Wenn die Schaltung funktioniert, sollte der Code im µC nicht mehr so
"anspruchsvoll" sein. Eine einfache ADC-Messung mit konstanter
Gleichspannung habe ich bereits erfolgreich durchgeführt!
aufdieschulterklopf
Nochmals vielen Dank,
Matze
Matze schrieb:
> Wenn ja, dann muss ich alles> bis ca. 60Hz durchlassen...
Du hast einen Vollwellengleichrichter. Also beträgt deine Frequenz dann
120Hz.
Das heist deine Grenzfrequenz muss kleiner als diese Frequenz sein. Da
dein Tiefpass 1. Ordnung nun nicht gerade eine riesige Dämpfung hat must
du die die Grenzfrequenz wesentlich tiefer ansetzen. Ich würde mal so
bei 1Hz anfangen.
Helmut Lenzen schrieb:
> Matze schrieb:>> Wenn ja, dann muss ich alles>> bis ca. 60Hz durchlassen...>> Du hast einen Vollwellengleichrichter. Also beträgt deine Frequenz dann> 120Hz.> Das heist deine Grenzfrequenz muss kleiner als diese Frequenz sein. Da> dein Tiefpass 1. Ordnung nun nicht gerade eine riesige Dämpfung hat must> du die die Grenzfrequenz wesentlich tiefer ansetzen. Ich würde mal so> bei 1Hz anfangen.
Ah, okay.
Die 60Hz bezog ich auf 50Hz Netzfrequenz + "Reserve".
Ich lese mich nun auch noch in die Tiefpässe x-ter Ordnung ein, danke
für die Hilfe!
Wenn alle Bauteile zusammengelötet sind und noch Fragen auftreten, werde
ich mich wieder melden.
Vielen Dank und liebe Grüße,
Matze
PS: Du bist für mich ein Anwärter für den besten Hilfeleister 2010! :o)
Helmut Lenzen schrieb:
> Das heist deine Grenzfrequenz muss kleiner als diese Frequenz sein. Da> dein Tiefpass 1. Ordnung nun nicht gerade eine riesige Dämpfung hat must> du die die Grenzfrequenz wesentlich tiefer ansetzen. Ich würde mal so> bei 1Hz anfangen.
Ähm, über Nacht ist mir (leider) noch eine Frage eingefallen:
Warum glätte ich nicht und schicke stattdessen die Spannung (0-5V) durch
einen Tiefpassfilter?
Glätten und Filtern sind doch zwei unterschiedliche Sachen...
Matze schrieb:
> Warum glätte ich nicht und schicke stattdessen die Spannung (0-5V) durch>> einen Tiefpassfilter?>> Glätten und Filtern sind doch zwei unterschiedliche Sachen...
Nö. Dein Tiefpass filtert die höheren Frequenzanteile weg. Dein Signal
ist danach glatt.
Und bitte nicht den Kondensator direkt an den OP hängen.
Gruss Helmi
Hallo Helmut.
Helmut Lenzen schrieb:
> Dein Tiefpass filtert die höheren Frequenzanteile weg. Dein Signal> ist danach glatt.
Ich kann mir das bildlich gar nicht vorstellen, was aus dem "halben
Sinus" nach dem Filtern mit dem Tiefpass (1Hz) wird.
Mir ist klar, dass die frequenzbelastete Spannung (50Hz * 2 = 100Hz)
nicht mehr durchgelassen wird. Aber was kommt am Ende raus, wenn ich nur
Frequenzen bis 1Hz passieren lasse? Du schreibst, das Signal ist danach
glatt. Aber wie hoch ist denn die Amplitude? Wird die auch geschwächt?
Hast du evtl. ein Bild, dass mein Verstädnisproblem lösen wird?
Helmut Lenzen schrieb:
> Und bitte nicht den Kondensator direkt an den OP hängen.
Keine Panik, das mache ich schon nicht! Ich halte mich an deine Tipps!
:o)
Anbei ist der Schaltplan. Vielleicht findest du ja noch ein paar Fehler.
Mir kommt es vor, als ob nach dem Filtern das Signal hochohmig ist.
Wäre es nun geschickt einen Impedanzwandler noch dahinter zu schalten?
Einen OPV hab ich im Gehäuse noch über.
Achja, der Kondensator ist ein Folienkondensator.
Gruß,
Matze
Matze schrieb:
> Anbei ist der Schaltplan. Vielleicht findest du ja noch ein paar Fehler.
Sieht schon mal ganz gut aus.
> Mir kommt es vor, als ob nach dem Filtern das Signal hochohmig ist.
Es ist dort etwas hochohmig. Der ADC Eingang ist aber auch hochohmig.
Die Impedanz soll so rund 10K nicht ueberschreiten. Von daher sind die
220K etwas hochohmig.
Der 680nF haelt die Spannung schon stabil waehrend der Sample u.
Holdzeit.
Aber wenn du noch einen OP ueberig hast. Bezahlt ist er ja schon und
Geld gibts keins zurueck.
> Wäre es nun geschickt einen Impedanzwandler noch dahinter zu schalten?
Siehe oben.
> Einen OPV hab ich im Gehäuse noch über.> Achja, der Kondensator ist ein Folienkondensator.
Ist auch Ok.
>Du schreibst, das Signal ist danach>glatt. Aber wie hoch ist denn die Amplitude? Wird die auch geschwächt?>Hast du evtl. ein Bild, dass mein Verstädnisproblem lösen wird?
Die Amplitude kann man ausrechnen.
Und zwar hast du am Ausgang den arithmetischen Mittelwert deiner
gleichgerichteten Spannung.
T
Um = Us * 1/T * Integral(sin(wt) * dt)
0
T = halbe Periodendauer = Pi einsetzen und Integral loessen.
2
Um = Us * -----
Pi
Um = Mittelwert
Us = Spitzenwert
Ueff = Effektivwert
Um = Ueff * sqrt(2) * 2
------------------
Pi
Oder noch einfacher: Am Ausgang deines Gleichrichters
Um = Us * 0.636
Das ist die Formel um aus deiner Spitzenspannung am Eingang des
Gleichrichters den arithmetischen Mittelwert zu berechnen.
Gilt aber nur fuer Vollwellen Gleichrichtung.
Bei Halbwellen gilt:
Um = Us * 0.318
Das ist die Amplitude die du am Ausgang messen kannst. Irgendwelche
Verstaerkerfaktoren wurden jetzt nicht beruecksichtigt.
Deine restlich Wechselspannung wird jetzt vom Tiefpassfilter um den
Faktor
20 dB / Dekade unterdrueckt.
Also im Bereich von 100Hz -> 1 Hz in deinem Fall so rund 40dB.
Gruss Helmi
Hallo Helmut,
vielen Dank für die ausführliche Beschreibung.
Hoffentlich habe ich es richtig verstanden:
Helmut Lenzen schrieb:
> Bei Halbwellen gilt:>> Um = Us * 0.318>> Das ist die Amplitude die du am Ausgang messen kannst. Irgendwelche> Verstaerkerfaktoren wurden jetzt nicht beruecksichtigt.
D.h. ich erhalte nach der Gleichrichtung Um = 5V * 0.318 = 1,59V
Die 1,59V muss ich demnach wieder verstärken, um auf meine 5V
Gleichspannung zu kommen. Oder habe ich dich falsch verstanden?
Dann könnte ich doch nach dem Gleichrichten und Filtern den letzten OPV
im Gehäuse verwenden und diese Amplitude auf 5V verstärken?!
Die Shottky-Dioden würde ich dann erst nach dem letzten OPV verschalten.
Gruß,
Matze
Du hast einen Vollwellengleichrichter. Also gilt Um = Us * 0.636
>Dann könnte ich doch nach dem Gleichrichten und Filtern den letzten OPV>im Gehäuse verwenden und diese Amplitude auf 5V verstärken?!
Genaus so wirds gemacht.
>Die Shottky-Dioden würde ich dann erst nach dem letzten OPV verschalten.
Ja die muessen nach dem letzen OP und einen kleinen Widerstand davor um
dem Strom zu begrenzen so zwischen 1 .. 3,3 Kohm.
Gruss Helmi
Hallo Helmut.
Helmut Lenzen schrieb:
> Du hast einen Vollwellengleichrichter. Also gilt Um = Us * 0.636
Oh, ich habe das falsch betrachtet:
Halbwelle = nur positive Welle
Vollwelle = positive und negative Welle
Wenn man die negative Halbwelle nach oben klappt, bekommt man zwei
positive Halbwellen, sprich eine Vollwelle?!
Helmut Lenzen schrieb:
>>Dann könnte ich doch nach dem Gleichrichten und Filtern den letzten OPV>>im Gehäuse verwenden und diese Amplitude auf 5V verstärken?!>> Genaus so wirds gemacht.
Ich habe nun einen weiteren Schaltplanentwurf erstellt.
Kannst du dir das bitte mal angucken und mal kurz durchrechnen, ob das
alles soweit hinkommt? Danke.
Die Bauteile habe ich bereits bestellt, Widerstände 0,1% habe ich noch
ganz viele rumliegen, auch den Trimmer.
Der Trimmer in der letzten OPV-Stufe dient zum Einstellen der
Verstärkung, damit ich auf "genau" 5V bei Nennstrom komme.
Nach dem Filtern bekomme ich also Um = 5V * 0,636.
Das macht dann nach Adam Riese 3,18V.
V = (Us / Um) = (5V / 3,18V) = 1,572
Der nichtinvertierene Verstärker hat bereits schon eine Verstärkung von
1, also muss das Verhältnis von den beiden letzten Widerständen so
eingestellt werden, dass ich eine zusätzliche Verstärkung von 0,572
bekomme. Pi mal Daumen ist das Verhältnis 1:2. Ist das soweit richtig?
Helmut, ich bin dir echt dankbar! Durch dich habe ich in den letzten
Tagen mehr gelernt als aus jedem Fachbuch!
Gruß,
Matze
Matze schrieb:
> Wenn man die negative Halbwelle nach oben klappt, bekommt man zwei> positive Halbwellen, sprich eine Vollwelle?!
Yes so isses.
> Ich habe nun einen weiteren Schaltplanentwurf erstellt.> Kannst du dir das bitte mal angucken und mal kurz durchrechnen, ob das> alles soweit hinkommt? Danke.
Sieht so Ok aus.
>Der nichtinvertierene Verstärker hat bereits schon eine Verstärkung von>1, also muss das Verhältnis von den beiden letzten Widerständen so>eingestellt werden, dass ich eine zusätzliche Verstärkung von 0,572>bekomme.
Ich wuerde hier nicht von zusaetzlicher Verstaerkung 0.572 reden denn
das waere eine Daempfung. Sage lieber eine Verstaerkung von 1.572. Das
Verhaeltniss der beiden Widerstaende ist 0.572
>Pi mal Daumen ist das Verhältnis 1:2. Ist das soweit richtig?
Pi mal Daumen: Ja
Gruss Helmi
Hallo Helmut,
die Bauteile sind angekommen und ich habe die Schaltung auf einem
Steckbrett zusammengesteckt.
Mir ist aufgefallen, dass ich bei 0A ( = 2,5V vom Stromsensor) am
Ausgang eine Spannung von ca. 0,480V bis 0,520V einstellen kann.
Das kann doch eigentlich nicht sein, oder?
Schließe ich meinen Wasserkocher (knapp 10A) an den Stromsensor an,
bekomme ich eine Spannung von ca. 2,5V.
Den Stromsensor habe ich für einen Primärstrom von 25A beschaltet.
10A = 2,5V - 0,5V = 2V
20A = 4,5V - 0,5V = 4V
25A = 5,5V - 0,5V = 5V
Die jeweils 0,5V ist mein Offset, den ich am Ausgang bei 0A messen kann.
Ich verwende eine 2,5V Spannungsreferenz.
Kann das an den Dioden liegen? Eigentlich doch nicht, denn der
Präzisionsgleichrichter soll doch die Diodendurchbruchspannung
kompensieren.
Mich stört, dass ich nicht auf 0V am Ausgang komme, wenn kein Stromfluss
vorhanden ist.
Es kann auch sein, dass ich etwas falsch auf dem Brett gesteckt habe,
aber ich habe alles mit gutem Gewissen gesteckt.
Übrigens, die Ausgangsspannung habe ich mir mit einem Oszi angeguckt und
die ist nahezu stabil. Danke für den Hinweis mit dem Filter!
Ich musste übrigens die Masse vom DC/DC-Wandler (-12V / +12V) mit der
Masse von den 5V verbinden, da ich sonst nur Wirrwarr gemessen habe.
Wäre nett, wenn du mir nochmal helfen würdest.
Gruß,
Matze
NACHTRAG:
Matze schrieb:
> Den Stromsensor habe ich für einen Primärstrom von 25A beschaltet.> 10A = 2,5V - 0,5V = 2V> 20A = 4,5V - 0,5V = 4V> 25A = 5,5V - 0,5V = 5V> Die jeweils 0,5V ist mein Offset, den ich am Ausgang bei 0A messen kann.
Das sind nur Rechenbeispiele.
Ich gehe nämlich rechnerisch von diesen Werten aus, die ich erhalte.
Bei den ca. 10A habe ich aber tatsächlich knapp 2,5V gemessen.
Matze schrieb:
> Mir ist aufgefallen, dass ich bei 0A ( = 2,5V vom Stromsensor) am>> Ausgang eine Spannung von ca. 0,480V bis 0,520V einstellen kann.>> Das kann doch eigentlich nicht sein, oder?
Nein das stimmt was nicht.
Mess doch mal die Spannung an OP1 und OP3.
Bitte mit Oszi nachmessen.
Gruss Helmi
Hallo,
ich habe nochmal alles überprüft, gesteckt ist alles richtig!
Eventuell hat mein Steckbrett eine Macke...
Hier die Werte mit Oszi gemessen (Bezüge siehe angehängtes Bild):
Strom: 0A
A: 2,2V
B: 2,2V
C: 0V
D: 0V
E: 398mV
F: 398mV
G: 500mV
Strom: knapp 10A (Wasserkocher)
C: 2,7V (5,4V SpitzeSpitze)
E: 3,1V (3,1V Spitze)
F: 2,5V
G: 2,5V
Ich hab diese Schaltung mit dem Programm Circuit simuliert.
http://www.falstad.com/circuit/
Laut der Simulation ist der Schaltplan korrekt!
Bei maximal 3,125V am Eingang bekomme ich am Ausgang 5V mit dem
Verstärkungsfaktor 1,572! Also stimmt die Theorie!
Und hier nun der Code zum Importieren für das Programm.
In diesem Code ist die Schaltung enthalten, nur ohne den ADC-Schutz!
Link folgen -> File -> Import -> Code eintragen -> Button Import
drücken.
1
$ 1 5.0E-6 10.20027730826997 57 5.0 50
2
g 480 448 480 496 0
3
w 576 400 576 448 0
4
a 576 384 720 384 1 12.0 -12.0 1000000.0
5
w 720 384 720 448 0
6
r 576 448 720 448 0 57200.0
7
r 480 448 576 448 0 100000.0
8
w 352 320 352 368 0
9
a 464 224 560 224 0 12.0 -12.0 1000000.0
10
g 464 240 464 272 0
11
r 464 128 592 128 0 10000.0
12
r 704 224 832 224 0 10000.0
13
a 832 240 928 240 0 12.0 -12.0 1000000.0
14
r 832 64 928 64 0 20000.0
15
g 832 256 832 288 0
16
O 720 384 768 384 0
17
R 144 224 96 224 0 1 50.0 0.625 2.5 0.0 0.5
18
a 208 208 336 208 0 15.0 -15.0 1000000.0
19
r 336 208 464 208 0 10000.0
20
r 208 224 208 288 0 160000.0
21
g 208 288 208 320 0
22
r 208 128 208 192 0 160000.0
23
r 208 192 144 192 0 20000.0
24
r 208 224 144 224 0 20000.0
25
w 208 128 336 128 0
26
w 336 128 336 208 0
27
d 704 224 608 224 1 0.2
28
d 560 160 464 160 1 0.2
29
w 576 224 592 224 0
30
w 560 224 576 224 0
31
w 608 224 592 224 0
32
r 544 64 640 64 0 20000.0
33
w 928 240 928 64 0
34
w 832 64 832 224 0
35
w 704 224 704 128 0
36
w 704 128 592 128 0
37
w 832 64 640 64 0
38
w 544 64 336 64 0
39
w 336 64 336 128 0
40
w 560 160 560 224 0
41
w 464 208 464 160 0
42
w 464 128 464 160 0
43
r 352 368 432 368 0 220000.0
44
g 432 464 432 496 0
45
w 928 240 928 320 0
46
w 928 320 352 320 0
47
c 432 368 432 464 0 6.800000000000001E-7 3.2030546911950637
Hallo Matze
bist du sicher das du an Punkt C wirklich 0V hast . Auch mit dem Oszi
nichts zu sehen ?
Schliess doch zum Test mal den Punkt C nach GND kurz. Ausgang vom 1. OP
abklemmen.
Ist die Versorgungsspannung sauber b.z.w. mit Konis abgeblockt ?
Gruss Helmi
Hallo Helmut.
Helmut Lenzen schrieb:
> bist du sicher das du an Punkt C wirklich 0V hast . Auch mit dem Oszi> nichts zu sehen ?
Da ist nur ein ganz kleiner frequentieller Anteil zu sehen, die Spannung
beträgt ein paar µV. Aber diese Spannung bewegt sich ziemlich nah an der
0V-Linie.
Helmut Lenzen schrieb:
> Ist die Versorgungsspannung sauber b.z.w. mit Konis abgeblockt ?
Jupp, das ist es.
Es ist doch aber auch richtig, dass ich die Masse vom meinem
DC/DC-Wandler (-12V, +12V) mit der Masse von der Eingansspannung (5V)
verbinden muss?!
Ohne diese Masseverbindung kommt mehr als nur Murks am Ausgang raus.
Helmut Lenzen schrieb:
> Schliess doch zum Test mal den Punkt C nach GND kurz. Ausgang vom 1. OP> abklemmen.
Ich werde die Schaltung gleich nochmal neu zusammenstecken.
Womöglich hat mein Steckbrett Unterbrechungen.
Oder der OPV ist defekt...
Gruß und bis später,
Matze
PS: Hast du das Programm Circuit mal ausprobiert?
Ich finds total einfach zu bedienen.
Matze schrieb:
> Es ist doch aber auch richtig, dass ich die Masse vom meinem> DC/DC-Wandler (-12V, +12V) mit der Masse von der Eingansspannung (5V)> verbinden muss?!
Ja die must du verbinden.
>PS: Hast du das Programm Circuit mal ausprobiert?>Ich finds total einfach zu bedienen.
Noe. Ich nehme immer LTSpice von Linear.com
Ist auch kostenlos und hat einen graphischen Editor.
Hallo Helmut!
Die Schaltung habe ich neu gesteckt und andere "Verbindungswege"
benutzt.
Wenn 0A fließen, habe ich am Ausgang C eine Spannung von 148mV.
Spannungen an den Punkten A und B sind nicht genau gleich, also könnte
ich anstatt der Spannungsreferenz einen Trimmer einsetzen, der den
Ausgang C genau auf 0V herunter regelt.
Am Punkt G messe ich 300mV.
Wenn ich nun meinen Wasserkocher anschmeiße, der knapp 10A zieht, messe
ich am Punkt G 2,7V.
Die Spannung ist zu hoch!
Rechnerisch müsste ich einen Wert von ca. 2V bekommen.
Wenn ich die Ausgansspannung von 2V einstelle, hat der Trimmer nur noch
einen Wert von 16,5kOhm.
Bin schon mal zufrieden, dass sich wenigstens etwas am Ausgang tut.
Helmut Lenzen schrieb:
> Ich nehme immer LTSpice von Linear.com> Ist auch kostenlos und hat einen graphischen Editor.
Und was liefert das Programm für Werte?
Kann es sein, dass der OPV Mist macht?
Gruß,
Matze
Was kommt den raus wenn du den Punkt C mal fest auf GND legst.
>Und was liefert das Programm für Werte?>Kann es sein, dass der OPV Mist macht?
Ich habe jetzt deine Schaltung nicht ausprobiert / simuliert.
Helmut Lenzen schrieb:
> Was kommt den raus wenn du den Punkt C mal fest auf GND legst.
Ich messe folgendes:
C zu GND: -5mV
G zu GND: 40mV
Wenn ich die Spannung vom Steckernetzteil messe:
5V zu GND: 10mV
Frequenz: 100Hz
Die Brummspannung von 10mV hat bestimmt Auswirkungen auf den Ausgang G.
Werde versuchen ein Netzteil mit einem geregeltem
5V-Gleichspannungsausgang zu besorgen.
Kann ich anstatt der "Referenz-Diode" einen 100k-Spannungsteiler nehmen,
mit dem ich den Ausgang C auf nahezu 0V herunterregeln kann?
Mir ist ferner aufgefallen, dass das Ausgangssignal vom Stromwandler bei
0A ( = 2,5V) auch leicht schwankt. Ganz auf 0V kann ich wohl nicht
runterregeln...
Helmut Lenzen schrieb:
>>PS: Hast du das Programm Circuit mal ausprobiert?>>Ich finds total einfach zu bedienen.> Noe. Ich nehme immer LTSpice von Linear.com
Das Programm Circuit ist wirklich einfach und man kann schnell eine
Schaltung aufbauen, ohne sich mit dem Programm vorher intensiv
beschäftigt zu haben.
Aber Theorie und Praxis decken sich nur mit Glück! ;o)
Matze schrieb:
> Ich messe folgendes:>> C zu GND: -5mV>> G zu GND: 40mV
Ich meine jetzt nicht die Spannung von C nach Gnd zu messen sondern das
du Punkt C mit GND einfach kurzschliesst um zu sehen oder die anderen
OPs dir den Offset erzeugen.
>Kann ich anstatt der "Referenz-Diode" einen 100k-Spannungsteiler nehmen,>mit dem ich den Ausgang C auf nahezu 0V herunterregeln kann?
Hmm. Damit hast du aber keine Kompensation der Schwankungen am Ausgang
des LEM Wandlers . Kannst du aber mal versuchen ob das Stabil genug ist.
> Mir ist ferner aufgefallen, dass das Ausgangssignal vom Stromwandler bei>> 0A ( = 2,5V) auch leicht schwankt. Ganz auf 0V kann ich wohl nicht>> runterregeln...
Schwankt die Spannung wenn du mit einem Metall Gegensatnd in die nähe
des Wandles kommst ? Ich habe bei diesen Wandlern festgestellt das man
nicht mit magnetischen Gegenstaenden b.z.w. mit Leitungen in der nähe
kommen sollte.
Helmut Lenzen schrieb:
> Ich meine jetzt nicht die Spannung von C nach Gnd zu messen sondern das> du Punkt C mit GND einfach kurzschliesst um zu sehen oder die anderen> OPs dir den Offset erzeugen.
Ausgang C hab ich nach GND kurzgeschlossen, die Werte:
Ausgang 1. OPV nach GND: -5mV
Ausgang 2. OPV nach GND: -320mV
Ausgang 3. OPV nach GND: 30mV
Ausgang 4. OPV nach GND: 47mV
Helmut Lenzen schrieb:
> Schwankt die Spannung wenn du mit einem Metall Gegensatnd in die nähe> des Wandles kommst ?
Die "Leerlaufspannung" vom LEM-Wandler schwankt immer ein wenig, egal,
ob ich mit einem Metallgegenstand oder einem Magneten in die Nähe vom
Wandler komme. Durch das Loch habe ich nur eine Leitung gesteckt, die
restlichen Pins von den Spulen sind unbeschaltet.
Helmut Lenzen schrieb:
>>Kann ich anstatt der "Referenz-Diode" einen 100k-Spannungsteiler nehmen,>>mit dem ich den Ausgang C auf nahezu 0V herunterregeln kann?> Hmm. Damit hast du aber keine Kompensation der Schwankungen am Ausgang> des LEM Wandlers . Kannst du aber mal versuchen ob das Stabil genug ist.
Naja, ich will ja nicht die Spannung vom Wandler glätten, sondern am
Ausgang C nahezu 0V (kein Offset vom ersten OPV) erreichen.
Helmut Lenzen schrieb:
> Es gibt aber auch noch eine andere Idee wie du deinen Maximalwert messen> kannst. Da es sich bei dir ja konstant um 50Hz handelt kannst du bei> deiner Messung neben dem eigentlichen Signal auch das um 90 Grad> Phasenverschobene Signal messen.>> Du machst eine Messung und dann eine 2. Messung um exakt 5mS (90 Grad)> später.> Bekanntlich ist ja sin(x)^2 + cos(x)^2 = 1>>> Dann berechnest du V = sqrt(a^2 + b^2)>> a ist deine erste Messung , b ist deine zweite Messung.> Bei welcher Zeit du die Messungen machst ist egal.
Hallo Helmut,
die erste Schaltung funktioniert soweit, bin auch recht zufrieden.
Jetzt werde ich mal deinen Vorschlag ausprobieren.
Dazu habe ich ein paar Fragen.
Also, ich muss doch für den Mess-Interrupt einen Timer laufen lassen,
der alle 5ms einen Messstart erzwingt?
Dazu muss ich auch speichern, ob es sich um die erste oder die zweite
Messung handelt?!
Irgendwie muss ich doch dann noch den Timer blockieren, wenn die zweite
Messung durchgeführt wird. Am Ende der zweiten Messung muss dann der
Timer wieder auf 0 gesetzt werden?!
Zählt der Timer eigentlich weiter, wenn eine ADC-Messung gemacht wird?
Hhm, ich guck ja schon ins Tutorial, aber vielleicht hast du ja noch
einen Tipp.
Gruß,
poppycock
Matze schrieb:
> poppycock
...entpricht "unsinniges Gerede", weil ich mich noch nicht entschieden
habe, wie ich das Projekt am besten umsetze... grins
Gruß,
Matze
Matze schrieb:
> Also, ich muss doch für den Mess-Interrupt einen Timer laufen lassen,>> der alle 5ms einen Messstart erzwingt?>
Richtig. Der Timer triggert deinen ADC und der löst nach Wandlungsende
den Interrupt aus
> Dazu muss ich auch speichern, ob es sich um die erste oder die zweite>> Messung handelt?!>
Nein du must dir nicht merken ob 1. oder 2. Messung. Die 2. Messungen
ist wieder die 1. Messung für den nächsten durchlauf.
> Irgendwie muss ich doch dann noch den Timer blockieren, wenn die zweite>> Messung durchgeführt wird. Am Ende der zweiten Messung muss dann der>> Timer wieder auf 0 gesetzt werden?!>
Wenn die 2. Messungen vorbei ist muss du nur das Ergebnus berechnen. Das
schafft der Prozessor schon zwischen zwei Messungen.
> Zählt der Timer eigentlich weiter, wenn eine ADC-Messung gemacht wird?>
Ja das macht er. Er triggert dir alle 5mS den ADC.
Gruss Helmi
Hallo Helmut!
Sorry, bin seit letzter Zeit nicht mehr dazu gekommen deinen Vorschlag
in die Praxis umzusetzen. Hab eigentlich noch immer viel um die Ohren.
Ich werde deinen Schaltungsvorschlag ausprobieren und die Spannung auf
0-5V verstärken, Nullpunkt sind 2,5V.
Zu der Berechnung habe ich noch eine Frage...
Helmut Lenzen schrieb:
> Du machst eine Messung und dann eine 2. Messung um exakt 5mS (90 Grad)> später.> Bekanntlich ist ja sin(x)^2 + cos(x)^2 = 1>>> Dann berechnest du V = sqrt(a^2 + b^2)>> a ist deine erste Messung , b ist deine zweite Messung.> Bei welcher Zeit du die Messungen machst ist egal.
Beispiel 1:
Messung a = 2,5V
Messung b = 3,125V
V = sqrt(a^2 + b^2)
V = sqrt(2,5^2 + 3,125^2) = 4,02V
Beispiel 2:
Messung a = 2,5V
Messung b = 3,125V
V = sqrt(a^2 + b^2)
V = sqrt((2,5-2,5V)^2 + (3,125-2,5V)^2) = 0,625V
Beispiel 1 stimmt nicht, mit Beispiel 2 könnte ich weiterrechnen?!
Meinst du das so?
Gruß,
Matze
Hallo Matze
Du must natuerlich deine ADC-Werte erst in 2. komplement umrechnen.
Deine Werte bereich direkt vom ADC ist ja 0 .. 1023 entsprechend 0 .. 5V
Dein Signal bezieht sich aber auf 2.5V = 512 . Das heist fuer dich du
must von den ADC Werten erstmal 512 abziehen (entsprechend 2.5V). So
gesehen ist dann die 2. Formel korrekt wie du schon erkannt hast.
Gruss Helmi