Meuk die gemod wordt met andere meuk. Of meuk die stuk was, en nu weer werkt.

Slimme Batterijen

Door Infant op zaterdag 25 mei 2013 12:25 - Reacties (18)
Categorieën: Gemod / Gefix, Notebook: Accu's bouwen!, Views: 10.946

Volgorde:
Domme Batterijen
Domme Batterijen - Accupologie
Domme Batterijen - Verkeer(de)informatie
Domme Batterijen - Spoof
Slimme Batterijen

In de vorige posts heb ik een poging gedaan uit te leggen wat allemaal gebeurt in de accu van een notebook. Het enige wat jouw als gebruiker in de weg staat om gewoon een setje AA batterijen in je laptop te steken is een klein stukje (ongedocumenteerde) hardware en software.

Als je dit zou hebben, heb je in principe alle vrijheid om je notebook naar hartenlust op elke willekeurige accu of stroombron aan te sluiten, zolang het voldoende vermogen kan leveren.

Mijn doel was nu als eerst om gewoon de interne accu na te bouwen.

Het moment dat ik begon, stopte mijn Chinese namaak accu spontaan met werken. Hij zag de bui al hangen. Des te meer reden om aan het werk te gaan.

Eigenlijk elke notebook accu bestaat uit de volgende onderdelen:

- Een willekeurig aantal cellen.
- Een stuk plastic.
- Een connector.
- Een stuk elektronica.
Cellen
De cellen in mijn notebook zijn een standaard maat, die vooral in kleinere notebooks wel eens gebruikt wordt. Maar, als notebook fabrikant kun je zelf bedenken wat je in je notebook propt, en welke standaarden je gaat negeren.

Interessant genoeg gebruiken ze allemaal TI chipjes. Allemaal. Kennelijk gaat daar nog wel eens wat fout mee. Van het hele scala aan problemen wat ik heb waargenomen, is de interessantste waar het chipje zegt:

"Ik heb geen zin meer."

Voor de onwetende en spaarzame gebruiker betekent dit:
- Nieuwe accu kopen bij een Chinees voor zo min mogelijk.
Voor een bedrijf betekent dit:
- Nieuwe accu kopen... bij een bedrijf, het liefst in het land waar we nu zitten.
Voor de monteur van HP betekent dit:
- "Voor 150 Euro heeft u een nieuwe."

Voor mij betekent dit: Gratis accu's.

Zo heb ik bijvoorbeeld:
Van alles en nogwat.Uit een dell D430.
Van links naar rechts: 73Wh cellen uit een Macbook Pro, 44Wh uit een Dell D630 DVD-bay, 55Wh Hoofdaccu uit een HP 6550b. En, dezelfde cellen als mijne: Een accu uit een Dell D430.

Al dit spul lag bij het elektronisch afval (Niet het klein chemisch afval.... waar het hoort.) en is eigenlijk nog prima in orde, als je de elektronica weg sloopt.

Wat ik nu nodig heb, is een behuizing.
Behuizing
Sinds ik nog 0 ervaring had met dingen 3D printen, leek dit me een nuttig experiment.

Om te beginnen heb ik het hele zaakje in Solidworks gezet, zodat de behuizing los besteld kan worden bij Shapeways.

Zij kunnen vrij nauwkeurig en ook redelijk goedkoop de meest gekke vormen voor je maken.
Aangezien je per hoeveelheid gebruikt materiaal betaalt, heb ik de wanden vrij dun gehouden. 1mm in dit geval. En terwijl ik toch bezig was, heb ik de kleine plastic inkepingen die de accu op zijn plek houden er ook maar in getekend, gewoon.. omdat het kan.


Solidworks render van een 2730p Tablet accu.
Plastic houder met cellen, connector en printje.


Eigenlijk was het lastigste om uit te vinden welke connector HP gebruikt voor zijn accu's. De notebooks uit deze serie gebruiken allemaal dezelfde aansluiting, maar nergens stond een partnummertje waar ik iets aan had.
Bij toeval kwam ik deze tegen. De zwarte connector is een TE Connectivity stekker, nummer 5787253-1. En die zijn zo aardig om naast een datasheet, een 3D model ter download aan te bieden. Is dat niet geweldig?

Helaas voor mij, zijn die vrij prijzig als je er maar 1 of 2 wilt, een eurotje of vier per stuk, dus mijn exemplaren worden uit defecte accu's gesloopt.

Verder heb ik de case getekend aan de hand van meten met een schuifmaat.

Terwijl dat zaakje naar de fabriek in Eindhoven gaat, was het tijd om het printje zo miniem mogelijk te krijgen.
Electronica
De elektronica had ik al werkend, alleen nog niet op een formaat dat het in deze accu ging passen.

De accu is maar iets van 12 mm dik, en er is weinig lucht aanwezig voor mij om iets in te proppen.

Het printplaat ontwerp was 50 x 50mm en had een hele andere functie, en is nu gereduceerd tot 10 x 50mm:

Gewoon heet wassen...
Van links dus, naar rechts.

Wat heeft het nu nog nodig?

Code, met een paar (hierbij gedocumenteerde) fratsen.

Het is super interessant wat zo'n accu allemaal doet. Ik ken zo ondertussen het 60+ pagina's tellende datasheet uit mijn hoofd. En er zijn nog veel meer varianten, die allemaal ongeveer hetzelfde werken.

Ik ga proberen uit te leggen, wat het probleem van een originele accu is, en hoe ik dat op los:

Stel, de HP accu is de tel kwijt. Hij weet niet meer hoeveel energie er in zit, en roept maar wat. Hij is bijvoorbeeld van mening, dat er nog maar 2000 mAh in kan, terwijl er in werkelijkheid nog 3700 mAh in kan.

Mijn accu kan dit ook, want ik schrijf de code.
Ik zet in de code dat hij moet aangeven dat er 2000 mAh in kan. Ik weet zelf ook niet wat deze cellen kunnen, dus ik moet wel een gokje doen.

Vervolgens laat ik m'n notebook bitcoins minen... (wat energie gebruikt) en op een gegeven moment ben ik 2000 mAh verder.

In het geval van de HP accu, zou deze tegen mijn notebook, en dus Windows, zeggen:

"Jow gast, ik ben leeg."

Windows en elk ander OS, gaat in al zijn wijsheid netjes uit, of in slaapstand.
Dit kun je omzeilen. In Windows 7 moet je daarvoor een klein beetje rommelen. Prima.

Maar stel dat je deze half lege accu in je notebook stopt, terwijl hij uit staat.... wie maakt er nu uit of de notebook aan gaat?

Niet het OS, want die draait niet.

Het IC in het moederbord, wat met de accu praat, krijgt van de accu te horen dat hij leeg is.
En van een lege accu, kun je niet opstarten... dus, de notebook mag niet aan.

Voila. Dit is het probleem.

Wat deze nep accu nu doet, is gewoon nooit zeggen dat hij leeg is.
Als hij denkt dat hij leeg is, zegt hij tegen de notebook dat er nog een klein beetje prik in zit. In plaats van 100-0%, gaat deze van 100-10%.

Ik kan nu nog steeds zonder hacks Windows netjes laten afsluiten, door te zeggen: "Als de accu minder dan 11% is, afsluiten." Maar ik kan nu ook altijd de notebook aan zetten, zelfs als mijn accu in de war is. Want de accu zegt dat er nog 10% in zit. Meer dan voldoende om van op te starten.

Ik kan er ook voor kiezen om gewoon tot het bittere einde door te gaan, en dat betekent in dit geval dat ik nog 1700 mAh eruit kan zuigen... voordat de cellen echt leeg zijn.

En dan valt de notebook zonder enige waarschuwing uit.

Voor de code in mijn accu is dit de cue om het tellertje op 0 te zetten. Voor de originele HP accu, betekent dit een van de volgende dingen (meerdere opties mogelijk):

- Niks.
- Een kleine correctie in de capaciteit.
- Total mayhem.
Meanwhile...
Door de magie van editing, is het weken later ... en is de shit gearriveerd:

Lege behuizing.Groot, kleiner, kleinst.
Links: het bakje. Rechts: het kleine printje onderin.

Het printje geloofde ik wel, daar heb ik er ondertussen al genoeg van ontvangen zonder problemen. De behuizing was nieuw voor mij. Het verbaasde me dat zelf alle hoekjes en uitstulpingen die de accu op zijn plek moeten houden, allemaal aanwezig waren... en na een klein beetje tweaken met de soldeerbout... ook passen!

Na het op solderen van alle onderdelen, ziet het printje er zo uit:

Er zit ook nog wat grut aan de achterkant.
Om een gevoel te geven voor de afmeting, ligt er een AA batterij naast.


Nu was het de cellen netjes los peuteren uit in dit geval een Toshiba accu (Ja... geen enkel merk blijft gespaard.), en in de case leggen. (Niet proppen, ruimte zat!)

