PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Lithium Entladeschutz für Stirnlampe



021aet04
22.11.2020, 12:41
Einen schönen Sonntag,

etwas zur Vorgeschichte.

Ich habe für einen Arbeitskollegen bei ebay eine Stirnlampe bestellt.
Akkus (Samsung-Zellen) und passendes Ladegerät habe ich bei einem Elektronikhändler bestellt.
Habe alles getestet und ihm gegeben (hat alles funktioniert).

Keine 2 Wochen später hat er sie mir wieder gegeben.
Er hat gesagt "Sie funktioniert nicht mehr, Akkus lassen sich nicht laden".

Ich habe die Akkus gemessen, beide absolut tot (unter 0,5V).
Natürlich ist klar das das Ladegerät nicht mehr lädt.

Die Frage ist warum sie so leer geworden sind. Die Antwort ist die Lampe.
Das IC in der Lampe war defekt und hat die Hochleistungsled dauerhaft eingeschalten (man konnte auch die Funktionen nicht umschalten).





Jetzt habe ich mir gedacht ich baue eine Schutzschaltung ein, ebenfalls bei ebay bestellt (https://www.ebay.at/itm/Seien-Sie-Vorstand-Schutz-Professionell-10-stucke-Lithium-Loten-Neuest/133582137954?hash=item1f1a1daa62:g:rsgAAOSw1QxftxB t ist ein anderer Händler, optisch aber gleich).
Diese habe ich schon einmal für eine defekte Schaltung bestellt.

Habe vorher noch getestet wann die Schutzschaltung abschaltet (mit Netzteil).
Hat alles funktioniert, bei 2,4V laut Netzteil ist Schluss. So steht es auch im DB.

Anschließend in die Lampe eingebaut. Dann habe ich ebenfalls mit dem Netzteil getestet, zu geringe Spannung an der Lampe (ca. 1,2V).
Habe mir das nicht erklären können und habe die Schutzschaltung wieder entlötet. Die Schutzschaltung lässt die Spannung wieder durch.

Habe anschliesend folgendes herausgefunden.
Das IC schaltet den Ausgang ab, wenn sich eine Last am Ausgang befindet und man anschließend Spannung anlegt (Akku einlegt).
Das habe ich ein paar mal mit dem Netzteil getestet.
Das IC ist ein DW01KA von H&M Semi http://hmsemi.com/downfile/DW01A.PDF

Leider kann ich es so nicht gebrauchen. Ich möchte die Schutzschaltung in die Lampe einbauen.
Der Grund ist das ich die Akkus ohne Probleme tauschen können will und trotzdem eine Schutzfunktion vorhanden ist.
Die Lampe schaltet zwar auch bei zu geringer Spannung ab, diese liegt aber erst bei ca. 2V, da leuchtet auch keine Led mehr.
Habe es mit dem Netzteil getestet.

Kennt jemand eine Schutzschaltung die für meine Funktion brauchbar ist?

Ansonsten muss ich mit einem kleinen Attiny eine Schutzschaltung selbst bauen.

MfG Hannes

Rabenauge
23.11.2020, 07:37
Warum nimmst du nicht gleich Zellen, die diese Schutzschaltung integriert haben?

021aet04
23.11.2020, 16:33
Das wäre natürlich auch möglich, ich möchte sie aber in der Lampe verbauen.
Der Grund ist das er dann auch andere Akkus kaufen kann und trotzdem einen Schutz hat.

MfG Hannes

Moppi
23.11.2020, 17:13
Hallo!

Siro hatte so was mal gebaut. Ich habe das damals probiert, hat funktioniert. Muss man aber mal den ganzen Thread nach diesem Beitrag (https://www.roboternetz.de/community/threads/72313-LiPo-Akku?p=646036&viewfull=1#post646036) hier lesen (weil die Schaltung benötigt auch etwas Strom, weiß nicht mehr wieviel - lesen).


MfG

- - - Aktualisiert - - -

Schon gefunden: Siro schrieb ~ 1.7mA

- - - Aktualisiert - - -

Hier hat Siro so was ähnliches gebaut. (https://www.roboternetz.de/community/threads/74851-1S-LiPo-Überwachung)

021aet04
23.11.2020, 17:49
Danke, ich bin gerade am Testen mit einem Attiny13A.

Im Prinzip muss der auch nicht ständig messen sondern eventuell im Deep sleep Mode für ein paar Sekunden bleiben und mit dem Watchdogtimer aufwecken,
messen (eventuell mehrmals hintereinander) und dann entscheiden ob der Ausgang abgeschalten wird oder nicht. Led würde ich auch einfügen.

Aktuell nimmt er 1,22mA auf (Led aus und angesteckten Programmer). Muss mir aber noch das DB genau anschauen was man alles deaktivieren kann bzw soll.

MfG Hannes

021aet04
28.11.2020, 17:54
Ich werde die Variante mit eigenem uC nehmen.
Weil ich mit den Atmels arbeite, habe ich mir Attiny412-SSN (SO8 ) und Attiny10-TS8R (SOT23-6) bestellt und die sind gestern angekommen.
Als Mosfet habe ich AO3416 genommen. Das ist ein relativ starker Mosfet im SOT23 Gehäuse. Dieser hat ein Vds von 20V und bis 6,5A (bei 4,5Vgs und 25°C).
Der Rdson liegt bei geringen 34mOhm @ 1,8Vgs. Zusätzlich ist das Gate ESD geschützt.

Weil ich zum ersten Mal mit Attiny412 arbeite muss ich mich erst einarbeiten. Habe bisher mit den etwas älteren Controllern gearbeitet (Atmega88, Atmega328, Attiny13,....).
Mit der neueren Ansteuerung ist es noch etwas kompliziert.

In der Schaltung werde ich dann aber (wegen der Größe) eher den Attiny10 nehmen.
Für das Breadboard habe ich aber Adapterplatinen bestellt, auf diese warte ich noch. Leider habe ich für die Sot23-6 keine zuhause.

PS: Aktuell habe ich das Problem mit dem Takt, es sollten eigentlich 20MHz sein. Ein kleines Programm (Led mit delay blinken lassen) funktioniert nicht richtig. Der Takt ist zu niedrig. Arbeitet schon irgendwer mit diesen Controllern?

MfG Hannes

Moppi
29.11.2020, 09:22
Ein Gedanke, zum Stromverbrauch: geringste Taktrate wählen, Versorgungsspannung am unteren Ende ansetzen?

Aus dem Datenblatt:
Low Power Consumption– Active Mode:• 200μA at 1MHz and 1.8V– Idle Mode:• 25μA at 1MHz and 1.8V– Power-down Mode:• < 0.1μA at 1.8V

MfG

oberallgeier
29.11.2020, 10:30
Hallo Hannes,
delay zum Messen des Controllertaktes ist (immer) doof. Funktioniert ja nur dann richtig, wenn kein Interrupt, kein störendes Programm dazwischen funkt. Und genau (exact mit CPU-clock übereinstimmend) ists selten. Besser ist da eine timergesteuerte LED. ALLENfalls löse ich das etwa so:

main:
// definitionen, deklarationen - insbesondere Ports
#define SetBit(ADDR,BIT) ((ADDR) |= (1<<(BIT))) // Setzt Bit
#define ClrBit(ADDR,BIT) ((ADDR) &= ~(1<<(BIT))) // Löscht Bit
#define ToggleBit(ADDR,BIT) ((ADDR) ^= (1<<(BIT))) // Toogelt Bit
// SOFORT danach etas so :
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
for (uint8_t n=0; n<20; n++) // LED PC3 blinken lassen
{ //
ClrBit(PORTC, PC3); // LED auf PC3 schalten EIN, hell
waitms( 500); //
SetBit(PORTC, PC3); // LED schalten AUS, dunkel
waitms( 500); //
} // Ende for (uint8_t n=0; n<20; n++)

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
while (1) {}

Das while (1) {} ist dann nur diese Endlosschleife *gg* in der gemessen werden kann (1 Hz); Abbruch mit RESET oder PWR-off.

021aet04
29.11.2020, 11:09
Danke für die Antworten, habe mittlerweile den Fehler gefunden.

Das man mit geringer Frequenz und Spannung stromsparend wird weiß ich, aber trotzdem danke.

Weil ich das erste Mal mit dem Controller arbeite habe ich nur ein ganz kleines Programm. Es gibt nur die Initialisierung (Pin auf Ausgang stellen)
und den Pin togglen lassen mit einer kleinen Pause.

Das Problem ist aber das es viel mehr Register gibt als bei den älteren Controllern. Es gibt bei dem Attiny412 4 Register für die Richtungsumschaltung (Dir, Dirset, Dirclr und Dirtgl) und nocheinmal 4 für das Umschalten (Out, Outset, Outclr und Outtgl).

Das Problem was ich hatte ist, das der Controller 16 oder 20MHz internen Takt besitzt. Ich hatte die 20MHz gewählt gehabt und diese auch für das Delay angegeben.
Es gibt aber noch ein 2tes Register mit einem Prescaler (und ein Bit Prescaler Enable). Der Controller läuft nach einem Reset mit 16MHz (oder 20MHz je nach Fusebit) und Prescaler von 6 (steht auf Seite 59 im DB).
Im Programm kann man dann den Takt umschalten. Es gibt aber ein eigenes Prozedere.

Man muss zuerst in das Register "CPU_CCP" (Konfigurationsschutzregister) den Wert 0xD8 schreiben, damit man den Takt ändern kann.
Anschließend kann man im CLKCTRL Register die Taktquelle (CLKCTRL_MCLKCTRLA) bzw den Prescaler (CLKCTRL_MCLKCTRLB) einstellen.

Als ich den Prescaler mit diesem Prozedere abgeschalten habe hat es funktioniert.



Mein Ablauf für die Schutzschaltung wird so energiesparend wie möglich. Den Takt möchte ich so niedrig wie möglich wählen (aber nur internen Takt) und zusätzlich den Controller in den Tiefschlaf versetzten. Der Watchdog weckt den Controller alle paar Sekunden auf.

MfG Hannes