日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

锂离子电池健康状态估计简介(一):基于Python的数据处理计算SOH,RUL,CCCT,CVCT

發(fā)布時(shí)間:2023/12/14 python 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 锂离子电池健康状态估计简介(一):基于Python的数据处理计算SOH,RUL,CCCT,CVCT 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

鋰離子電池?zé)o論是在軍用還是民用領(lǐng)域都得到了廣泛的應(yīng)用,在鋰離子電池健康評(píng)估中主要關(guān)注的參數(shù)有SOH和RUL。準(zhǔn)確對(duì)其進(jìn)行健康狀態(tài)(Stateof Health, SOH)評(píng)估及剩余使用壽命(Remaning Useful Life, RUL)預(yù)測(cè)對(duì)于提高電池安全性與使用壽命具有重要意義

電池SOH

鋰離子電池健康狀態(tài)基本定義為:選擇適當(dāng)?shù)姆烹姉l件下,對(duì)其進(jìn)行充電,直到鋰電池充滿結(jié)束。然后再選擇一定倍率對(duì)其進(jìn)行放電,直到滿足放電截止電壓結(jié)束,此時(shí)電池的容量與其標(biāo)稱容量的比值。即為鋰離子電池的健康狀態(tài),通常運(yùn)用SOH表示電池的健康狀態(tài)。鋰離子電池的存儲(chǔ)能力與快速充放電能力均會(huì)隨著老化而不斷下降,而SOH正是用于評(píng)價(jià)鋰電池老化程度的量化指標(biāo),鋰離子電池健康狀態(tài)是表征鋰電池存儲(chǔ)電能的能力,和電池老化評(píng)價(jià)指標(biāo)。鋰電池的健康狀態(tài)定義方式有多種,分別為基于容量定義的SOH、基于內(nèi)阻定義的SOH、基于功率定義的SOH、基于自放電定義的SOH。

電池RUL

鋰離子電池壽命是個(gè)廣義的概念,它還可以具體分為很多種,如儲(chǔ)存壽命,使用壽命和剩余循環(huán)壽命。鋰離子電池的存儲(chǔ)壽命表示鋰離子電池在靜態(tài)或非運(yùn)行條件下退化到一定程度所需的時(shí)間。鋰離子電池的RUL是指在某種充放電條件下,鋰離子電池的當(dāng)前可用容量衰減退化到某一規(guī)定的失效閾值所需要經(jīng)歷的循環(huán)周期數(shù)量。RUL預(yù)測(cè)是一個(gè)基于鋰離子電池歷史數(shù)據(jù)運(yùn)用一定的數(shù)學(xué)手段對(duì)其殘值壽命進(jìn)行預(yù)測(cè)計(jì)算的過(guò)程。隨著鋰離子電池在各領(lǐng)域上的廣泛應(yīng)用,鋰離子電池RUL預(yù)測(cè)技術(shù)得到了廣泛的關(guān)注和研究。

常用鋰離子電池壽命經(jīng)驗(yàn)?zāi)P偷臄?shù)學(xué)表達(dá)式

鋰離子電池結(jié)構(gòu)

鋰離子電池主要由以下幾個(gè)部分組成:
(1)正極活性材料
正極活性材料是鋰離子電池的核心組成部分,其決定了鋰電池工作時(shí)鋰離子的空間和擴(kuò)散路徑,由此決定了鋰離子電池的基本性能。目前業(yè)內(nèi)常見(jiàn)的正極材料有磷酸鐵鋰、錳酸鋰、鈷酸鋰、以及由多種材料構(gòu)成的三元鋰,如鎳鈷錳、鎳鈷鋁。
(2)負(fù)極活性材料
負(fù)極活性材料是以薄層狀附著在銅基上的糊狀物質(zhì),通常由碳材料、黏合材料以及有機(jī)溶劑混合制成。
(3)隔膜
隔膜是一種經(jīng)過(guò)特殊工藝處理的高分子薄膜,通常使用聚丙烯或聚乙烯材料的微多孔膜制成,用于在正極和負(fù)極之間作為鋰離子的移動(dòng)通道,同時(shí)能夠防止電子通過(guò)。
(4)電解液
電解液主要負(fù)責(zé)在充放電過(guò)程中鋰離子的傳送,通常為混有有機(jī)溶劑和添加劑的鋰鹽電解液。電解液需要能夠在電池工作過(guò)程時(shí)的氧化還原反應(yīng)中保持化學(xué)性能穩(wěn)定。

基本性能參數(shù)