Ze voelen al werk aankomen...


De hele bende aan elkaar knopen, kleine beetje tape toe voegen...

Tadaa!


En na wat testen, kan hij waar hij hoort:

In zijn holletje.


Om hem dicht te maken, kan er een stukje plastic op geplakt worden, dat stelt niet zo veel voor. De accu is nu ook weer te verwijderen, net als de originele.
Ik kan hem met een andere lader opladen, en de cellen balanceren mochten ze uit balans raken.
En nu?
Nu is het wellicht interessant om een kosten plaatje te zien, voor dit exemplaar. (in oplages van 1 dus):

- Printjes: 15 Euro voor 10 stuks, inc. Verzending.
- Elektronica: 13 Euro. (ex connector).
- Case: 35 Euro inc. Verzending.
- Cellen: 0 Euro, maar als je ze zou moeten kopen, c.a. 5 Euro per stuk = 30 Euro-ish.
- Gruwelijk veel tijd (ook inc. Verzending).

Het voordeel komt natuurlijk als deze cellen versleten zijn... want dan hoef ik er alleen nieuwe in te doen (die dan ongetwijfeld ook nog bij het afval liggen) en verder helemaal niks. Dat is dus 0 Euro tot in het einde der tijd.
Het nieuwe model van deze notebook, is de 2760p. En die gebruikt precies dezelfde accu.

Ik ben nu een ding aan het bouwen, die onder de notebook kan en hem onder een hoek plaatst. Dat typt fijner, en zorgt voor iets betere koeling.
Wat hier in komt, zijn houdertjes voor 18650 cellen.

Die kun je er dan gewoon in klikken zoals je AA batterijen in ELK ANDER APPARAAT IN HET UNIVERSUM zou klikken. Als die leeg zijn, switch de notebook automatisch naar de interne accu In de tussentijd kun je nieuwe 18650's erin prikken... (of niet) en dan switcht hij daar weer naar terug, en verteld hij het OS een educated guess van de capaciteit, met de 10% als ondergrens.. zodat de notebook pas de interne accu aanbreekt als het echt nodig is.

Ik snap werkelijk niet, anders dan dat alle fabrikanten geldwolven zijn, waarom niemand dit ooit heeft gemaakt... ik wil gewoon losse cellen in mijn notebook kunnen proppen, terwijl hij aan staat. Ben ik de enige die daar last van heeft?

Dooie Fiets - Vervolg

Door Infant op zondag 7 april 2013 17:12 - Reacties (25)
Categorie: Gemod / Gefix, Views: 48.069

Voor de mensen die, net zoals ik, nog nooit een eclectische fiets gezien hebben, en wel eens benieuwd zijn hoe zo'n ding werkt, is deze ellenlange post wellicht interessant.

Dit is een vervolg op het intro van een paar dagen terug, en het volgende deel staat hier: Banana?

Klik!
Overzicht van de elektronica in een elektrische fiets.


Als je op het plaatje klikt, zie je een fiets die ongeveer gelijk is aan wat ik gescoord heb. (Mijne heeft geen versnellingen... bijvoorbeeld.)

In het eerste plaatje staan drie groene vlakken. Bij mijn fiets bevind de motor zich achterin, de accu zit in het frame weg gewerkt, en op het stuur zit een klein display met twee knopjes en wat tellertjes. Er zijn ook fietsen met bijv. de motor voorin (geel) en de accu op het bagage rek. Er zijn zoveel fietsen, dat elke willekeurige combinatie denkbaar is.

Nou is deze fiets stuk, maar de vrij korte handleiding geeft duidelijk aan wat het zou moeten doen.

De gedachte achter deze fiets is dat als je begint met trappen, de motor mee 'trapt'. En dat maakt fietsen tegen de wind in, of een heuvel op, een stuk makkelijker.

Deze heeft die standen, Eco, Normaal en Power. En die hebben eigenlijk alleen betrekking op hoe hard de motor dus mee trapt. Hoe meer je zelf doet, hoe langer de accu mee gaat.

De fiets heeft ook twee trommel remmen, voor en achter. Met van die knijpertjes aan het stuur. En uiteraard twee lampen. Eigenlijk dus ook zonder elektronica, een prima fiets.
Waarom doet ie ut niet?
Als je wat rond leest, kom je er achter dat exact dezelfde elektronica in andere merken, o.a. Sparta, Koga Miyata, en Hercules, zit.
Als deze fietsen uiteindelijk stuk gaan, is de klachtomschrijving op fora meestal hetzelfde. Hij deed ineens niks meer.

Er zijn een paar mensen die na het kopen van een nieuwe accu, hun oude hebben open gemaakt. Bijna allemaal vertellen ze dat er corrosie op het printje in de accu zat. Meestal was er met de cellen zelf niks mis.

Dus, ik kocht deze fiets met de verwachting dat er een printje in de accu zou zitten die overleden is, en dat de cellen nog wel in orde waren.

Nou, openmaken die handel! Na wat gepeuter (wat vrij eenvoudig gaat), heb je een gigantische banaan-vormige accu in je handen, met wat stekkertjes er aan:

Grote zwarte banaan!
Een stock foto...


De hierop volgende chirurgische-operatie duurde wat langer, want de randjes zaten goed aan elkaar geplakt. Maar uiteindelijk wil het:

Foto van de accu cellen.
Accu na het open maken... en nog wat andere zooi.


En jawel, in deze accu zit exact hetzelfde PCBtje als ik verwachtte. En deze had duidelijk een klein beetje teveel vocht gezien:

Gatsie!


Er zat helaas geen lader bij, maar dat geeft niet. Ik heb namelijk nog een stapeltje 1000VA UPSsen zonder accu's liggen. Normaal gaan daar 2 loodaccu's in, maar hier zijn ze ook zeer content mee:

NiMh accu en een 200W lamp
De UPS vind alles best. Hij snapt toch niet dat het eigenlijk een fiets-accu is.


Helemaal aan het einde van deze post, staan foto's van de voor en achterkant van dit PCBtje, en een lijstje van de IC's die ik na wat moeitje heb kunnen aflezen.

Vanuit dit printje gaan 3 dikke dropveters naar de motor toe. En die zijn aardig logisch kleur gecodeerd, en gelabeld:
  • BOW-PWR - Rood
  • BOW-GND - Zwart
  • DAT - Geel
Zwart hangt uiteraard direct aan de min van de accu. Geel gaat richting de motor, en tevens naar het schermpje op het stuur. Rood kan d.m.v. van een relais geschakeld worden.

Of dit relais aangaat, besluit waarschijnlijk het printje zelf. Er zit ook een stroom-meet weerstand op. Dus dit printje zal kijken of de stroom en spanning die de accu levert, binnen acceptabele niveaus ligt. Als dat niet zo is, krijgt de motor geen prik.

Maar... Als de motor alleen aan of uit gezet kan worden.... hoe kunnen er dan 3 snelheid standen zijn?

Wat gesuggereerd wordt, is dat geel een 1-wire bus is, die naar de motor en naar het display gaat. Zo kan het display eigenlijk alleen als input fungeren om tegen de motor te zeggen hoe hard je wilt, en kan het accu printje tegen het display vertellen hoe vol de accu nog zit.

Dus, er zit duidelijk iets in de motor, wat de snelheid kan regelen.
De motor
Omdat dit geen cursus fietsen maken is, heb ik daar ook niet echt plaatjes van geschoten. Dus, vertrouw me als ik zeg, dat het achterwiel er vrij gemakkelijk af gaat.

De motor heeft aan weerszijde een aantal kruiskop schroeven zitten. Aan de ene kant verdwijnt het eerder beschreven 3-aderige draad langs de as de motor in, en aan de andere kant zit alleen een aluminium deksel met daarin dus een aantal schroeven.

Dat zag er eenvoudig uit om los te maken, dus daar begon ik. Je moet met redelijk wat kracht de deksel los peuteren. Hij klemt namelijk om een lager heen, maar uiteindelijk zie je dan dit:


Oeh... een PCBtje!Oeh, nog een PCBtje!


Nu wordt het een beetje duidelijk wat er in zit. Het PCB aan deze kant is bevolkt met een MC68HC908MR32 microcontroller, en er verdwijnen drie draadjes de motor in gelabeld HALL1 tm 3.
En het tweede google resultaat is een pdfje over een Control Board.

En de introductie daarvan leest:
Motorola’s embedded motion control series MR32 motor control board is
designed to provide control signals for 3-phase ac induction, 3-phase brushless
dc (BLDC), and 3-phase switched reluctance (SR) motors.
Nou, dat lijkt me duidelijk. In het Nederlands is deze motor dus een 3-fase borstelloze DC motor.

Ik zou graag een linkje naar een wiki artikel plaatsen.... maar eigenlijk wordt je daar niet echt veel wijzer van.
Het is dus niet dit.
Deze vier regeltjes heb je ook niet zo veel aan.

