Forum: Mikrocontroller und Digitale Elektronik Vorteile und Funktion differenzielle ADC Eingänge?


von Steven M. (steven1180)


Lesenswert?

Hallo Leute,

ich programmiere in BASCOM(Basic) und steh gerad auf dem Schlauch.
Ich habe mir mit einem Atmega8 eine Spannungsregelung aufgebaut.
Da Pulse(PWM) ich einen Fet in ein LC-Siebglied,so dass ich eine 
stromgeregelte Gleichspannung hinten raus bekomme.
Den Strom messe ich über einen Shunt mit zwei ADC Eingängen über 
Spannungsteiler gegen Masse.

Problem:
Durch die Induktivität bekomme ich leichte Spitzen bzw Rippl auf die 
Gleichspannung. Für den Zweck kein Problem, aber bei der 
Strommessung(Reglung) scheint es große schwankungen zu machen.
Jetzt hab ich mir einen Attiny26 zugelegt, weil ich von den Vorteilen 
der differenziellen ADC Eingänge gehört habe.Da soll ja auch ein Gain 
möglich sein.

Frage:

Kann mir mal bitte jemand erklären was genau die Vorteile der 
differenziellen Eingänge ist. Wogegen misst man dann,wenn nicht gegen 
Masse? Wozu ist der Gain und was bringt er mir? Hilft mir das bei meinem 
Problem?
Wie wird es am besten angewendet?

MfG

Steven

von Plod (Gast)


Lesenswert?

Naja. Wenn man sowieso zwei signale voneinander subtrahieren muss.

von Steven M. (steven1180)


Lesenswert?

Plod schrieb:
> Naja. Wenn man sowieso zwei signale voneinander subtrahieren muss.

OK. soweit war ich auch schon... ;-) und weiter?

von Karl H. (kbuchegg)


Lesenswert?

Ist die eine Spannung 3V und die andere 4V, dann kannst du die getrennt 
mit dem ADC messen und die Ergebnisse voneinander subtrahieren.
Soweit so gut.
Aber du kannst sie auch differentiell messen. D.h. der ADC misst dann im 
Grunde 1V und löst dir die als Zahlenwert auf.
Aber: du kannst dir diese 1V jetzt mit dem eingebauten Verstärker 
verstärken lassen, so dass du speziell diesen 1V Bereich besser 
aufgelöst (in mehr Zwischenstufen) kriegst.

von fefa (Gast)


Lesenswert?

damit kann man störsignale ausblenden, z.b. wenn man in der 
leistungselektronik die parasitären leitungselemente nicht mitmessen 
will geht man per kelvin-anschluss direkt an das zu messende negative 
potential anstelle der leistungsmasse

von Chaos (Gast)


Lesenswert?

Das Messen gegen Masse und differentiel ist ganicht  so wahnsinnig 
unterschiedlich. Du kannst das Messen gegen Masse wie eine 
differentielle Messung betrachten, bei der du den einen Pol fest auf 
Masse legst. Also beim Messen gegen Masse ermittelst du die Differenz 
zwischen deinem zu messenden Potential und Masse, beim differentiellen 
einfach die Differenz zwischen den beiden Meßpunkten, egal auf welchem 
Niveau sie liegen.

Der Gain ist auch leicht erklärt, stell dir vor, zwischen deinen 
differentiellen Eingängen besteht eine Differenz von 1mV. Dann bekommst 
du am Ausgang auch 1mV geliefert.(ohne Gain). Mit nem Gain von bspw 200 
würdest du einfach 200mV erhalten. Das ist also nichts anderes ein 
Verstärkungsfaktor, quasi deine externe Beschaltung bei opamps.

MfG Chaos

von Steven M. (steven1180)


Lesenswert?

OK das hilft schon ein wenig.

Ich habe bei meinem Atmega8 einfach zwei ADC´s gemessen(spannungsteiler 
gegen Masse) und dann im Programm einfach subtrahiert.
Wenn ich das jetzt richtig verstanden habe machen das die 
differenziellen Eingänge auch so, nur Hardwaremäßig. Stimmt das?

