[Battery Test] Processing OCV(5) - Modeling Temperature Dependence

2021. 1. 23. 20:37[Battery is my Life]

  • Find $OCV \ 0^\circ (z) \ , \ OCV \ rel (z)$ using equation below

calculation


$
\begin{bmatrix}
Approx. \ OCV \ at \ SOC \ (z)\ , \ temp \ T_1 \\ Approx. \ OCV \ at \ SOC \ (z)\ , \ temp \ T_2 \\ Approx. \ OCV \ at \ SOC \ (z)\ , \ temp \ T_3 \\ \vdots \\ Approx. \ OCV \ at \ SOC \ (z)\ , \ temp \ T_n
\end{bmatrix}
=
\begin{bmatrix}
1 & T_1 \\ 1 & T_2 \\ 1 & T_3 \\ & \vdots & \\ 1 & T_n
\end{bmatrix}
\cdot
\begin{bmatrix}
OCV \ 0^\circ (z) \\ OCV \ rel (z)
\end{bmatrix}
$


$
{\begin{bmatrix}
1 & T_1 \\ 1 & T_2 \\ 1 & T_3 \\ & \vdots & \\ 1 & T_n
\end{bmatrix}}^{-1}
\cdot
\begin{bmatrix}
Approx. \ OCV \ at \ SOC \ (z)\ , \ temp \ T_1 \\ Approx. \ OCV \ at \ SOC \ (z)\ , \ temp \ T_2 \\ Approx. \ OCV \ at \ SOC \ (z)\ , \ temp \ T_3 \\ \vdots \\ Approx. \ OCV \ at \ SOC \ (z)\ , \ temp \ T_n
\end{bmatrix}
=
\begin{bmatrix}
OCV \ 0^\circ (z) \\ OCV \ rel (z)
\end{bmatrix}
$


temperature dependence equation


$
OCV(z,T) = OCV_{0}(z) + T \times OCV_{relative}(z)
$


readme

  • OCV_SOC_data : 아래와 같은 dataframe이 담겨져있다

OCV_SOC_data


  • temp_table : 아래와 같은 정보(온도)가 array 형태로 담겨져있다

$ \begin{bmatrix} 1 & -25 \\ 1 & -15 \\ 1 & -5 \\ 1 & 5 \\ 1 & 15 \\ 1 & 25 \\ 1 & 35 \\ 1 & 45 \end{bmatrix} $

code

# Modeling Temperature Dependence

# 온도별 OCV 담기
total_OCV = []
for temp in OCV_SOC_data.columns[1:] :
    total_OCV.append(OCV_SOC_data[temp].tolist())

# 온도별 OCV array로 형태 변환
# [1,온도] array로 형태 변환
total_OCV = np.array(total_OCV)
temp_table = np.array(temp_table)

# least square calculation
# x 에 (temp_table)^(-1) * (total_OCV) 의 데이터가 담겨져있다
# rcond = None 으로 설정해야 warning 안뜸
x,resid,rank,s = np.linalg.lstsq(temp_table,total_OCV,rcond=None)

# DataFrame에 담기
# x[0] : OCV relationship at 0 degrees Celsius
# x[1] : V/C linear temperature correction factor at each soc
OCV_SOC_data['OCV_0(V)'] = x[0]
OCV_SOC_data['OCV_rel(V)'] = x[1]

[Code Analysis]

np.linalg.lstsq()

np.linalg.lstsq(A,B)
# returns X = A^(-1) * B / residuals / rank / s 
# residuals, rank , singular values 에 대한 것들은 나중에 파헤쳐보자 

[Conclusion]

  • 아래와 같은 DataFrame 생성!
  • 전체 배터리 (A123, ATL, E1, E2, P14, SAM) 에 대한 데이터 수집을 해보자!

SOC vs OCV DataFrame

728x90