Het is er zelfs zo sneu mee gesteld, dat ik moet concluderen dat het Duitse wiki artikel het beste is. (Er staat zelfs een plaatje van een fiets bij.)

Om meer duidelijkheid te creëren, gaan we verder met open slopen.

Omdat er flinke magneten in zitten, moet er aardig wat kracht uitgeoefend worden om het misbaksel ervan te overtuigen dat hij uit elkaar moet. Maar uiteindelijk....


Ploep!
Donut.


Wat je dan over hebt, is het wiel, met een ring van magneten aan de binnenkant.

Wiel met magneten.
Enigszins aangevroten magneten.


Het zit er naar uit dat die begonnen zijn zichzelf op te eten. De coating van de magneten is op sommige gaan los gelaten. Die (metalen)coating is gedurende gebruik tot stof vermaalt, en dat zit nu overal tussen.

De andere kant zit er dus ook uit alsof het net een week op een kurkdroog (metal)festival heeft mee gemaakt:

Bah!
"Dat lijkt wel een desert, Storm."


Ik kan het nu toch niet laten om te zeggen: What the fuck.

Geen 1 van de drie PCB's die ik ben tegen gekomen had enige vorm van water afstotende coating. Hoe moeilijk was dat nou geweest? De motor heeft ook geen enkele vorm van vocht wering. Een o-ringnetje had voor die 2000 ballen toch wel gekund?

En verder is het idee van een borstel loze motor, dat er geen borstels zijn om koolstof-stof door je motor heen te blazen. Maar dat is nu vervangen door (waarschijnlijk) nikkel-coating-stof?

Ik hoop dat bij aanschaf van zo'n fiets, aanbevolen wordt niet in de regen te gaan fietsen.

Anyhow. Op het laatste PCBtje komt de aap uit de mouw, want hier zit het volgende IC'tje op: een Intersil HIP4086AB.

En dat is, volgens de datasheet, een 80V, 500mA, 3-Phase MOSFET Driver. En de typical application ziet er zo uit:

HIP4086 typical application


En dat is dus ook hoe die hier toegepast is. De 6 mosfets zijn IRF3205. Voor de rest zit er aan de onderkant een berg diodes, en nog wat los grut. Een 12V regelaar om VDD te maken. En dat was het.

Al het koperdraad wat je ziet, zit aangesloten in een zogenaamde Y, of ster configuratie.. Door de mosfets op een handige manier aan te zetten, kan de stroom beide kanten kanten op door de drie windingen lopen.

Als je dus wilt dat de motor gaat draaien, duwt één winding de magneet van zich af, terwijl de tweede hem aantrekt. De derde duwt hem weer af. Dit proces wisselt zich steeds af, en de stroom door de spoelen zou er dan met een beetje fantasie ongeveer zo uit moeten gaan zien:


Net als bij een 3-fase AC motor.


Als ik zou naar alle componenten kijk, is er niet echt een reden dat dit ding persé 24V nodig heeft. De driver vind alles tot 80V prima. De mosfets gaan stuk boven de 55V, en de condensator vind alles boven 50V niet leuk meer.

Eigenlijk kun je dus, net als bij laptops, een redelijk uiteenlopende spanning aanbieden. Ik zou hier zeggen dat alles tussen ongeveer 15V en 40V prima gaat werken.

Stel dus dat de accu echt versleten zou zijn. Een goedkope (maar niet passende) oplossing zou dan bijv. 3 stuks 7Ah loodaccutjes (c.a. 50 Euro inc. verzending) kunnen zijn. Je hebt dan ongeveer dezelfde capacitiet, c.a. 250Wh. En dus weer dezelfde actieradius. (De accu die erin zit is 24V, 10Ah. Dus 240Wh).
Wat kan het in theorie?
Nu het duidelijk is wat er in huis gehaald is, kun je gaan fantaseren wat het allemaal kan. De motor is vrij efficiënt, kan kortstondig een stuk meer vermogen dan 250W leveren. (Denk aan 500-1000W).
De motor kan voouit/achteruit, hij kan zeer efficient als dynamo dienen. Je zou dus als je wilt volledig electrisch kunnen remmen, en een vrij groot gedeelte van die energie kan hoppa, terug de accu in. Dat zou betekenen dat je nooit de mechanische remmen hoeft te vervangen.

Je kan hem als hometrainer gebruiken om 200-300W het stopcontact terug in te persen. (daar heb je eigenlijk alleen een extra omvormer voor nodig)

Je zou een snelheid kunnen instellen, bijv. 16.7km/u (of een ander willekeurig getal, you name it.), en dat houd dit ding dan keurig netjes aan. Je kunt hem gebruiken om je notebook mee op te laden als je op fiets vakantie gaat. Heck, als je 3 70Wh notebook accu's hebt, kun je die gewoon om op te rijden.

Dit moet met deze elektronica al te doen zijn.

Ik vind de motor best leuk in elkaar zitten. Er zit een strain-gauge om de as heen. Hiermee kan bepaald worden hoeveel moeite jij aan het doen bent, en dus of er trap ondersteuning moet komen. D.m.v. de 3 hall sensoren kan de snelheid bepaald worden. (En die wordt vervolgens door het gele draadje heen, naar het display gesmeten.)
Deze hall sensoren zijn trouwens nodig om bij stilstand, of heel langzaam rijden, te kunnen zien waar de magneten zich bevinden ten opzichte van de windingen.

Verder zou je bijvoorbeeld een rem hendel kunnen hebben, die bij harder knijpen steeds harder elektrisch remt. Of je kunt in stellen dat je helemaal niet ondersteund wilt worden, maar steeds 10, of 20 of 100W de accu in wilt pompen.

De verlichting kan met een knopje aan/uit, en werkt gewoon van de accu of motor. Dus je hoeft ook nooit met een losse dynamo te kloten.
Waarom doet het dat niet dan?
Twee redenen: Wij hebben in Nederland een wet. Omdat fietsen levens gevaarlijk is, mag je zonder rijbewijs, helm, verzekering en kenteken alleen op een electrische fiets rijden als die:
  • Maximaal 250W kan leveren.
  • Alleen hulp bied. Dus als jij stopt met trappen, moet de fiets stoppen met helpen.
  • Maximaal 25 km/h kan.
Dat laatste kan ik mee leven, dat eerste lijkt me ook prima, maar de tweede regel is een beetje jammer.

De rest die ik zomaar oplepelde, doet het niet omdat ze geen zin hadden om dat te maken.... denk ik.... Het achterlampje moet bijvoorbeeld een los batterijtje in.... WHY!!!!

Accel group, het overkoepelende holding waar Batavus en andere merken onder valt, heeft kennelijk een hele berg triviale patenten liggen. De communicatie in deze fiets, tussen motor, accu en display... is dan ook goed dicht getimmerd. Niemand mag er aan zitten of iets aan veranderen. Dus elk wissewasje moet je voor naar de dealer toe, die het eigenlijk ook allemaal niet zo goed weet.

Er is kennelijk ook besloten om alle productie naar China te outsourcen. Altijd een goede beslissing als het gaat om betrouwbaarheid, milieu-vriendelijkheid, onderhoudsgemak en aanpasbaar-heid.
Conclusie:
Ik ga me niet vervelen deze zomer. Voor nu heb ik hem netjes schoon gemaakt...

Shiny!


... en zonder electronica weer ingepakt. Alle crunshy geluidjes zijn nu weg, en je kunt lichtjes afremmen door 3 draadjes tegen het frame aan te drukken. (Dat is grappig.)

Ik moet zeggen dat hij een stuk lichter, en beter rijd dan mijn vorige fiets.

Ik ga nu verzinnen hoe ik dit kan combineren met het HP accu printje....waar ook nog binnenkort een post over zal verschijnen....
Het archief
Hieronder foto's van de ingewanden van een Batavus Padova Easy. De ronde PCB's komen uit de toprun motor, de hub motor die zich in het achterwiel bevind.


PCB uit de accu Control PCB uit de motor Driver PCB uit de motor
De drie PCBs. Klik voor voor grotere foto's van beide kanten.


De kleine IC's op het accu PCB zijn lastig te lezen, maar er staat op:

Atmega32L
MCP6071 (1 aan elke kant)
LM393N
LM293
En een 5V regelaar.

Notebook Energie Verbruik

Door Infant op zaterdag 26 januari 2013 21:52 - Reacties (7)
Categorie: Gemod / Gefix, Views: 4.793

Het leek mij interessant om eens naar wat instellingen op mijn notebook te gaan kijken, en wat voor een effect die op het energie verbruik hebben.

Ik ben sinds kort bezig om een accu voor mijn notebook te maken, met natuurlijk als doel om de door HP geclaimde accu duur van 6.5 uur ook daadwerkelijk te halen.

