gas_sensor.c 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. #include "gas_sensor.h"
  2. #include "math_tools.h"
  3. #include "log_save.h"
  4. uint16_t GasSensor_OffSet = 0;
  5. TrueOrFalse_Flag_Struct_t IsGasSensorConnectedFlag = FALSE;
  6. #define ZeroOffSetData 100
  7. //指拨零点值初始化
  8. void GasSensorOffSet_Init(uint16_t* OffSet, uint16_t AdcData)
  9. {
  10. //根据开始时刻采集值判断是否连接转把
  11. if(AdcData < 300)
  12. {
  13. IsGasSensorConnectedFlag = FALSE;
  14. }
  15. else
  16. {
  17. IsGasSensorConnectedFlag = TRUE;
  18. }
  19. *OffSet = AdcData + ZeroOffSetData;
  20. }
  21. //指拨零点值更新
  22. void GasSensorOffSetData_Update(uint16_t* PresentData, uint16_t AdcData, MC_ErrorCode_Struct_t* p_MC_ErrorCode)
  23. {
  24. static uint16_t Array[50];
  25. static TrueOrFalse_Flag_Struct_t IsArrayFullFalg = FALSE;
  26. static uint8_t i = 0;
  27. uint16_t TempData;
  28. static uint32_t ErrorDelayTimeCnt = 0;
  29. //刚开机时,数组未存满
  30. if(IsArrayFullFalg == FALSE)
  31. {
  32. Array[i++] = AdcData;
  33. if(i >= 50)
  34. {
  35. IsArrayFullFalg = TRUE;
  36. i = 0;
  37. }
  38. }
  39. //存满后取滑动均值
  40. else
  41. {
  42. TempData = MovingAverageFilter(AdcData, Array, sizeof(Array) / 2) + ZeroOffSetData;
  43. if(TempData < *PresentData)
  44. {
  45. //更新零点值
  46. if(TempData > 300)//避免线缆松脱导致零点变为异常值
  47. {
  48. //*PresentData = TempData;//实测结果,开机状态下拔出转把,然后再插入,零点值会更新到300,导致异常启动,先取消零点更新
  49. }
  50. }
  51. }
  52. //判断零点是否超出范围
  53. if(p_MC_ErrorCode->ERROR_Bit.Fault_GasSensor == 0)
  54. {
  55. if(*PresentData <= 1500)
  56. {
  57. ErrorDelayTimeCnt = HAL_GetTick();
  58. }
  59. if((HAL_GetTick() - ErrorDelayTimeCnt) > 10000)
  60. {
  61. p_MC_ErrorCode->ERROR_Bit.Fault_GasSensor = 1;
  62. //记录故障日志
  63. MC_ErrorLogSaveInfo.NotesInfo1 = 1;
  64. MC_ErrorLogSaveInfo.NotesInfo2 = *PresentData;
  65. ErrorLogSave_Update(&MC_ErrorLogSaveInfo);
  66. IsErrorLogSaveInfoUpdateFlag = TRUE;
  67. //存储故障次数
  68. MC_RunLog2.GasSensor_FaultCnt++;
  69. RunLogSaveIndex = 2;
  70. }
  71. }
  72. }