Domme Batterijen - Spoof

Door Infant op zondag 30 december 2012 20:10 - Reacties (17)
Categorie: Gemod / Gefix, Views: 3.859

Wederom een post over notebook accu's. Dit en is een vervolg op de eerste, tweede en derde.

En de verplichte lijst met pdfjes:
SMBus v1.1 Specification
Smart Battery Data Specification v1.1
BQ2084 Datasheet
Atmega16U4 Datasheet
Elitebook 2730p Schema (Mediafire)

In de vorige deel heb ik wat geklaagd over hoe waardeloos er met accu's wordt omgegaan door mijn, en waarschijnlijk jouw notebook.

Mijn eerste notebook die ik elke dag gebruikte was een Compaq n410c. Om een treinreis van 6 uur een beetje verdraaglijk te maken was ik toen, een jaartje of 7 geleden, ook al lekker aan het prutsen en had ik een accu gemaakt van een half docking station, een zoot ducktape en dit er in:

Idioot grote accu van 20 stuks 103450

Het zijn 20 stuks 103450 cellen die samen rond de 130 Wh moesten voorstellen. Helaas snapte het bordje, wat ontworpen was voor 50Wh niet dat er ook twee keer zo veel energie in kon zitten, en was het na 50Wh dus afgelopen met de pret.

103450 is een vrij standaard maat voor wat plattere notebook accu's. Waar AA (14500) en AAA (10440) de meest voorkomende maten zijn, worden 18650s het meest gebruikt in notebooks, en zelfs de Model S gebruikt puur uit kosten overweging, een 40, 60 of 85kWh accu opgebouwd uit een enorme berg 18650 cellen.

Een AA en een paar 18650's

Die dingen worden wereld wijd namelijk toch al geproduceerd per miljarden voor in notebooks, dus waarom ook niet in je auto proppen. Het zijn dus echt gewoon dezelfde cellen, in een auto zitten er gewoon meer.

Het interessante is dat Tesla op zijn 85kWh batterij 8 jaar garantie geeft, of oneindig kilometers. Which ever comes first.

8 Jaar is een stuk beter dan de 0.5 tot 3 jaar die je bij je notebook gaat vinden.... waarom?

Dit is niet zo eenvoudig, maar in dit soort auto's komt het er op neer dat er erg nauwkeurig naar de cellen gekeken wordt door een stuk elektronica. Die houd de stroom en temperatuur in de gaten, en zorgt dat alle cellen in balans zijn.

Wat verder voor de levensduur van belang is, is dat ze niet volledig op en ontladen worden. Meestal wordt de cel in zo'n auto tussen 40 en 80% van zijn energie capaciteit benut.

Er zijn 1001 onderzoekjes te vinden, waar tientallen cellen ontladen en opgeladen worden, dag in dag uit. De cellen die steeds maar 40% ontladen worden zijn na 200 cycli nog prima in orde, en hebben nog 99% van hun capaciteit. De cellen die volledig opgeladen en ontladen worden hebben nog maar 80% of erger.

Door te zorgen dat de cellen alleen in hun, vanuit levensduur oogpunt gezien, gunstige gebied gebruikt worden, kan zo'n ding echt langer dan 8 jaar mee gaan.

Balans Dag
Hoe houd zo'n ding nou bijvoorbeeld cel balans in de gaten? Het makkelijkst om het begrip cel onbalans een beetje in te zien, vind ik het volgende:

Hieronder zien we 3 cellen in serie. De grote draad bovenin is de plus, de draad onderin is de min. De spanning van de 3 cellen tellen in serie bij elkaar op. Als ze allen 4 Volt zijn, hebben we in totaal 12 Volt.

Als we in een serie als deze stroom vragen of aan de cellen leveren, moet deze stroom door elke cel heen. Stel nou dat de cellen uit balans zijn:

3 Serie Cellen

De middelste cel is voor 60% vol, de rest 80%. In dit voorbeeld is de tweede cel leeg als we er nog 60% lading uit halen. De rest heeft dan nog 20% over.

De cellen die voller zijn worden dus iets minder belast, namelijk van 80% naar 20%, t.o.v. 60% naar 0%. De lege cel wordt dus eigenlijk ongunstiger gebruikt dan de rest, en op deze manier is een kleine onbalans zelf versterkend. Dat wil zeggen, hoe vaker we hem gebruiken, des te sneller zal de middelste cel slijten ten opzichte van de rest.

Dit is het simpelste voorbeeld wat ik kan bedenken. Er zijn nog veel meer andere problemen die zich voordoen, zoals een enorme temperatuur afhankelijkheid. De meeste factoren hebben versterkend effect hebben op de cel onbalans.

Laden
De meest gebruikte laad strategie voor een cel is CC/CV. Dit betekend Constant Current / Constant Voltage en is vrij eenvoudig:

Als een cel leeg is, laad je er een constante hoeveelheid stroom doorheen lopen.(CC). Op een gegeven moment stijgt de spanning in de cel tot een boven grens, waarna je deze spanning gelijk houd en de stroom vanzelf afneemt (CV):