En nou kan je wel een reusachtige accu in elkaar flansen en onder je notebook bengelen, maar als er ook bespaard kan worden op verbruik, is dat uiteraard ook een stap die genomen moet worden.

Voormijzelf is dit blog een stukje documentatie, gewoon omdat ik alle mooie plotjes anders weg zou smijten en achteraf niet meer weet wat nou bij wat hoorde. Als er iets niet duidelijk is, hoor ik het graag.

Waarschuwing: Het is weer heel lang, en veel. Soms worden dingen met elkaar vermenigvuldigd! Of er worden conclusies getrokken! Ik stel dus voor, dat je eerst een kopje koffie zet.

Ik ga vandaag niks (extra) open maken. Alle besparing wil ik gaan behalen door knopjes in te drukken, en muizen te bewegen, in zeer specifieke volgorde.

Er is op het internet uiteraard wel het een en ander te vinden. Undervolten is het eerste wat de binnen schiet, en is prima in software te doen. Het heeft wel wat haken en ogen, niet elke notebook werkt stabiel bij minder spanning.

De meeste artikelen die ik kon vinden over undervolten op notebooks, lieten zien wat voor een effect dat op de temperatuur heeft. Het doel was daar ook om het ding stiller en koeler te maken, maar ik was meer geïnteresseerd wat voor een impact het op m'n batterij heeft. Een meting die ik vrij weinig kon vinden.
Meting
In principe is energie besparen heel eenvoudig. Je zet gewoon alles uit wat je niet nodig hebt. Als je in je huis energie wilt gaan besparen, is dit ook een makkelijk punt om te beginnen, en zo werkt het in een notebook dus ook.

Nou ben ik hier in het verleden al wat mee bezig geweest, maar toen beschikte ik niet over een mooi stuk hardware wat mijn notebook van prik kon voorzien, en die prik tegelijkertijd kon meten:
Notebook op een (overkill) desktop voeding.
De notebook is nog steeds tevreden, en er volledig van overtuigd dat hij op een joekel van een originele HP accu loopt, met nog 1 jaar fabrieks garantie...

Bij gebrek aan iets beters, gebruik ik dit ding om elke seconde twee belangrijke meet waardes aan de PC door te geven: De spanning en de stroom, samen het door de notebook opgenomen vermogen.

Beide zijn 'gekalibreerd' tegen mijn enige el-cheapo multimeter, een DT9205A. De "meet weerstand" die zichzelf had gemanifesteerd in de vorm van een stukje koper draad uit de vorige post, is nu vervangen door iets wat ook echt een weerstand is.

Om te beginnen, wanneer de notebook in slaap modus staat, zegt de multimeter dat er c.a. 40mA aan stroom loopt, bij een spanning van 12.35 Volt.

En de plotjes die de nep-accu uitspuugt, zeggen ongeveer hetzelfde:
Verbruik in slaapstand
Spanning is in blauw (eenheid op de linker Y-as). Stroom is in rood (eenheid rechter Y-as). De X-as is tijd in seconden. Negatieve waardes voor stroom betekend dat de 'accu' stroom levert.

Nou denk je natuurlijk: "Wat een brakke plotjes. They're all over the place!"

Maar dat valt wel mee:

Het totale meet bereik van dit ding 0 tot 20.000 mV, en -5000 tot 5000mA is. De rode en groene lijn zijn dus erg ingezoomd.

Notebooks gebruiken op geen enkel moment evenveel stroom. Je verwacht dus wat schommelingen, en ik doe metingen daarom ook een paar minuten.

Als we de spanning met de stroom vermenigvuldigen, krijgen we het vermogen. Ook hier betekend een negatief getal dat de nep-accu vermogen aan het leveren is, aan de notebook.
Het vermogen staat links in het groen weergegeven. Als we de schaal op 0 tot 20 Watt zetten, zie je dat het een vrij nette rechte lijn is.

Ik durf dus nu toch wel te zeggen dat mijn notebook in stand-by 0.5 Watt gebruikt.

Nu ga ik eerst een kijken wat het ding gebruikt, in de configuratie zoals ik hem al een tijdje dagelijks gebruik, namelijk:

- Windows 7 Enterprise N x64 SP1
- Scherm op 50% helderheid.
- WLAN knopje uit.
- Windows Power Plan op "Balanced (recommended)"

De eerst volgende meting is dus wat hij verbruikt, als ik hem gewoon uit m'n tas haal, en aan zet.
Besparen...
Nadat hij opgestart is, start ik een meting. Eens kijken wat dit voor een grafiekjes oplevert:
Idle in desktopNotebook idle in desktop.

Hm... leuk, op die gigantische piekjes na.... wat zouden die zijn?

Ik heb zo'n donker vermoeden dat er een applicatie iets staat te doen...

Op het eerste gezicht lijkt het van niet, maar na een tijdje wachten geeft de taskmanager-plot dinges het volgende:

Task manager plaatje
Notebook 'idle' in taskmanager.

Jahoor, er staat af en toe een programma doorheen te ronken. De schuldige is een programma genaamd sqlservr.exe. Wat is het? Heeft iets met een SQLServer te maken? Dat heb ik helemaal niet nodig. Welke randdebiel heeft dat op mijn notebook gezet?

Wat blijkt... die randdebiel was ik zelf...

Ik heb namelijk Visual Studio 2010 op mijn notebook geïnstalleerd, en die komt gratis met dit soort rommel die kennelijk ook draait als je Visual Studio niet gebruikt. Dank u wel Microsoft voor weer een prachtig stuk nutteloze software.

Door alleen die applicatie (en twee gerelateerde services) dood te maken, ziet het zaakje er volgens de meting al een stuk beter uit:
Hetzelfde, maar dan zonder sql
Notebook idle in desktop, minus één tamelijk lompe applicatie.

Wauw! Nu al een halve watt besparing en de uitschieters van soms wel 8 extra Watt ook weg. WINST!
Zonder (voor mijn beleving dan) iets van functionaliteit in te leveren!

Dat was eenvoudig.

Zo zijn er natuurlijk nog een aantal eenvoudige, vrij vanzelf-sprekende dingen die ik (en jij) kan doen:
  • Alle applicaties die je niet nodig hebt uit zetten.
  • Animaties, thema's en dat soort ongein uitzetten. Deze belasten de videokaart, een Intel4500HD in mijn geval.
  • De powersave modus in de grafische instellingen activeren.
  • Het Windows Power schema van balanced naar "power saver" zetten.
Het komt er samenvattend op neer: Zet elke knopje, slidertje of bolletje wat je kunt vinden op uit en/of op standje laag.

Om uit te vinden welke processen nou nog meer lompe hoeveelheden energie aan het opslurpen zijn, ga ik de CPU langzamer maken. Het grafiekje wat de taskmanager uitspuugt is namelijk de CPU belasting in procent van het op dat moment totale beschikbare reken vermogen.

Watte? Zeggis noggenkeer?

De CPU in deze notebook, een SL9400, past namelijk allerlei foefjes toe om niet de hele tijd op 1.86GHz en vol vermogen te draaien. Als er niks te doen is, draait hij maar op 800 MHz.
Een applicatie die 10% van de CPU-tijd op 800Mhz gebruikt, gebruikt bij 1800 MHz natuurlijk niet ook 10%, maar minder.

Tijdens deze momenten dat er niks te doen is, gaat deze CPU door zogenaamde P-states (Performace States) heen. Dit zijn een aantal instelbare frequenties met bijbehorende spanningen waar de processor in kan lopen.

Dit gaat normaal helemaal vanzelf, en hier hoef je niks aan te doen. Het zelfde proces treed in werking als hij te warm dreigt te worden. Dan schakelt het ding zelf de klok frequentie omlaag, om zo niet boven zijn temperatuur limiet uit te komen.

Niet elke processor kan even veel stapjes maken, en niet elke processor doet het op dezelfde manier.

Bij de hele Core2 generatie gaat het ongeveer hetzelfde, en die ga ik nu aanpassen met een programmaatje, genaamd Throttlestop.
Hiermee kun je handmatig het ding in bepaalde states dwingen.

Zo heb ik hem nu gereduceerd tot iets dat waarschijnlijk slomer is als een doorsnee Pentium III:
Intens trage Core2Duo

Het valt wel mee, je kunt nog paint openen, maar daar houd het ook wel op.

Als een applicatie nu nog iets van reken kracht nodig heeft, kun je dat makkelijker zien... maar, ik heb alles al aardig weg gewerkt.

Interessant genoeg is het verbruik bij 266 MHz en de laagst mogelijk instelbare spanning niet echt minder geworden. Hoe ik ook met de voltages en frequenties aan klooi, hij blijft idle steeds rond de 8 Watt gebruiken. En ik wil grote vermogens veranderingen zien, anders hoeft het van mij niet.

