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.

[参考译文] TMS320F28035:带输入的 ADC 转换时间变量

Guru**** 2582405 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/653033/tms320f28035-adc-conversion-time-variable-with-input

器件型号:TMS320F28035

大家好、

我在其中一个 C2000板(定制)上遇到了这个奇怪的问题。  此板用于 PV 充电应用。

代码包含一个到 ADC 的 ePWM 触发器和被配置为运行 CLA 任务1的 ADCINT1。  ADC 使用12个通道。 ADC 转换时间是从 EPWM1 ISR 进入到 CLA 任务1进入使用示波器测得的。

条件1:无 PV 输入...  

ADC 转换时间大约为2us。  

条件2:我提供 PV 输入  

ADC 转换时间似乎转换为5.5us。

无法找到发生这种情况的原因 ADC 模块转换时间是否可以根据物理输入进行更改?

在除 OVERLFOW 和 INT 标志清零之外的代码中、没有对 ADC 寄存器的引用... 我在下面提供 ADC 初始化代码...

EALLOW;

AdcRegs.ADCCTL1.bit.ADCBGPWD=1; // Power ADC BG
AdcRegs.ADCCTL1.bit.ADCREFPWD = 1; //电源参考
AdcRegs.ADCCTL1.bit.ADCPWDN = 1; // Power ADC
AdcRegs.ADCCTL1.bit.ADCENABLE = 1; //启用 ADC
AdcRegs.ADCCTL1.bit.ADCREFSEL = 1; //选择外部
AdcRegs.ADCCTL1.bit.INTPULSEPOS= 1;// ADCINT1在结果锁存
AdcRegs.ADCCTL2.bit.ADCONOVERLAP = 1;
AdcRegs.ADCCTL2.bit.CLKDIV2EN = 1;
AdcRegs.SEINT1e.INT1N 位 = 1;//启用 ADCINT1
AdcRegs.INTSEL1N2.bit.INT1CONT = 1;//启用连续模式
AdcRegs.INTSEL1N2.bit.INT1SEL= 6;// EOC6为 ADCINT1


