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.

[参考译文] TMS320F28377D:ADC 预分频和 ACQPS 设置问题

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/586773/tms320f28377d-adc-prescale-and-acqps-setting-question

器件型号:TMS320F28377D

你(们)好。

我在单端模式、12位分辨率下使用的是 DSP 28377D 中的 ADC 模块。 我想问您、您是否可以帮助确认我的 ADC 配置是否正确。  

每个 ADC 配置如下:

void ConfigureADC_A (void)
{
EALLOW;

//写入配置
AdcaRegs.ADCCTL2.bit.prescale = 0;
AdcSetMode (ADC_ADCA、ADC_Resolution_12位、ADC_SIGNALMODE_SINGLE);

//将脉冲位置设置为晚期
AdcaRegs.ADCCTL1.bit.INTPULSEPOS = 1;

//为 ADC
AdcaRegs.ADCCTL1.bit.ADCPWDNZ 加电

;//允许
加电延迟1000 ms


;} 

这里的问题是:通过设置  

AdcaRegs.ADCCTL2.bit.prescale = 0; 

我知道我在我的程序中设置了这个

ClkCfgRegs.PERCLKDIVSEL.bit.EPWMCLKDIV = 0 

这是否意味着1x ADC 时钟周期= SYSCLK/1=(200MHz)^-1 = 5ns? 这看起来很小。

2. 我需要确认 ADC 参数 ACQPS 的计算正确。

我可以看到、在 SPRUHM8C (第1221页)文档中、TI 提供了有关如何大致估算采集窗口时间"t"的指南:

其中、右侧的 T 是采样保持电容器的充电时间常数。

根据 SPRUHM8C (第1221页)中的建议和 数据表 SPRS880C (第107页、下面报告)中报告的 ADC 模型

然后:

T =(Rs+Ron)*通道

现在、在我的案例中、ADC 输入通过200欧姆电阻器连接到运算放大器的输出、如下图所示

 

我的问题是、我应该考虑 Rs = 200欧姆吗? 如果是这样、我计算 T =(500+200 Ω)*14.5pF = 10*10^-9s、采集窗口时间 t =-ln (0.25/2^12)*T = 100ns。  

具有,t=100ns=(ACQPS+1)*SYSCLK --> ACQPS = 100ns/5ns -1 =19 (其中 SYSCLK=5ns,因为时钟为200MHz)。  

总之、我提出了:

一个 ADC CLK = 5ns、如

AdcaRegs.ADCCTL2.bit.prescale = 0 

2、ACQPS = 19、考虑数据表 SPRS880C (第107页)中给出的 Rs=200欧姆(ADC 输入和运算放大器输出之间的电阻)以及通道和 Ron。

您能否确认我的推理是否正确? 尤其是关于第2点、以及我在计算采集窗口时考虑的 Rs。

非常感谢你能抽出时间。