Een ander programma wat ongeveer hetzelfde kan, is RMClock. De gedachte van dit programma is dat hij (het programma) steeds je CPU frequentie en spanning aanpast, in plaats van dat de CPU dit zelf doet, met het idee dat dat dan beter is.

Voor overclocken is het vast enorm handig en nuttig, maar omdat het programma kennelijk nogal wat rekenkracht vereist, heeft het een averechts effect op dingen zuiniger maken. Voor mijn beleving is het veranderen van frequenties ook niet zo soepel met dit programma (hoe ik de staptijd ook aanpas), waardoor alles wat meer schokkerig aan voelt.

Als je dit programma op "power-on-demand" de processor laat switchen tussen het meest trage, en het meest snelle, ziet het idle verbruik er zo uit:
Idle power verbruik met RMClock

Ook als ik het niet laat switchen, maar gewoon op "doe niks, en wees traag" zet, is RMClock kennelijk zo enorm reken intensief, dat er hoe dan ook meer verbruikt gaat worden.

Als ik hem namelijk vast op 1.86GHz zet, gebruikt hij ook 8 Watt idle, zonder die 1.2 Watt grote piekjes.

RMClock mocht niet baten.

Met minder, of zelfs geen extra software, kunnen we toch nog wat extra winst gaan behalen.:

Als ik het "Power Saver" plan van Windows selecteer, veranderd er visueel gezien een belangrijk ding, namelijk, Windows Aero wordt uitgeschakeld.
Dit power plan zet alle hardware waarvan Windows weet hoe het werkt in een low-power mode. Ik zeg dit, omdat als de hardware geen fatsoenlijke driver heeft, Windows er ook niet tegen kan praten om het te vertellen: "Joh, doe eens uit gaan!"

En zo is hier het resultaat van één "power-saver" radio-bolletje indrukken:
Windows "Power saver" plan

Hm, dit is toch wel weer een aardige besparing, en verder:

Als ik bij het Intel Graphic properties-ding (de tool die bij deze grafische chip zit) alles op "save", "battery" en "gebruik zo min mogelijk" zet, begint de Windows omgeving grafisch gezien nog wel wat meer af te takelen, maar het helpt toch weer een beetje:
Graphics op standje -1
Het uitschietertje is een proces-je die zoiets heeft van: "Aah, ik wil ook!", maar voor de rest zitten we nu op ongeveer 6.2 Watt. Toen ik begon was dat zo rond de 8.5.

Wat hebben we verder nog? Het scherm?

Het verschil in dit scherm tussen 100% licht(wat binnen veel te fel is), en 0% licht (wat onleesbaar is) is maar iets van 1 Watt in dit model. Het is een vrij klein paneel, met LED verlichting. Deze stond in alle voor gaande metingen in continu aan, en op 50% helderheid, en pas ik zo doende niet meer aan.

Nu heb ik iets waarmee HP aan de geclaimde batterij tijd van 6.5 Uur komt!

De standaard accu is namelijk 44 Wh. En 44Wh /6.2 Watt is ongeveer 7 uur.

Ja!

Maar stel nu dat ik iets wil doen? Bijvoorbeeld een documentje tikken?
Laat ik daar niet een lomp tekst verwerk pakket voor gebruiken zoals Office, maar iets zoals Notepad++.

De volgende meting is wat 5 minuten slap lullen in Notepad++ aan verbruik oplevert:
Tiep-sessie in Notepad++Tikken in Notepad++, nog steeds in het energy-saver plan.

Een gemiddelde van 7.4Watt. Tekst typen kost deze notebook dus 1.2 Watt aan energie, dat vind ik best wel veel.

Dat betekend, dat de schatting van 6.5 Uur van HP bijvoorbeeld gebaseerd kan zijn op op 50% van de tijd niks doen, en 50% van de tijd typen. Is dat representatief voor de zakelijke markt? Ik weet het niet...
Ja... maar halloo! Ik doe wel iets!
Tot nu toe heb ik niet echt spannende dingen gedaan. Programma's uitzetten, op Windows power plans geklikt en alle sliders die je tegenkomt op "low power" zetten. Iedereen had wel kunnen bedenken dat dat besparing oplevert.

Deze processor is vol gepropt met Power Saving features. Als één van de twee cores niks te doen heeft, kan hij op een hogere frequentie dan standaard lopen. Dit noemen ze IDA. Met een BIOS-mod kun je die software matig altijd aan zetten, op beide cores.

Een andere feature is EIST. Die kan ik niet uit zetten. Wat die doet is afhankelijk van de belasting de Multiplier aanpassen en de CPU spanning.

Dit gaat dus allemaal automatisch, wat op zich fijn is.

Zoals ik al eerder zij, is dit voor elke processor anders, en de meeste tools waarmee je iets kan aanpassen, zijn soms processor of zelfs notebook-model specifiek.

De ThrottleStop applicatie werkt op de meeste notebooks met een Mobile Core2Duo, en volgens mij zelfs ook op de Core i processoren.

Nu ik zonder rigoureuze ingrepen het idle-verbruik iets van 2 Watt gereduceerd heb, c.a. 25%, wordt het tijd om naar het maximum verbruik te gaan kijken.

Je kan dit op twee manieren aanpakken:
1: Prestaties verminderen door de CPU een factor x trager te maken. Hij wordt dan minder snel, maar verbruikt ook minder energie.
2: Geen prestatie concessies doen, en alleen de CPU spanning aanpakken. Even snel, met ook minder energie.

De volgende metingen zijn met dezelfde instellingen als het minimum verbruik gedaan, gezien ik de notebook daar toch wel in wil laten.

Dit houd in dat ik in het "power saver" plan zit, scherm altijd aan op 50%.
Manier 1
In dit plan, ga ik de minimum en maximum processor state aanpassen.
Windows 7: Change Advanced power settings
Standaard staat hij zo ingesteld: 5% minimum, 100% maximum.

Dit is dus eigenlijk hetzelfde als RMClock doet, maar dit zit vrij diep in Windows ingebakken, en.... is een stuk eenvoudiger.

Dit heb jij ook, als het goed is. Met CPU-z kun je bekijken wat voor een effect het heeft.

Als je het minimum en maximum aanpast en beide op 100% zet, veranderd de processor snelheid bij mij naar 2.1GHz.

Zet ik het minimum en maximum op 0%, veranderd de snelheid naar 800MHz.

"Leuk Infant echt waar. Maar, wat heb ik daaraan?"

Het boeit in mijn geval niet of ik hem op 800MHz of 2100MHz zet. Het idle verbruik veranderd zo weinig dat ik het in ieder geval niet kan meten.

Als ik hem op de standaard instelling laat (5% min, 100% max) en wPrime1.55 3 keer draai, krijg ik 3 keer een score van 41.5 seconden, en het volgende verbruik:
wPrime 1.55

Laat je het een tijdje draaien, stabiliseert het verbruik op 19.8 Watt. Dat is een toename van c.a. 13.6 Watt.

Okee.

De minimum waarde aanpassen in het power plan heeft geen effect. Ik krijg steeds een score van c.a. 41.5 seconden.

Wat als ik het maximum van 100% naar 50% terug schroef?

Je zou denken, dan duurt alles 2x zo lang.... en verbruikt het de helft.

De score is steeds rond de 96 seconden, en het grafiekje is nu:
wPrime 1.55

Het berekenen heeft 2.3x zo lang geduurd, en het verbruik zit op 11.3 Watt, een toename van 5.1 Watt.

De vorige toename was 13.6 Watt. Als het berekenen 2.3x zo lang duurt, verwacht je dat de toename met een zelfde factor schaalt. 5.9 Watt.

Maar er is nu maar 5.1 Watt verbruikt. Dat is zuiniger! Waarom?!

Hoe hoger de frequentie in een CPU, de te meer spanning heeft hij nodig. 2x zoveel frequentie is in de zelfde prosessor, in theorie, twee keer zo snel.
Helaas moet ook de spanning ietsje toenemen, en als je de Speedstep wiki gezien had, heb je deze formule vast ook al gezien:

P = C*V2*f

Het vermogen, P, wordt 2x zo veel als je f (de frequentie) ook 2x zoveel maakt. Helaas zorgt een vervelend stukje natuurkunde ervoor dat de spanning ook ietsje omhoog moet. En deze zorgt in steeds meer toenemende mate voor extra vermogen.

Het uitgans punt van Intel, en daar hebben ze prima gelijk in, is nu als volgt:

Stel: Je hebt één ding te doen, bijvoorbeeld een berg priem getallen uitrekenen. Als je daarmee klaar bent, mag je naar huis.

Je kunt nu kiezen om er 41.5 seconden over doen. Gedurende die tijd gebruikte het hele systeem 19.2 Watt.

Optie twee is dat je er 96 seconden over kan gaan doen, gedurende welke het gehele systeem 11.3 Watt gebruikt.