AdcRegs.ADCSOC0CTL.bit.CHSEL= 0触发;// EOC6 > A0 
AdcRegs.ADCSOC1CTL.bit.CHSEL= 1;// A1 >
AdcRegs.ADCSOC2CTL.bit.CHSEL= 8;// B0 > AdcRegs.ADCSOC3CTL.bit.CHSEL= 9;// B1 > AdcRegs.ADCSOC4CTL.bit.CHSEL= 10;// B2 >
AdcRegs.ADCSOC5CTL.bit.CHSEL= 11;// B3 >
AdcRegs.ADCSOC6CTL.bit.CHSEL= 12;// B4 >
AdcRegs.ADCSOC7CTL.bit.CHSEL= 13;// B5 >
//对应于4位硬件版本 的模拟变量读数 AdcRegs.ADCSOC8CTL.bit.CHSEL = 7;// A7位3引脚11 AdcRegs.ADCSOC9CTL.bit.CHSEL = 3;// A5位2引脚15 AdcRegs.ADCSOC10CTL.bit.CHSEL = 4;// ADCSOC9CTL.bit.CHSEL = 13引脚14;// ADCSOC.A4位 AdcRegs.ADCTRL = 0引脚14;ADCSOC.A3/ADCTRL = 0引脚14引脚14位 ADCTI.ADCTRL = 1;ADCTRL = ADCTRL = ADC13/ ADC13/ AD // EPWM1 SOCA AdcRegs.ADCSOC1CTL.bit.TRIGSEL = 5;// EPWM1 SOCA AdcRegs.ADCSOC2CTL.bit.TRIGSEL = 5;// EPWM1 SOCA AdcRegs.ADCS3CTL.bit.TRRegSEL = 5;// EPWCC1.ADCC1.ADCESL.ADC5/ ADCC1.ADCESL.ADC5/ ADCC1.ADCESL.ADC5/ ADCC1.ADCESL.ADC5/ ADCC1.ADCC1.ADCC1.ADCC1.ADCC1.ADCC1.ADCC1.ADCC1.ADCC1.ADCC1.ADCC1.ADCC1.ADCTRRegs.ADCTRL = 5 ;/ ADCESL.ADC5/ ADCESL.ADC5/ ADCSOC5/ ADCC1.ADCC1.ADCC1.ADCC1.ADCC1.ADCC1.ADCC1.ADCC1.ADCTRIG // EPWM1 SOCA //对应于4位硬件版本 的模拟变量读数 AdcRegs.ADCSOC8CTL.bit.TRIGSEL = 5;// EPWM1 SOCA AdcRegs.ADCSOC9CTL.bit.TRIGSEL = 5;// EPWCCS.ADCSORegs.ADCSOCSOC1=5 ;/EPIGCC1.bit.EPIGCC1.RIGSEL = 5;// ECC1RES1.ADC1.ADC1.TRESL.ADC1.TRF=5;/ADCSOC1.TESL.ADC1.bit.ADC1.TRF.ADC1.TRF.ADC1.TRIGCL.TR AdcRegs.ADCSOC0CTL.bit.ACQPS = 6;//最小 S/H 窗口大小 AdcRegs.ADCSOC1CTL.bit.ACQPS = 6; AdcRegs.ADCSOC2CTL.bit.ACQPS = 6; AdcRegs.ADCSOC3CTL.bit.ACQPS = 6; AdcRegs.ADCSOC4CTL.bit.ACQPS = 6; AdcRegs.ADCSOC5CTL.bit.ACQPS = 6; AdcRegs.ADCSOC6CTL.bit.ACQPS = 6; AdcRegs.ADCSOC7CTL.bit.ACQPS = 6; //对应于4位硬件版本 的模拟变量读数 AdcRegs.ADCSOC8CTL.bit.ACQPS = 6; AdcRegs.ADCSO9CTL.bit.ACQPS = 6; AdcRegs.ADCSOC10CTL.bit.ACQPS = 6; AdcRegs.ADCSOC11CTPS = 6;ADCSOCTI.ACQPS = 6;ADCCOQPS = 6;ADCCODCM.ACQPS = 6

提前感谢...

桑托什

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

    您好、Santhosh、

    您不应该看到这个。  

    您可以让 PWM SoC 通过 GPIO 多路复用器输出到引脚(ADCSOCAO/ADCSOCBO)-假设您的自定义板中没有这些引脚之一。  这将使您能够直接从 SoC 生成到 CLA 任务入口点进行测量、而无需 CPU 参与。  这至少会消除测量中的一个复杂因素。

    我这样说是因为我稍微担心您可能会有其他 CPU ISR、这些 ISR 可能会偶尔延迟测量的起始点。  或者、主 ISR 的周期计数可能会比该 ISR 触发周期长。


    谢谢、
    Brett

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢 Brett。 我确实尝试了这个、这要归功于我映射到 ADCSOCAO 的未使用 GPIO32。

    我观察到、ADC 转换时间剂量似乎在增加(正如您建议的那样)... 但 SOC 的边缘正偏离 EPWM1 ISR 起始边缘...、这应该发生什么情况!!? 所有 ADC 通道的配置均作为 EPWM1 SOCA... 这是一个相当长的3-4美元的班次、这对应用至关重要。 提供进一步的指导将会很好...

    谢谢
    桑托什
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    谢谢您的支持... 我昨天解决了、它在代码中。

    SOCA 不在 ePWM 上升沿上、但使用 CMPB 值配置为与上升沿相距6uS。 这个值在充电开始时从 CMPB=0变为 CMPB=20000、这解释了为什么它在充电和不充电时的行为不同!!

    不过、ADCSOCAO 探测的输入确实有所帮助、谢谢。

    桑托什