Bron: Battery University
Charge Profile Battery University

De meest goedkope laders doen dit, en de lader in mijn notebook in theorie ook. Ik heb een accu die nog goed is (voor de afwisseling) aan m'n logger gehangen tijdens het laden, en dat levert de volgende plotjes op: (klik voor groot)

Laadgedrag van een orginele 44Wh HP accu (300 cycli, 3 jaar, 25% wear)Orginele HP accu voor een 2730p. Opgeladen van volledig leeg.

De horizontale as is het aantal seconden vanaf het begin van het loggen. Vertikaal is milliVolt, milliAmpere, milliAmpereuur, percentage of graden celcius (waar toepasbaar).

Nou, dit ziet er allemaal vrij prima uit. Het duurt een uur om het ding van 0% naar 80% te laden, en nog een uur om de resterende 20% bij te vullen.
De stroom en spanning grafiek lijken erg veel op de grafiek erboven.

Bij de stroom valt wel iets op, namelijk dat na een uur (c.a. 3700 seconden) de grafiek in stapjes afloopt inplaats van netjes in een lijntje. En aan het einde is het ineens afgelopen. Waarom is dat?
Als je namelijk gewoon een accu aan een lader hangt, krijg je eigenlijk automatisch een vloeiende grafiek zoals degene uit battery university, en niet een ding wat in stapjes afneemt.
Hier gaan we aan het eind nog eens naar kijken.

Het SMBus protocol is een vrij mooi protocol. Als de accu aan een lader gehangen wordt, of gewoon aan een systeem, kan hij d.m.v. status codes aangeven aan alles hoe het met de accu gesteld is. Op pagina 28 staat een lijstje van alarm codes. De batterij kan mater op de bus worden, en zo aan de lader vertellen dat het serieus fout gaat, en dat de lader moet stoppen.
Op pagina 36 staat een ander ding wat de batterij de bus op kan slingeren, namelijk charging current en charging voltage.
De accu kan dus gewoon tegen de lader zeggen: Ik wil 2 Ampere hebben, en maximaal 12 Volt. En dan krijg je dus het eerste uur 2 Ampere, en daarna gaat de lader niet verder dan 12 Volt. Prachtig. Zo wil je het hebben.

Maar.... hoe heeft HP het geïmplementeerd? Herinner je je dit tabelletje, waarin ik al het dataverkeer wat voorbij kwam gemarkeerd heb? Het eerste commando daarin, 0x03, is in blauw(achtig) gemarkeerd, en wijkt af van de rest.

De meeste waardes worden namelijk uit de accu opgevraagd, maar status wordt eerst weg geschreven en daarna weer opgevraagd.

Sniffer:
1
2
1 1 16  3  0 60 
2 1 16  3 17 C1 60


Op pagina 36 van de BQ2084 datasheet staat wat dat voor een gevolgen heeft. 0x60 vertaalt namelijk naar:
Disable Alarm Broadcast
Disable Charging Broadcast

En als beschrijving: "When set, the bq2084-V143 does not master the
SMBus, and AlarmWarning() messages are not sent to the SMBus host and the smart battery charger"


Dit betekend dat de accu nog steeds kan zeggen hoeveel stroom en spanning hij wil hebben. Hij kan ook zeggen: "Help! Ik wordt teveel opgeladen!"
Maar er is niemand die dat gaat horen.

Deze waardes zijn wel op te vragen, en dat wordt ook gedaan. Charging Current en Charging Voltage worden één keer opgevraagd als je de accu er in doet, en daarna op compleet willekeurige tijdstippen met soms wel 10 minuten er tussen.

....

Laat deze informatie even bezinken.

....

Waarom! Waarom!

Nu besluit de lader zelf, gebaseerd op de totale spanning, of er opgehouden moet worden met laden. Terwijl er een heel protocol in place is, die de accu in staat stelt om te zeggen wat hij wil hebben. WHY FOR THE LOVE OF GOD!

Maar okee, it could be worse.

Bij deze nog vrij goede in balans-zijnde accu, geeft dat na de 80% dus deze plaatjes voor stroom en cel spanning. (Ingezoomd op bovenstaande grafieken:)
Laadgedrag van een orginele 44Wh HP accu (300 cycli, 3 jaar, 25% wear) Ingezoomd

Op zich is het niet al te erg. Hij word in ieder geval niet over geladen. Maar erg netjes is anders.

Nou wil ik geen 100 Euro aan een nieuwe HP accu uitgeven elk jaar. Gewoon, uit principe.

Gelukkig kunnen bepaalde Aziaten deze accu's voor c.a. 50 Euro op de markt krijgen, i.p.v. de c.a. 100 Euro die HP er voor vraagt. Het gaat hier dan om een 3600 mAh accu i.pv. 4000 mAh. Dat je iets minder krijgt... okee. Maar de capaciteit is duidelijk niet het enige waar op bespaard is. De 3 stuks TI chipjes die er in zitten zijn ook al makkelijk een eurootje of 20.

Dat kan goedkoper.

Eens kijken wat een Chinese accu voor een plotjes produceert:

Laadgedrag van een Chinese Fop accu.

