Tiefentladeschutz MOSFET Problem

OP #4101417
Lesenswert?

Hallo zusammen,
ich bastel gerade an einem Tiefentladeschutz für eine 12 Zellen 14.4V 
Tauchlampe.

Das ganze wird mit einem Attiny13 bewerkstelligt, der an ADC1 über einen 
Spannungsteiler kontinuierlich die Batteriespannung überwacht und je 
nach gemessenem Wert über einen MOSFET die Lampe ein oder aus schaltet.

Zusätzlich "warnt" der Tiefentladeschutz den Benutzer einige Minuten vor 
dem ausgehen durch wiederholtes blinken der Lampe.

Der verwendete MOSFET ist ein IRL3202; gate ist über einen kleinen 
Widerstand mit einem uC-Pin verbunden und mit einem großen Widerstand 
mit Masse verbunden.

Das Problem: Im normalen Betrieb, sprich Lampe an, ist ein fiepen zu 
hören und die Lampe ist dunkler als erwartet.
Geht die Schaltung in den "Warn" Modus, blinkt also, leuchtet die Lampe 
mit der erwarteten Helligkeit und es ist auch kein fiepen zu hören.

Was geht hier schief?

Gruß Florian
#4101471
Lesenswert?

Wie groß ist denn dein "kleiner" und "großer" Widerstand am Gate?

Fiept das Ganze auch wenn Du dem Pin ein statisches High gibst?
Wenn nein, dann musst Du deine if-Schleife nochmal durchdenken.
Vielleicht ist auch die Hysterese zwischen ein- und ausschalten zur 
gering gewählt!
Und bedenke, dass die ADC-Werte auch schwanken. Also lieber mehrere 
Werte einlesen und mitteln!
Gast #4101478
Lesenswert?

Dein ADC liefert wohl nicht dauernd Werte über Warnung.

Eventuell nicht richtig initalisiert (obwohl ich deine Zuweisungen jetzt 
nicht mit dem Handbuch vergleiche).

Ein Kondensator von 1uF vom ADC-Eingang nach Masse ?
OP #4101499
Lesenswert?

Kleiner Widerstand 100 Ohm, großer 10kOhm.

Statische +5V funktionieren ohne fiepen und mit erwarteter Helligkeit.

Einfügen eines 5s Delay am Ende der while Schleife führt zu 5 sec an, 5 
sec aus, 5 sec an etc... Sehe aber nicht an welcher Stelle der sich in 
jedem zweiten zyklus wieder ausschaltet...
OP #4101511
Lesenswert?

MaWin schrieb:
> Dein ADC liefert wohl nicht dauernd Werte über Warnung.
>
> Eventuell nicht richtig initalisiert (obwohl ich deine Zuweisungen jetzt
> nicht mit dem Handbuch vergleiche).
>
> Ein Kondensator von 1uF vom ADC-Eingang nach Masse ?

Initialisierung ist quasi aus dem GCC Tutorial übernommen und an den 
attiny13 angepasst, einzige Abweichung ist, dass ich den ADC-Kanal schon 
in der Initialisierung festlege und nicht in der Messfunktion.

Kondensator zwischen ADC und GND bringt keine Besserung.
#4102004
Lesenswert?

Kann es sein das der Ausgang des Attiny13 einfach "nur" überlastet ist?

5V / 100Ohm = 0.05A => 50mA

Laut Datenblatt sind maximal 40mA pro Ausgang zugelassen.
Dadurch könnte es sein das unter Belastung nie wirklich 5v am Gate 
anliegen.
=> Mosfet schaltet nicht komplett durch - Lampe leuchtet schwächer.

Versuche es mit einem höheren Widerstand noch einmal. z.B. 140Ohm => ca. 
35mA Gatestrom
OP #4102043
Lesenswert?

Ich bin ziemlich sicher das Problem auf den ADC oder Spannungsteiler 
eingegrenzt zu haben.

Ich bin die ADC Initialisierung noch einmal Schritt für Schritt 
durchgegangen und habe mit dem GCC Tutorial und Datenblatt verglichen, 
konnte aber keine Fehler finden. Vielleicht kann da nochmal jemand mit 
mehr Ahnung drüber schauen.

