Spannungs-Differenz verstärken

TommyB

Team Bitschubse
17. Mai 2010
2.151
80
48
40
127.0.0.1 ;)
Sprachen
  1. C#
  2. VB.Net
  3. LunaAVR
  4. Assembler
  5. Python
Hiho,

bestimmt für euch ganz leicht, ich hab mit OpAmps aber noch nie was gemacht, außer 1x nach Schaltplan nachgebaut. Ich vermute mal mein Problem würde sich mit so einem Ding leicht lösen lassen.

Also ich habe 2 variable Spannungen (gemeinsame Masse) im Bereich 0-30V (ca.).
Da hab ich mir gedacht, da würd ich gern mal den Strom messen. 0,1 Ohm Widerstand in Reihe, fertig. ... ist der Pustekuchen. Leider sind meine ADC Kanäle doch sehr am Schwanken (sind via Poti (ist n Prototyp) als Spannungsteiler auf 5V runter geregelt). Daher fällt eine Vergleichsmessung, sprich ADC0 - ADC1, nahezu flach weil die Unterschiede zu gering sind.

Also müsste ich die Differenz die am Shunt anliegt irgendwie elektronisch so umformen und auf die Kanäle legen.
Sprich:
In 1: 0..30V
In 2: 0..30V
Out: Differenz von 1 und 2, vorzugsweise 0..5V
Das ganze 2x und am liebsten mit so wenig Bauteilen wie möglich :)
Versorgungsspannung wäre möglich knapp über den max. 30V, oder 5V von der Logik.

Auf die Genauigkeit, Linearität oder wie das heißt muss nicht soo ein großer Wert gelegt werden weil die resultierenden Werte eh aus einer berechneten Tabelle ausgelesen werden. Mach ich bei den Spannungen schon genau so, klappt ganz gut und komplett ohne Rechnerei im µC. Ok, muss man halt diverse Werte erst messen und denn die Tabelle erstellen, aber das ist kein Problem.
 
Vorweg: die meisten Controller können ihre ADC-Kanäle nur single-ended verwenden. Es gibt aber auch welche, die einige Kanäle differential ended nutzen können. Und mit einem zusätzlichen gain. Ich hätte da den Tiny26 bzw dessen Nachfolger (Tiny261A/461A/861A) im Kopf.
Allerdings sind die zulässigen Spannungen an den Eingängen begrenzt - es sind ja Prozessorbeinchen, klar.

Wegen den OPAMPS: Was Du suchst, ist ein Subtrahierer, oder auch Differenzverstärker. Wikipedia erklärt den eigentlich ganz gut (unter OPV). Sollte sich also mit'nem geeignetem Dual-OPAMP und 'ner Hand voll Widerständen (ggf Netzwerken) realisieren lassen. Aber Achtung: die mögliche Ausgangsspannung wird durch die Spannungsversorgung begrenzt - wenn Du also geringe Differenzen messen willst, braucht Du 'ne negative Spannungsversorgung für den OPAMP (kann ggf aus einem MAX232 parasitiert werden) und/oder 'n Rail-to-Rail-OPAMP.

(Irgendwie geistert mir jetzt grad wieder der AD620 durch den Kopf... grml...)
 
Negative Spannungen, ich hatte es schon befürchtet. Hmpf...

Aber der Tiny gefällt mir. Wusste ich garnicht dass es auch solche gibt die das von Haus aus können. Der größte davon könnte das sogar noch schaffen (Flash wird etwas knapp, 4KB gehen allein schon für die Tabellen drauf. Beim Mega musst ich mir da keine Sorgen machen ^^)

Mal schaun wann ich demnächst mal zu Reichelt komme, im Korb liegt er schonmal :)

Vielen Dank :)
 
Wie gesagt: Bei der neuen Generation gibt es auch eine Variante mit 2K-Flash, und 8K-Flash. Wie auch beim Mega8->Mega48/88/168/328. Zu beachten ist da nur, daß es aufgrund des überschrreiten der "Magischen Adressierungsgrenzen" ggf zu unterschiedlichen Mnemonics und IVT-Adressen kommt. Das berifft aber eigentlich nur den Assembler-Programmierer.

Zu den OPAMPS: deswegen ja noch der Hinweis mit den Rail-to-Rails - die kommen schon wesentlich dichter an ihre Versorgungsspannungs-Grenzen.
 
Ja das mit den Unterschieden kenn ich :)
Da hatte mir Dirk oder Dino mal geholfen wenn ich mich recht erinnere. Deswegen mach ich es seitdem immer so:
Code:
; Interrupt table
.ORG 0x0000	RJMP OnReset	; Reset / Power on
.ORG INT0addr	RETI		; External Interrupt Request 0
.ORG INT1addr	RETI		; External Interrupt Request 1
.ORG PCI0addr	RETI		; Pin Change Interrupt Request 0
...
.ORG INT_VECTORS_SIZE		; End of interrupt table

Und dazu noch:
Code:
.MACRO INX
  .IF @1 < 0x40
	IN	@0	, @1
  .ELSE
  	LDS	@0	, @1
  .ENDIF
.ENDMACRO
.MACRO OUTX
  .IF @0 < 0x40
	OUT	@0	, @1
  .ELSE
  	STS	@0	, @1
  .ENDIF
.ENDMACRO

Somit sollte ich was das angeht auf der sicheren Seite sein :)

OpAmps sind noch neu für mich, muss mich da erstmal einlesen :)
Daher versuch ichs lieber erstma mit dem Tiny. So teuer sind die ja auch nicht (zum Glück ^^).
 
Hallo!

Was mir gerade noch einfällt..... von wegen, so wenig Bauteile wie möglich.... wäre ein fertiger AD-Wandler,
wie zum Beispiel der: PCF8591 !

Der PCF8591 ist ein I2C 8bit AD-Converter, der auch im Differenzialbetrieb arbeiten kann.
Ich habe die passende Stelle aus dem Datenblatt mal "ausgeschnitten".

Guckst du hier--> PCF8591_Betriebsmodi.gif


Wie aber schon geschrieben....
Ansteuerung nur per I2C und leider nur eine 8bit-Auflösung.



Wenn du eine höhere Auflösung benötigst, dann verwende ich immer den MCP3426.
Das IC (ebenfalls I2C) hat eine einstellbare Auflösung von 12, 14 und 16bit.,
dazu noch eine Verstärkungsmöglichkeit von x1, x2, x4 und x8
und kann ebenfalls mit Differenzialmessungen umgehen.
Guckst du hier--> MCP3426_Betriebsmodi.gif


Grüße,
Cassio
 
Hmmm, der MCP klingt auch interessant. Leider zur Zeit nicht lieferbar, aber der wird erstmal im Auge behalten :)
 
Hallo!

Also der MCP3426 ist bei Reichelt zur Zeit aber lieferbar.

Wie ich gerade gesehen habe, gibt es sogar einen MCP3421!
Das ist ein 18bit 1-Kanal AD-Converter im SOT23 Gehäuse.
Da solltest du dir aber besser das Datenblatt noch mal sehen.
Ich vermute mal, dass der keine Differenzmessungen kann....... weil er ja nur drei Beinchen hat. :wink:


Grüße,
Cassio
 
Hi,

Wie ich gerade gesehen habe, gibt es sogar einen MCP3421!
Das ist ein 18bit 1-Kanal AD-Converter im SOT23 Gehäuse.
Da solltest du dir aber besser das Datenblatt noch mal sehen.
Ich vermute mal, dass der keine Differenzmessungen kann....... weil er ja nur drei Beinchen hat. :wink:
das sollte man wirklich machen ;) Glaube keinem Bild im Online-Shop. Der Chip hat ein ...

SOT-23-6 - Gehäuse

... und damit 6 Beinchen.

