|
|
@@ -24,8 +24,10 @@ static u32 _bms_main_task_handler(void);
|
|
|
static void _debug_timer_handler(shark_timer_t *t);
|
|
|
|
|
|
static bms_state_t _bms_state;
|
|
|
+static int8_t pcb_temp = 100;
|
|
|
+static int pcb_temp_count = 0;
|
|
|
+static int ml5238_cali_count = 0;
|
|
|
static shark_task_t _bms_main_task = {.handler = _bms_main_task_handler};
|
|
|
-
|
|
|
static shark_timer_t _debug_timer = {.handler = _debug_timer_handler};
|
|
|
|
|
|
void bms_state_init(void){
|
|
|
@@ -40,6 +42,8 @@ void bms_state_init(void){
|
|
|
_bms_state.user_request = USER_REQUEST_PENDING | USER_REQUEST_SMALLCURRENT_ON;
|
|
|
shark_task_add(&_bms_main_task);
|
|
|
shark_timer_post(&_debug_timer, 2000);
|
|
|
+
|
|
|
+ pcb_temp = measure_value()->pack_temp[PCB_TEMP_INDEX];
|
|
|
}
|
|
|
|
|
|
bms_state_t *bms_state_get(void){
|
|
|
@@ -82,6 +86,7 @@ int bms_work_mode_set(int mode, int start){
|
|
|
void bms_state_log(void){
|
|
|
state_warning("Life Time: %d\n", shark_get_seconds());
|
|
|
state_warning("Sleep Time: %ds\n", get_system_sleep_time());
|
|
|
+ state_warning("ml5238 cali: %d\n", ml5238_cali_count);
|
|
|
state_debug("Charging: %d\n", _bms_state.charging);
|
|
|
state_debug("WorkMode %d\n", _bms_state.work_mode);
|
|
|
state_debug("DMos: %d\n", ml5238_is_discharging());
|
|
|
@@ -492,20 +497,16 @@ static void _voltage_notify(void){
|
|
|
}
|
|
|
|
|
|
static void _temperature_notify(void){
|
|
|
- static int8_t pcb_temp = 100;
|
|
|
- static int pcb_temp_count = 0;
|
|
|
- if (pcb_temp == 100) {
|
|
|
- pcb_temp = measure_value()->pack_temp[PCB_TEMP_INDEX];
|
|
|
- }else {
|
|
|
- if (abs(pcb_temp - measure_value()->pack_temp[PCB_TEMP_INDEX]) >= 5){//pcb温度变化超过5度,需要重新校准ML5238
|
|
|
- if (pcb_temp_count ++ >= 5) {
|
|
|
- current_calibrate();
|
|
|
- pcb_temp = measure_value()->pack_temp[PCB_TEMP_INDEX];
|
|
|
- state_warning("ML5238 calibrate!!\n");
|
|
|
- }
|
|
|
- }else {
|
|
|
+ if (abs(pcb_temp - measure_value()->pack_temp[PCB_TEMP_INDEX]) >= 5){//pcb温度变化超过5度,需要重新校准ML5238
|
|
|
+ if (pcb_temp_count ++ >= 5) {
|
|
|
+ current_calibrate();
|
|
|
+ pcb_temp = measure_value()->pack_temp[PCB_TEMP_INDEX];
|
|
|
+ state_warning("ML5238 calibrate!!\n");
|
|
|
pcb_temp_count = 0;
|
|
|
+ ml5238_cali_count ++;
|
|
|
}
|
|
|
+ }else {
|
|
|
+ pcb_temp_count = 0;
|
|
|
}
|
|
|
check_temp_state(); //check health of cell/pcb temperature
|
|
|
}
|