En we hadden eerder gezien dat langer er over doen voor de processor efficiënter is, dus je zou zeggen optie 2 is beter.

De hoeveelheid energie die deze twee opties verbruiken, in Joules, rekenen we beide uit met de eenvoudige formule:

J = W*s

96*11.3 = 1085 Joules
41.5 * 19.2 = 797 Joules.

Ofterwijl: De eerste meting is een stuk beter, want dat scheelt gewoon even 300 joules aan energie, ook al was de processor wat minder efficiënt, het hele zaakje hoeft minder lang aan te staan.
In dit geval slurpt de andere rommel, zoals o.a. het scherm en gewoon de hele notebook veel meer energie.

Dit concept heet "rush to idle". En houd dus in, dat werk sneller afronden energie zuiniger is, ook al is het werk uitrekenen zelf ietsje minder efficiënt.

Nu kun je zelf wel bedenken dat hoe groter en lomper de CPU wordt, hoe groter zijn aandeel is aan het totale verbruik. Er is dus ook vast een systeem te verzinnen wat energie-efficiënter is als het op 50% capaciteit werkt, t.o.v. 100%. Als je dit dus te extreem maakt, heeft de rush-to-idle strategie niet echt zo'n zin meer.
Manier 2
Hier moet je zelf wat gaan experimenteren. Met ThrottleStop kan ik de CPU spanning op bijna zijn aller laagst zetten, 0.950 Volt.

Standaard staat hij op 1.075 Volt ingesteld, HWInfo kan een mooi tabelletje laten zien waarin de frequenties met bijbehorende spanningen staan.

De volgende meting begint met WPrime die een 1024M benchmark draait:
Afname bij CPU undervolten
In het begin zie je hetzelfde vermogen opgenomen worden als voorheen, 20 Watt ongeveer.

Vervolgens zet ik met Throttlestop tijdens het draaien van de benchmark, de spanning van 1.075 Volt naar 1.000, en dan naar 0.950 Volt.

Het verbruikt neemt meteen af, en dit kan hij zo stabiel volhouden. Er wordt nu maar 16.5 Watt verbruikt in plaats van de eerder gemeten 19.8 Watt.

Nog steeds kan hij de enkele benchmark in 41.5 seconden uitvoeren. Er duurt niks langer, het is nog even snel. Het verbruikt gewoon minder.
Samenvatting
Vermogen meten is lastig. Het is een ramp om alle programma's goed uit te krijgen onder Windows 7, maar ik heb nu wel een aantal degelijke metingen kunnen doen waar ik iets aan heb.

- Applicaties en services uitzetten helpt om de CPU zo min mogelijk te belasten. (Joh...)
- Het "power-saver" plan helpt aanzienlijk om zoveel mogelijk hardware in low-power modus te zetten.
- Idle maakt de CPU-frequentie en spanning niet super veel uit.
- Onder load maakt het zeer veel uit, ik heb een afname van 15-20% op het totale verbruik gerealiseerd.

Er zijn vast nog 100 andere dingen die ik kan doen, maar deze zijn het eenvoudigst en leveren vrij veel besparing op.

Vooral het under-volten, wat op zich helemaal geen kwaad kan, is alleen met dubieuze 3rd-party software te realiseren. Niemand bied jouw de vrijheid met dit soort idioot simpele aanpassingen, even alles 20% zuiniger te maken....want elke aanpassing valt natuurlijk niet onder de garantie.

Stel nu.... je notebook werkt op een accu. En je wilt deze zo min mogelijk mishandeld hebben.
In plaats van steeds pieken van 20 Watt eruit te knijpen, kun je het zaakje zo instellen dat er maximaal maar de helft, 10 Watt uit je accu gevraagd wordt.

Als ik naar dit soort metingen kijk, heb ik het vermoeden dat vooral op oudere accu's, een "ik gebruik nu de helft" knopje, een forse verlenging kan gaan opleveren.... hm.....

Domme Batterijen - Spoof

Door Infant op zondag 30 december 2012 20:10 - Reacties (17)
Categorieën: Gemod / Gefix, Notebook: Accu's bouwen!, Views: 10.563

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.

code:
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 which, uint8_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_cnt> SAFECNT_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.

Domme Batterijen - Verkeer(de)informatie

Door Infant op zondag 23 december 2012 17:32 - Reacties (14)
Categorieën: Gemod / Gefix, Notebook: Accu's bouwen!, Views: 12.541

Ook deze post gaat weer over notebook accu's(of batterijen, ik haal ze willekeurig door elkaar), en is een vervolg op de eerste en tweede.

Ik heb een frumsel gemaakt om het verkeer tussen notebook en accu te kunnen afluisteren. Ik laat in deze deze post ziet wat je daar zoal mee kan doen.
Links
De alsmaar groeiende lijst van pdfjes:
SMBus v1.1 Specification
Smart Battery Data Specification v1.1
BQ2084 Datasheet
Atmega16U4 Datasheet
Elitebook 2730p Schema (Mediafire)
Boem! Uit
Er zijn op het internet aardig wat mensen te vinden die wel eens een notebook batterij uit elkaar gesloopt hebben.
Wat ze meestal doen is de kapotte cellen vervangen door nieuwe, voor een bedrag van veel minder dan een nieuwe accu, en daarmee hopen ze klaar te zijn.
Ik ben er weinig tegen gekomen die vervolgens weer een zo goed als nieuwe accu hadden. Ze lopen allemaal tegen het probleem aan:
  • Accu doet nog steeds niks.
  • Hij wil niet kalibreren.
  • Bij 50% valt de notebook uit.
  • Capaciteit is wel toegenomen, maar nog steeds niet wat je verwacht.
  • Hij laad niet volledig op.
Op tweakers zijn er misschien wel twee hele topics te vinden waar accu's uit elkaar gehaald worden. Er zijn wel honderden topics te vinden waar mensen een probleem uit bovenstaande lijst melden.

Het fundamentele probleem bestaat uit twee dingen:
1: 'Smart Batteries' zijn dom.
2: De standaard is te vaag.

Deze gast is een van de weinige die ook cellen vervangen heeft, en vervolgens door het moeizame proces van chipjes los solderen en flashen is gegaan.
En bij 'Further observations en rants' verteld hij precies de twee bovengenoemde punten.

Accu informatie wordt door een Host IC uit de accu gehaald, en beland in je BIOS. Zo staat daar bijvoorbeeld in:

State of Charge: Een getal tussen de 0 en 100. Je raad het al. Dat is gewoon het percentage peut wat er nog in je accu zit.
Battery Voltage: De totale spanning van de accu.
Remaining Capacity: De hoeveelheid mAh of mWh die nog in de accu zit.
Full Charge Capacity: Hoeveel er in kan, ook in mAh of mWh.
Design Capacity: Hoeveel er in kon toen hij nieuw was.

Al deze waardes komen uit je batterij wandelen. Ze worden aan de accu gevraagd, en die verteld ze ook keurig netjes terug.
Maar... neem nou bijvoorbeeld State of Charge. Die kunnen we zelf ook wel uitrekenen, namelijk:
(100% / Full Charge Capacity)*Remaining Capacity.

Wear level is een soortgelijk sommetje: (100% / Design Capacity)*Full Charge Capacity.

Gezien al deze waardes bij mij door een ongedocumenteerd chipje, wat achter duizend lagen van NDA's zit verstopt, worden uitgelezen... is het volledig onduidelijk wat er nou precies met deze waardes gebeurt.
En dat is dus probleem 2.

Er is geen standaard die fatsoenlijk zegt wat een OS of een BIOS met accu waardes moet doen. Als de accu zegt: "Yo, volgens mijn teller ben ik leeg...."
Dan zegt het BIOS: "Nou, dan ga ik uit. Doei!"
En boem. Je notebook is uit.

Wat je zou willen, is dat de BIOS wat intelligenter is en het volgende zegt: "Is dat wel zo? Ben je echt leeg? De spanning is nog meer dan voldoende hoor. Ik ga gewoon verder, tot je er mee ophoud."

In plaats daarvan, valt de notebook dus gewoon uit, of wisselt hij naar de tweede accu.

De sniffer die ik in het vorige artikel liet zien, kon deze data onderscheppen. En het eerste probleem waar ik dan tegenaan loop is dat het Host IC, diegene zonder documentatie, compleet willekeurige variabele opvraagt, in een ogenschijnlijk willekeurige volgorde. En ook nog eens heel traag. Waarom!!!!!?

Als we de data die opgevraagd wordt überhaupt uit kunnen lezen, gaat dat ongetwijfeld lelijke dingen op leveren. Dus we moeten voordat we dingen kunnen meten, de informatie die de accu beschikbaar stelt, er direct uit zien te halen.