Der Spannungsteiler besteht aus 33kOhm und 1kOhm, bei 14.4V sollten am 
ADC etwa 0.42V anliegen, gemessen sind es etwa 0.4V.
Laut Datenblatt kann ich den resultierenden ADC Wert via 
ADC=(V_in*1024)/V_ref berechnen(Seite 91).
Die anliegenden 0.4V sollten also einem ADC Wert von ~372.

Der an-aus Terror ist allerdings sogar noch bei einem ADC-Grenzwert von 
200 vorhanden.

Dies sollte einer ADC Spannung von 0.21V entsprechen, was eine Spannung 
von 7.3V vor dem Spannungsteiler wäre, da liegen aber definitiv mehr an.

Aktueller Quellcode dazu im Anhang.
Angehängte Dateien:
#4102406
Lesenswert?

Florian T. schrieb:
> Ich bin ziemlich sicher das Problem auf den ADC oder Spannungsteiler
> eingegrenzt zu haben.

Dann mittle jetzt doch mal bitte über 32 ADC-Werte!
Die Schaltung wäre auch hilfreich! Hast Du ein Oszi und kannst dir die 
Versorgungsspannung vom µC ansehen? Nicht das dir die Spannung beim 
Einschalten der Lampe zusammen bricht! Ist der µC ordentlich abgeblockt 
mit Kondensatoren dicht am µC?
OP #4102811
Lesenswert?

Quellcode und Schaltplan im Anhang. Den Schaltplan habe ich gerade in 
der Mittagspause gemacht, die Kapazitäten der Kondensatoren habe ich 
leider nicht im Kopf, der uC ist natürlich auch mit GND verbunden und 
alle GND sind untereinander verbunden.

Wie im Quellcode zu sehen habe ich das ganze jetzt über 32 Messungen 
gemittelt; Ergebnis: Lampe geht gar nicht mehr an.

Oszi besitze ich leider nicht, allerdings konnte ich via Voltmeter 
nachmessen, dass unbelastet(Lampe aus) etwa 0.42 Volt hinter dem 
Spannungsteiler liegen und belastet etwa 0.4 Volt.
Angehängte Dateien:
Gast #4102822
Lesenswert?

Florian T. schrieb:
> Der an-aus Terror

