Forum: Analoge Elektronik und Schaltungstechnik Shunt, Tiefpass und differentieller ADC mit attiny25


von avion23 (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich bastel gerade an einer LED-Lampe. Betrieben werden soll eine seoul 
p4 mit 1A@3.7V aus einer Li-ion Zelle mittels eines buck-boost, 
kontrolliert von einem attiny25,

Mein aktuelles Problem ist die Strommmeßung. Ich habe unterhalb eines 
n-fets einen Shunt angeordnet, an dem eine Spannung abfallen soll. Diese 
Spannung soll von einem attiny25 gemeßen und mit dem differential ADC 
gleich verstärkt werden, damit ich den Shunt klein halten kann. 
Zusätzlich brauche ich noch einen passiven Tiefpass, damit aus der 
abfallenden Rechteckspannung @250kHz annähernd Gleichspannung wird. Der 
Tiefpass ist ein RC-Tiefpass bestehend aus zwei Widerständen und einem 
Kondensator. Die Spannung soll dann zwischen ADC2, ADC3 des Tinys 
differentiel gemeßen werden.

Kann man das so machen, wie im angehängten Screenshot gezeichnet?
Stimmt die Dimensionierung oder ist das totaler Schwachsinn?

Ein weiteres Problem ist der differentiale Analog-Digitalwandler des 
attiny. Ich habe gelesen, dass eine Seite nicht auf GND liegen darf. 
Deswegen habe ich noch auf der GND-Seite einen Widerstand eingefügt, so 
dass das Niveau leicht erhöht ist. Muss ich das so machen oder kann ich 
mir den zweiten Widerstand sparen?

Falls es Verbesserungsvorschläge gibt immer her damit :)

von Anon Y. (avion23)


Lesenswert?

So hat es übrigens nicht funktioniert. Der interne ADC produziert quasi 
nur Rauschen.

avion23 schrieb:
> Deswegen habe ich noch auf der GND-Seite einen Widerstand eingefügt, so
> dass das Niveau leicht erhöht ist. Muss ich das so machen oder kann ich
> mir den zweiten Widerstand sparen?

Den kann man sich sparen. Macht die Sache aber auch nicht besser.

von ADC (Gast)


Lesenswert?

Hallo,
warum versuchst du das mit dem differentiellen AD? Den braucht mann doch 
da garnicht hier reicht ein einfacher AD-Eingang.

von Steffen K. (mrcrabs)


Lesenswert?

ADC schrieb:
> Hallo,
> warum versuchst du das mit dem differentiellen AD? Den braucht mann doch
> da garnicht hier reicht ein einfacher AD-Eingang.

Hallo.

Ich verwende solche Schaltungen in Brushless-Reglern. Die differentielle 
Messung würde ich schon machen, da Masse ja nicht gleich Masse ist. Mit 
der differentiellen Messung hat man die tatsächliche Shuntspannung 
abgegriffen. Die Shuntmasse ist Teil des Leistungspfades mit gepulsten 
Strömen, da wird je nach Layout, Schaltfrequenz und Stromhöhe durchaus 
relevante Spannung an parasitären Induktivitäten abfallen.

Ich habe allerdings bisher immer eine OP-Schaltung zwischen Shunt und 
ADC gehabt um das Signal aufzubereiten. Inwiefern der ATtiny das gut 
genug kann, weiß ich nicht.

Habe ich das richtig verstanden: Du hast den Tiefpass verwendet um das 
gepulste Signal am Shunt zu einer Gleichspannung zu filtern? Ich kenne 
es so, dass man mit dem ADC immer dann misst, wenn der MOSFET leitend 
ist. Der Schaltplan-Ausschnitt und die übrigen Infos sind aber auch 
etwas knapp um mehr sagen zu können.

Edit: Der ursprüngliche Beitrag ist von vor drei Jahren. Ich kann mir 
nicht vorstellen, dass der Ersteller noch immer sehnsüchtig auf 
Antworten wartet. :D

von Anon Y. (avion23)


Lesenswert?

Ich bin der Ersteller, und ich habe mir selbst geantwortet. Falls mal 
jemand diesen Beitrag mit der Suche findet.

Steffen Krebs schrieb:
> Ich habe allerdings bisher immer eine OP-Schaltung zwischen Shunt und
> ADC gehabt um das Signal aufzubereiten. Inwiefern der ATtiny das gut
> genug kann, weiß ich nicht.
Der kann das gar nicht gut ;) Vor allem um die null herum hat man sehr 
großes Rauschen was eine Regelung sinnlos macht. Ich hoffe, dass sich 
jemand durch den Beitrag die Zeit und die Nerven sparen kann.

von W.Nickel (Gast)


Lesenswert?

Hallo,

habe hier einen ATtiny861 und versuche auch die mV "um die Null herum" 
am Shunt zu messen. Leider bekomme ich immer nur 0 aus dem ADC 
rausgelesen.
Rs=0.005 Ohm, 2,56V int. Referenz, Gain 32x, ADC0 an GND, ADC1 an Rs. So 
sollte es sein, hier die Auslesefunktion:
1
uint16_t get_current()
2
{
3
  ADMUX = (1<<REFS0) | (1<<REFS1) | 0x02; // MUX 5:0 = 100010
4
  ADCSRB = (1<<MUX5) | (1<<GSEL) | (1<<REFS2); // 32x
5
  ADCSRA = (1<<ADEN) | (1<<ADSC) | (1<<ADIF) | 0x07; // CLK/128
6
  while(!(ADCSRA&(1<<ADIF)));
7
  ADCSRA |= (1<<ADIF);
8
  return ADC;
9
}
Bei 1A kann ich mit einem Multimeter einen Spannungsabfall von 5mV an 
den zugehörigen uC-Pins messen, das sollte 5 x 32 = 160mV am ADC ergeben 
und einen Datenwert von ca. 64 anzeigen. Ich bekomme aber immer 0. Die 
MUX-Einstellung habe ich aus dem Datenblatt. Die Pins werden zuerst als 
Eingänge konfiguriert, dann im DIDR0 abgeschaltet. Sieht einer den 
Fehler auf den ersten Blick?
Danke

von W.Nickel (Gast)


Lesenswert?

Ich antworte mir selbst.
Ist wohl ein Hardwareproblem. Habe den Shunt abgelötet und an die Pins 
direkt eine Spannung gegeben. Erst ab ca. 60mV kammen Werte größer Null 
aus dem ADC. Ich habe von Offset-Fehlern gelesen, aber dass sie so groß 
sein können, hatte ich keine Ahnung. Im Datenblatt steht was von 1,5 LSB 
bei Vref=4V, das wären ca. 5,9mV - Faktor 10.

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.