Ich habe aus dem Datenblatt Attiny26 entnommen, dass da der Befehl
GETADC (x,y) heißt und das man das ich HEX angeben muss.
Wie funtioniert das genau?

MfG

Steven

von Steven M. (steven1180)


Lesenswert?

fefa schrieb:
> damit kann man störsignale ausblenden, z.b. wenn man in der
> leistungselektronik die parasitären leitungselemente nicht mitmessen
> will geht man per kelvin-anschluss direkt an das zu messende negative
> potential anstelle der leistungsmasse

Danke, aber was ist ein Kelvin-Anschluss????

von c-hater (Gast)


Lesenswert?

Steven Mö schrieb:

> Da Pulse(PWM) ich einen Fet in ein LC-Siebglied,so dass ich eine
> stromgeregelte Gleichspannung hinten raus bekomme.

Das mag dein Ziel sein. Erreicht ist es aber wohl noch nicht...

> Den Strom messe ich über einen Shunt mit zwei ADC Eingängen über
> Spannungsteiler gegen Masse.

Das ist vermutlich ziemlicher Blödsinn. Um das aber endgültig zu 
entscheiden, müßtest du die Schaltung liefern.

> Kann mir mal bitte jemand erklären was genau die Vorteile der
> differenziellen Eingänge ist

1) Man muß nicht unbedingt gegen Masse messen.
2) Man kann den eingebauten Verstärker benutzen.

> Wogegen misst man dann,wenn nicht gegen
> Masse?

Man mißt eben nicht gegen irgendein fixes Potential, sondern die 
Differenz zwischen zwei Potentialen, die sich beide zwischen Masse und 
der Referenzspannung beliebig bewegen dürfen.

Das kann in vielen Fällen durchaus hilfreich sein, bei einer einfachen 
Strommessung aber eher nicht. Denn die Randbedingungen der Messung sind 
ja doch wieder massebezogen, in aller Regel ist es also am sinnvollsten, 
auch den Shunt gegen Masse arbeiten zu lassen. Deswegen eben vermutete 
ich oben bezüglich deiner schaltungstechnischen Lösung ziemlichen 
Blödsinn.

> Wozu ist der Gain und was bringt er mir?

Das ist einfach nur der Verstärkungsfaktor des eingebauten Verstärkers. 
Das wiederum ist wirklich nützlich für eine Strommessung, denn er 
erlaubt es, den Shunt entsprechend zu verkleinern.

In deiner Schaltung verschenkst du aber viel von diesem möglichen 
Verbesserungspotential, denn du kriegst das nur um den Teilerfaktor 
deiner (vermutlich sinnlosen) Spannungsteiler reduziert als effektiv 
wirksame Verbesserung wieder raus.

von Carsten R. (kaffeetante)


Lesenswert?

Du kannst zwischen zwei Pins differenziell messen. Das geht aber nicht 
mit beliebigen Analogeingängen, sondern es gibt nur bestimmte 
Kombinationen. Das findest Du im Datenblatt. Du mißt dann nicht gegen 
Masse, sondern die Differenz der beiden Ausgewählten Eingänge. Man 
könnte auch Eingang 1 messen, dann Eingang 2 und dann die Differenz 
errechnen.

Mit Gain wird es erst richtig interessant. Wenn die Differenzen klein 
sind kann man damit das Signal vergrößern um somit die Auflösung lokal 
zu erhöhen.

Allgemeines Beispiel: 8 Bit Wandler (0-255), jedes Bit hat 10 mV
Referenz: 2,55 Volt
Eingang 1: 1,014 Volt (analoger Ist Wert)
Eingang 2: 1,028 Volt (analoger Ist Wert)
analoge Differenz 14 mV

Ich messe 101 und 103 und errechne eine Differenz von 2. Messe ich 
differenziell, so bildet mir die analoge Eingangsstufe zuerst die 
analoge Differenz und digitalisiert diese und ergibt dann die Diferenz 
von 1. Habe ich die Möglichkeit das Signal vorher zu verstärken (z. B.: 
Gain 10), so digitalisiere ich den Wert 140 mV und habe damit den Wert 
14. Ab welchen Werten exakt auf- oder abgerundet wird 
(Quantisierungsfehler) findet an dann auch im Datenblatt.

