La prima cosa fondamentale da sapere è che la quasi totalità di queste batterie utilizza SMBus ( Simile a I2C ) ed il protocollo Smart Battery, il quale è uno standard per monitorare i parametri delle batterie nei sistemi elettronici.
Nel nostro caso lavoreremo su una batteria AL10B31.
Fortunatamente del portatile di provenienza è stato possibile reperire lo schema elettrico e quindi avere il pinout della batteria
Ricarica e utilizzo della batteria
La prima cosa interessante è il pin 3, in questo schema è collegato direttamente a massa, ma sulla scheda madre associata alla batteria in mio possesso , invece ho visto che era presente 1kOhm fra questo pin e la massa, quindi ho provveduto a collegare tale resistenza fra il pin 3 e l'8.
È necessario prestare attenzione al fatto che una volta collegato questo pin a massa tramite la resistenza da 1K , è presente la tensione della batteria sui terminali , quindi bisogna evitare di creare cortocircuiti di qualsiasi genere , in quanto , si , probabilmente sono protette anche da corto queste batterie, ma se i cavi dovessero essere sottili invece di andare in protezione, possono ustionarvi le mani.
Per iniziare la ricarica, si possono applicare 12.6 volt fra il pin 8(-) e il pin 1(+) da un alimentatore con limitazione di corrente minore di 1.5-2 ampere.
Il fatto della limitazione di corrente e del voltaggio sono cose ESSENZIALI, pena nel peggior dei casi, incendi o esplosioni.
Collegamento con arduino
Per il collegamento con arduino le cose sono leggermente più complesse invece, ma completamente fattibili.
Per poter dialogare con SMBus, è necessario usare una libreria software per I2C reperibile qui http://playground.arduino.cc/Main/SoftwareI2CLibrary .
Per poter dialogare con SMBus, è necessario usare una libreria software per I2C reperibile qui http://playground.arduino.cc/Main/SoftwareI2CLibrary .
Una volta creato lo sketch arduino , prima di includere la libreria, è necessario impostare alcuni parametri
SDA_PIN , SDA_PORT , SCL_PIN , SCL_PORT
Nel mio caso utilizzando un arduino mega 2560, ho utilizzato
#define SDA_PIN 3
#define SDA_PORT PORTD
#define SCL_PIN 2
#define SCL_PORT PORTD
#define I2C_SLOWMODE 1
Questi parametri corrispondono all'utilizzare il pin 19 per SCL ed il pin 18 per SDA , nel caso si utilizzi un arduino diverso qui https://spreadsheets.google.com/pub?key=rtHw_R6eVL140KS9_G8GPkA&gid=0 è possibile consultare la mappatura delle porte AVR con i pin arduino.
Lo sketch che utilizzo per monitorare i parametri è il seguente
byte deviceAddress = 11;
#define VOLTAGE 0x09
#define TEMPERATURE 0x08
#define CURRENT 0x0a
#define CAPACITY 0x10
#define TIME_TO_FULL 0x13
#define CHARGE 0x0d
void setup()
{
pinMode(22,INPUT_PULLUP);
pinMode(23,INPUT_PULLUP);
Serial.begin(115200); // start serial for output
Serial.println(i2c_init());
pinMode(22,INPUT_PULLUP);
pinMode(23,INPUT_PULLUP);
scan();
}
unsigned int fetchWord(byte func)
{
i2c_start(deviceAddress<<1 | I2C_WRITE);
i2c_write(func);
i2c_rep_start(deviceAddress<<1 | I2C_READ);
byte b1 = i2c_read(false);
byte b2 = i2c_read(true);
i2c_stop();
return (unsigned int)b1|(((unsigned int)b2)<<8);
}
void scan()
{
byte i = 0;
for ( i= 0; i < 127; i++ )
{
Serial.print("Indirizzo ");Serial.print(i);
bool ack = i2c_start(i<<1 | I2C_WRITE);
if ( ack )
Serial.println("OK");
else
Serial.println("NO");
i2c_stop();
}
}
void loop()
{
Serial.print("Voltaggio: ");
Serial.println(fetchWord(VOLTAGE));
Serial.print("Temperatura: ");
unsigned int tempk = fetchWord(TEMPERATURE);
float tempc = ((float)tempk)/10.0-273.15;
Serial.println(tempc);
Serial.print("Corrente (mA):" );
Serial.println(fetchWord(CURRENT));
Serial.print("Capacità (mAh):" );
Serial.println(fetchWord(CAPACITY));
Serial.print("Carica: ");Serial.print(fetchWord(CHARGE));
Serial.print(" Minuti rimanenti alla carica completa: ");
Serial.println(fetchWord(TIME_TO_FULL));
delay(5000);
}
Questo sketch all'avvio fa una scansione del bus per trovare le periferiche e poi di default si collega alla batteria che si trova all'indirizzo 0x11.
Per poter monitorare altri parametri, è possibile consultare la documentazione di smart battery all'indirizzo http://sbs-forum.org/specs/sbdat110.pdf
Ricordo di evitare di caricare batterie al litio in modo sperimentale senza essere presenti durante la carica.
Hi tell where to connect "+" and where "-" the power unit of this battery It is red "+" and blue "-" a wire?
RispondiEliminaI would like know how you find of the laptop battery address.
RispondiElimina