state.h 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. #ifndef _BMS_STATE_H__
  2. #define _BMS_STATE_H__
  3. #include "bsp/shark_bsp.h"
  4. #include "libs/shark_libs.h"
  5. #ifndef BIT
  6. #define BIT(x) ((uint32_t)((uint32_t)0x01U<<(x)))
  7. #endif
  8. #ifndef BITS
  9. #define BITS(start, end) ((0xFFFFFFFFUL << (start)) & (0xFFFFFFFFUL >> (31U - (uint32_t)(end))))
  10. #endif
  11. #define BATT_USED_BY_NONE 0
  12. #define BATT_USED_BY_MOTOR_BIKE 1
  13. #define BATT_USED_BY_CHARGER_DOCKER 2
  14. #define HATT_USED_BY_CHARGER_BOX 3
  15. #define MIN_START_CHARGER_CURRENT 100 //ma, 如果有正向超过 MIN_START_CHARGER_CURRENT的电流,认为在充电
  16. #define MIN_START_LOADING_CURRENT 2 //ma, 如果有反向小于 MIN_START_LOADING_CURRENT的电流,认为在放电
  17. #define MAX_DIFF_BETWEEN_MIN_MAX_CELL 150 //0.15v ,压差超过这个值,开始balance
  18. #define MIN_DIFF_BETWEEN_MIN_MAX_CELL 050 //0.05v, 牙差低于这个数据,停止balance
  19. typedef struct{
  20. uint16_t discharging :1;
  21. uint16_t charging: 1;
  22. uint16_t pack_balancing:1;
  23. uint16_t pack_voltage; //电池包的总电压
  24. uint16_t cell_max_vol;
  25. uint16_t cell_min_vol;
  26. uint8_t cell_index_of_max_vol;
  27. int used_by;//where this battery is used for: on motor, on charger docker, on charger box, NONE
  28. int user_request;
  29. }bms_state_t;
  30. #define USER_REQUEST_CHARGER BIT(0)
  31. #define USER_REQUEST_DISCHARGER BIT(1)
  32. #define USER_REQUEST_SMALLCURRENT BIT(2)
  33. typedef struct {
  34. shark_timer_t _timer;
  35. int count;
  36. int max_count;
  37. int interval;
  38. }debounce_timer_t;
  39. typedef struct {
  40. int count;
  41. int max_count;
  42. }debounce_t;
  43. /* 充电充满判断OK前,需要经过balance 的判断再决定是否告知充电完成,判断balance前soc会一直在99%
  44. * balance 的时候,不会停止充电,soc一直99%,推出balance后,soc直接到100%
  45. */
  46. typedef enum {
  47. charger_full_fsm_start = 0,
  48. charger_full_fsm_check_balance,
  49. charger_full_fsm_end_balance,
  50. charger_full_fsm_full
  51. }charger_full_fsm_t;
  52. #define debounce_reach_max(dt) (dt.count >= dt.max_count)
  53. #define debounce_reach_zero(dt) (dt.count == 0)
  54. #define debounce_reset(dt) {dt.count = 0;}
  55. #define debounce_inc(dt) {if (dt.count < dt.max_count) dt.count++;}
  56. #define debounce_dec(dt) {if (dt.count > 0) dt.count--;}
  57. void bms_state_init(void);
  58. bms_state_t * bms_state_get(void);
  59. #endif /* _BMS_STATE_H__ */