Explorar el Código

adc采样中非关键项改到5ms中执行检测

Ye Jin hace 1 año
padre
commit
418085e91a

+ 5 - 1
User project/1.FrameLayer/Source/TimeTask_Event.c

@@ -29,6 +29,7 @@
 #include "bikebrake.h"
 #include "display.h"
 #include "bikegearsensor.h"
+#include "adc.h"
 /******************************
  *
  *  Parameter
@@ -276,6 +277,9 @@ void Event_5ms(void)
 {
     /* Upper Computer Info Update */
     Can_voMC_Run_5ms();
+
+    /* adc sample with low priority */
+    adc_voSampleUp_Low(&adc_stCof, &adc_stUpOut);
 }
 
 void Event_10ms(void)
@@ -433,7 +437,7 @@ void  Event_200ms(void)
             alm_stBikeIn.uwThrottleReg = adc_stUpOut.uwThrottleReg;
             alm_stBikeIn.blThrottleExistFlg = FALSE;
             alm_stBikeIn.blMotorNTCExistFlg = FALSE;
-            alm_voDetec200MS(&alm_stBikeIn, &alm_stDetect200MSCoef);   
+            //alm_voDetec200MS(&alm_stBikeIn, &alm_stDetect200MSCoef);   
         }
         
         if (switch_flg.SysFault_Flag == TRUE)

+ 2 - 2
User project/1.FrameLayer/Source/tbc.c

@@ -106,8 +106,8 @@ void tbc_voUpIsr(void)
 static BOOL tbc_pvt_blErrorFlag = FALSE;
 void tbc_voDownIsr(void)
 {
-    /* ADC Sample */
-    adc_voSampleUp(&adc_stCof, &adc_stUpOut);
+    /* ADC Sample with high priority */
+    adc_voSampleUp_High(&adc_stCof, &adc_stUpOut);
     
     /* Alarm detect */
     alm_stIn.blADCInitOvrFlg = sysfsm_stFlg.blADCInitOvrFlg;

+ 4 - 2
User project/2.MotorDrive/Include/adc.h

@@ -188,14 +188,16 @@ _ADCDRV_EXT UWORD adc_RdsonADCGainSum;
 *************************************************************************/
 #ifdef _ADCDRV_C_
 _ADCDRV_EXT void adc_voCalibration(ADC_COF *cof, ADC_DOWN_OUT *out1, ADC_UP_OUT *out2); // Phase A and B current zero point, other A/D sample value
-_ADCDRV_EXT void adc_voSampleUp(const ADC_COF *cof, ADC_UP_OUT *out);
+_ADCDRV_EXT void adc_voSampleUp_High(const ADC_COF *cof, ADC_UP_OUT *out);
+_ADCDRV_EXT void adc_voSampleUp_Low(const ADC_COF *cof, ADC_UP_OUT *out);
 _ADCDRV_EXT void adc_voSampleDown(const ADC_COF *cof, ADC_DOWN_OUT *out);
 _ADCDRV_EXT void adc_voSampleCoef(ADC_COF *cof);
 _ADCDRV_EXT void adc_voSampleInit(void);
 _ADCDRV_EXT void adc_voSRCalibration(ADC_COF *cof, const ADC_UP_OUT *up_out, ADC_DOWN_OUT *down_out);
 #else
 _ADCDRV_EXT void adc_voCalibration(ADC_COF *cof, ADC_DOWN_OUT *out1, ADC_UP_OUT *out2); // Phase A and B current zero point, other A/D sample value
-_ADCDRV_EXT void adc_voSampleUp(const ADC_COF *cof, ADC_UP_OUT *out);
+_ADCDRV_EXT void adc_voSampleUp_High(const ADC_COF *cof, ADC_UP_OUT *out);
+_ADCDRV_EXT void adc_voSampleUp_Low(const ADC_COF *cof, ADC_UP_OUT *out);
 _ADCDRV_EXT void adc_voSampleDown(const ADC_COF *cof, ADC_DOWN_OUT *out);
 _ADCDRV_EXT void adc_voSampleCoef(ADC_COF *cof);
 _ADCDRV_EXT void adc_voSampleInit(void);

+ 21 - 14
User project/2.MotorDrive/Source/adc.c

@@ -326,29 +326,16 @@ void adc_voSampleDown(const ADC_COF *cof, ADC_DOWN_OUT *out)
     out->uwIpeakPu = uwIpeakPu;
 }
 
-void adc_voSampleUp(const ADC_COF *cof, ADC_UP_OUT *out)
+void adc_voSampleUp_High(const ADC_COF *cof, ADC_UP_OUT *out)
 {
     /* Register value */
     out->uwVdcReg = iAdc_GetResultPointer(0)[HW_ADC_UDC_CH]; 
-    out->uwRU6VReg = iAdc_GetResultPointer(0)[HW_ADC_U6V_CH]; 
-    out->uwU5VReg = iAdc_GetResultPointer(0)[HW_ADC_U5V_CH]; 
-    out->PCBTempReg = iAdc_GetResultPointer(0)[HW_ADC_PCBTEMP_CH]; 
-    out->uwFU6VReg = iAdc_GetResultPointer(0)[HW_ADC_MOTTEMP_CH]; 
-    out->uwU12VReg = iAdc_GetResultPointer(0)[HW_ADC_U12V_CH]; 
-    out->uwThrottleReg = iAdc_GetResultPointer(0)[HW_ADC_THRO_CH]; 
 
     out->uwVdcPu = (UWORD)((ULONG)out->uwVdcReg * cof->uwVdcReg2Pu >> 10); // Q14=Q24-Q10
     //out->uwVdcPu = (SLONG)((out->uwVdcReg * cof->uwVdcReg2Pu >> 10) - 410); // Q14=Q24-Q10,电路上DCDC的EN漏电流导致测量偏高1.2V
     /* Vdc LPF */
     out->uwVdcLpfPu = ((out->uwVdcPu - out->uwVdcLpfPu) >> 1) + out->uwVdcLpfPu;
 
-    out->uwRU6VPu = (UWORD)((ULONG)out->uwRU6VReg * cof->uwU6VReg2Pu >> 10);    // Q14=Q24-Q10;
-    out->uwU5VPu = (UWORD)((ULONG)out->uwU5VReg * cof->uwU5VReg2Pu >> 10);    // Q14=Q24-Q10;
-    out->PCBTemp = GetPCBTemp(out->PCBTempReg);
-    out->uwFU6VPu = (UWORD)((ULONG)out->uwFU6VReg * cof->uwU6VReg2Pu >> 10); // Q14=Q24-Q10;
-    out->uwU12VPu = (UWORD)((ULONG)out->uwU12VReg * cof->uwU12VReg2Pu >> 10); // Q14=Q24-Q10;
-    
-    
     ////////////////// Single Resitance Current Sample//////////////////////////////////////////////////////
     if (pwm_stGenOut.blSampleCalibFlag == TRUE)
     {
@@ -383,6 +370,26 @@ void adc_voSampleUp(const ADC_COF *cof, ADC_UP_OUT *out)
     
 }
 
+void adc_voSampleUp_Low(const ADC_COF *cof, ADC_UP_OUT *out)
+{
+    out->uwRU6VReg = iAdc_GetResultPointer(0)[HW_ADC_U6V_CH]; 
+    out->uwRU6VPu = (UWORD)((ULONG)out->uwRU6VReg * cof->uwU6VReg2Pu >> 10);    // Q14=Q24-Q10;
+    
+    out->uwU5VReg = iAdc_GetResultPointer(0)[HW_ADC_U5V_CH]; 
+    out->uwU5VPu = (UWORD)((ULONG)out->uwU5VReg * cof->uwU5VReg2Pu >> 10);    // Q14=Q24-Q10;
+    
+    out->PCBTempReg = iAdc_GetResultPointer(0)[HW_ADC_PCBTEMP_CH]; 
+    out->PCBTemp = GetPCBTemp(out->PCBTempReg);
+    
+    out->uwFU6VReg = iAdc_GetResultPointer(0)[HW_ADC_MOTTEMP_CH]; 
+    out->uwFU6VPu = (UWORD)((ULONG)out->uwFU6VReg * cof->uwU6VReg2Pu >> 10); // Q14=Q24-Q10;
+    
+    out->uwU12VReg = iAdc_GetResultPointer(0)[HW_ADC_U12V_CH]; 
+    out->uwU12VPu = (UWORD)((ULONG)out->uwU12VReg * cof->uwU12VReg2Pu >> 10); // Q14=Q24-Q10;
+    
+    out->uwThrottleReg = iAdc_GetResultPointer(0)[HW_ADC_THRO_CH]; 
+}
+
 static SWORD adc_pvt_swSingleReg = 0;
 static SLONG adc_pvt_slRdsonReg = 0;
 static LPF_OUT adc_pvt_stRdsonCoefLpf = {.slY.sw.hi = 1024, .slY.sw.low = 0};

+ 1 - 1
api

@@ -1 +1 @@
-Subproject commit 4fcaec9847a35a5f304f68528906d3aad08ac080
+Subproject commit 5755de440c5f33d322acbf8bf5c9c8afcb4d1df3