cb_operate.c 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. int8_t Battery_CB_Switch_Bake(uint8_t cb_operate)
  2. {
  3. CB_VAL cb_val_temp;
  4. uint8_t delay_flag = 0;
  5. switch(cb_operate)
  6. {
  7. case CB_BAT1:
  8. cb_val_temp.s10_bit = 1;
  9. cb_val_temp.s11_bit = 1;
  10. cb_val_temp.s20_bit = 0;
  11. cb_val_temp.s21_bit = 0;
  12. cb_val_temp.ss__bit = 0;
  13. break;
  14. case CB_BAT2:
  15. cb_val_temp.s10_bit = 0;
  16. cb_val_temp.s11_bit = 0;
  17. cb_val_temp.s20_bit = 1;
  18. cb_val_temp.s21_bit = 1;
  19. cb_val_temp.ss__bit = 0;
  20. break;
  21. case CB_BAT1_BAT2_PARRALLEL:
  22. if(sub_bms_info_1.packet_common.m_total_vol >= sub_bms_info_2.packet_common.m_total_vol)
  23. {
  24. cb_val_temp.s10_bit = 1;
  25. cb_val_temp.s11_bit = 1;
  26. cb_val_temp.s20_bit = 1;
  27. cb_val_temp.s21_bit = 0;
  28. cb_val_temp.ss__bit = 0;
  29. }
  30. else
  31. {
  32. cb_val_temp.s10_bit = 1;
  33. cb_val_temp.s11_bit = 0;
  34. cb_val_temp.s20_bit = 1;
  35. cb_val_temp.s21_bit = 1;
  36. cb_val_temp.ss__bit = 0;
  37. }
  38. break;
  39. case CB_BAT1_BAT2_SERIES:
  40. cb_val_temp.s10_bit = 1;
  41. cb_val_temp.s11_bit = 0;
  42. cb_val_temp.s20_bit = 1;
  43. cb_val_temp.s21_bit = 0;
  44. cb_val_temp.ss__bit = 1;
  45. break;
  46. case CB_BAT_NO:
  47. default:
  48. cb_val_temp.s10_bit = 0;
  49. cb_val_temp.s11_bit = 0;
  50. cb_val_temp.s20_bit = 0;
  51. cb_val_temp.s21_bit = 0;
  52. cb_val_temp.ss__bit = 0;
  53. break;
  54. }
  55. // 1----->0
  56. if(cb_val_last.s10_bit > cb_val_temp.s10_bit)
  57. {
  58. S10_ENABLE(cb_val_temp.s10_bit);
  59. delay_flag = 1;
  60. }
  61. if(cb_val_last.s11_bit > cb_val_temp.s11_bit)
  62. {
  63. S11_ENABLE(cb_val_temp.s11_bit);
  64. delay_flag = 1;
  65. }
  66. if(cb_val_last.s20_bit > cb_val_temp.s20_bit)
  67. {
  68. S20_ENABLE(cb_val_temp.s20_bit);
  69. delay_flag = 1;
  70. }
  71. if(cb_val_last.s21_bit > cb_val_temp.s21_bit)
  72. {
  73. S21_ENABLE(cb_val_temp.s21_bit);
  74. delay_flag = 1;
  75. }
  76. if(cb_val_last.ss__bit > cb_val_temp.ss__bit)
  77. {
  78. SS__ENABLE(cb_val_temp.ss__bit);
  79. delay_flag = 1;
  80. }
  81. //delay
  82. if(delay_flag)
  83. delay_1ms(1);
  84. //
  85. Battery_CB_Operate(&cb_val_temp);
  86. //
  87. cb_val_last = cb_val_temp;
  88. cb_operate_state = cb_operate;
  89. return cb_operate;
  90. }