This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS320F280025:使用280025进行调试时出现采样问题

Guru**** 2539500 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1294062/tms320f280025-a-sampling-issue-while-debugging-with-280025

器件型号:TMS320F280025

尊敬的专家

我在使用280025进行调试时遇到了采样问题。
蓝色表示整个机器在12.2V 的实际输出电压、绿色表示我的程序在检测到实际输出电压低于12.10V 时提高 IO 端口所需的时间、
中间延迟超过100us、并且硬件电路采样采用电阻分压器。 我可以问、对我的软件 ADC 配置进行采样是出于什么原因吗?
目前、定时器100K 用于触发、ADC 配置代码如下所示。 请帮助进行分析。 谢谢、从硬件信号到 DSP 模拟端口没有延迟。

静态空 sInitAdc (void)

{   

//ADCA 时钟

EALLOW;

CpuSysRegs.PCLKCR13.bit.adc_A

= 1;

  // CpuSysRegs.PCLKCR13.bit.ADC_B = 1;

  CpuSysRegs.PCLKCR13.bit.ADC_C = 1;

// Device_cal ();// bootrom会调用,这里是避免仿真时不执行bootrom

EDIS;

 

//adc 参考电压3.3V

SetVREF (ADC_ADCA、ADC_INTERNAL、ADC_VREF3P3);

//SetVREF (ADC_ADCB、ADC_INTERNAL、ADC_VREF3P3);

SetVREF (ADC_ADCC、ADC_INTERNAL、ADC_VREF3P3);

DELAY_US (1000);

 

  EALLOW;

  AdcaRegs.ADCCTL2.bit.prescale = 6;

  AdcaRegs.ADCCTL1.bit.INTPULSEPOS = 1;//μ 转换结束产生事件

 

  //3200W LLC

AdcaRegs.ADCSOC0CTL.bit.CHSEL = 3;//temp AMB

AdcaRegs.ADCSOC1CTL.bit.CHSEL

= 1;

AdcaRegs.ADCSOC2CTL.bit.CHSEL

= 12;//temp SEC

AdcaRegs.ADCSOC3CTL.bit.CHSEL

= 2;

AdcaRegs.ADCSOC4CTL.bit.CHSEL

= 5;

AdcaRegs.ADCSOC5CTL.bit.CHSEL

= 4;//输出电流采样 μ A

AdcaRegs.ADCSOC6CTL.bit.CHSEL

= 15;

AdcaRegs.ADCSOC7CTL.bit.CHSEL

= 6;

AdcaRegs.ADCSOC8CTL.bit.CHSEL

= 3;//μ 输出电压采样

 

  AdcaRegs.ADCSOC0CTL.bit.ACQPS = 9;//采样窗口为10个 SYSCLK 周期

AdcaRegs.ADCSOC1CTL.bit.ACQPS = 9;

AdcaRegs.ADCSOC2CTL.bit.ACQPS = 9;

AdcaRegs.ADCSOC3CTL.bit.ACQPS = 9;

AdcaRegs.ADCSOC4CTL.bit.ACQPS = 9;

AdcaRegs.ADCSOC5CTL.bit.ACQPS = 9;

AdcaRegs.ADCSOC6CTL.bit.ACQPS = 9;

AdcaRegs.ADCSOC7CTL.bit.ACQPS = 9;

AdcaRegs.ADCSOC8CTL.bit.ACQPS = 9;

 

//待定

  AdcaRegs.ADCSOC0CTL.bit.TRIGSEL = 2;// CpuTimer1 fs=100k

  AdcaRegs.ADCSOC1CTL.bit.TRIGSEL = 2;

AdcaRegs.ADCSOC2CTL.bit.TRIGSEL = 2;

AdcaRegs.ADCSOC3CTL.bit.TRIGSEL = 2;

AdcaRegs.ADCSOC4CTL.bit.TRIGSEL = 2;

AdcaRegs.ADCSOC5CTL.bit.TRIGSEL = 2;

AdcaRegs.ADCSOC6CTL.bit.TRIGSEL = 2;

AdcaRegs.ADCSOC7CTL.bit.TRIGSEL = 2;

AdcaRegs.ADCSOC8CTL.bit.TRIGSEL = 2;

 

//待定

  AdcaRegs.ADCINTSEL1N2.bit.INT1SEL = 8;// SOC0结束将设置 INT1标志

  AdcaRegs.ADCINTSEL1N2.bit.INT1E = 0;//启用 INT1标志

  AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;//确保 INT1标志被清除

AdcaRegs.ADCCTL1.bit.ADCPWDNZ = 1;//加电

  EDIS;

 

//ADCB

  EALLOW;

  AdccRegs.ADCCTL2.bit.prescale = 6;

  AdccRegs.ADCCTL1.bit.INTPULSEPOS = 1;//μ 转换结束产生事件

 

ADccRegs.ADCSOC0CTL.bit.CHSEL = 1;//ADDR2

AdccRegs.ADCSOC1CTL.bit.CHSEL = 4;//VFB

AdccRegs.ADCSOC2CTL.bit.CHSEL = 10;//IFB

  AdccRegs.ADCSOC0CTL.bit.ACQPS = 9;//采样窗口为10个 SYSCLK 周期

AdccRegs.ADCSOC1CTL.bit.ACQPS = 9;

AdccRegs.ADCSOC2CTL.bit.ACQPS = 9;

 

//待定

  AdccRegs.ADCSOC0CTL.bit.TRIGSEL = 2;//CpuTimer1 FS=83k

  AdccRegs.ADCSOC1CTL.bit.TRIGSEL = 2;

AdccRegs.ADCSOC2CTL.bit.TRIGSEL = 2;

 

ADccRegs.ADCINTSEL1N2.bit.INT1SEL = 2;// SOC2结束将设置 INT1标志

  AdccRegs.ADCINTSEL1N2.bit.INT1E = 0;//启用 INT1标志

  AdccRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;//确保 INT1标志被清除

AdccRegs.ADCCTL1.bit.ADCPWDNZ = 1;//上电

  EDIS;

  DELAY_US (1000);

 

// PIE

//EALLOW;//可调

// PieVectTable.ADCA1_INT

=&ADCA1_ISR; //tbd

// EDIS;

//PieCtrlRegs.PIEIER1.bit.INTx1 = 1;

//IER |= M_INT1;

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Gabriel:

    抱歉、 我不完全了解触发 ADC 转换的 CPU 计时器设置。  您曾提到100K 的计时器。 计时器是否设置为每100K 个 SYSCLK 周期生成一次 SOC?  在100MHz SYSCLK 下、ADC 将每1ms (10ns * 100K)触发一次。

    对 ADC 设置的一些观察结果:

         -预分频设置设为6。  这意味着 ADC 使用 SYSCLK/4或25MHz (ADC/4)运行、这只是100MHz 额定速度的一半50MHz

         - ADC 采样(ACQPS)设置为9,即10 (9+1) SYSCLK 时间或100ns。  如果通过分压器将 ADC 的12.2V 缩小至3.3V 电平、则存在串联电阻器和任何滤波电容都会在 ADC 通道上产生非常高的阻抗。  这可能大于50欧姆/100pF。  9的 ACQPS 不足以使 ADC 输入电压稳定以进行正确采样(请参阅 TRM 中有关考虑输入阻抗时采样/稳定的"选择采集窗口持续时间"一章)

    此致、

    约瑟夫