TI中文支持网
TI专业的中文技术问题咨询交流网站

DSP28335 AD采样问题

 使用DSP28335的AD模块,采集的电压是已经经过转换成0-3V的电机的AB两相电流。 转换后的0-3V的电压用示波器观察B相滞后A相120度,但是经过AD模块采集后,用CCS3.3的图表观察采集后的电压,也是正弦波,但B相只滞后A相90度左右。 请问这会是什么原因呢?

Emma Wang:

请您贴上graph采集的波形与AD部分的代码,便于我们帮助你分析。

 使用DSP28335的AD模块,采集的电压是已经经过转换成0-3V的电机的AB两相电流。 转换后的0-3V的电压用示波器观察B相滞后A相120度,但是经过AD模块采集后,用CCS3.3的图表观察采集后的电压,也是正弦波,但B相只滞后A相90度左右。 请问这会是什么原因呢?

user4966799:

回复 Emma Wang:

头文件中定义:

#define ADCTRL1_INIT_STATE ADC_SUS_MODE0 + ADC_ACQ_PS_16 + \ ADC_CPS_1 + ADC_SEQ_DUAL

#define ADCTRL2_INIT_STATE ADC_EPWM_SOCA_SEQ1

AD的配置:

DELAY_US(ADC_usDELAY);

AdcRegs.ADCTRL1.all = ADC_RESET_FLAG; // Reset the ADC Module asm(" RPT #12 || NOP ");

AdcRegs.ADCTRL3.bit.ADCBGRFDN = 0x3; // Power up bandgap/reference circuitry DELAY_US(ADC_usDELAY); // Delay before powering up rest of ADC AdcRegs.ADCTRL3.bit.ADCPWDN = 1; // Power up rest of ADC DELAY_US(ADC_usDELAY);

AdcRegs.ADCTRL3.bit.ADCCLKPS = 0; // Set up ADCTRL3 register AdcRegs.ADCTRL1.all = ADCTRL1_INIT_STATE; // Set up ADCTRL1 register AdcRegs.ADCTRL2.all = ADCTRL2_INIT_STATE; // Set up ADCTRL2 register AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 0x3; // Specify three conversions AdcRegs.ADCCHSELSEQ1.all = p->ChSelect; // Configure channel selection

// Set up Event Trigger with CNT_zero enable for Time-base of EPWM1 EPwm1Regs.ETSEL.bit.SOCAEN = 1; // Enable SOCA EPwm1Regs.ETSEL.bit.SOCASEL = 1; // Enable CNT_zero event for SOCA EPwm1Regs.ETPS.bit.SOCAPRD = 1; // Generate SOCA on the 1st event EPwm1Regs.ETCLR.bit.SOCA = 1; // Clear SOCA flag

计算电流函数:

int16 DatQ15; int32 Tmp;

// Wait until ADC conversion is completed while (AdcRegs.ADCST.bit.SEQ1_BSY == 1) {}

DatQ15 = AdcRegs.ADCRESULT0^0x8000; // Convert raw result to Q15 (bipolar signal) Tmp = (int32)p->ImeasAGain*(int32)DatQ15; // Tmp = gain*dat => Q28 = Q13*Q15 DatQ15 = AdcRegs.ADCRESULT1^0x8000; Tmp += (int32)p->ImeasAGain*(int32)DatQ15; // Tmp = gain*dat => Q28 = Q13*Q15 p->ImeasA = (int16)(Tmp>>14); // Convert Q28 to Q15 p->ImeasA += p->ImeasAOffset; // Add offset

DatQ15 = AdcRegs.ADCRESULT2^0x8000; // Convert raw result to Q15 (bipolar signal) Tmp = (int32)p->ImeasBGain*(int32)DatQ15; // Tmp = gain*dat => Q28 = Q13*Q15 DatQ15 = AdcRegs.ADCRESULT3^0x8000; Tmp += (int32)p->ImeasBGain*(int32)DatQ15; // Tmp = gain*dat => Q28 = Q13*Q15 p->ImeasB = (int16)(Tmp>>14); // Convert Q28 to Q15 p->ImeasB += p->ImeasBOffset; // Add offset

Graph中波形如下:

示波器的测量结果:

可以看出,示波器测出的是相差120度正确的,但是经过AD就变成了只有90度了。

赞(0)
未经允许不得转载:TI中文支持网 » DSP28335 AD采样问题
分享到: 更多 (0)