En weer ingezoomd:

Laadgedrag van een Chinese Fop accu. Ingezoomd
Pijnlijk.

Het eerste wat opvalt is dat de temperatuur sensor compleet weg bezuinigd is. En gelijk hebben ze. Die informatie wordt toch genegeerd, dus waarom zou je het er dan in doen?

Ten tweede weet deze accu eigenlijk op geen enkel tijdstip wat er nou precies aan de hand is. De metingen zijn zo on-nauwkeurig en all over the place dat het een wonder is dat deze dingen überhaupt werken.

Een van de cellen komt volgens de metingen steeds iets boven de 4.35 Volt uit. Dit is exact het gebied waarboven een cel gaat overladen met thermal runaway als mogelijk gevolg.

Een fatsoenlijke accu beveiliging had nu gezegd dat het echt te gek wordt, en had zichzelf moeten ontkoppelen. Zelfs al gaat het goed, deze informatie zit er in als beveiliging. Als de informatie zegt:

"Ik ga ontploffen!"

Dan neem je het zekere voor het onzekere, en houd je op met laden.

Bij de HP accu zie je dat de cel meet waarden misschien 2-5 millivolt ruis vertonen. Zelfs met een slechte absolute nauwkeurigheid zou je dan nog goed veilig zitten.

De absolute nauwkeurigheid in deze Chinese accu kan ik niks over zeggen, gezien ik die vergelijking nog niet gemaakt heb. Maar met een ruis niveau van 150 millivolt kan je in ieder geval niet fatsoenlijk bepalen of alles nog goed gaat, zelfs al zijn je waardes spot-on.

Tot zo ver een kleine inzage in het laad gedrag van notebook accu's.

Gewapend met gelogd dataverkeer, en een zoot datasheets is het nu tijd om zelf accu te gaan spelen.

Spoof Spoof
Spoofing, is jezelf voordoen als iets of iemand anders. En je ziet hem natuurlijk al aankomen, de Atmega gaat doen alsof hij een batterij is. Een dooie, om mee te beginnen. En daarna, wellicht een werkende.

Wat de notebook bij het inprikken van de accu doet, is een hele tabel aan gegevens opvragen, en daarna vraagt hij af en toe zo eens wat data op. Willekeurig.

Wat de laptop dus normaal aan de batterij vraagt, gaat hij nu aan een Atmega vragen. En die gaat dan gewoon alles wat een accu zou zeggen, terug zeggen. Zo simpel.

Zodoende heb ik alle commando's in een lijstje gezet. Alle data die door de datas niffer verzameld is, is ook in de Atmel gepropt en op die manier lijkt het alsof de notebook met een BQ2084 aan het praten is.

Bij het opvragen van de meet gegevens, zoals spanning, stroom, temperatuur etc. worden steeds twee bytes opgevraagd. Bij de ManufacturerName en ManufacturerData wordt een hele rits tekens, met een variabele totale lengte opgevraagd. Een stukje van de code ziet er dan zo uit:

