chargeController/APP/businessLogic/Src/soc.c

120 lines
4.1 KiB
C
Raw Normal View History

#include "soc.h"
// const float ocv_table[101] = {
// 2.80, 2.85, 2.90, 2.95, 3.00, 3.05, 3.10, 3.12, 3.14, 3.16, // 0-9%
// 3.18, 3.19, 3.20, 3.20, 3.20, 3.20, 3.21, 3.21, 3.21, 3.21, // 10-19%
// 3.22, 3.22, 3.22, 3.22, 3.22, 3.22, 3.23, 3.23, 3.23, 3.23, // 20-29%
// 3.23, 3.23, 3.23, 3.23, 3.23, 3.23, 3.23, 3.24, 3.24, 3.24, // 30-39%
// 3.24, 3.24, 3.25, 3.25, 3.25, 3.25, 3.25, 3.25, 3.25, 3.25, // 40-49%
// 3.25, 3.25, 3.25, 3.25, 3.25, 3.26, 3.26, 3.26, 3.26, 3.26, // 50-59%
// 3.26, 3.26, 3.26, 3.26, 3.26, 3.26, 3.27, 3.27, 3.27, 3.27, // 60-69%
// 3.28, 3.28, 3.28, 3.29, 3.29, 3.29, 3.30, 3.30, 3.31, 3.31, // 70-79%
// 3.32, 3.32, 3.33, 3.34, 3.35, 3.36, 3.38, 3.40, 3.42, 3.45, // 80-89%
// 3.48, 3.50, 3.52, 3.54, 3.56, 3.58, 3.60, 3.62, 3.63, 3.64, // 90-99%
// 3.65 // 100%
// };
// /**
// * 四节串联磷酸铁锂电池组 SOC-OCV 对应表 (SOC步长1%)
// * 电压范围11.2V (0%) ~ 14.6V (100%)
// * 注意:
// * 1. 假设电池完全均衡,实际需考虑单体差异
// * 2. 电压单位伏特V
// */
// const float ocv_table_4s[101] = {
// // 0-9% (单节2.80V~3.16V → 四节11.20V~12.64V)
// 11.20, 11.40, 11.60, 11.80, 12.00, 12.20, 12.40, 12.48, 12.56, 12.64, // 0-9%
// // 10-19% (单节3.18V~3.21V → 四节12.72V~12.84V)
// 12.72, 12.76, 12.80, 12.80, 12.80, 12.80, 12.84, 12.84, 12.84, 12.84, // 10-19%
// // 20-29% (单节3.22V~3.23V → 四节12.88V~12.92V)
// 12.88, 12.88, 12.88, 12.88, 12.88, 12.88, 12.92, 12.92, 12.92, 12.92, // 20-29%
// // 30-39% (单节3.23V~3.24V → 四节12.92V~12.96V)
// 12.92, 12.92, 12.92, 12.92, 12.92, 12.92, 12.92, 12.96, 12.96, 12.96, // 30-39%
// // 40-49% (单节3.24V~3.25V → 四节12.96V~13.00V)
// 12.96, 12.96, 13.00, 13.00, 13.00, 13.00, 13.00, 13.00, 13.00, 13.00, // 40-49%
// // 50-59% (单节3.25V~3.26V → 四节13.00V~13.04V)
// 13.00, 13.00, 13.00, 13.00, 13.00, 13.04, 13.04, 13.04, 13.04, 13.04, // 50-59%
// // 60-69% (单节3.26V~3.27V → 四节13.04V~13.08V)
// 13.04, 13.04, 13.04, 13.04, 13.04, 13.04, 13.08, 13.08, 13.08, 13.08, // 60-69%
// // 70-79% (单节3.28V~3.31V → 四节13.12V~13.24V)
// 13.12, 13.12, 13.12, 13.16, 13.16, 13.16, 13.20, 13.20, 13.24, 13.24, // 70-79%
// // 80-89% (单节3.32V~3.45V → 四节13.28V~13.80V)
// 13.28, 13.28, 13.32, 13.36, 13.40, 13.44, 13.52, 13.60, 13.68, 13.80, // 80-89%
// // 90-100% (单节3.48V~3.65V → 四节13.92V~14.60V)
// 13.92, 14.00, 14.08, 14.16, 14.24, 14.32, 14.40, 14.48, 14.52, 14.56, // 90-99%
// 14.60 // 100%
// };
/**
* SOC-OCV (SOC步长1%)
* 11.2V (0%) ~ 14.6V (100%)
*
* 1.
* 2. V
*/
const float ocv_table_4s[21] = {
// 0-9% (单节2.80V~3.16V → 四节11.20V~12.64V)
12.00, 12.64, // 0-9%
// 10-19% (单节3.18V~3.21V → 四节12.72V~12.84V)
12.80, 12.84, // 10-19%
// 20-29% (单节3.22V~3.23V → 四节12.88V~12.92V)
12.88, 12.92, // 20-29%
// 30-39% (单节3.23V~3.24V → 四节12.92V~12.96V)
12.93, 12.96, // 30-39%
// 40-49% (单节3.24V~3.25V → 四节12.96V~13.00V)
12.98, 13.00, // 40-49%
// 50-59% (单节3.25V~3.26V → 四节13.00V~13.04V)
13.02, 13.04, // 50-59%
// 60-69% (单节3.26V~3.27V → 四节13.04V~13.08V)
13.05, 13.08, // 60-69%
// 70-79% (单节3.28V~3.31V → 四节13.12V~13.24V)
13.16, 13.24, // 70-79%
// 80-89% (单节3.32V~3.45V → 四节13.28V~13.80V)
13.40, 13.80, // 80-89%
// 90-100% (单节3.48V~3.65V → 四节13.92V~14.60V)
13.92, 14.24, // 90-99%
14.60 // 100%
};
/**
* @brief SOC在数组中的位置
* @param
* @retval soc*100
*/
int find_soc(float voltage)
{
// static volatile int soc = 0;
// for(soc = 0; soc <= 100; soc++) {
for(int soc = 0; soc <= 100; soc++) {
if(ocv_table_4s[soc] >= voltage) {
return soc * 5;
}
}
return 100;
}