(1)電池電壓
電動(dòng)勢(shì):電池正極與負(fù)極之間的電位差。
工作電壓(端電壓):在電池兩端接上負(fù)載后,在放電過(guò)程中顯示的電壓。開(kāi)路電壓:指電池處于開(kāi)路狀態(tài),即電池不放電時(shí)電池正負(fù)極的電位差。
額定電壓:指電池廠家規(guī)定的電池電壓,是電池出廠的重要性能參數(shù),電池正常工作時(shí),電池工作電壓應(yīng)該長(zhǎng)時(shí)間在電池額定電壓附近變化。
終止電壓:電池在一定標(biāo)準(zhǔn)所規(guī)定的充放電條件下對(duì)電池進(jìn)行充放電,當(dāng)電池不宜再繼續(xù)充放電時(shí),此時(shí)的工作電壓稱為終止電壓。當(dāng)電池的電壓下降到終止電壓后,再繼續(xù)使用,因受到化學(xué)“活性物質(zhì)”性能的限制,“活性物質(zhì)”會(huì)遭到破壞。
(2)電池容量
理論容量:是假設(shè)活性物質(zhì)全部參加電池的反應(yīng)所給出的電量。它是根據(jù)活性物質(zhì)的量按照法拉第定律計(jì)算求得的。實(shí)際電池放出的容量只是理論容量的一部分。
實(shí)際容量:是指在一定條件下,電池實(shí)際放出的電量,等于放電電流與放電時(shí)間的乘積。
剩余容量:指電池經(jīng)過(guò)一段時(shí)間的放電之后電池還剩余多少電量,數(shù)值上等于電池在當(dāng)前狀態(tài)下以標(biāo)準(zhǔn)環(huán)境溫度和標(biāo)準(zhǔn)放電電流放電至最小截止電壓時(shí)釋放的電量。
額定容量:是指設(shè)計(jì)和制造電池時(shí),規(guī)定或保證電池在一定的放電條件下應(yīng)該放出的最低限度的電量。
(3)電池自放電率
電池自放電率衡量了電池在靜置狀態(tài)時(shí),對(duì)其自身電量的保持能力。通常電池自放電率越小越好,其大小與環(huán)境溫度、電池材料和加工方式密切相關(guān)。一般而言,在電池適宜的溫度范圍內(nèi),環(huán)境溫度越低,自放電率也越低,同時(shí)也應(yīng)注意,溫度過(guò)低或過(guò)高均有可能造成電池?fù)p壞而無(wú)法正常投入使用。
(4)放電深度:
放電深度是放電程度的一種度量,常用 DOD(depth of discharge)表示,它體現(xiàn)參與反應(yīng)的活性材料所占的比例。
(5)電池內(nèi)阻:
該指標(biāo)是指電流通過(guò)電池內(nèi)部時(shí)受到的阻力,包括歐姆內(nèi)阻和極化內(nèi)阻兩部分。由于電池的內(nèi)阻作用,使得電池在放電時(shí)端電壓低于電動(dòng)勢(shì)和開(kāi)路電壓,在充電時(shí)端電高于電動(dòng)勢(shì)和開(kāi)路電壓。

鋰離子電池的充電特征

電池經(jīng)過(guò)長(zhǎng)時(shí)間的放電后,需要對(duì)電池再次充電才能投入使用。電池過(guò)充電對(duì)電池性能影響很大,過(guò)度充電會(huì)對(duì)電池造成損壞,縮短使用壽命,因此,選擇安全高效的電池充電方式對(duì)保護(hù)電池至關(guān)重要。目前,常用的電池充電方式有恒流充電法、恒壓充電法、恒流恒壓充電法(Constant Current-Constant Voltage ,CC-CV)以及脈沖式充電法。
恒流充電法是指在整個(gè)充電過(guò)程中,保持電池充電回路中電流保持不變的充電方法。通常可以利用調(diào)整電源輸出電壓或改變充電回路阻值的方式使得充電電流不變。該方法較為容易實(shí)施,充電時(shí)間短,但電池到了充電后期,對(duì)電流的接受能力逐漸下降,會(huì)造成了能量的浪費(fèi)。
恒壓充電法是在整個(gè)充電過(guò)程中,讓電源輸出電壓保持不變的充電方法。使用該方法對(duì)電池進(jìn)行充電時(shí),充電回路中的電流會(huì)逐漸減小,從而減少能量浪費(fèi)及防止電池過(guò)充電,但在充電初期,充電回路中的電流太大,會(huì)減少電池工作時(shí)間,電流過(guò)大時(shí)還有可能導(dǎo)致電池報(bào)廢。
恒流恒壓充電法是指電池先以恒流方式充電,使得電池電壓逐步升高,當(dāng)電池電壓達(dá)到充電截止電壓時(shí),再將恒流充電方式轉(zhuǎn)換為恒壓充電方式。恒流恒壓充電模式是普通鋰離子電池最常用的充電方式,該方法能夠快速充電,有效防止電池過(guò)充電,合理利用能量,延長(zhǎng)電池的使用壽命。
上面圖里的數(shù)據(jù)是從馬里蘭大學(xué)公開(kāi)電池?cái)?shù)據(jù)集得到的CS2電池組數(shù)據(jù)。馬里蘭大學(xué)壽命實(shí)驗(yàn)室

鋰離子SOH定義

1)基于容量定義的健康狀態(tài)
采用當(dāng)前鋰電池的額定容量比上初始是鋰電池的容量,再乘上100%,即為鋰離子電池的容量健康度。

式中,〖SOH〗_c為電池容量健康度,C_t為電池在t時(shí)刻的額定容量,C_0為電池的初始額定容量。
2)基于內(nèi)阻定義的健康狀態(tài)

式中,〖SOH〗_R為電池內(nèi)阻(通常指電池的歐姆內(nèi)阻)健康度,R_end為電池壽命終止時(shí)刻的內(nèi)阻,R(t)為電池在t時(shí)刻的內(nèi)阻,R_0為電池的初始內(nèi)阻。
3)基于功率定義的健康狀態(tài)

式中,〖SOH〗_P為電池功率健康度,P(0)鋰離子電池的最開(kāi)始的功率或銘牌功率(W),P(t)第t次充電后可供給的方均根(有效)功率(W)。
4)基于自放電定義的健康狀態(tài)

式中,〖SOH〗_Rd為電池自放電健康度,R_d (end)為電池壽命終止時(shí)刻的自放電電阻,R_d (t)為采樣t時(shí)刻的電池自放電電阻,R_d (0)代表電池在初始時(shí)刻的自放電電阻。

數(shù)據(jù)預(yù)處理代碼

首先要明白馬里蘭大學(xué)數(shù)據(jù)集的結(jié)構(gòu):

數(shù)據(jù)是以xlsx表格的格式存儲(chǔ)的

包含的數(shù)據(jù)主要有這幾個(gè)類別,其中有用得比較多的就是電流電壓和時(shí)間這幾項(xiàng)。
這里要特別注意:充電和放電的數(shù)據(jù)是連續(xù)記錄在表里的,要注意區(qū)分。NASA的數(shù)據(jù)則是充電和放電分開(kāi)的。

===================================

廢話不多說(shuō),我們上干貨,具體代碼作用看注釋,寫的比較清楚了。編程細(xì)節(jié)參考浙大的大佬python的數(shù)據(jù)處理,感謝大佬,讓我們減輕了很多工作量。代碼里SOH是用上面SOH定義的第一種計(jì)算方法得到的。