C: Interrupts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
uint8_t getbyte(uint8_t whichuint8_t cmd){
    uint8_t ret = 0;
    switch(cmd){
        case CMD_VOLTAGE:{
            if (which == HI_BYTE)
                return 0x40;
            else
                return 0xA8;
            break;
        }
        /* 
         Hiertussen nog een berg aan andere states.
        */

        case CMD_MANUFCT_NAME:{
            // Lo returns string len, the rest the string.
            if (which == LO_BYTE){
                ret_str_ptr = 0;
                return MANUFCT_NAME_LEN;                
            }else{
                ret = manufct_name[ret_str_ptr];
                if (ret_str_ptr < MANUFCT_NAME_LEN)
                    ret_str_ptr++;
                return ret;
            }
            break;
        }
    return 0;
}

Als de spanning wordt opgevraagd, geeft hij een vaste waarde terug, en dat geldt ook voor stroom, temperatuur en noem het maar op.
Al deze waardes zijn ooit voorbij gekomen uit een accu die niet echt wou kalibreren, maar zich wel gewoon aanmeld. Dus met deze waardes moet het werken.

Na veel gepielemuis, een berg leed wat ik jullie allemaal zal besparen, vertelt de notebook eindelijk dat er een accu gevonden is:

Een defecte accu

Jeeej!

Vervolgens heb ik alle vaste waardes omgetoverd tot variabele, en dan kun je wat gaan experimenteren.

Als ik bijvoorbeeld zeg dat de cellen en spanning 0 Volt hebben, dan wordt de accu niet herkend door het systeem. Hetzelfde geld voor belachelijk hoge spanningen.

Maar getalletjes die niet optellen, of niet kloppen, maar wel binnen de norm vallen, worden goed gekeurd, en de accu wordt netjes herkend.

Na wat waardes invullen, en hele stukken datasheet implementeren is deze Atmel nu een week oud.
Er zit dus nog garantie op! O ja!

Verder geeft hij aan de notebook door dat hij tot 1337 mAh opladen, en verder zijn alle cellen netjes 3700mV, maar de totale spanning is 12 Volt.

Gespoofte accu. Alles is okee!

En dit werkt! Het wordt allemaal goed gekeurd, en hij meld zich als semi-defecte accu aan.

Als je nu een willekeurige echte accu aan de plus en min van de connector hangt, een lood accu bijvoorbeeld, denkt de notebook dat alles okee is. Immers, dit verteld de accu. Ookal is de spanning compleet anders.

Het stukje analoge elektronica in de notebook, de battery selector ziet inderdaad een spanning, en het moment dat ik de stekker er uit trek, wordt er stroom uit de externe accu gezogen.

Ha! Fooled you! Maar hij doet het wel.

Helaas zal Windows nooit met een voorspelling komen hoe lang de accu nog mee gaat, want de 'accu' verteld telkens dat hij 100% vol is, of eigenlijk dat er nog 1337 mAh in zit... de hele tijd.
Toch vind de notebook dit niet erg, en gaat hij gewoon door tot de accu echt leeg is.

Wat ook jammer is, is dat ondanks dat ik om een laadstroom en spanning vraag, er niet opgeladen wordt. Dus zo gemakkelijk is de lader niet te foppen. Ergens diep in de lader gaat een lampje branden: "Wait a minute! This isn't right! Something is wrong here...."

Dit werkt!

Mijn grootste probleem is nu getackeld. Namelijk, dat de notebook de tweede accu niet wou ontladen.

Maar ik ben er nog steeds niet. De huidige opstelling (zie plaatje) is verre van portable. Het zou ook wel leuk zijn als de notebook hem kan opladen, en op zich is een indicatie van hoe lang het zaakje mee kan gaan ook wel aardig.

In het tweede artikel begon ik met een versimpeld schema, waar de accu als bijzaak ook in getekend zat. Laten we daar nu eens wat verder naar gaan kijken.

Wat moet een batterij doen?

Blokschema van een specifieke HP accu

Degene die ik heb open gepeuterd, ziet er in schema vorm, ongeveer zo uit. Het enige wat ik er niet in heb gezet, is de temperatuur sensor.

Je zit 3 IC's. Er zijn ook accu's met 2 of maar 1 IC, maar deze had er 3. Het IC links boven doet protection, en dat noemen ze 3rd level protection. Als alle andere IC's naar de klote zijn, of iemand zet per ongeluk 220 Volt op de accu polen, is het zijn taak om de fuse door te branden. Dat is het enige wat hij kan doen. Als hij dat gedaan heeft, is het schluss. Afgelopen.
De accu gaat het dan ook nooit meer doen. Er wordt een status bitje in het 2e IC weg gezet, zodat zelfs als je de fuse vervangt, de notebook hem nog steeds als defect verklaard, en voor altijd met rust laat.

Het 2e IC daar onder, kijkt net als het de eerste naar de cel spanningen. En tevens naar de stroom die de accu uit loopt. Dit meet hij door naar de spanning over de shunt weerstand ondering te kijken. Hoe hoger deze spanning, hoe meer stroom er loopt.
Als de cellen te vol of leeg raken, of de stroom wordt te veel... kan dit IC de twee mosfetjes Q1 en Q2 uit zetten, waardoor de accu in feite los gekoppeld wordt.

En het IC helemaal rechts heeft als taak te zorgen dat de andere 2 IC's niks hoeven te doen. Als dat namelijk zo is, gaat het goed. En dat wil je doorgaans hebben. Dit IC kijkt ook zelf naar de stroom, maar vraagt de rest van de variabelen zoals individuele cel spanningen op uit het 2e IC. En als de notebook er om vraagt, geeft dit IC ze dus door.

Dat was het eigenlijk wat safety betreft. Meer hoeft de accu niet te doen. Balanceren had leuk geweest, maar het hoeft niet.

Het enige wat hij verder moet doen, is de gemeten stroom over de tijd integreren, en dat geeft dan de capaciteit. En dan, na een jaartje, moet hij stuk gaan zodat jij bij HP aan kan gaan kloppen en zegt:

"Doet het niet meer. Is stuk. Moet nieuwe!"

En dan wijst HP naar het verlopen garantie stickertje, en verwijst je door naar de webwinkel.

Behalve het stuk-ga gedeelte, heb ik de rest kwa hardware grotendeels nog ergens op een bordje slingeren die ik ooit voor iemand gemaakt heb.
Met een klein beetje re-wiring, wat gepruts en gesnoei, kan dat best wel eens dienst gaan doen als accu-protection-test-ding....

Ik noem het: Spoofy.

Spoofy
Spoofy. Een echte nep accu.

Dit ding heeft eigenlijk alles wat de Chinese HP accu ook heeft, namelijk alles wat een originele HP accu ook heeft, op een temperatuur sensor na. (Die paste er niet meer op.)
Verder gewoon minder en vooral goedkopere IC's. Het kan ook niet balanceren, maar alleen toekijken hoe je cellen mishandeld worden en er iets aan doen als het te ver gaat.

Het boogje bij de gele draad is de meet weerstand, of in ieder geval een stuk koper wat daar op lijkt.
Aan de onderkant zitten vier (twee parallel) P-channel mosfets. Het hadden er ook twee mogen zijn, maar het zijn er 4.

Er zat een spoel in het midden, maar die is vervangen door een stuk draad.

Verder zit er een van de goedkopere Atmels op die je kunt vinden, een Atmega88PA. Het fijne hieraan vind ik dat hij:
1: Goedkoop is.
2: Altijd doet wat ik zeg.
3: Blijft werken als ik hem mishandel.

Verder zit er een zoot weerstandjes op, wat rommel om alles aan te sturen en te meten, en te zorgen dat het aan blijft.

Met een kleine aanpassing loopt de accu-spoof code hier prima op, en is het tijd om wat logica te gaan introduceren:

Meten is... benaderen
Deze Atmega is verre van ideaal, en kan van heel veel dingen, heel weinig. Het heeft TWI erin zitten, dus het kan met de notebook praten.
Er zitten 10-bit ADCs op, met een vrij brakke nauwkeurigheid. En ze zijn ook nog vrij traag.
Hij kan zonder kristal lopen, maar dan tot maar 8MHz.

Gelukkig kan je er toch wat mee. Het accu loggen leerde ons dat er toch maar één keer per seconde data opgevraagd word. Dat geeft ons een hele seconde de tijd, om gegevens te verzinnen. Dat is vrij lang.

Als eerste worden de cel spanningen gemeten, door middel van een paar weerstands delingen:
Cels spanningen over weerstanden

Omdat de Atmega er niet echt vrolijk van wordt als je hem met comma getallen laat rekenen, heb ik de weerstand waardes zo gekozen, dat hij ze makkelijk van elkaar kan af trekken om zo de individuele cel spanningen te verkrijgen. Dit maakt het ietsje minder nauwkeurig als zou kunnen, maar ach.. je moet iets.

V1 is de onderste cel, en komt als een kwart van zijn spanning (100k+33k/33k) binnen op een analoge ingang. Dat zou maximaal 4.2 Volt * 0.25 = 1.05 Volt zijn.
De tweede spanning is dus 2.05V en de 3e, wat tevens de uitgangs spanning is, is dan 3.15 Volt. Allemaal binnen de grens van 5V die maximaal op de ADC mag komen te staan.

Stel dat alle cellen exact 3.7 Volt zijn. Het getal waar de microcontroller dan mee moet gaan werken, is (1024/5) * (3.7/4). Namelijk het aantal bits, gedeeld door de referentie, maal de spanning op de ADC pin.
Dat zou 189 als getal opleveren.

Maar, uiteindelijk moet de Atmega het getal 3700 tegen de notebook gaan vertellen. Ongeveer 19,6 keer zo groot.

Om dit op te lossen doet hij een hele berg metingen. Die telt hij allemaal bij elkaar op, en deelt hij door een macht van 2, dit kan namelijk wel heel simpel. Op deze manier heb je niet alleen een simpelere berekening gedaan, maar de meting is ook nauwkeuriger geworden.

Als je er voldoende doet, nu iets van 180 ofzo, wordt in ieder geval het getal wat je produceert nauwkeurig genoeg. Het zou nu op 13 bits komen, en dat betekend dat je waardes op een millivolt nauwkeurig kunt representeren. (Ik zeg niet dat ze ook zo nauwkeurig zijn, maar de stapgrootte is nu klein genoeg.)

De stroom meting heeft een ander berijk, waardoor ik een ander aantal metingen moet doen. Het is een oplossing for now, maar verre van ideaal.

C: ADCTask
1
2
3
4
5
6
7
8
9
10
11
12
void ADCTask(){
    if (adc_reads < READMAX_V){
        vbat += (uint32_t)ADC_read(VBAT);
        v1 += (uint32_t)ADC_read(V1);
        v2 += (uint32_t)ADC_read(V2);
    }
    if (adc_reads < READMAX_I){    
        iin += (uint32_t)ADC_read(IIN);
        iref += (uint32_t)ADC_read(IREF);
    }
    adc_reads++;
}

Zoals je ziet, wordt alles gesommeerd. Als hij alle metingen genoeg gedaan heeft, worden alle waardes die over de SMBus opgevraagd kunnen worden ge-update:

C: Update
1
2
3
4
5
6
    vbat = (vbat >> 3);
    v1 = (v1 >> 3);
    v2 = (v2 >> 3);
    val_voltage = (uint16_t)vbat;    
    val_cell1 = (uint16_t)(v1);
    val_cell2 = (uint16_t)(v2-v1);


De stroom wordt op een soortgelijke manier gedaan, maar omdat de stroom ook negatief mag worden, gaat dit net ietsje anders.

Verder is er een functie die telkens kijkt of de spanning en stroom binnen bepaalde grenzen blijven, en als dat niet zo is... worden de FET's uit gezet:

C: Safety
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
void do_safety(){
    uint8_t flag = 0;        
    if ((val_current > 4000) || (val_current < (-4000))){
        flag = 1;
    }
    if ((val_current > 6000) || (val_current < (-6000))){
        flag = 1;
        safety_cnt +=5;
    }
    if ((val_cell1 > 4300) || (val_cell1 < 2800)){
        flag = 1;
    }
    if ((val_cell2 > 4300) || (val_cell2 < 2800)){
        flag = 1;
    }
    if ((val_cell3 > 4300) || (val_cell3 < 2800)){
        flag = 1;    
    }
    if (flag)
        safety_cnt++;
    if (safety_cntSAFECNT_MAX){
        BatteryOff();
    }
}

Al deze dingen worden grofweg 60 keer per seconde uitgevoerd. Als er dus echt te veel stroom loopt, 6A i.p.v. de 4A, moet hij sneller besluiten dat het afgelopen is.
Dit heb ik er zo ingezet, omdat de notebook wel eens heel kort een pulsje van veel stroom trekt, als je ineens het scherm aan doet, en de cpu 100% belast.

Hij kan nu gewoon netjes de halogeen lamp op starten, en als je hem kort sluit, gaat hij netjes uit. Precies wat een HP accu ook doet.

En als laatste willen we van de lader een stroom en spanning krijgen. Deze staat er nu ingesteld op 12500mV en 1500mA. En dan zoekt de lader zelf maar uit wat hij daar mee doet.

Tot mijn verbazing, werkt het. Hij laad op!

Ook de notebook vind dat het werkt.

Er wordt dus eerst continu 1500 mAh de accu in geperst, tot de door mij ingestelde grens van 12.5 Volt bereikt is. Daar gaat de lader niet overheen, met als gevolg dat de stroom langzaam afneemt.

Door hem in serie met mijn voltmeter te zetten, heb ik de stroom rond de c.a. 10 mA nauwkeurig kunnen kalibreren. Dat chinese ding zit er ook steeds 400 mA naast, en dat ding werkt.. dus 10mA zal de hardware niet wakker van liggen.

Nu heb ik drie oude celletjes aan elkaar geplakt, de spoof-accu een capaciteit van 0 gegeven, en het zaakje aan de lader gehangen. De totaal uit de hand gelopen opstelling ziet er dan zo uit:

Accu, accu-poofer, sniffer en algehele laad bende

En produceerde de volgende laad plotjes:
Laadgedrag van 3 cellen aan Spoofy.

En weer ingezoomd:
Laadgedrag van 3 cellen aan Spoofy. Ingezoomd.

Ja, de SOC en temperatuur is nog steeds constant. En het stukje code wat de mA's bij elkaar optelt verkeerde hier nog in een test-fase, en is stuk. Het gaat hier om de stroom en spanning.

Mijn multi meter kan de cel spanning maar in 2 decimalen weergeven. Toch, als je ze vergelijkt over het hele bereik, wijkt deze meting steeds niet meer dan 20mV af van wat de multi meter aangeeft.

Nu al, zou ik willen zeggen dat het een stuk beter is als de chineese accu van vijftig ballen. Het ziet er eigenlijk niet veel slechter uit als de orginele HP accu. En ik ben net begonnen!

En .... nu!!!???
Nu, kan je eigenlijk alles doen wat je wilt:

Lood accu's opladen.
Lood accu's ontladen.
De cellen vervangen, en de capaciteit instellen.
Er uberhaupt geen cellen in doen, maar hem gewoon aan een willekeurige spannings bron hangen.
Zonnepaneel eraan hangen.
Als tussen bordje gebruiken voor HP accu's die de weg kwijt zijn.
LiFePO4 cellen erin stoppen.
NiCd cellen erin stoppen.
....

Verzin het maar. Het kan. Je kunt een andere notebook van stroom voorzien, met een andere notebook. Je kunt je auto accu druppel laden... vanuit je notebook. Je kunt een mengtafel poweren... vanaf je notebook. Het ding is er namelijk voor gemaakt, alleen niemand heeft het gedaan.

Nu ik wat heb om mee te testen, ga ik daar wat mee aan de slag, en het hele ding een stuk kleiner maken. Het bordje is nu voor meer dan de helft bezaaid met dingen die niet nodig zijn, en dit kan makkelijk naar een formaat wat ik in een accu kan proppen.

Omdat de communicatie wel enigsinds aan een standaard voldoet, werkte dit ding op van alles: Een n600c van 1000 jaar oud, een TC1100 tablet PC, een nx7400. Die dingen zitten c.a. 10 jaar uit elkaar.

Ik denk dat ik dan iets ga maken, waar ik gewoon dit soort intens goedkope cellen aan kan hangen. 4400 mAh zou dan namelijk nog geen 20 Euro kosten. En wat ever dat wordt, ga ik hier met jullie delen.

Mocht iemand in de tussentijd meer in detail willen weten hoe dit ding werkt (Ik heb lang niet alles uit kunnen leggen.) code wil zien, of wil weten waarom iets is zoals het is. Laat maar wat horen. Ik sta open voor ideeën.

Volgende: Notebook Energie Verbruik 01-'13 Notebook Energie Verbruik
Volgende: Domme Batterijen - Verkeer(de)informatie 12-'12 Domme Batterijen - Verkeer(de)informatie

Reacties


Door Tweakers user sypie, zondag 30 december 2012 21:44

Jammer dat ik vorig jaar een accu aan gort had. Het ging om een Apple accu die prima uit elkaar te halen was. Het enige wat die gasten doen is de status van de cellen opslaan in hun IC's. Hierdoor kun je wél de cellen vervangen, wat niet zo heel lastig zou zijn geweest, maar blijft de status op "vervang spoedig" staan.

Het zou leuk zijn wanneer je bijvoorbeeld ook een Apple accu kunt voorzien van nieuwe cellen én iets kunt fabriceren waardoor/waarmee de IC's de status terug krijgen van "heej, ik ben een goede batterij".

Door Tweakers user Damic, zondag 30 december 2012 22:02

Ik heb de hele rim ram gelezen en begrijp veel, en ben eignelijk niet verbaasd dat je dat er allemaal mee kunt, gewoon wat "voorliegen" of echt zeggen van "ik wil laden", en de laptop zal je wel poeier geven.

Ben echt benieuwd naar die HD (high density) batterijen dat ze in de model bouw gebruiken, die zijn meestal vele malen beter dan die laptop accu's. Moet je dan niet oppassen voor die Lipo's die worden niet graag overladen.

Door Tweakers user Infant, zondag 30 december 2012 22:32

sypie schreef op zondag 30 december 2012 @ 21:44:
Het zou leuk zijn wanneer je bijvoorbeeld ook een Apple accu kunt voorzien van nieuwe cellen én iets kunt fabriceren waardoor/waarmee de IC's de status terug krijgen van "heej, ik ben een goede batterij".
Waarschijnlijk gebruikt die hetzelfde soort ICtje als in die van mij, een BQ20 nogwat. Het probleem daarmee heb ik de vorige post uitgelegd, en het komt er op neer: Er zit een wachtwoord op, en die geven ze je niet. :P

Als je die zou hebben, kun je hem weer als nieuw maken. Maar door nu dit ding te fabrieken, hoef ik niet voor elke notebook het wachtwoord te achterhalen.

Door Tweakers user justahuman, zondag 30 december 2012 22:54

Infant schreef op zondag 30 december 2012 @ 22:32:
[...]


Waarschijnlijk gebruikt die hetzelfde soort ICtje als in die van mij, een BQ20 nogwat. Het probleem daarmee heb ik de vorige post uitgelegd, en het komt er op neer: Er zit een wachtwoord op, en die geven ze je niet. :P

Als je die zou hebben, kun je hem weer als nieuw maken. Maar door nu dit ding te fabrieken, hoef ik niet voor elke notebook het wachtwoord te achterhalen.
Het wachtwoord van apple batterijen is een tijdje geleden gelekt, met wat google werk kan je hem wel boven water halen. Weet niet zeker of die ook voor de nieuwere modelen nog steeds geld maar zou wel werken.

zie http://betanews.com/2011/...rable-to-hacks-explosion/

Door Tweakers user Infant, zondag 30 december 2012 23:06

justahuman schreef op zondag 30 december 2012 @ 22:54:
[...]
Het wachtwoord van apple batterijen is een tijdje geleden gelekt.
Dat artikel had ik gezien ja. Ze hebben bij een een bepaalde serie de standaard wachtwoorden niet veranderd. HP bij de mijne helaas wel....

Dit artikel heeft het natuurlijk meteen over explosies en hacks, waar ik potentie tot reparatie en verbetering zie....

Door Tweakers user filenox, zondag 30 december 2012 23:29

Je bent een genie

Door Tweakers user SilentSimon, maandag 31 december 2012 00:53

Tweaking op zn best :) kudos

