chwf491701687 发表于 2017-4-1 13:31

TM的DMC库3.2版数据采样问题

void F281X_ileg2_dcbus_drv_read(ILEG2DCBUSMEAS *p)
{
       int16 DatQ15;
       int32 Tmp;
      // Wait until ADC conversion is completed
      while (AdcRegs.ADCST.bit.SEQ1_BSY == 1)
      {};
                                //AdcRegs.ADCRESULT0×a»»½á1û»o3åÇø
      DatQ15 = AdcRegs.ADCRESULT0^0x8000;       // Convert raw result to Q15 (bipolar signal)
      Tmp = (int32)p->ImeasAGain*(int32)DatQ15; // Tmp = gain*dat => Q28 = Q13*Q15
      p->ImeasA = (int16)(Tmp>>13);             // Convert Q28 to Q15
      p->ImeasA += p->ImeasAOffset;             // Add offset
      p->ImeasA *= -1;                                       // Positive direction, current flows to motor

      DatQ15 = AdcRegs.ADCRESULT1^0x8000;             // Convert raw result to Q15 (bipolar signal)
      Tmp = (int32)p->ImeasBGain*(int32)DatQ15; // Tmp = gain*dat => Q28 = Q13*Q15
      p->ImeasB = (int16)(Tmp>>13);             // Convert Q28 to Q15
      p->ImeasB += p->ImeasBOffset;             // Add offset
      p->ImeasB *= -1;                                     // Positive direction, current flows to motor

      DatQ15 = (AdcRegs.ADCRESULT2>>1)&0x7FFF;   // Convert raw result to Q15 (unipolar signal)
      Tmp = (int32)p->VdcMeasGain*(int32)DatQ15; // Tmp = gain*dat => Q28 = Q13*Q15
      if (Tmp > 0x0FFFFFFF)                      // Limit Tmp to 1.0 in Q28
         Tmp = 0x0FFFFFFF;
      p->VdcMeas = (int16)(Tmp>>13);             // Convert Q28 to Q15
      p->VdcMeas += p->VdcMeasOffset;            // Add offset ìí

      p->ImeasC = -(p->ImeasA + p->ImeasB);      // Compute phase-c current
      AdcRegs.ADCTRL2.all |= 0x4040;             // Reset the sequence
}            
在上面的处理中,为什么0X8000异或就能转换成双极性的Q15格式了呢,有人知道什么原理嘛,能详细讲解下嘛
页: [1]
查看完整版本: TM的DMC库3.2版数据采样问题