• 18-bit ΔΣ ADC in a SOT-23-6 package
Differential Input Operation
• Self Calibration of Internal Offset and Gain Per Each Conversion
• On-Board Voltage Reference:
- Accuracy: 2.048V ± 0.05%
- Drift: 15 ppm/°C
• On-Board Programmable Gain Amplifier (PGA):
- Gains of 1,2, 4 or 8
• On-Board Oscillator
• INL: 10 ppm of FSR (FSR = 4.096V/PGA)
• Programmable Data Rate Options:
- 3.75 SPS (18 bits)
- 15 SPS (16 bits)
- 60 SPS (14 bits)
- 240 SPS (12 bits)
• One-Shot or Continuous Conversion Options
• Low Current Consumption:
- 145 µA typical (VDD= 3V, Continuous Conversion)
- 39 µA typical (VDD= 3V, One-Shot Conversion with 1 SPS)
• Supports I2C Serial Interface:
- Standard, Fast and High Speed Modes
• Single Supply Operation: 2.7V to 5.5V
• Extended Temperature Range: -40°C to +125°C

Tadaaa ... Differential :cool:

Gruß
Dino
 
SOT-23-6 - Gehäuse

... und damit 6 Beinchen.


Hallo Dino!

Na, dann macht der Chip ja nicht so viel Sinn.....
Schließlich ist der MCP3426 im SO8 Gehäuse auch nicht soooo viel größer,
bietet zwei Kanäle in einem Chip an
und kostet nur 10 Cent mehr.


Grüße,
Cassio
 
Hi Cassio,

Na, dann macht der Chip ja nicht so viel Sinn.....
Schließlich ist der MCP3426 im SO8 Gehäuse auch nicht soooo viel größer,
bietet zwei Kanäle in einem Chip an
und kostet nur 10 Cent mehr.
naja ... ein viertel der Größe eines SO8 ist schon nicht schlecht. Außerdem ist er etwas dünner.
SOT23-6 : 2,2mm x 2,7mm , 0,9mm dick
SOIC8 : 4,9mm x 6mm , 1,75mm dick
kann man noch irgendwo zwischenquetschen :rolleyes:

Gruß
Dino
 
Also der MCP3426 ist bei Reichelt zur Zeit aber lieferbar.

Aaaaber, der hat nur 2 Kanäle :)
Ich müsste ja Spannung und Strom (also 2x normal und 2x differential) messen. ... Oder ich lass Spannung den AVR machen und Diff den Chip... Hmm. Mal sehen. Lieber wär mir eine interne Lösung, wegen Interrupts.
Kennt eigentlich jemand auch solche AVR Chips als Mega Variante? Richtig genial wärs wenns zum Mega48/88/168 Pinkompatibel wäre.

Aber Reichelt ist erstmal eh nicht drin. BluRay Brenner + Rohlinge hat mich etwas runter gezogen diesen Monat :eek:
 
hmm... der
ATmega16/L
und natürlich der Nachfolger:
ATmega164A/PA/324A/PA/644A/PA/1284/P

(selbst schon mal Datenblätter gewühlt?)
 
Natürlich hab ich das. Hab mir mal sämtliche Datenblätter der AVRs gezogen, allerdings ist das schon Jahre her, die ggf. neuen hab ich dementsprechend nicht. Und auf der Seite von Atmel kann man zwar alles einstellen, nicht aber ob Differential oder nicht. ...
 
Hmmm, kleine Verständnisfrage:

ATtiny 261A, 461A, 861A.pdf (SECURED) - Foxit Reader.png
Die markierten Zeilen.

Was bringt es mir dass das selbe Signal auf Positiv- und Negativeingang gleichzeitig liegt? 0.o
Müsste denn nicht immer 0 raus kommen? Bzw. vielleicht etwas "rauschen"?
 
Hallo Tommy,
Was bringt es mir dass das selbe Signal auf Positiv- und Negativeingang gleichzeitig liegt? 0.o
Müsste denn nicht immer 0 raus kommen? Bzw. vielleicht etwas "rauschen"?

der ADC und der Verstärker sind nicht ideal! Du kannst so den DC-Offset ermitteln und in deinem Programm berücksichtigen.

Dirk :ciao:
 
Ah ok, das macht Sinn :)

Danke :)
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)