Der passiert genau dann

  while(1)
  {
    ADCvalue=ADC_Read();
    if(ADCvalue>Warnung)
      PORTB|=(1<<0);
    else if(ADCvalue>=aus && ADCvalue<=Warnung&&warned==0)
    {
      for(i=0;i<5;i++)
      {
        PORTB&=~(1<<0);
        _delay_ms(500);
        PORTB|=(1<<0);
        _delay_ms(500);
      }
      warned++;
    }
    else if(ADCvalue<aus)
      PORTB&=~(1<<0);

wenn ADC_Read mal den richtigen Wert und mal einen falschen (zu kleine) 
Wert liefert. Denn genau bei blinken ist durch die _delay_ms(500) Ruhe, 
im Fall daß ADCValue>Warnung oder ADCValue<aus ist läuft die Schleife 
aber mit maximaler Geschwindigkeit.
OP #4102835
Lesenswert?

MaWin schrieb:
> Der passiert genau dann
> wenn ADC_Read mal den richtigen Wert und mal einen falschen (zu kleine)
> Wert liefert. Denn genau bei blinken ist durch die _delay_ms(500) Ruhe,
> im Fall daß ADCValue>Warnung oder ADCValue<aus ist läuft die Schleife
> aber mit maximaler Geschwindigkeit.

Das ist klar, hab den Quellcode inzwischen radikal zusammengestutzt und 
die Umschaltgrenze auf 200, entspricht extern 7V, gesetzt. Trotzdem habe 
ich an-aus-an-aus.

Wenn ich über viele Werte mittel, geht die Lampe gar nicht an, was dafür 
spricht, dass der ADC selbst bei ausgeschalteter Lampe permanent zu 
wenig misst.
Gast #4102898
Lesenswert?

Florian T. schrieb:
> Das ist klar, hab den Quellcode inzwischen radikal zusammengestutzt und
> die Umschaltgrenze auf 200, entspricht extern 7V, gesetzt. Trotzdem habe
> ich an-aus-an-aus.

Natürlich, du hast ja auch genau den Teil übrig gelassen, der kein delay 
enthält.

> Was dafür spricht, dass der ADC selbst bei ausgeschalteter Lampe
> permanent zu wenig misst.

Was dafür spricht, daß du ihn falsch ausliest/initialisierst.
OP #4102909
Lesenswert?

MaWin schrieb:
> Was dafür spricht, daß du ihn falsch ausliest/initialisierst.

Die Möglichkeit habe ich in Betracht gezogen, selbst noch einmal alles 
nach meinem besten Wissen, das durchaus unvollständig/falsch sein 
könnte, überprüft und darum gebeten, dass vielleicht jemand mit mehr 
Erfahrung über den Code guckt. Oder sollte ich dafür im GCC-Forum einen 
extra Thread eröffnen?



Edit: Oszi hätte ich gerne, ist aber einfach nicht im Budget drin.
#4103101
Lesenswert?

Initialisiert ist der ADC aus meiner Sicht richtig. Ein Integer-Überlauf 
kann auch nicht stattfinden, da 1023*32 nur 32736 ist!

Nach deiner Schaltungszeichnung fehlt dem µC ein Block- und 
Pufferkondensator! Da sollte wenigstens ein 100nF dicht an den µC dran.
OP #4103121
Lesenswert?

Nico ... schrieb:
> Initialisiert ist der ADC aus meiner Sicht richtig. Ein
> Integer-Überlauf
> kann auch nicht stattfinden, da 1023*32 nur 32736 ist!
>
> Nach deiner Schaltungszeichnung fehlt dem µC ein Block- und
> Pufferkondensator! Da sollte wenigstens ein 100nF dicht an den µC dran.

Habe noch einen Kondensator direkt am Vcc Pin ergänzt.

Weitere Beobachtung: Wenn ich die Last,aktuell 5W Birnchen, entferne, 
den Pin via LED überwache und Einzelmessungen durchführe leuchtet die 
LED permanent und blinkt nicht.

Wenn ich Last entferne, LED anschließe und mit Mittelung laufen lasse 
ist die LED permanent aus.
Gast #4103133
Lesenswert?

Florian T. schrieb:
> Weitere Beobachtung: Wenn ich die Last,aktuell 5W Birnchen, entferne,
> den Pin via LED überwache und Einzelmessungen durchführe leuchtet die
> LED permanent und blinkt nicht.

Dann ist doch das naheliegendste, dass die Last die Spannung einbrechen 
lässt und der Controller darum ständig Resets macht. Um das zu 
verifizieren, könntest du am Anfang eine Delay von 2000ms machen. Dann 
siehst du es auch. Ansonsten bruachst du halt ein Oszi.
OP #4103156
Lesenswert?

Peter schrieb:
> Florian T. schrieb:
>> Weitere Beobachtung: Wenn ich die Last,aktuell 5W Birnchen, entferne,
>> den Pin via LED überwache und Einzelmessungen durchführe leuchtet die
>> LED permanent und blinkt nicht.
>
> Dann ist doch das naheliegendste, dass die Last die Spannung einbrechen
> lässt und der Controller darum ständig Resets macht. Um das zu
> verifizieren, könntest du am Anfang eine Delay von 2000ms machen. Dann
> siehst du es auch. Ansonsten bruachst du halt ein Oszi.

Einfügen von 2 Sekunden Pause vor der while Schleife führt zu 2 Sekunden 
aus, 0.5 Sekunden an, 0.5 aus, 0.5 an, 0.5 aus etc.
Muster nur beobachtbar bei einzelnen ADC Messungen die NICHT gemittelt 
werden, bei gemittelten 32 Messungen ist permanent aus.


avion23 schrieb:
> Florian T. schrieb:
>> Der Spannungsteiler besteht aus 33kOhm und 1kOhm, bei
>
> Der Spannungsteiler ist zu groß. Maximale zulässige Impedanz ist 10kΩ

Das heißt solange die Widerstände des Spannungsteilers zusammen <10kOhm 
sind sollte es gehen?
OP #4103172
Lesenswert?

Nico ... schrieb:
> Mach mal die Mittlung bitte so (diese doppelte Zuweisung in der
> for-Schleife sieht mir komisch aus):ADCvalue=0
> for(i=0;i<32;i++)
> {
>     ADCvalue+=ADC_Read();
>     ADCvalue/=32;
> }

Ups, ja, der teilt jedes mal durch 32, also 32 mal. Wenn ich das 
korrigiere krieg ich auch bei der Mittelung blinken, ich such mal 
kleinere Widerstände für den Spannungsteiler wie avion das vorgeschlagen 
hat.



Edit: Spannungsteiler auf 2kOhm+100Ohm reduziert, ADC Werte angepasst, 
weiterhin blinken.
OP #4103233
Lesenswert?

Aufbau und Typschild vom Akku im Anhang.


Zum Aufbau:
Spannungswandler auf 5 V oben rechts

Spannungsteiler unten rechts(2kOhm mit 2 1kOhm simuliert)

Mosfet oben links

uC unten inks

Lampe ebenfalls oben rechts, links neben Spannungswandler

Kabelfarben:
Rot: 14.4V
Blau: GND
Orange: 5V
Weiß: kommt vom Spannungsteiler geht an ADC
Grün: PB0->Gate




MaWin schrieb:
> avion23 schrieb:
>> Maximale zulässige Impedanz ist 10kΩ
>
> Die ist ja 970 Ohm, also weit unterhalb des maximal erlaubten.
>
> Probleme mit der Widerstandsberechnung ?

Ich hab weiter oben einmal vorgerechnet welche ADC Werte meiner Meinung 
nach rauskommen. Ist Impedanz außerdem nicht nur für Wechselstrom 
relevant?
Angehängte Dateien:
Gast #4103248
Lesenswert?

Um den Aufbau zu Testen könntest du noch einen Taster ergänzen. Dann 
probierst du anstatt den ADC auszulesen erstmal den Taster auszulesen. 
Wenn das Funktioniert, weißt du dass es Wahrscheinlich nicht an der 
Versorgungsspannung u.ä. liegt und kannst dich vertieft dem ADC 
zuwenden.
#4103313
Lesenswert?

Sehr gut!
Hast Du ein Poti, so 10kR oder ähnlich? Wenn ja, dann schließe das mal 
an deinen ADC-Eingang und teste mit dem Poti ob Du die LED zum leuchten 
bzw. nicht leuchten bekommst wenn Du die Potistellung änderst! Den 
Spannungsteiler bei dem Experiment bitte vom µC trennen.
Gast #4103317
Lesenswert?

> for(i=0;i<32;i++)
> {
>     ADCvalue+=ADC_Read();
>     ADCvalue/=32;
> }

Das ergibt doch nicht den Mittelwert!

Vergiss das mit dem Mittelwert mal. Dein Problem ist sicher ganz 
woanders. Es muss auch mit einzelnen Messungen funktionieren, zumindest 
wenn du so weit von der Warnschwelle entfernt bist, wie du geschrieben 
hast.

>> Wenn ich die Last,aktuell 5W Birnchen, entferne,
>> den Pin via LED überwache und Einzelmessungen durchführe leuchtet die
>> LED permanent und blinkt nicht.

> Dann ist doch das naheliegendste, dass die Last die Spannung einbrechen
> lässt und der Controller darum ständig Resets macht.

Sehe ich auch so. Die Batterie ist wohl zu schwach. Das müsste man doch 
sofort sehen, wenn man mal den MOSFET überbrückt, so dass die Lampe 
permament leuchtet und dann man die Spannung misst.
OP #4103326
Lesenswert?

Nico ... schrieb:
> Sehr gut!
> Hast Du ein Poti, so 10kR oder ähnlich? Wenn ja, dann schließe das mal
> an deinen ADC-Eingang und teste mit dem Poti ob Du die LED zum leuchten
> bzw. nicht leuchten bekommst wenn Du die Potistellung änderst! Den
> Spannungsteiler bei dem Experiment bitte vom µC trennen.

Besteht da nicht die Gefahr, dass ich den uC röste wenn ich das Poti 
nicht genug aufdrehe?


Nico ... schrieb:
> Stefan Us schrieb:
>> Das ergibt doch nicht den Mittelwert!
>
> Warum nicht? Das ergibt den Mittelwert aus den letzten 32 Werten!

Nein tut es nicht, das misst, teilt den Messwert durch 32, rechnet den 
nächsten Messwert auf den durch 32 geteilten Wert drauf, teilt wieder 
durch 32 etc.

Den Fehler habe ich inzwischen gefunden und behoben
OP #4103342
Lesenswert?

Nico ... schrieb:
> Florian T. schrieb:
>> Besteht da nicht die Gefahr, dass ich den uC röste wenn ich das Poti
>> nicht genug aufdrehe?
>
> Nein! Du musst es nur richtig anschließen, den Schleifer an den
> ADC-Eingang und die beiden äußeren Anschlüsse an 5V bzw. GND.

Ah, okay wenn ich die 5V Spannung nehme natürlich nicht, aber wenn ich 
das Poti an die 14.4V vom Akku drangehangen hätte wäre das möglich 
gewesen oder?

zur Frage: Ja mit dem Poti kann ich das Licht an und aus machen.
#4104080
Lesenswert?

Ist diese Schwelle immer so, also reproduzierbar? Das sind fast 180LSB 
die der ADC daneben liegt, das ist schon sehr seltsam!
Aber für deine Anforderung sind die Absolutwerte ja nicht relevant, also 
verändere einfach die Schwelle in der Programmierung.

Was für einen Spannungswandler nutzt Du eigentlich?
Gast #4104479
Lesenswert?

Florian T. schrieb:
> Aufbau

Den Aufbau kannst du weitgehend vergessen, wenn der darauf befindliche 
MOSFET die Glühlampe (10 mehr höherre Einschaltstrom) schaltet.

Das Steckbrett ist so hochohmig, daß dann die Spannung zusammenbricht.

Lege eine Leitung vom Akku zur Glühlampe zum MOSFET nach Minus vom Akku.

Lege eine zweite Leitung auch vom Akku zum Steckbrett zur Schaltung mit 
dem uC, der UNBEDINGT einen 100nF Kerko direkt von VCC nach GND 
benötigt, und von GND eine Leitung nach Minus vom Akku.

So sind die Stromkreise uC und Lampe völlig von einander getrennt und 
kommen nur an den Akkuanschlüssen zusammen.
OP #4104773
Lesenswert?

Okay, da bin ich wieder, habe mal durchgemessen mit verschiedenen 
Schaltwerten, der uC schaltet konsistent (habe für 300 400 500 600 und 
800 gemessen) bei 500 plusminus 30 mV ab. Für 100 schaltet er bei 0.173 
V aus(61LSB) und für 200 bei 0.382(155LSB)
.


Spannungswandler ist ein MC78L05ACP (100mA, hab mich heut morgen 
vertippt)




MaWin schrieb:
> Florian T. schrieb:
>> Aufbau
>
> Den Aufbau kannst du weitgehend vergessen, wenn der darauf befindliche
> MOSFET die Glühlampe (10 mehr höherre Einschaltstrom) schaltet.
>
> Das Steckbrett ist so hochohmig, daß dann die Spannung zusammenbricht.
>
> Lege eine Leitung vom Akku zur Glühlampe zum MOSFET nach Minus vom Akku.
>
> Lege eine zweite Leitung auch vom Akku zum Steckbrett zur Schaltung mit
> dem uC, der UNBEDINGT einen 100nF Kerko direkt von VCC nach GND
> benötigt, und von GND eine Leitung nach Minus vom Akku.
>
> So sind die Stromkreise uC und Lampe völlig von einander getrennt und
> kommen nur an den Akkuanschlüssen zusammen.

Okay, werde versuchen das morgen umzusetzen.
OP #4105459
Lesenswert?

MaWin schrieb:
> Florian T. schrieb:
>> Aufbau
>
> Den Aufbau kannst du weitgehend vergessen, wenn der darauf befindliche
> MOSFET die Glühlampe (10 mehr höherre Einschaltstrom) schaltet.
>
> Das Steckbrett ist so hochohmig, daß dann die Spannung zusammenbricht.
>
> Lege eine Leitung vom Akku zur Glühlampe zum MOSFET nach Minus vom Akku.
>
> Lege eine zweite Leitung auch vom Akku zum Steckbrett zur Schaltung mit
> dem uC, der UNBEDINGT einen 100nF Kerko direkt von VCC nach GND
> benötigt, und von GND eine Leitung nach Minus vom Akku.
>
> So sind die Stromkreise uC und Lampe völlig von einander getrennt und
> kommen nur an den Akkuanschlüssen zusammen.

Okay habe Stromkreise getrennt und kriege jetzt sinnvolle Werte für die 
Ausschaltgrenze im Bereich +-25LSB, kommt wahrscheinlich daher, dass ich 
das Poti nicht perfekt einstellen kann.

Ich verstehe aber noch nicht wirklich warum das jetzt geholfen hat, vor 
dem Auslagern der habe ich direkt am ADC Pin zu hohe Werte gemessen, 
nach dem Auslagern die richtigen, niedrigeren Werte. Warum misst der µC 
bei nicht ausgelagerter Lampe falsch?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren