/_02_STM32F1/_05_电子负载检测/_19(FFT版本)/_01_App/App_LoadMeasure.c

https://github.com/WittXie/STM32 · C · 174 lines · 100 code · 39 blank · 35 comment · 8 complexity · 951bf6e98f2f428c87ff4969c02d687a MD5 · raw file

  1. /*******************************(C) COPYRIGHT 2017 Wind(л)*********************************/
  2. /**============================================================================
  3. * @FileName : App_LoadMeasure.c
  4. * @Date : 2017727
  5. * @By : Wind(л)
  6. * @Email : 1659567673@qq.com
  7. * @Platform : Keil uVision5 v5.15 (STM32F103RC)
  8. * @Explain : ؼ
  9. *=============================================================================*/
  10. /* ͷļ ----------------------------------------------------------------*/
  11. #include "App_LoadMeasure.h"
  12. /* ˽к궨 ----------------------------------------------------------------*/
  13. #define Union32ToSendBuff() do{ \
  14. Message_USART2.Send_Buff[MESSAGE_BYTE.DATA_START + byte] = Union32._u8[0];byte+=1; \
  15. Message_USART2.Send_Buff[MESSAGE_BYTE.DATA_START + byte] = Union32._u8[1];byte+=1; \
  16. Message_USART2.Send_Buff[MESSAGE_BYTE.DATA_START + byte] = Union32._u8[2];byte+=1; \
  17. Message_USART2.Send_Buff[MESSAGE_BYTE.DATA_START + byte] = Union32._u8[3];byte+=1; \
  18. }while(0) \
  19. /* ˽У̬ ------------------------------------------------------*/
  20. static void Message_Updata(void);
  21. /* ȫֱ --------------------------------------------------------------*/
  22. /* ȫֱ --------------------------------------------------------------*/
  23. /* ȫֺд --------------------------------------------------------------*/
  24. /**----------------------------------------------------------------------------
  25. * @FunctionName : LoadMeasure()
  26. * @Description : ؼ
  27. * @Data : 2017727
  28. * @Explain : None
  29. ------------------------------------------------------------------------------*/
  30. unsigned int LoadMeasure_Main(void)
  31. {
  32. char temp[100] = {0};
  33. // u16 i = 0;
  34. ADC_Result.Freq = FreqMeasure_Read();
  35. if(PhaseMeasure_State == 0)//״̬
  36. {
  37. PhaseMeasure_Start(ADC_Result.Freq);//ʼAD
  38. }
  39. else if(PhaseMeasure_State == 2)//ɼ
  40. {
  41. // for(i = 0;i < ADC_LENTH;i++)//ģ
  42. // {
  43. // ADC_Buff_I[i] = (sin(2.0f*PI*i*8/ADC_LENTH)+1.0)/2.0f*311;
  44. // ADC_Buff2[i] = (sin(2.0f*PI*i*8/ADC_LENTH)+1.0)/2.0f*0.32f;
  45. // }
  46. //ʾAD
  47. ADC_Analysis();
  48. FFT_Analysis();
  49. sprintf(temp,"F:%0.2f ",ADC_Result.Freq);
  50. OS_String_Show(0,0,temp);
  51. sprintf(temp,"Ipp:%0.2f ",ADC_Result.Ipp);
  52. OS_String_Show(0,1,temp);
  53. PhaseMeasure_State = 0;
  54. if(Message_Update_Flag == 1)
  55. {
  56. Message_Updata();
  57. Message_Update_Flag = 0;//
  58. }
  59. }
  60. return 0;
  61. }
  62. unsigned int LoadMeasure_Start(void)
  63. {
  64. FreqMeasure_Init();
  65. ADC1_Init();
  66. ADC2_Init();
  67. GPIO_Relay_Init();//̵
  68. Message_Update_Flag = 1;
  69. RELAY_PIN_SWITCH = 1;//򿪿
  70. CURRENT_LEVEL(1);//ģʽ 0,ƣС
  71. return 0;
  72. }
  73. Type_AppList App_LoadMeasure = {LoadMeasure_Main,NULL,LoadMeasure_Start,NULL, \
  74. OS_STATE_ACTIVE,OS_THREAD_FREE, \
  75. (u8*)"LoadMeasure",10};
  76. /**----------------------------------------------------------------------------
  77. * @FunctionName : Message_Updata()
  78. * @Description : ݸ
  79. * @Data : 2017/8/6
  80. * @Explain : None
  81. ------------------------------------------------------------------------------*/
  82. static void Message_Updata(void)
  83. {
  84. Union_32 Union32 = {0};
  85. u16 byte = 0;
  86. u16 i = 0;
  87. for(i = 0;i < PER_FFT_SAVE;i ++)
  88. {
  89. Union32._float = FFT_Result.DiffPhase[i];
  90. Union32ToSendBuff();
  91. Union32._float = FFT_Result.Py[i];
  92. Union32ToSendBuff();
  93. }
  94. Union32._float = FFT_Result.All_DiffPhase;//λ
  95. Union32ToSendBuff();
  96. Union32._float = FFT_Result.All_Pf; // Pf=Py/Ps
  97. Union32ToSendBuff();
  98. Union32._float = FFT_Result.All_Py; //й(ƽ) Py=֣ѹ*/
  99. Union32ToSendBuff();
  100. Union32._float = ADC_Result.V_Max;
  101. Union32ToSendBuff();
  102. Union32._float = ADC_Result.V_Min;
  103. Union32ToSendBuff();
  104. Union32._float = ADC_Result.I_Max;
  105. Union32ToSendBuff();
  106. Union32._float = ADC_Result.I_Min;
  107. Union32ToSendBuff();
  108. Union32._float = ADC_Result.Vpp;
  109. Union32ToSendBuff();
  110. Union32._float = ADC_Result.Ipp;
  111. Union32ToSendBuff();
  112. Union32._float = ADC_Result.Vrms;
  113. Union32ToSendBuff();
  114. Union32._float = ADC_Result.Irms;
  115. Union32ToSendBuff();
  116. Union32._float = ADC_Result.V_Shift; //ֱƫ
  117. Union32ToSendBuff();
  118. Union32._float = ADC_Result.I_Shift; //ֱƫ
  119. Union32ToSendBuff();
  120. Union32._float = ADC_Result.Pf; // Pf=Py/Ps
  121. Union32ToSendBuff();
  122. Union32._float = ADC_Result.Ps; //ڹ Ps=Vrms*Irms
  123. Union32ToSendBuff();
  124. Union32._float = ADC_Result.Py; //й(ƽ) Py=֣ѹ*/
  125. Union32ToSendBuff();
  126. Union32._float = ADC_Result.Freq; //Ƶ
  127. Union32ToSendBuff();
  128. Union32._float = ADC_Result.DiffPhase; //λ
  129. Union32ToSendBuff();
  130. Message_USART2.Send_Buff[MESSAGE_BYTE.ADDRESS_TARGET] = 0x01;
  131. Message_USART2.Send_Buff[MESSAGE_BYTE.CODE_FUNCTION] = 0xff;//ȫ
  132. Message_Send_USART2();//
  133. Message_Update_Flag = 0;//
  134. }
  135. /*******************************(C) COPYRIGHT 2017 Wind(л)*********************************/