Your location is here: dravecky.net  ⇒ Tools ⇒ Do It Yourself ⇒ Oprava Parkside 20V batérie Parkside 20V battery repair

Oprava Parkside 20V batérie Parkside 20V battery repair
+ balancing BMS

Dostala sa mi do rúk vadná batéria parkside 20V. Batériu som preskúmal, používa protokol CANBUS, ale iba jednosmerný (nabíjačka neoznamuje batérii nič) pri nabíjani je treba "zaťažiť" pin ID 100Kohm rezistorom, pretože nabíjačka detekuje pripojenú batériu poklesom napätia z 5V na 4,3V  na tomto pine.

"Idle state" je HIGH, čiže logická 1. medzera medzi packetmi je 45ms. Prvý  impulz je o dĺžke 8 bitov, čiže jedna osmina prvého impulzu zodpovedá dĺžke jedného bitu.

Odchytený povel pre nabíjanie



Kód pre nabíjanie je "813152221131331", pre plne nabité potom "813152222131122". Po doslaní kódu pre plne nabité treba rezistor pinu ID odpojiť aby sa nabíjačka prepla do "stand by" režimu. Do baterky vojde univerzálny BMS a attiny s kódom pre komunikáciu. Napájanie attiny je treba riešiť napr P-mosfetom (sot23), aby pri nepripojenej nabíjačke nevybíjal batériu. Binárne dáta pre nabíjanie sú 0000000010001000001100110100010001110 a pre nabitú batériu 000000001000100000110011001000101100.
Kód sa interpretuje tak, že prvé číslo je úrovne LOW o príslušnej dĺžke, a každé ´dalšie číslo je opačnej polarity o príslušnej dĺžke.

Zdrojový kód funkčného a otestovaného programu s atmegou. 

uint8_t vystup = 4;
uint8_t pinon = 2;
uint8_t pincharon = 3;
uint8_t pincan = 0;
uint8_t pinin = 1;
uint8_t x = 0;
uint8_t cc = 0;
uint8_t  pulzy[2][15] = {{8,1,3,1,5,2,2,2,1,1,3,1,3,3,1},{8,1,3,1,5,2,2,2,2,1,3,1,1,2,2}};

void setup() {
pinMode(pincan,OUTPUT);
pinMode(pinon,OUTPUT);
pinMode(vystup,OUTPUT);
pinMode(pincharon,INPUT);
pinMode(pinin,INPUT);
digitalWrite(vystup,HIGH);
}

void impulz(boolean stav, int cas) {
  digitalWrite(vystup,stav);
  delay(cas);
}

void spust(int rezim) { // rezim 0 = nabijanie, 1 = nabite
    int i = 0;
    uint8_t  impulzy[15];
    memcpy(impulzy,pulzy[rezim],15);
    for (i=0;i<16;i++) {impulz((i % 2 == 0),impulzy[i]);};
    impulz(LOW,45);
}



void loop() {
if (digitalRead(pincharon) == HIGH) {x = 0; cc = 0;} else {x = 1;};
if (digitalRead(pinin) == LOW) {digitalWrite(pinon,LOW);} else {digitalWrite(pinon,HIGH);}-
if (cc < 2) {digitalWrite(pincan,LOW); spust(x); if (x == 1) {cc++;};} else {digitalWrite(pincan,HIGH);};

}


 
Výstup pinu PC7 je pripojený na bázu NPN tranzistora rezistorom 4,7Kohm. Tranzistor má na kostre emitor a signál CID je na kolektore. na pine PC6 je 100Kohm rezistor pripojený k CID, ktorý zabezpečí pokles napätia CID pri nabíjaní na 4,35V. po ukončení nabíjania. Digitálne vzstupy 0 a 1 sú určené pre vstup signálu z BMS chipu (BM3451, S8254 atď) Na pine 0 je očakávaný povel pre nabíjanie, na pine 1 pre ukončenie nabíjania . Ja som nakoniec urobil DPS pre batériu presne na mieru s ATTINY13A (pozor iné piny) ako komunikačným chipom a BM3451 ako BMS s funkciu balancingu.

 


No comments available