Door Tweakers user joopv, maandag 31 december 2012 02:06

Wow. Fantastisch stukje analyse en reverse engineering.

Door Tweakers user leenm, maandag 31 december 2012 08:55

Hulde, was weer zeer interessant _/-\o_
Zit hier ook achter een 8510w met een chinese accu, welke het een stuk beter doet dan het origineel (origineel was na 1 jaar en 2 manden defect :X ). Begin nu te begrijpen waarom.

Door Tweakers user Puch-Maxi, maandag 31 december 2012 17:16

Als je Lipo's gaat laden cq ontladen dan wil je er misschien wel een temperatuursensor aan hangen :)

Door Tweakers user Infant, maandag 31 december 2012 17:20

Puch-Maxi schreef op maandag 31 december 2012 @ 17:16:
Als je Lipo's gaat laden cq ontladen dan wil je er misschien wel een temperatuursensor aan hangen :)
Uiteindelijk wel denk ik. De Chinese namaak accu's vonden het niet zo nodig....

Door Tweakers user Lucky Luke 008, dinsdag 01 januari 2013 22:45

Leuk om te lezen qua techniek, minder leuk om te lezen dat al die laptops hun accu's zo vreselijk mishandelen... Verspilling van grondstoffen omdat iemand te lui is geweest 't laadcircuit fatsoenlijk te ontwerpen met als "gunstig" bij-effect meer verkochte accu's... O, en BOEM, natuurlijk. Dat is een beetje rot bij een schootcomputer...

