Forum: Compiler & IDEs MAX-Wert einer sinusförmigen Spannung finden und ausgeben


von Matze (Gast)


Angehängte Dateien:

Lesenswert?

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:
1
ADC = eingelesener Spannungswert
2
NULLPUNKT = 2,5V
3
PEAK = 2,5V
4
5
if (ADC == NULLPUNKT)
6
 {
7
 PEAK = 2,5V;
8
 }
9
10
if (ADC > NULLPUNKT)
11
 {
12
 if (ADC > PEAK)
13
  {
14
  PEAK = ADC;
15
  }
16
 }
17
18
if (ADC < NULLPUNKT)
19
 {
20
 Ausgabe PEAK;
21
 }

Kann man das so machen?

Vielen Dank,
Matze

von I. E. (anfaenger69)


Lesenswert?

Willst Du nur eine Halbwelle messen, oder als Schleife?

von Tilo (Gast)


Lesenswert?

Vor allem wie genau muss das sein?
Du wirst mit einem Abtastwert nie genau den Scheitelpunkt erwischen.

von Olaf K. (oko)


Lesenswert?

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

von Matze (Gast)


Lesenswert?

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...

von I. E. (anfaenger69)


Lesenswert?

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.

von Matze (Gast)


Lesenswert?

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?
1
ADC = eingelesener Spannungswert
2
NULLPUNKT = 2,5V
3
PEAK = 2,5V
4
STATUS_SCHON_GESENDET = 0
5
6
while (1)
7
{
8
if (ADC > PEAK)
9
  {
10
    STATUS_SCHON_GESENDET = 0;
11
    PEAK = ADC;
12
  }
13
14
if (ADC < NULLPUNKT)
15
 {
16
   if (STATUS_SCHON_GESENDET == 0) Ausgabe PEAK;
17
   STATUS_SCHON_GESENDET = 1;
18
   PEAK = 2.5V
19
 }
20
21
}

von I. E. (anfaenger69)


Lesenswert?

Ja, genau... jetzt stehts 2:1   :c)
Sonst würde er nie wieder senden...

von Matze (Gast)


Lesenswert?

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...

von I. E. (anfaenger69)


Lesenswert?

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)

von Karl H. (kbuchegg)


Lesenswert?

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 :-)

von I. E. (anfaenger69)


Lesenswert?

Bei seinem Bild geht er von einem 50Hz Signal aus, also braucht er nicht 
mitzählen. Wenn innerhalb 40ms nichts kommt, dann hat er seine Flatrate 
:c)

von Karl H. (kbuchegg)


Lesenswert?

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.

von I. E. (anfaenger69)


Lesenswert?

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)

von Karl H. (kbuchegg)


Lesenswert?

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

von I. E. (anfaenger69)


Lesenswert?

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...

von I. E. (anfaenger69)


Lesenswert?

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)

von Matze (Gast)


Lesenswert?

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 = eingelesener Spannungswert
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) Ausgabe peak;
21
     status_schon_gesendet = 1;
22
     peak = 2.5V
23
   }
24
 
25
   if (peak_count > 100 )
26
   {
27
     Ausgabe 2,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.

von I. E. (anfaenger69)


Lesenswert?

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...

von Matze (Gast)


Lesenswert?

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 = eingelesener Spannungswert
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) Ausgabe peak;
21
     status_schon_gesendet = 1;
22
     peak_count = 0;
23
     peak = 0V;
24
   }
25
 
26
   if (peak_count > 100 )
27
   {
28
     Ausgabe 0V;
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.

von Helmut L. (helmi1)


Lesenswert?

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

von Matze (Gast)


Angehängte Dateien:

Lesenswert?

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

von Helmut L. (helmi1)


Lesenswert?

Matze schrieb:
> Das setzt voraus, dass die Netzfrequenz nicht schwankt.

So stark schwankt die nicht. Da ist jede Menge rotierendes Eisen im 
Netz.

von Matze (Gast)


Lesenswert?

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.

von Helmut L. (helmi1)


Lesenswert?

Berichte mal ob es geklappt hat.

von Matze (Gast)


Angehängte Dateien:

Lesenswert?

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!

von I. E. (anfaenger69)


Lesenswert?

ich würde da gar nicht viel herum tun mit OPs usw...

Ich würde das Signal so unverändert messen, wie es aus dem Stromwandler 
kommt.

von Helmut L. (helmi1)


Lesenswert?

@ Matze

Poste mal deine komplette Schaltung von Stromwandler bis zum ADC 
Eingang.
Ich fürchte da stimmt etwas nicht.

Gruss Helmi

von Matze (Gast)


Angehängte Dateien:

Lesenswert?

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.

von Helmut L. (helmi1)


Lesenswert?

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

von Matze (Gast)


Lesenswert?

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

von Helmut L. (helmi1)


Lesenswert?

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.

von Matze (Gast)


Lesenswert?

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) Ausgabe peak;
20
     status_schon_gesendet = 1;
21
     peak_count = 0;