Was bei dir aber herumeiert könnte auch etwas Anderes sein. Ich vermute 
Du hast die Messungen nicht mit dem Timer der PWM synchronisiert, so daß 
Du zu unterschiedlichen Zeitpunkten im Zyklus mißt. Du kannst die 
Timerinterrupts dazu nutzen die Messungen beispielsweise mit der 
steigenden oder fallenden Flanke des PWM-Signals oder immer zu 
Beginn/Ende oder in der Mitte eines PWM-Zyklus zu starten. Was davon am 
Sinnvollsten ist kann man erst nach detaillierter Betrachtung der 
Hardware beurteilen. Ich weiß ja nicht mit welcher Flanke eingeschaltet 
wird.

: Bearbeitet durch User
von Carsten R. (kaffeetante)


Lesenswert?

Oh weh, da wurde viel geschrieben während ich tippte. Nun ist alles 
doppelt.

von Internetkompetenz? (Gast)


Lesenswert?

Steven Mö schrieb:
> Danke, aber was ist ein Kelvin-Anschluss????

http://de.wikipedia.org/wiki/Kelvinanschluss

von Steven M. (steven1180)


Angehängte Dateien:

Lesenswert?

Carsten R. schrieb:
> Du kannst zwischen zwei Pins differenziell messen. Das geht aber nicht
> mit beliebigen Analogeingängen, sondern es gibt nur bestimmte
> Kombinationen. Das findest Du im Datenblatt. Du mißt dann nicht gegen
> Masse, sondern die Differenz der beiden Ausgewählten Eingänge. Man
> könnte auch Eingang 1 messen, dann Eingang 2 und dann die Differenz
> errechnen.

Ok wenn ich jetzt direkt am shunt die erste spannung an den Eingang 1 
lege und nach dem shunt die spannung an den eingang 2, dann habe ich 
zwar ein relativ kleinen potentialunterschied, daber beide potentiale 
sind ja noch über 5v der masse. würde das den eingängen nicht schaden?


> Mit Gain wird es erst richtig interessant. Wenn die Differenzen klein
> sind kann man damit das Signal vergrößern um somit die Auflösung lokal
> zu erhöhen.
>
> Allgemeines Beispiel: 8 Bit Wandler (0-255), jedes Bit hat 10 mV
> Referenz: 2,55 Volt
> Eingang 1: 1,014 Volt (analoger Ist Wert)
> Eingang 2: 1,028 Volt (analoger Ist Wert)
> analoge Differenz 14 mV
>
> Ich messe 101 und 103 und errechne eine Differenz von 2. Messe ich
> differenziell, so bildet mir die analoge Eingangsstufe zuerst die
> analoge Differenz und digitalisiert diese und ergibt dann die Diferenz
> von 1. Habe ich die Möglichkeit das Signal vorher zu verstärken (z. B.:
> Gain 10), so digitalisiere ich den Wert 140 mV und habe damit den Wert
> 14. Ab welchen Werten exakt auf- oder abgerundet wird
> (Quantisierungsfehler) findet an dann auch im Datenblatt.

OK das ist wirklich bei kleinen sachen hilfreich, danke

> Was bei dir aber herumeiert könnte auch etwas Anderes sein. Ich vermute
> Du hast die Messungen nicht mit dem Timer der PWM synchronisiert, so daß
> Du zu unterschiedlichen Zeitpunkten im Zyklus mißt.

Ich habe jetzt das problem, das ich mit einem timer die Zeit hochzähle 
über einen timer interupt und diese zeit für die Regelung brauche.
es wäre natürlich sinnvoll genau zwischen der pwm zu messen, denn beim 
ein und ausschalten des FET gibt es durch die Induktivität Rippl.




> Du kannst die
> Timerinterrupts dazu nutzen die Messungen beispielsweise mit der
> steigenden oder fallenden Flanke des PWM-Signals oder immer zu
> Beginn/Ende oder in der Mitte eines PWM-Zyklus zu starten. Was davon am
> Sinnvollsten ist kann man erst nach detaillierter Betrachtung der
> Hardware beurteilen. Ich weiß ja nicht mit welcher Flanke eingeschaltet
> wird.

