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.

[参考译文] TMS320F28377S:ADC 由 Timer0触发

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/805180/tms320f28377s-adcs-are-triggered-by-timer0

器件型号:TMS320F28377S

您好!

我尝试读取由 Timer0触发的 ADC0至 ADC3通道。

当我将 ADC0乘以 Timer0时,我可以读取 true 值,但当我对 ADC0和 ADC1进行 TRIG 时,我在 ADCRESULT0上测量了错误值,而且尽管 ADC1上没有任何模拟值,我在 ADCRESULT1上读取了一些值。

void SetupADCSoftware()
{
uint16 acqps;
acqps = 14;
EALLOW;
AdcaRegs.ADCSOC0CTL.bit.CHSEL = 0;//SOC0将转换引脚 A0
AdcaRegs.ADCSOC0CTL.bit.ACQPS = acqps;//采样窗口为 acqps +
AdcaRegs.ADCSOC0CTL.bit.TRIGSEL = 1;

AdcaRegs.ADCSOC1CTL.bit.CHSEL = 1;//SOC1将转换引脚 A1
AdcaRegs.ADCSOC1CTL.bit.ACQPS = acqps;//采样窗口为 acqps +//1 SYSCLK 周期
AdcaRegs.ADCSOC1CTL.bit.TRIGSEL = 1;

AdcaRegs.ADCSOC2CTL.bit.CHSEL = 2;//SOC2将转换引脚 A2
AdcaRegs.ADCSOC2CTL.bit.ACQPS = acqps;//采样窗口为 acqps +
AdcaRegs.ADCSOC2CTL.bit.TRIGSEL = 1;

AdcaRegs.ADCSOC3CTL.bit.CHSEL = 3;//SOC3将转换引脚 A3
AdcaRegs.ADCSOC3CTL.bit.ACQPS = acqps;//采样窗口为 acqps +
AdcaRegs.ADCSOC3CTL.bit.TRIGSEL = 1;

AdcaRegs.ADCINTSEL1N2.bit.INT1SEL = 0x3;// SOC3结束将设置 INT1标志
AdcaRegs.ADCINTSEL1N2.bit.INT1E = 1;//启用 INT1标志
AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;//确保 INT1标志被清除
EDIS;

} 
void ConfigureADC (void)
{
EALLOW;

//写入配置
AdcaRegs.ADCCTL2.bit.prescale = 0;//将 ADCCLK 分频器设置为/1

AdcSetMode (ADC_ADCA、ADC_resolution_12位、ADC_SIGNALMODE_SINGLE);


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


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

DELAY_US (1000);
EDIS;
} 

有人能不能对其原因有所了解?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    当我将触发通道从 timer0更改为 ePWM 时,读数没有任何变化...问题仍然存在...
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Eren:

    检查是否正确设置了采集预分频(ACQPS)值。 此外、让我知道 ADC 的触发速率。

    谢谢
    Vasudha
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢 Vasudha 的回答。
    我尝试过很多不同的预分频、但都不起作用。我已经将 CPU 定时器设置为10uS、此时我设置了 Adca (4通道)、ADCB (4通道)和 Adcd (4通道)。。。。。。但这次我也将10uS 设置为100uS、但没有任何变化。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    现在、在 spruhx5e 中添加了9.3.2部分、我已将 Rs 更新为250Ohm、

    为此、

    1 / 4 LSB

    t=-ln (0.25/4096)*(250+300)*14.5pF

    =77nS

    我的系统时钟为200MHz、因此1/SYCLK=5nS

    从这里

    ACQPS=14.4时相位15..

    当我使用此配置时、我的 ADCA0读取的值为真、但是、尽管 ADCA1上没有任何模拟信号、但 ADCA1读取的值为!!!

    我该怎么做?

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

    顺便说一下,当我阅读有关这方面的更多信息时,我有点困惑:)..

    第9.2节在 spruhx5e 中、有一个文本:

    "" S+H 持续时间是被转换的 SOC 的 ACQPS 字段的值、加上一倍

    SYSCLK 周期。 用户必须确保这个持续时间超过1个 ADCCLK 周期和

    数据表中指定的最小 S+H 持续时间。 转换时间大约为10.5 ADCCLK

    12位模式下为29.5个 ADCCLK 周期、16位模式下为29.5个 ADCCLK 周期。 确切的转换时间始终为 A

    SYSCLK 周期的整数。""

    正如您看到的转换时间 apprx 一样。 10.5 ADCCLK、当您将分频器设置为1时、每个 ADC 时钟为20ns、因此20ns*10.5=210nS 是计算 ACQPS 的转换时间大约为44 (220nS/5nS)、但在 CCS 示例中、ACQPS 需要14、这是怎么可能的!!!!! 。

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

    大家好、

    没有人不知道这个问题?

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

    ACQPS 和转换时间是不同的值。 PFB 器件 TRM 中的说明。

    将模拟电压转换为数字值的过程分为 S+H 相和 A
    转换阶段。 ADC 采样保持电路(S+H)在 ADC 时由 SYSCLK 计时
    转换过程由 ADCCLK 计时。 ADCCLK 由 SYSCLK 除以根据生成
    ADCCTL2寄存器中的预分频域。

    S+H 持续时间是被转换的 SOC 的 ACQPS 字段的值、加上一倍
    SYSCLK 周期。 用户必须确保这个持续时间超过1个 ADCCLK 周期和
    数据表中指定的最小 S+H 持续时间。 转换时间大约为10.5 ADCCLK
    12位模式下为29.5个 ADCCLK 周期、16位模式下为29.5个 ADCCLK 周期。 确切的转换时间始终为 A
    SYSCLK 周期的整数。

    谢谢
    Vasudha