Om dit de toen, moet de sniffer iets verbouwd worden.
Verkeer
De datasheet van het IC in mijn accu, een BQ2084, heeft op pagina 14 een mooie tabel met alle dingen die je kunt opvragen. Al die functies komen regelrecht uit de Smart Battery Data specification, en het verbaast me dan ook niet dat ze er in zitten.
Dit betekend, dat andere IC's ook aan deze standaard voldoen....

Een accu uit een EliteBook 8540w, met daarin een BQ20Z70 bijvoorbeeld. Met een klein verloop plugje meld ook hij zich netjes aan:
Hier moet nog een verloopje tussen
Hij doet het, maar is wel stuk...
Deze is er ook al na c.a. 280 cycli mee opgehouden. Wat betekend, dat als je elke dag naar college gaat, je accu het een jaartje vol houd, maar voor die tijd al significant minder gaat presteren.

Nu ik het verkeer tussen de notebook en accu heb kunnen afluisteren, weet ik ook welke adressen gebruikt worden. Die heb ik met groen en blauw(ish) aangegeven. Groen zijn dingen die je verwacht, zoals spanning, stroom, temperatuur en dat soort dingen. Blauw zijn de iets fabrikant specifiekere registers.Gemonitord(t)? verkeer uit een BQ2084Tabel komt uit de BQ2084 Datasheet, en staat ook in de Smart Battery Specification

Ik wil dus gewoon een paar van deze variabelen continu opvragen, en in een grafiekje douwen.
Hoi Accu!
Ja, hier word het weer een klein beetje technisch. De Atmega moet namelijk gaan doen alsof hij een laptop is. Dit is niet heel erg ingewikkeld, want het staat best wel goed wel aardig gedocumenteerd. (Dank u wel TI.)

Hoe er data opgevraagd moet worden, staat onder het kopje "Figure 5. SMBus Communication Protocol Without PEC". Er is ook een kopje "With PEC", maar die verschillen verder niet... ik vermoed een foutje?
PEC is een CRC-8 berekening die aan het eind van een bericht toegevoegd wordt.
De sniffer heeft al vast gesteld dat dat niet gebruikt wordt. De datasheet suggereerd dit:
BQ2084 Read Word
Maar eigenlijk is het dus dit:SMBus Read Word without PEC

Voor dit gebabbel kan de hardware TWI van de Atmega ingezet gaan worden. Het vereiste lapje code kan nu in één interrupt, waar de sniffer voor elke pin een aparte interrupt nodig had:

C: Interrupt.c
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
29
30
31
32
33
34
35
36
37
38
39
//Handles SMBus Read Word
ISR(TWI_vect){
    // Save TWI state in an array for debugging.
    smbus_data[chars] = TWDR;
    smbus_reg[chars] = TWSR;
    chars++;
    if (chars == SMBUS_BUFF)
        chars = 0;  
    // State machine:
    if ((TWSR & 0xF8)==0x08){
        //Send adress + R
        TWDR = 0x16;
        TWCR = (1<<TWEN) | (1<<TWINT) | (1<<TWIE); 
    }else if ((TWSR & 0xF8)==0x18){
        // Send Command
        TWDR = smb_cmd;
        TWCR = (1<<TWEN) | (1<<TWINT) | (1<<TWIE);  
    }else if (((TWSR & 0xF8)==0x28)||((TWSR & 0xF8)==0x30)){
        //Send Repeated Start       
        TWCR = (1<<TWEN) | (1<<TWSTA) | (1<<TWINT) | (1<<TWIE); 
    }else if ((TWSR & 0xF8)==0x10){
        // Repeated start Send, Ack REceived. Send Adress + Write       
        TWDR = 0x17;
        TWCR = (1<<TWEN) | (1<<TWINT) | (1<<TWIE); 
    }else if ((TWSR & 0xF8)==0x40){
        // Adres+Write sent, ACK received. Receive Data, return ACK.        
        TWCR = (1<<TWEN) | (1<<TWEA) | (1<<TWINT) | (1<<TWIE); 
    }else if ((TWSR & 0xF8)==0x50){
        // Receive Data, return NACK.
        smb_wrd_lo = TWDR;
        TWCR = (1<<TWEN) | (1<<TWINT) | (1<<TWIE);  
    }else if ((TWSR & 0xF8)==0x58){
        // Done. Send Stop condition    
        smb_wrd_hi = TWDR;      
        TWCR = (1<<TWEN) | (1<<TWSTO) | (1<<TWINT) | (1<<TWIE);         
        smb_done = 1;
    }else{
        TWCR = 0;   
    }

Ja, hier had een switch statement kunnen staan...

En vervolgens moet ik een functie in het leven roepen die ik het commando als argument mee geef, en die functie geeft mij dan de waarde van het register terug: Dus: sendcommand(Voltage) moet als waarde netjes de spanning terug geven:
C: read_word
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
volatile uint16_t read_smbus_word(uint8_t cmd){
    smb_cmd = cmd;
    smb_done = 0;   
    //Send start condition, enable intterupt.
    TWCR = (1<<TWEN) | (1<<TWSTA) | (1<<TWINT) | (1<<TWIE); 
    // For now, wait until the interrup completes and Stop has been sent.
    // If it takes too long, return.
    for (uint16_t i=0;i<0xFFF0;i++){
        if(smb_done){
            if (!(TWCR & (1<<TWSTO)))
                return ((smb_wrd_hi<<8) | smb_wrd_lo);
        }
    }   
    return 0;       
}

While loops zijn evil. Programma's crashen door overmatig gebruik van while loops. Als er na zoveel i++jes geen antwoord komt, gaat het ook nooit komen, en kunnen we beter ophouden.

En als laatste wordt dus de hele mikmak 25 keer per seconde opgevraagd, netjes geformatteerd en over de USB naar de PC geduwd . Dat levert dan bijvoorbeeld het volgende op:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
11433 3801 3815 3817    0     0   0
11433 3801 3815 3817    0     0   0
11433 3801 3815 3817    0     0   0
11433 3801 3815 3817    0     0   0
11433 3801 3815 3817    0     0   0
11433 3801 3815 3817    0     0   0
11434 3802 3814 3818    0     0   0
11434 3802 3814 3818    0     0   0
11434 3802 3814 3818    0     0   0
11434 3802 3814 3818    0     0   0
11434 3802 3814 3818    0     0   0
11434 3802 3814 3818    0     0   0
11434 3802 3814 3818    0     0   0

In volgorde: Vtotaal[mV], V3[mV],V2[mV],V1[mV], Current[mA], Capacity[mAh], SOC[%]

En dan kom je al snel tot de conclusie dat het nutteloos is om het 25 keer per seconde op te vragen. Dit chipje update alle waardes maar iets van 1 keer per seconde. Dat noem ik jammer.
Maar, een uur lang iedere seconde een meting, kan nog steeds leuke plaatjes gaan opleveren.

Op de PC hebben we dan een tooltje nodig wat het uitleest en in een bestand prakt, het belangrijkste daarvan ziet er zo uit:

C: Sniff-logger.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void handle_line(uint8_t* line, uint8_t len){   
    sscanf((char*)line,"%u %u %u %u %i %u %u %u",&voltage,&cel3,&cel2,&cel1,&current,&capacity,&soc,&temp);
    system("cls");
    if (dlog)
        printf("Logging...\r\n");
    else
        printf("NOT LOGGING!\r\n");
    printf("Voltage   (mV): %u \r\n",voltage);
    printf("Cell 3    (mV): %u \r\n",cel3);
    printf("Cell 2    (mV): %u \r\n",cel2);
    printf("Cell 1    (mV): %u \r\n",cel1);
    printf("Current   (mA): %i \r\n",current);
    printf("Capacity (mAh): %u \r\n",capacity);
    printf("State O.C. (%%): %u \r\n",soc);
    printf("Temperat. (*C): %2.1f \r\n",(float(temp)-2731.5)/10);
    
    tcurrent = time(NULL);
    tcurrent = tcurrent-tstart;
    printf("Runtime    (s): %u \r\n",tcurrent);

    sprintf(logline,"%u;%u;%u;%u;%u;%i;%u;%u;%u;%u\n",voltage,cel1,cel2,cel3,cel4,current,capacity,soc,temp,tcurrent);
    log_append();
}

Temperatuur wordt in Kelvin uitgepoept en op de PC naar graden C geconverteerd. Verder wordt er een timestamp aan vast geknoopt.

Serial-to-Excel converter v0.000001 pre-AlfaEen positieve current is opladen, negatief is ontladen.

De batterij die ik nu ga testen heb ik van een mede tweaker opgestuurd gekregen. Wat ik ook met deze batterij doe, hij blijft van mening dat er 1mAh in kan. Hij laad wel op, maar omdat hij foutieve informatie aan de notebook doorgeeft, heeft m'n noteboek zoiets van: "Ja, doei! Ik kap er mee. Je zoekt het maar uit!"

Wat we kunnen doen, is het helemaal opladen, en dan helemaal leeg laten lopen door er een halogeen lampje (bij gebrek aan iets beters) aan te hangen.

Dit levert de volgende interessante plotjes op:
Ontladen: Totale Spanning
Ontladen: Stroom

Nou, dit is precies wat je van een accu verwacht, als je je het plaatje herinnert uit de eerste post. En het plaatje hoe het er uit zou zien als je er 2x zoveel stroom uit zo trekken. De stroom is hier niet volledig constant, maar bij benadering wel. Het lijkt er daarom ook sterk op.

Ik heb nu ook voor het eerst iets goeds over deze accu te melden: Hij doet wat hij moet doen, namelijk stroom leveren, en uit gaan als hij te diep ontladen wordt. Dit doet hij op basis van de cel spanningen, en dat laat het volgende grafiekje mooi zien:

http://tweakers.net/ext/f/nQgM5SIfQLbyFT9d0Czp2HT4/full.png

Dit pack is uit balans. Dat wil zeggen dat een van de cellen niet zoveel capaciteit meer heeft als de rest, en daarom eerder leeg is. Idealiter gezien, is het aan de lader om deze te gaan balanceren. Dit kan door of alleen energie in de lege cel te stoppen, of door de twee volle leeg te laten lopen. (Dit laatste is meestal het geval.)

De chip in deze accu kan volgens het datasheet wel balanceren, maar het wordt gewoon niet gedaan. Lekker puh!

Wat verder opvalt is dat een kwartier nadat hij uit is gegaan, de spanning weer stijgt naar een waarde die lijkt te suggereren dat hij weer vol is. Omdat deze cellen toch echt wel een beetje versleten zijn (Ze waren normaal 4800mAh, en nu nog maar iets van 1600mAh).

Dit laatste grafiekje is voor geen mogelijkheid te maken op je PC. Er is geen enkel programma behalve de HP Tool die de individuele cel spanningen tevoorschijn kan toveren.

Verder wordt door mijn notebook alleen de stroom en spanning eens per 2 seconden ofzo opgevraagd. De rest van de dingen die je wilt weten, Idunno... ehm... capacity?, worden op compleet willekeurige tijdstippen met soms wel een minuut of langer er tussen, opgevraagd.

Daarom, als je dit ding aan de notebook hangt, produceert dat stront. Kijk maar eens wat een puinhoop alle Windows tools uitspugen. Er heerst totale anarchie!
Data Bonanza

Windows is van mening dat de batterij (#2) 100% vol is. (It clearly isn't...) Bij BatteryMon past het percentage niet eens in het venstertje... zo veel volheid is er.

Maar de State of Charge in de accu, hoewel niet super lineair, zegt wel netjes in het begin dat hij vol is, en aan het einde dat hij leeg is. Kijk maar:

Ontladen: State of Charge

Het percentage vol wat Windows aangeeft, wordt dus berekend aan de hand van de Remaining Capacity. Dit is in het geval van twee accu's te begrijpen namelijk:

(RemCharge1 + RemCharge2) / (FullCharge1+FullCharge2)*100%

Als het groter dan 100% wordt, maakt ie er netjes 100% van. Want in dit geval wordt het sommetje:

(3189+512)/(3355+1) *100% = 110%.

Na wat meer rond ge-analyseer kom je erachter dat de tijd die nog resterend is, niet berekend wordt als:

(RemainingCarge1 + RemainingCharge2) / AverageCurrent

Wat op zich best logisch zou zijn. Als je uit de eenheid mAh, wat dus stroom*uur is, de stroom weer weg deelt, houd je namelijk een tijd over. De resterende accu tijd.

Nee, in plaats daarvan wordt er naar de (berekende) State of Charge gekeken. En als die veranderd, wordt aan de hand van de afname, en hoe lang het duurde voordat die afname plaatsvond, een voorspelling gedaan.
Gezien de SMBus host hier op compleet willekeurige tijdstippen de Remaining Capacity opvraagd, met soms wel tien minuten ertussen, duurt het moeilijk lang voordat Windows een idee heeft hoelang de accu nog mee gaat, is de voorspelling nogal slecht, en krijgen alle tools die plotjes van de batterij maken van die mooie hoekjes er in:
Poehee, wat een soepel lijntje. Keurig.

Terwijl het met een data-ruiker, ook zo kan:
Opladen: Remaining CapacityGrafiek van de accu die door de lamp was leeg gezogen, weer aan de lader met data-snuiver er tussen.
Ja, leuk. En nu?
Nu... zou ik eigenlijk de dooie accu ervan willen gaan overtuigen dat hij een capaciteit van 1600mAh heeft, gezien de lamp-test zegt dat dat er uit aan totale energie uit komt rollen .

Het probleem is, als je in het gekleurde tabelletje aan het begin weer bekijkt, dat de acces voor RemainingCapacity op read staat. Wij kunnen de waarde dus niet zomaar aanpassen.

Kan het wel minder zomaar? In theorie: Ja.

De documentatie zegt bij het kopje Manufacturer Access(0x00) allemaal oninteressante dingen, behalve deze twee: SHIP Command en Seal command. En de description achter het Seal Command luid:
"Instructs the BQ2084 to restrict access to those functions listed in Table3. It completes the Seal function and clears the Manufacturer Access."

Als ik de Pack Status and Pack Configuration (0x2f) opvraag, staat de SS bit op 1. En dat betekend dat deze accu gesealed is.

Nu kan ik een uur lang gaan vertellen wat er toen gebeurde, maar de SFW-versie komt er in het kort op neer dat ik heel Google dood ge-queried heb met zoektermen als Unseal BQ2084, HP battery key, hp unseal, remove seal... etc etc. Er zijn te veel Aziatische, Poolse, Tsjechse websites voorbij gekomen. Allemaal levert het niks op. (De NSFW-versie bevat veel gevloek en dood ge-wens...)

Uiteindelijk kom je erachter dat er een default key bestaat, die vond ik op het TI forum. Iedereen die op dat forum om de default key vraagt (myself included) krijgt binnen een uur een persoonlijk bericht van een TI medewerker met de key, maar hij wordt niet op het forum geplaatst.... dubieus.

Verder is er geen enkel document van TI dat suggereert waar je die key precies naar weg moet schrijven, en al helemaal niet hoe. Er is alleen een document wat met de Evaluation Software van TI werkt, en die zegt: druk op Unseal, doe de key in box 1, doe de andere key in box 2... en tadaa!

Met veel pijn en moeite ben ik er dus achter gekomen dat de default key (*kuch* 0x2084 en 0x7A43 *kuch*) achter elkaar naar register 0 weg geschreven moeten worden, en dat zou dan de magic moeten doen. Het is me door een TI medewerker bevestigd.

Nou heb ik uiteraard alle combinaties hiervan geprobeerd, maar geen eentje deed iets. Ik heb dus het donkere vermoeden dat HP de code veranderd heeft. (Dat kan namelijk.)

En helaas zou een brute-force scriptje, bij 32 bits met iets van 100 keys/seconde er maximaal anderhalf jaar ofzo over doen.... En eigenlijk weet ik niet zeker of je er wel zo snel zoveel keys naartoe kunt smijten. (Ik heb het een uurtje laten draaien, en hij is niet stukker gegaan...)

Kortom, met een kans op falen van meer dan 0% en een looptijd van meer dan een jaar, heb ik daar niet zo'n zin in. Maar mocht je iemand kennen met een Raspberry-PI, Arduino o.i.d. en een stuk of 100 HP accu's ... ben ik wel te porren.
Samenvattend
It's all useless.

De standaard is op zijn best gezegd okee, maar hoe HP, en Windows hem vervolgens toe past is jammer.
Ik heb plotjes die echt de meest ranzige laad stroom laten zien die je een Li-Ion kunt toe wensen.
Er wordt niet gebalanceerd.
De nuttige beschikbare informatie die de accu bevat, wordt niet uitgelezen, of gewoon genegeerd.
De informatie die beschikbaar is, beland in een half-gedocumenteerde vage Windows API, waar vervolgens elk programma een waarde uit zuigt, door een staafmixer van onsamenhangende formules heen haalt, en in een scherm deponeert, wat dan zegt: "Dit is hoe het ermee staat."

De notebook besluit zelf wanneer de accu leeg is, terwijl de accu dit veel beter weet.
De belangrijkste logica zit achter een muur van NDA's, terwijl de accu zelf ook beveiligd is. Als hij dus (by design) voorbarig stuk gaat, kun je er nauwelijks iets aan doen.
Cellen vervangen heeft maar zoveel zin, gezien het onmogelijk is om de accu fatsoenlijk te kalibreren zonder er halogeen lampen aan te bengelen.

Maar, dat is allemaal mijn mening.

Gelukkig is het niet afgelopen, want ik heb op het gebied van communicatie één ding nog niet gedaan......