state.h 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  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. typedef struct{
  18. uint16_t discharging :1;
  19. uint16_t charging: 1;
  20. uint16_t pack_balancing:1;
  21. uint16_t pack_voltage; //电池包的总电压
  22. int used_by;//where this battery is used for: on motor, on charger docker, on charger box, NONE
  23. int user_request;
  24. }bms_state_t;
  25. #define USER_REQUEST_CHARGER BIT(0)
  26. #define USER_REQUEST_DISCHARGER BIT(1)
  27. #define USER_REQUEST_SMALLCURRENT BIT(2)
  28. typedef struct {
  29. shark_timer_t _timer;
  30. int count;
  31. int max_count;
  32. int interval;
  33. }debounce_timer_t;
  34. typedef struct {
  35. int count;
  36. int max_count;
  37. }debounce_t;
  38. #define debounce_reach(dt) ((dt)->count >= (dt)->max_count)
  39. #define debounce_reset(dt) ((dt)->count = 0)
  40. #define debounce_inc(dt) ((dt)->count++)
  41. void bms_state_init(void);
  42. bms_state_t * bms_state_get(void);
  43. #endif /* _BMS_STATE_H__ */