health.h 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. #ifndef _HEALTH_H__
  2. #define _HEALTH_H__
  3. #include <stdint.h>
  4. #include "bsp/shark_bsp.h"
  5. #define MAX_CURRENT_FOR_CHARGER (30*1000) //最大充电电流20A
  6. #define SIGLE_CELL_MAX_CHARGER_VOLTAGE (3800)//最大允许充电电压,3.9v,考虑到采样的误差取 3.88
  7. #define MAX_CURRENT_FOR_DISCHARGER (120 * 1000) //软件采样的电流保护
  8. #define AUX_SHORT_REAL_DIFF_VOLTAGE (5) //判断小电流是否真实短路的,端口压差
  9. #define AUX_SHORT_DIFF_VOLTAGE (7.5f) //判断小电流是否保护,28欧姆上的电压,能抗300mA
  10. /*
  11. * xxx_over_temp: 表示过高温(温度过高)
  12. * xxx_under_temp: 表示过低温(温度过低)
  13. */
  14. typedef struct {
  15. uint32_t charger_over_voltage:1;
  16. uint32_t discharger_lower_voltage:1; //关闭大电流输出
  17. uint32_t small_current_short:1;
  18. uint32_t load_current_short:1; //大电短路保护
  19. uint32_t charger_current:1; //不需要
  20. uint32_t discharger_current:1;
  21. uint32_t charger_over_current:1;
  22. uint32_t discharger_over_current:1;
  23. uint32_t res1 :1;//ST_TOTAL_CHRG
  24. uint32_t charger_cells_vol_diff_over:1; //充电cell的电压差异超过阈值
  25. uint32_t power_save:1;
  26. uint32_t powerdown_lower_voltage:1;
  27. uint32_t charger_lower_temp:1;
  28. uint32_t discharger_lower_temp:1;
  29. uint32_t charger_over_temp:1;
  30. uint32_t discharger_over_temp:1;
  31. uint32_t sigle_cell_lower_voltage:1; //关闭大电流输出
  32. uint32_t sigle_cell_over_voltage:1;
  33. uint32_t discharger_shutpower_voltage:1; //关闭动力
  34. uint32_t discharger_cell_shutpower_voltage:1; //关闭动力
  35. uint32_t is_work_temp_normal:1;
  36. uint32_t lower_temp_deny_charger:1;
  37. uint32_t lower_temp_deny_discharger:1;
  38. uint32_t over_temp_deny_charger:1;
  39. uint32_t over_temp_deny_discharger:1;
  40. uint32_t small_current_real_short:1; //真实短路
  41. uint32_t res2:10;
  42. uint8_t internal_resistance[CELLS_NUM]; //cell's internal resistance
  43. }bms_health_t;
  44. typedef struct {
  45. uint32_t soft_current_short;
  46. uint32_t hard_current_short;
  47. uint32_t aux_short;
  48. uint32_t aux_real_short;
  49. }error_counts_t;
  50. bms_health_t *bms_health(void);
  51. void health_init(void);
  52. void check_current_state(void);
  53. void check_voltage_state(void);
  54. void check_temp_state(void);
  55. void health_process_aux_lock(void);
  56. void health_stop_aux_detect(void);
  57. uint32_t bms_health_pack_lower_voltage(void);
  58. uint32_t bms_health_cell_lower_voltage(void);
  59. void health_log(void);
  60. #endif /* _HEALTH_H__ */