chargeController/APP/businessLogic/Src/soc.c

120 lines
4.1 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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;
}