Leo

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

    我认为您对 ADCCLK 和 ePWM CLK 的计算是正确的、但这些模块具有最大时钟速率。 假设您的系统时钟为200MHz:

    对于 ADC、最大时钟速率为50MHz、因此您需要的预分频为/4。

    对于 ePWM、最大时钟速率为100MHz、因此您需要启用/2

    就 ADC S+H 持续时间而言、是的、应该考虑200欧姆电阻器、并且您已经正确估算了 S+H。 请注意、在这种情况下、S+H 估算仅在您没有特意向 ADC 输入添加额外电容(这是您可能想要做的事情)时保持不变。 另请注意、S+H 计算为 ACQPS+1 SYSCLK 周期、因此即使您更改 ADC 预分频以使 ADCCLK = 50MHz、19的 ACQPS 设置仍将为您提供100ns (假设 SYSCLK = 200MHz)。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Devin、

    非常感谢您的帮助、它真的很有用。 最好了解 ADC CLK 和 PWM CLK 上的限制、我没有意识到这一点。

    1.我已经仔细检查了我的程序,设置实际上如下所示:

    ClkCfgRegs.SYSCLKDIVSEL.bit.PLLSYSCLKDIV = 1 //(请见表2-149、第300页 SPRUHM8C) 

    这意味着我的系统时钟为200MHz/2 = 100MHz。

    因此,在下列情况下:

    ClkCfgRegs.PERCLKDIVSEL.bit.EPWMCLKDIV=1
    

    我的 PWM 时钟速率为100MHz、这是可接受的最大值。

    在这个阶段、作为我的 SYS CLK = 100MHz (点1)、我可以设置

    AdcaRegs.ADCCTL2.bit.prescale = 2; 

    因此我的 ADC CLK 为 SYSCLK (100MHz)/2 = 50MHz

    考虑到我的 S+H 时间 t = 100ns、正如我在上一个问题中计算的那样、现在我发现我的 SYSCLK 为100MHz

    (ACQPS+1)*(1/100MHz)= 100ns -> ACQPS = 10 - 1 = 9

    因此、在理论上、我可以使用比我在上一个问题中计算出的 ACQPS 低得多的 ACQPS。

    如果你能的话,请你就我的推理提出你的意见,那将是很棒的。  

    再次感谢您。

    Leo

     

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

    几乎。 ADCCLK 基于 SYSCLK、因此如果 SYSCLK 为200MHz、则需要将预分频设置为/4 (无论 ePWM 时钟设置为什么)。

    同样、即使 ADCCLK 为50MHz、S+H 逻辑也由 SYSCLK 计时、因此您仍然需要19的 ACQPS 为您提供5n*(19+1)= 100ns 的 S+H 持续时间。 这与 ADCCLK 和 ePWM 时钟无关。 (这是因为 ADCCLK 实际上不是自由运行的。 当触发发生时、S+H 逻辑为 ACQPS+1周期计时、然后在 S+H 完成后、ADCCLK 的上升沿立即开始。 一旦 ADC 转换为某个数量的 ADCCLK 周期计时、ADC 完成、ADCCLK 返回到睡眠状态、直到另一个 S+H 阶段结束。 这样做是为了避免来自 CPU 或 ePWM 时钟域的触发器产生抖动...采样始终在下一个 SYSCLK 边沿立即开始)。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Devin、

    谢谢、您的反馈和解释都很好。

    所以,我认为我以前的误解是因为我通过设置来考虑这一点  

    ClkCfgRegs.SYSCLKDIVSEL.bit.PLLSYSCLKDIV = 1. 

    系统时钟变为200MHz/2 = 100MHz、但情况并非如此、因为此类命令仅影响 ePWM 时钟。 因此、通过离开:

    ClkCfgRegs.PERCLKDIVSEL.bit.EPWMCLKDIV=1 

    则 PWM 的时钟频率为100MHz。

    然而、ADC 时钟仍然基于200MHz 的 SYS CLK、所以为了使我的 S+H 时间 t = 100ns、我需要根据来计算 ACQPS:

    100ns =(ACQPS+1)*SYSCLK = (ACQPS+1)*1/2200MHz --> ACQPS = 19

    计算得出的那样。  

    请记住、要将 ADC 时钟设置为50MHz、我必须设置:

    AdcaRegs.ADCCTL2.bit.prescale = 6;//即 SYSCLK (200MHz)/4 

    显然、我假设 SYS CLK = 200MHz 是因为我使用 的是 TMS320F28377D……

    再次感谢、

    Leo

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

    您好、Leo、

    是的、这一切看起来都很好。  

    我建议您检查 PLL 的软件设置以及您使用的任何硬件、以确保您确实获得200MHz SYSCLK。  您还可以通过启用 XCLKOUT、然后使用示波器或频率计数器进行测量来通过实验验证这一点。  

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

    您好 Devin、

    非常感谢您的回复。  

    我尝试验证我的 SYSCLK、即 CPU1 CLK、是否为200MHz、  

    正如您所建议的、SPRUHM8C 在第页上显示。 107.  

    因此、我将 GPIO73配置如下:

    GpioCtrlRegs.GPCPUD.bit.GPIO73 = 1;//启用 GPIO73
    GpioCtrlRegs.GPCMUX1.bit.GPIO73 = 3;// GPIO73 = XCLKOUT (MUX = 3、SPRS880C 的表4-3、页)。 40)
    GpioCtrlRegs.GPCDIR.bit.GPIO73 = 1;// GPIO73配置为输出 

    我设置了:  

    ClkCfgRegs.XCLKOUTDIVSEL.bit.XCLKOUTDIV=0;//除以/1 (这被置位=3、即默认为/8)
    
    ClkCfgRegs.CLKSRCCTL3.bit.XCLKOUTSEL=2;// CPU1.SYSCLK 表2-142页。 293 SPRUHM8C;选择 XCLKOUT 的源 

    当我在 GPIO73上连接示波器探针时、我看到的就是这种情况(请注意、示波器的带宽仅为20mH、这就是我在这张图片中看到正弦波而不是方波的原因):

    因此、我认为这是我的 SYSCLK 确实是200MHz 的确认(我不得不设置为 ClkCfgRegs.XCLKOUTDIVSEL.bit.XCLKOUTDIV=0以正确显示它)。

    谢谢你

    Leo

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

    您还可以将 XCLKOUT 分频器设置为/8、但这只会使您达到25MHz。

    您还可以有意设置 PLL 分频器几个设置(可能类似于/16)、以观察 SYSCLK 是否符合预期。

    这并不是真正必要的、但可能是一个良好的完整性检查/调试步骤。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Devin、

    再次感谢。 我再尝试一次、使用

    并保持 PLLSYSCLKDIV 不变、如下所示

    这就是我得到的

    似乎按预期工作。

    谢谢

    Leo