Diccionari.cat
Optimot, consultes lingüístiques

caHome E3644A_SCPI_Li-Ion_Batt

Controlar i monitoritzar la càrrega d'una bateria Li-Ion via SCPI

Ja fa un temps que va caure a les meves mans una bateria d’Ió Liti (Li-ion) i aprofitant l’entrada anterior on s’explica com connectar l’ordinador a la font d’alimentació via SCPI i aprofitant també aquesta entrada on s’explica com carregar bateries amb una font d’alimentació programable (amb CC/CV), seguiré amb el tutorial de PyVisa per automatitzar la càrrega i ja que hi som poder treure algunes gràfiques a diferents corrents de càrrega (0,25C, 0,5C, 0,75C).

Abans de tot, aquestes són les especificacions d’aquesta bateria:

  • Nombre de cel·les: 12
  • Voltatge Nominal: 3,6V / cel·la
  • Voltatge del paquet: 43,2V
  • Capacitat: 4Ah

Nota1: Com que no tinc cap ús en ment, carregaré la bateria a 4V CC i tallaré a 0,5A CV. Segons aquest article, la capacitat serà del voltant del 80%.
Nota2: Com a corrent de càrrega, alternaré entre 0,25C (1A), 0,5C (2A) i 0,75C (3A) i treuré unes gràfiques per veure la diferència en temps de càrrega.
Nota3: Com que no tinc una font d’alimentació prou grossa, faré les càrregues de cel·les per separat (en puc fer fins a 5 de cop).

Si passem a la part del codi, en comptes de picar comanda a comanda, obviament crearé un fitxer *.py (per exemple, py_psu.py) i l’executaré a la consola. Adicionalment, a part de poder veure en temps real la lectura de voltatge i corrent a la consola, les dades s’exportaran a un fitxer *.csv per poder obrir-lo amb el LibreOffice.
El codi és el següent (és un mix de codis que he anat trobant per la xarxa):

# importar la visa, en aquest cas carregar pyvisa

import visa
import time
import csv

def measCurr(): 			#define a MEASURE CURRENT function

	cmd1 = 'MEAS:CURR?'
	C = ps.query(cmd1)
	time.sleep(1)
	C = float(C)
	C = round(C,5)
	return C

def measVolt(): 			#define a MEASURE VOLTAGE function

	cmd1 = 'MEAS:VOLT?'
	C = ps.query(cmd1)
	time.sleep(1)
	C = float(C)
	C = round(C,5)
	return C

# Crear un resource manager

resources = visa.ResourceManager('@py')

# Identificar i configurar la comunicaci amb el nostre dispositiu en aquest cas sera un Agilent E3644A

ps = resources.open_resource('ASRL/dev/ttyUSB0::INSTR', baud_rate = 9600, data_bits = 8, write_termination= '\n', read_termination = '\r')
ps.stopbits=2
print("Aparell a utilitzar:")
print("> " + ps.query('*IDN?'))

# Configurar els limits

ps.write("VOLT 4")
ps.write("CURR 3")
print("Voltage set to 4V / Current set to 3A")

# seconds passed since epoch

start=time.time()
local_time = time.ctime(start)
print("Local time:" + local_time)

# aturar l'execucio un numero determinat de segons

time.sleep(0.5)

print "Escollir el rang de 20V"
ps.write('VOLT:RANG HIGH')
print "System Remote activat"
ps.write('SYST:REM')
print "Activar la PS"
ps.write('OUTP:STAT ON')

with open('bateria'+str(local_time)+'.csv', 'w') as csvFile:
	writer = csv.writer(csvFile, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)
	csvData=[['Time' + '\t' + 'Voltage' + '\t' + 'Current']]
	writer.writerows(csvData)
	time.sleep(0.5)
	voltatgeval=measVolt()
	correntval=measCurr()
	while correntval>0.5:
		temps = time.strftime('%d-%m-%Y %H:%M:%S')
		correntval=measCurr()
		corrent=str(correntval)
		voltatgeval=measVolt()
		voltatge=str(voltatgeval)
		print  temps + " - Corrent: " + corrent + " A " + "/ Voltatge: " + voltatge + " V"
		csvData = [[temps + '\t' + voltatge + '\t' + corrent]]
		writer.writerows(csvData)
		time.sleep(1)

corrent=str(correntval)
voltatge=str(voltatgeval)
csvFile.close()
ps.write('OUTP:STAT OFF')
time.sleep(1)
ps.write('SYST:LOC')
time.sleep(1)

print "Carrega aturada quan el corrent era de "+ corrent +"A amb un voltatge de " + voltatge + " V."
print "Carrega completada en " + str(round(float(time.time() - start)))+"s."

Ara, si el volem executar, tant fàcil com anar a la consola:

momex@cat:~$ cd Pyvisa/
momex@cat:~/Pyvisa$ python py_psu.py 
Contingut: Programa en python, començament. Source: Momex.cat
Contingut: Programa en python, final. Source: Momex.cat

Un cop acabat, importem les dades al full de càlcul i treiem unes gràfiques com aquestes:

Contingut: Voltatge i corrent vs temps en diferents corrents de càrrega. Source: Momex.cat

Com veiem, sembla que contra menys corrent triga més i a l’inrevés. Si ho tabulem, podem treure una línia de tendència i calcular a quina intensitat hauríem de carregar per acabar en cert temps.

Contingut: Taula Li-Ion - Corrent càrrega vs temps. Source: Momex.cat
Contingut: Gràfica i tendència de temps de càrrega. Source: Momex.cat

Òbviament, hi ha un corrent màxim de càrrega que segons el mateix article d’abans hauria d’oscil·lar entre 0,5C i 1C, però generalment els fabricants d’aquestes cel·les recomanen fer-ho a 0,8C per prolongar la vida de la bateria.

keywords: Agilent, HP, Keysight, PSU, Power, supply, programable, SCPI, E3644A, font, alimentació, ordinador, serial, rs-232, bateria, battery, Li-Ion, Liti, Lithium, 1C