battery_display.c 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284
  1. #include "battery_display.h"
  2. #include "tasks.h"
  3. void Charging_Status_Battery_Display(uint8_t Soc)
  4. {
  5. static uint32_t Charging1TimeCnt = 0;
  6. static uint32_t Charging2TimeCnt = 0;
  7. static uint32_t Charging3TimeCnt = 0;
  8. static uint32_t Charging4TimeCnt = 0;
  9. static uint32_t Charging5TimeCnt = 0;
  10. static uint8_t Charging1_Flag = 0;
  11. static uint8_t Charging2_Flag = 0;
  12. static uint8_t Charging3_Flag = 0;
  13. static uint8_t Charging4_Flag = 0;
  14. static uint8_t Charging5_Flag = 0;
  15. static uint8_t reset_flag = 0;
  16. if(Soc < 0x19)
  17. {
  18. Charging2_Flag = 0;
  19. Charging3_Flag = 0;
  20. Charging4_Flag = 0;
  21. Charging5_Flag = 0;
  22. reset_flag = 0;
  23. HAL_GPIO_WritePin(TWO_GPIO_Port, TWO_Pin, GPIO_PIN_SET);
  24. HAL_GPIO_WritePin(THREE_GPIO_Port, THREE_Pin, GPIO_PIN_SET);
  25. HAL_GPIO_WritePin(FOUR_GPIO_Port, FOUR_Pin, GPIO_PIN_SET);
  26. if(Charging1_Flag == 0)
  27. {
  28. Charging1TimeCnt = SysTime_5ms;
  29. Charging1_Flag = 1;
  30. }
  31. if(TimeCntDiff_5ms(Charging1TimeCnt) >= CHARGING_TIME)
  32. {
  33. HAL_GPIO_TogglePin(ONE_GPIO_Port, ONE_Pin);
  34. Charging1_Flag = 0;
  35. }
  36. }
  37. else if((Soc >= 0x19) && (Soc < 0x32))
  38. {
  39. Charging1_Flag = 0;
  40. Charging3_Flag = 0;
  41. Charging4_Flag = 0;
  42. Charging5_Flag = 0;
  43. reset_flag = 0;
  44. HAL_GPIO_WritePin(ONE_GPIO_Port, ONE_Pin, GPIO_PIN_RESET);
  45. HAL_GPIO_WritePin(THREE_GPIO_Port, THREE_Pin, GPIO_PIN_SET);
  46. HAL_GPIO_WritePin(FOUR_GPIO_Port, FOUR_Pin, GPIO_PIN_SET);
  47. if(Charging2_Flag == 0)
  48. {
  49. Charging2TimeCnt = SysTime_5ms;
  50. Charging2_Flag = 1;
  51. }
  52. if(TimeCntDiff_5ms(Charging2TimeCnt) >= CHARGING_TIME)
  53. {
  54. HAL_GPIO_TogglePin(TWO_GPIO_Port, TWO_Pin);
  55. Charging2_Flag = 0;
  56. }
  57. }
  58. else if((Soc >= 0x32) && (Soc < 0x4B))
  59. {
  60. Charging1_Flag = 0;
  61. Charging2_Flag = 0;
  62. Charging4_Flag = 0;
  63. Charging5_Flag = 0;
  64. reset_flag = 0;
  65. HAL_GPIO_WritePin(ONE_GPIO_Port, ONE_Pin, GPIO_PIN_RESET);
  66. HAL_GPIO_WritePin(TWO_GPIO_Port, TWO_Pin, GPIO_PIN_RESET);
  67. HAL_GPIO_WritePin(FOUR_GPIO_Port, FOUR_Pin, GPIO_PIN_SET);
  68. if(Charging3_Flag == 0)
  69. {
  70. Charging3TimeCnt = SysTime_5ms;
  71. Charging3_Flag = 1;
  72. }
  73. if(TimeCntDiff_5ms(Charging3TimeCnt) >= CHARGING_TIME)
  74. {
  75. HAL_GPIO_TogglePin(THREE_GPIO_Port, THREE_Pin);
  76. Charging3_Flag = 0;
  77. }
  78. }
  79. else if((Soc >= 0x4B) && (Soc < 0x64))
  80. {
  81. Charging1_Flag = 0;
  82. Charging2_Flag = 0;
  83. Charging3_Flag = 0;
  84. Charging5_Flag = 0;
  85. reset_flag = 0;
  86. HAL_GPIO_WritePin(ONE_GPIO_Port, ONE_Pin, GPIO_PIN_RESET);
  87. HAL_GPIO_WritePin(TWO_GPIO_Port, TWO_Pin, GPIO_PIN_RESET);
  88. HAL_GPIO_WritePin(THREE_GPIO_Port, THREE_Pin, GPIO_PIN_RESET);
  89. if(Charging4_Flag == 0)
  90. {
  91. Charging4TimeCnt = SysTime_5ms;
  92. Charging4_Flag = 1;
  93. }
  94. if(TimeCntDiff_5ms(Charging4TimeCnt) >= CHARGING_TIME)
  95. {
  96. HAL_GPIO_TogglePin(FOUR_GPIO_Port, FOUR_Pin);
  97. Charging4_Flag = 0;
  98. }
  99. }
  100. else if(Soc == 0x64)
  101. {
  102. Charging1_Flag = 0;
  103. Charging2_Flag = 0;
  104. Charging3_Flag = 0;
  105. Charging4_Flag = 0;
  106. if(reset_flag == 0)
  107. {
  108. HAL_GPIO_WritePin(ONE_GPIO_Port, ONE_Pin, GPIO_PIN_RESET);
  109. HAL_GPIO_WritePin(TWO_GPIO_Port, TWO_Pin, GPIO_PIN_RESET);
  110. HAL_GPIO_WritePin(THREE_GPIO_Port, THREE_Pin, GPIO_PIN_RESET);
  111. HAL_GPIO_WritePin(FOUR_GPIO_Port, FOUR_Pin, GPIO_PIN_RESET);
  112. reset_flag = 1;
  113. }
  114. if(Charging5_Flag == 0)
  115. {
  116. Charging5TimeCnt = SysTime_5ms;
  117. Charging5_Flag = 1;
  118. }
  119. if(TimeCntDiff_5ms(Charging5TimeCnt) >= CHARGING_TIME)
  120. {
  121. HAL_GPIO_TogglePin(ONE_GPIO_Port, ONE_Pin);
  122. HAL_GPIO_TogglePin(TWO_GPIO_Port, TWO_Pin);
  123. HAL_GPIO_TogglePin(THREE_GPIO_Port, THREE_Pin);
  124. HAL_GPIO_TogglePin(FOUR_GPIO_Port, FOUR_Pin);
  125. Charging5_Flag = 0;
  126. }
  127. }
  128. }
  129. void Normal_Work_Battery_Display(uint8_t Soc)
  130. {
  131. static uint32_t LowerPowerTimeCnt = 0;
  132. static uint32_t VeryLowerPowerTimeCnt = 0;
  133. static uint8_t Low_Power_Flag = 0;
  134. static uint8_t Very_Low_Power_Flag = 0;
  135. static uint8_t NoBattery_Flag = 0;
  136. static uint32_t NoBattery_TimeCnt=0;
  137. if(Soc < 0x05)//<5%
  138. {
  139. if(Very_Low_Power_Flag == 0)
  140. {
  141. VeryLowerPowerTimeCnt = SysTime_5ms;
  142. Very_Low_Power_Flag = 1;
  143. }
  144. if(TimeCntDiff_5ms(VeryLowerPowerTimeCnt) >= VERY_LOW_POWER_TIME)
  145. {
  146. HAL_GPIO_TogglePin(ONE_GPIO_Port, ONE_Pin);
  147. Very_Low_Power_Flag = 0;
  148. }
  149. HAL_GPIO_WritePin(TWO_GPIO_Port, TWO_Pin, GPIO_PIN_SET);
  150. HAL_GPIO_WritePin(THREE_GPIO_Port, THREE_Pin, GPIO_PIN_SET);
  151. HAL_GPIO_WritePin(FOUR_GPIO_Port, FOUR_Pin, GPIO_PIN_SET);
  152. }
  153. if((Soc >= 0x05) && (Soc <= 0x0A))//5%-10%
  154. {
  155. if(Low_Power_Flag == 0)
  156. {
  157. LowerPowerTimeCnt = SysTime_5ms;
  158. Low_Power_Flag = 1;
  159. }
  160. if(TimeCntDiff_5ms(LowerPowerTimeCnt) >= LOW_POWER_TIME)
  161. {
  162. HAL_GPIO_TogglePin(ONE_GPIO_Port, ONE_Pin);
  163. Low_Power_Flag = 0;
  164. }
  165. Very_Low_Power_Flag = 0;
  166. HAL_GPIO_WritePin(TWO_GPIO_Port, TWO_Pin, GPIO_PIN_SET);
  167. HAL_GPIO_WritePin(THREE_GPIO_Port, THREE_Pin, GPIO_PIN_SET);
  168. HAL_GPIO_WritePin(FOUR_GPIO_Port, FOUR_Pin, GPIO_PIN_SET);
  169. }
  170. else if((Soc > 0x0A) && (Soc <= 0x19))//10%-25%
  171. {
  172. Low_Power_Flag = 0;
  173. Very_Low_Power_Flag = 0;
  174. HAL_GPIO_WritePin(ONE_GPIO_Port, ONE_Pin, GPIO_PIN_RESET);
  175. HAL_GPIO_WritePin(TWO_GPIO_Port, TWO_Pin, GPIO_PIN_SET);
  176. HAL_GPIO_WritePin(THREE_GPIO_Port, THREE_Pin, GPIO_PIN_SET);
  177. HAL_GPIO_WritePin(FOUR_GPIO_Port, FOUR_Pin, GPIO_PIN_SET);
  178. }
  179. else if((Soc > 0x19) && (Soc <= 0x32))//25%-50%
  180. {
  181. Low_Power_Flag = 0;
  182. Very_Low_Power_Flag = 0;
  183. HAL_GPIO_WritePin(ONE_GPIO_Port, ONE_Pin, GPIO_PIN_RESET);
  184. HAL_GPIO_WritePin(TWO_GPIO_Port, TWO_Pin, GPIO_PIN_RESET);
  185. HAL_GPIO_WritePin(THREE_GPIO_Port, THREE_Pin, GPIO_PIN_SET);
  186. HAL_GPIO_WritePin(FOUR_GPIO_Port, FOUR_Pin, GPIO_PIN_SET);
  187. }
  188. else if((Soc > 0x32) && (Soc <= 0x4B))//50%-75%
  189. {
  190. Low_Power_Flag = 0;
  191. Very_Low_Power_Flag = 0;
  192. HAL_GPIO_WritePin(ONE_GPIO_Port, ONE_Pin, GPIO_PIN_RESET);
  193. HAL_GPIO_WritePin(TWO_GPIO_Port, TWO_Pin, GPIO_PIN_RESET);
  194. HAL_GPIO_WritePin(THREE_GPIO_Port, THREE_Pin, GPIO_PIN_RESET);
  195. HAL_GPIO_WritePin(FOUR_GPIO_Port, FOUR_Pin, GPIO_PIN_SET);
  196. }
  197. else if(Soc == 0xff)
  198. {
  199. if(NoBattery_Flag == 0)
  200. {
  201. NoBattery_TimeCnt = SysTime_5ms;
  202. NoBattery_Flag= 1;
  203. }
  204. if(TimeCntDiff_5ms(NoBattery_TimeCnt) >= 200)
  205. {
  206. HAL_GPIO_TogglePin(ONE_GPIO_Port, ONE_Pin);
  207. HAL_GPIO_TogglePin(TWO_GPIO_Port, TWO_Pin);
  208. HAL_GPIO_TogglePin(THREE_GPIO_Port, THREE_Pin);
  209. HAL_GPIO_TogglePin(FOUR_GPIO_Port, FOUR_Pin);
  210. NoBattery_Flag= 0;
  211. }
  212. }
  213. else if(Soc > 0x4B)//>75%
  214. {
  215. Low_Power_Flag = 0;
  216. Very_Low_Power_Flag = 0;
  217. HAL_GPIO_WritePin(ONE_GPIO_Port, ONE_Pin, GPIO_PIN_RESET);
  218. HAL_GPIO_WritePin(TWO_GPIO_Port, TWO_Pin, GPIO_PIN_RESET);
  219. HAL_GPIO_WritePin(THREE_GPIO_Port, THREE_Pin, GPIO_PIN_RESET);
  220. HAL_GPIO_WritePin(FOUR_GPIO_Port, FOUR_Pin, GPIO_PIN_RESET);
  221. }
  222. }
  223. uint8_t Battery_Infor = 0;
  224. /* Functional battery information processing */
  225. void Battery_Information_Process(void)
  226. {
  227. if(BMS_Online_Flag == 1)
  228. {
  229. Battery_Infor=BMS_RunInfo.SOC;
  230. }
  231. else if(BMS_Online_Flag!= 0x01)
  232. {
  233. Battery_Infor=MC_RunInfo.SOC;
  234. }
  235. if(BMS_ChargingFlag == TRUE)
  236. {
  237. Charging_Status_Battery_Display(Battery_Infor);
  238. }
  239. else
  240. {
  241. Normal_Work_Battery_Display(Battery_Infor);
  242. }
  243. }