Mijn klaptop (waar ik dit op type) is oud genoeg nog een nimh accu te hebben :). Je verhaal bookmarked voor geval ik daar 's mee wil babbelen.

BTW: dat ze per calibratiecycle maar een 512 mAh FCC erbij kunnen krijgen zit weliswaar in de weg als je die capaciteit weer flink wilt ophogen, maar als je vaak genoeg achter elkaar calibreerd moet het kunnen toch? (duurt alleen erg lang, of je zou 'm moeten kunnen foppen met een hoger shuntweerstandje, dat 'ie denkt dat de ontlaadstroom veel hoger is.) (Of je moet omlaag calibreren en underflowen. 1mAh... 0mAh... 65536mAh... Gaat je laptop alleen niet meer op tijd in slaapstand als 'ie leeg is.)

Mooi stukje werk, erg interessant :) ben benieuwd naar het vervolg :)

Door Tweakers user Infant, dinsdag 01 januari 2013 23:06

Lucky Luke 008 schreef op dinsdag 01 januari 2013 @ 22:45:
BTW: dat ze per calibratiecycle maar een 512 mAh FCC erbij kunnen krijgen zit weliswaar in de weg als je die capaciteit weer flink wilt ophogen, maar als je vaak genoeg achter elkaar calibreerd moet het kunnen toch?
Met wat geluk wel. Het monster aan het begin van dit artikel had nog een vrij nieuw printje, en na een paar keer kalibreren wilde die ook tot zijn originele capaciteit, maar niet er voorbij.