als PWM Timer nehme ich den timer2
wie macht man das in bascom?

von Steven M. (steven1180)


Lesenswert?

wie heißt der befehl in Bascom, wenn ich ADC0 und ADC1 mit Gain1 und wie 
mit Gain20 differenziel vergleichen will?
Beispiel:

GETADC (0)

??????

von Carsten R. (kaffeetante)


Lesenswert?

Steven Mö schrieb:
> dann habe ich
> zwar ein relativ kleinen potentialunterschied, daber beide potentiale
> sind ja noch über 5v der masse. würde das den eingängen nicht schaden?

Ganz genau. Es gelten immer noch die grundsätzlichen Anforderungen an 
die Lebensbedingungen der Pins. Einstellungen in der Software 
(differenziell messen) können daran nichts ändern. Die Spannungspegel 
müssen zwischen 0 und Vcc der Versorgugsspannung liegen. Darum sind bei 
Highside-Shunts oft weitere Bauteile erforderlich um das Signal 
aufzubereiten.

Zu Bascom kann ich nichts sagen. Das habe ich nie genutzt.

: Bearbeitet durch User
von Cyblord -. (cyblord)


Lesenswert?

Suche mal nach "High Side Current Monitor", da gibts sehr brauchbare ICs 
die das können.

von Carsten R. (kaffeetante)


Lesenswert?

Steven Mö schrieb:
> Ich habe jetzt das problem,...

Das ist doch kein Probem. Du brauchts doch nur die Zeile mit der du die 
ADC-Wandlung startest zu verschieben und an den passenden Interrupt des 
Timers zu binden der den Strom per PWM regelt. Natürlich bleibt der 
Ripple, aber so mißt du immer in der selben Position des Rippleanteils. 
Dadurch entfallen die Störungen durch die Messzeitpunktverschiebungen 
und du kannst genauere Aussagen aus den Messwerten ableiten.

von Timm T. (Gast)


Lesenswert?

cyblord ---- schrieb:
> Suche mal nach "High Side Current Monitor", da gibts sehr
> brauchbare ICs
> die das können.

INA138. Sehr brauchbar.

von Steven M. (steven1180)


Lesenswert?

Timm Thaler schrieb:
>
> INA138. Sehr brauchbar.

Danke den werd ich mal ausprobieren.


Mit der Messung im Interrupt hab ich so meine Bedenken. Meine pwm läuft 
knapp 20 kHz.  12Mhz Quarz, timer2 mit 8bit.und Auflösung etc.
Da hängt er ja nur noch im Interrupt.
Aber vielleicht habe ich auch die GETADC Routine unterschätzt.
Ich hab probiert :

Unter der Config :
On timer2 messpwm

Und unten dann :

messpwm:
Load timer2, pwm       'pwm ist der pwm wert, z. B. Zwischen 0 und 255
GETADC (1)
GETADC (0)
Return


Wenn das so laufen sollte, dann müsste das bei 25 kHz ganz schön lange 
dauern, oder?

von al_guesto (Gast)


Lesenswert?

Deine messpwm löst beim Ereignis timer2 aus, laso ich vermute mal wenn 
der Timer überläuft. Da wäre jetzt die Frage, ob dies der Zeitpunkt ist 
an dem du messen möchtest.
Deine GETADC-Werte, was machst du damit?

von Carsten R. (kaffeetante)


Lesenswert?

Steven Mö schrieb:
> Da hängt er ja nur noch im Interrupt.

Nein. Im PWM-Interrupt ADC nur starten und Interrupt verlassen. Die 
ADC-Auswertung erfolgt über den ADC conversion complete interrupt. Das 
wären dann 2*20.000 Interrupts die man natürlich kurz hält. Der Start 
ist sehr kurz. Das bloße Auslesen des Ergebnisses dauert auch nicht 
länger. Die Auswertung wäre ohnehin erfolgt. Sollte hierfür die 
Rechenzeit nicht reichen, so wäre im aktuellen Code auch nicht die Zeit 
in jedem Zyklus zu messen. Das kann man natürlich ohne Code nicht 
beurteilen.

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.