22
     peak = 0V;
23
   }
24
 
25
   if (peak_count > 100 )
26
   {
27
     Ausgabe 0V;
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!

von Karl H. (kbuchegg)


Lesenswert?

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 :-)

von Matze (Gast)


Lesenswert?

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

von Matze (Gast)


Lesenswert?

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".
1
nullpunkt = 12; // (als u_int)
2
peak = nullpunkt; // (als u_int)
3
hysterese = 10; // (als u_int)
4
status_schon_gesendet = 0; // (als char)
5
peak_count = 0; // (als char)
6
7
while (1)
8
 {
9
  peak_count = peak_count + 1;
10
11
   if (ADCW > (peak+hysterese) )
12
   {
13
   status_schon_gesendet = 0;
14
   peak = ADCW;
15
   peak_count = 0;
16
   }
17
 
18
   if (ADCW <= nullpunkt)
19
   {
20
     if (status_schon_gesendet == 0)
21
     {
22
     Ausgabe peak;
23
     }
24
   status_schon_gesendet = 1;
25
   peak = nullpunkt;
26
   }
27
28
   if (peak_count > 100)
29
   {
30
   Ausgabe peak;
31
   peak_count = 0;
32
   }
33
 }

von Matze (Gast)


Lesenswert?

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)

von Matze (Gast)


Lesenswert?

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

von Helmut L. (helmi1)


Lesenswert?

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

von Matze (Gast)


Angehängte Dateien:

Lesenswert?

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

von Helmut L. (helmi1)


Lesenswert?

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.

von Matze (Gast)


Lesenswert?

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.

von Helmut L. (helmi1)


Lesenswert?

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

von Matze (Gast)


Angehängte Dateien:

Lesenswert?

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

von Helmut L. (helmi1)


Lesenswert?

Schritt 3 u. 4 Funktioniert so nicht.

Bei 4 belastest du den OP kapazitiv daher er könnte schwingen.

Als Gleichrichter nimmst du besser 4.2
http://www.loetstelle.net/grundlagen/operationsverstaerker/opamp_5.php

Zum Filtern kannste du noch ein RC Glied hinterher schalten.

von Matze (Gast)


Lesenswert?

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

von Helmut L. (helmi1)


Lesenswert?

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

von Matze (Gast)


Lesenswert?

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

von Helmut L. (helmi1)


Lesenswert?

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.

von Matze (Gast)


Lesenswert?

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

von Helmut L. (helmi1)


Lesenswert?

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.

von Matze (Gast)


Lesenswert?

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)

von Matze (Gast)


Lesenswert?

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...

von Helmut L. (helmi1)


Lesenswert?

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

von Matze (Gast)


Angehängte Dateien:

Lesenswert?

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

von Helmut L. (helmi1)


Lesenswert?

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

von Matze (Gast)


Lesenswert?

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

von Helmut L. (helmi1)


Lesenswert?

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

von Matze (Gast)


Angehängte Dateien:

Lesenswert?

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

von Helmut L. (helmi1)


Lesenswert?

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

von Matze (Gast)


Lesenswert?

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

von Matze (Gast)


Lesenswert?

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.

von Helmut L. (helmi1)


Lesenswert?

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

von Matze (Gast)



Lesenswert?

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
48
R 144 192 80 192 0 0 40.0 2.5 0.0 0.0 0.5
49
w 576 368 432 368 0
50
o 15 64 0 35 5.0 9.765625E-5 0 -1
51
o 14 64 0 34 20.0 9.765625E-5 1 -1
52
o 43 64 0 35 20.0 9.765625E-5 2 -1
53
o 47 64 0 35 10.0 9.765625E-5 3 -1

Gruß,
Matze

von Helmut L. (helmi1)


Lesenswert?

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

von Matze (Gast)


Lesenswert?

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.

von Helmut L. (helmi1)


Lesenswert?

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.

von Matze (Gast)


Lesenswert?

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

von Helmut L. (helmi1)


Lesenswert?

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.

von Matze (Gast)


Lesenswert?

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)

von Helmut L. (helmi1)


Lesenswert?

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.

von Matze (Gast)


Lesenswert?

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.

von Matze (Gast)


Lesenswert?

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

von Matze (Gast)


Lesenswert?

Matze schrieb:
> poppycock
...entpricht "unsinniges Gerede", weil ich mich noch nicht entschieden 
habe, wie ich das Projekt am besten umsetze... grins

Gruß,
Matze

von Helmut L. (helmi1)


Lesenswert?

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

von Matze (Gast)


Lesenswert?

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

von Helmut L. (helmi1)


Lesenswert?

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

von Matze (Gast)


Lesenswert?

Hallo Helmut,

jede Lösung schafft neue Probleme...
Denn ich habe es nicht immer mit einer reinen Sinuskurve zu tun! :(

Habe darum einen neuen Thread geöffnet: 
Beitrag "Phasenanschnittdimmer - Wie verhält sich der Strom?"

Gruß,
Matze

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.