Ik heb nu alleen maar oude en verwarde printjes liggen, en ik wil weer een accu maken wat 2 a 3x de originele capaciteit heeft.

Door Tweakers user Mafketel, vrijdag 18 januari 2013 10:40

Misschien dat je hier nog een unseal ww kan vinden?
http://be2works.com/
Wat ik begrijp is dat ze er een paar hebben maar zeker niet allemaal.

Overigens is het grappig dat ik nu toevallig jouw blog zie daar mijn mid 2007 macbook met lion opeens is gaan klagen dat ik mijn accu naar een service point moet brengen.
Onder windows werkt het geheel nog prima ;)
Ik heb net de voltages van de cellen gemeten(slechte multimeter maar 4.13 4.13 en 4.13/4.12) en die zijn netjes.
Ik hoop trouwens dat de de 6 cellen 2 parallel en die 3 in serie zitten aangesloten anders is het meten niet te doen.
Overigens ben ik niet de enige met deze melding maar een oplossing heb ik nog niet gezien.

[Reactie gewijzigd op vrijdag 18 januari 2013 12:37]


Door Tweakers user Infant, vrijdag 18 januari 2013 12:46

Mafketel schreef op vrijdag 18 januari 2013 @ 10:40:
Misschien dat je hier nog een unseal ww kan vinden?
http://be2works.com/
Ik heb er in dat programma naar gezocht, ze staan er nou niet bepaald plain text in.

