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 :)
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.
Hallo, warum versuchst du das mit dem differentiellen AD? Den braucht mann doch da garnicht hier reicht ein einfacher AD-Eingang.
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
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.