# 程序功能: 讀取一種電池的數(shù)據(jù)解析計(jì)算 # SOH,CCCT,CVCT,resistance,capacity數(shù)據(jù)并存儲(chǔ)為npy文件 # From: SWUST IPC14 Daiimport numpy as np import matplotlib.pyplot as plt import pandas as pd import globBattery_name = 'CS2_36' # 加載數(shù)據(jù) dir_path = 'dataset/'# 除去數(shù)據(jù)異常的較大值和較小值點(diǎn) def drop_outlier(array, count, bins):index = []range_ = np.arange(1, count, bins) # 返回一個(gè)有終點(diǎn)和起點(diǎn)的固定步長(zhǎng)的排列,起始為1,終值為count,步長(zhǎng)為binsfor i in range_[:-1]:array_lim = array[i:i+bins] # 從array中截取一個(gè)從i到i+bins的數(shù)組段sigma = np.std(array_lim) # 計(jì)算該數(shù)組段的全局標(biāo)準(zhǔn)差mean = np.mean(array_lim) # 計(jì)算數(shù)組段的平均值th_max,th_min = mean + sigma*2, mean - sigma*2 # 以方差和平均值作為上下限取值idx = np.where((array_lim < th_max) & (array_lim > th_min))idx = idx[0] + i # 將當(dāng)前的idx值+i后賦值到實(shí)際數(shù)組的角標(biāo)index.extend(list(idx)) # 在列尾增加一個(gè)listreturn np.array(index)Battery = {}print('Load the data directory structure ' + Battery_name + ' ...') path = glob.glob(dir_path + Battery_name + '/*.xlsx') dates = [] for p in path:df = pd.read_excel(p, sheet_name=1)print('Load file sequence ' + str(p) + ' ...')dates.append(df['Date_Time'][0]) idx = np.argsort(dates) path_sorted = np.array(path)[idx] print("The file structure was read successfully. There are {} files in total".format(len(path_sorted)))count = 0 discharge_capacities = [] health_indicator = [] internal_resistance = [] CCCT = [] CVCT = []for p in path_sorted:df = pd.read_excel(p, sheet_name=1)print('Load and Analytical data' + str(p) + ' ...')cycles = list(set(df['Cycle_Index'])) # 按照每個(gè)循環(huán)次數(shù)讀取# 在單個(gè)表中按照Cycle_Index(實(shí)驗(yàn)次數(shù))逐次取出每次的數(shù)據(jù)進(jìn)行處理for c in cycles:df_lim = df[df['Cycle_Index'] == c]# Chargingdf_c = df_lim[(df_lim['Step_Index'] == 2) | (df_lim['Step_Index'] == 4)] # 第2步和第4步充電c_v = df_c['Voltage(V)'] # 電壓c_c = df_c['Current(A)'] # 實(shí)時(shí)電流值c_t = df_c['Test_Time(s)'] # 記錄的測(cè)試時(shí)間# CC or CVdf_cc = df_lim[df_lim['Step_Index'] == 2] # 第2步恒流充電df_cv = df_lim[df_lim['Step_Index'] == 4] # 第4步恒壓充電CCCT.append(np.max(df_cc['Test_Time(s)']) - np.min(df_cc['Test_Time(s)'])) # 恒定電流充電時(shí)間CVCT.append(np.max(df_cv['Test_Time(s)']) - np.min(df_cv['Test_Time(s)'])) # 恒定電壓充電時(shí)間# Dischargingdf_d = df_lim[df_lim['Step_Index'] == 7] # 第7步時(shí)放電d_v = df_d['Voltage(V)']d_c = df_d['Current(A)']d_t = df_d['Test_Time(s)'] # 步長(zhǎng)時(shí)間d_im = df_d['Internal_Resistance(Ohm)'] # 內(nèi)阻if len(list(d_c)) != 0:time_diff = np.diff(list(d_t)) # 求時(shí)間差,np.diff:計(jì)算數(shù)組中n[a]-n[a-1]d_c = np.array(list(d_c))[1:] # 讀出電流值discharge_capacity = time_diff * d_c / 3600 # 計(jì)算安培時(shí)(Ah)Q = A*h# print("discharge_capacity shape[0] is:{}".format(discharge_capacity.shape[0]))# 將所有第7步中的電池放電容量求和并正定# discharge_capacity_sum = np.sum(discharge_capacity)# discharge_capacities.append(-1 * discharge_capacity_sum)discharge_capacity = [np.sum(discharge_capacity[:n]) for n in range(discharge_capacity.shape[0])]discharge_capacities.append(-1 * discharge_capacity[-1])dec = np.abs(np.array(d_v) - 3.8)[1:] # np.abs:求絕對(duì)值# np.argmin:將數(shù)組展平返回最小值的下標(biāo)start = np.array(discharge_capacity)[np.argmin(dec)] # 取出當(dāng)電壓最接近3.8V時(shí)電池的放電量dec = np.abs(np.array(d_v) - 3.4)[1:]end = np.array(discharge_capacity)[np.argmin(dec)] # 取出電壓最接近3.4V時(shí)的電池放電量health_indicator.append((-1 * (end - start))) # 這里定義的SOH是電池從3.8V放電到3.4V的電池容量internal_resistance.append(np.mean(np.array(d_im))) # 求放電階段電池的的內(nèi)阻平均值count += 1 health_indicator = health_indicator/np.max(health_indicator) # 計(jì)算SOHdischarge_capacities = np.array(discharge_capacities) SOC = discharge_capacities/1.1 # CS2電池的標(biāo)準(zhǔn)容量為1.1Ah health_indicator = np.array(health_indicator) internal_resistance = np.array(internal_resistance) CCCT = np.array(CCCT) CVCT = np.array(CVCT)idx = drop_outlier(discharge_capacities, count, 40) # 以所有輪次中放電步驟的放電容量值為原始數(shù)據(jù),以40為步長(zhǎng),對(duì)數(shù)據(jù)進(jìn)行清洗處理 df_result = pd.DataFrame({'cycle': np.linspace(1, idx.shape[0], idx.shape[0]), # 步數(shù)'capacity': SOC[idx], # 容量'SoH': health_indicator[idx], # SOH'resistance': internal_resistance[idx], # 電池內(nèi)阻'CCCT': CCCT[idx],'CVCT': CVCT[idx]}) Battery[Battery_name] = df_result np.save(dir_path + Battery_name, Battery) print("Data parsing succeeded. The .npy file was saved to {}".format(dir_path + Battery_name + '.npy'))

總結(jié)

以上是生活随笔為你收集整理的锂离子电池健康状态估计简介(一):基于Python的数据处理计算SOH,RUL,CCCT,CVCT的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。