Alle notebooks hebben 3 of 4 cels accu's, met een paar ultra kleine notebooks zoals de eerste eeepc, met 2-cels accu. Dus als er dan 6 in zitten, is dat inderdaad 2 Parallel en 3 in Serie.

Het zou kunnen dat jouw cellen ook echt kapot zijn, kun je zien hoeveel ontlaad cycli ze gehad hebben of hoe oud ze zijn?

Door Tweakers user Mafketel, zaterdag 19 januari 2013 13:45

Infant schreef op vrijdag 18 januari 2013 @ 12:46:
Ik heb er in dat programma naar gezocht, ze staan er nou niet bepaald plain text in.
Had ik ook niet verwacht en ik had op het forum er nog een beetje naar gezocht en kon ook niet direct een antwoord er op vinden.
[...]
Het zou kunnen dat jouw cellen ook echt kapot zijn, kun je zien hoeveel ontlaad cycli ze gehad hebben of hoe oud ze zijn?
Oud zijn ze zeker mid 2007 tot nu is bijna 5 jaar. 170 cycli is duidelijk niet genoeg daar ze zeggen dat deze accupacks op 80% ontworpen worden na 300 cycli.
Voltages van de cellen zegt eigenlijk wel genoeg, maar ik zal ze nog een keer meten als mijn macbook geen standby stroom er meer uit kan halen.
Dan kan ik zien hoe gelijk de cellen zijn vol en leeg. Als dat ok is dan is het pack zeker niet kapot(doe er nu overigens nog bijna 1,5 uur mee voordat ze leeg zijn dus)
Verder absoluut geen bolling op de cellen, waar sommige mensen met een macbook last van hebben gehad.

Overigens zou ik persoonlijk nu je oude celletjes bijna vol zijn de cellen balanceren.

Door Tweakers user ThinkPad, donderdag 13 juni 2013 11:17

Interessante blog! Ben er een jaar of 3 terug ook mee bezig geweest, EEPROM's resetten na het vervangen van de cellen voor nieuwe, maar het bleef toch altijd een gepruts. Kreeg de batterij indicator nooit weer helemaal correct.

Reageren is niet meer mogelijk