BMS_UI_Measure.c 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. /*********************************************************************
  2. *
  3. * BMS UI Measure File
  4. *
  5. *********************************************************************
  6. * FileName: BMS_UI_Measure.c
  7. * Processor: PIC18F25K80
  8. * Compiler: Microchip C18 v3.41
  9. * Company: KIT - CN - IPE
  10. *
  11. * Author Date Comment
  12. *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  13. * Ott W. 08.02.2016 Release
  14. *********************************************************************/
  15. /*********************************************************************
  16. *
  17. * Include Files
  18. *
  19. ********************************************************************/
  20. #include "BMS_UI_Main.h"
  21. /*+++++++ Measure BMS_UI +++++++++++++++++++++++++++++++++++++++++++*/
  22. uint16_t Measure( void )
  23. {
  24. uint16_t i = 0;
  25. uint32_t VoltageOverS = 0;
  26. int32_t CurrentOverS = 0;
  27. int16_t past_Current = 0;
  28. past_Current = gCurrent;
  29. for(i=0; i<64; i++)
  30. {
  31. VoltageOverS += ADCread_12Bit();
  32. CurrentOverS += ADCread_16Bit();
  33. }
  34. CurrentOverS = CurrentOverS >> 6; //Divide 2^6 = 64
  35. CurrentOverS = CurrentOverS * 10; //Multiply with 10
  36. CurrentOverS = CurrentOverS >> 7; //FirstShift;
  37. CurrentOverS = CurrentOverS * 48059; //IMulpli;
  38. CurrentOverS = CurrentOverS >> 11; //ILastShift;
  39. CurrentOverS = CurrentOverS - 60075;
  40. CurrentOverS = CurrentOverS / 10;
  41. CurrentOverS = CurrentOverS - gOffsetCurrent;
  42. if(gCurrent == 0)
  43. {
  44. gCurrent = CurrentOverS;
  45. }
  46. else
  47. {
  48. gCurrent = CurrentOverS;
  49. gCurrent = (gCurrent + past_Current) / 2; // Divide by 2 to calculate the mean current
  50. }
  51. VoltageOverS = VoltageOverS >> 6; //Divide 2^6 = 64
  52. VoltageOverS = VoltageOverS * 10;
  53. VoltageOverS = VoltageOverS >> 2; //FirstShift;
  54. VoltageOverS = VoltageOverS * 2555; //UMulpli;
  55. VoltageOverS = VoltageOverS >> 8; //ULastShift;
  56. VoltageOverS = VoltageOverS / 10;
  57. //VoltageOverS = VoltageOverS - gOffsetVoltage;
  58. gVoltage = VoltageOverS;
  59. return 0;
  60. }