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.

[参考译文] TM4C129ENCPDT:使用 ADC 序列发生器时的模数转换延迟

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/609450/tm4c129encpdt-analog-to-digital-conversion-delay-when-using-adc-sequencer

器件型号:TM4C129ENCPDT

你(们)好

我使用序列发生器(序列编号1)并使用 TM4C MCU 的2个 ADC 从8个模拟输入获取数据。 我知道两个 ADC 都可以同时读取、但序列意味着读取具有相同 ADC 的两个模拟输入时会出现延迟、如果 我使用计时器来控制去采集、我如何知道该延迟的值? 采样频率(fs)为200KHz。 这是两个 ADC 的 ADC 配置:

void ADCconfigure (uint32_t sysclock、uint32_t fs)

{
SysCtlPeripheralEnable (SYSCTL_Periph_ADC0);
SysCtlPeripheralSlepEnable (SYSCTL_Periph_ADC0);
ADCClockConfigSet (ADC0_BASE、ADC_CClock_SRC_PIOSC | ADC_CClock_RATE_FULL、1);

ADCSequenceConfigure (ADC0_BASE、1、ADC_TRIGGER_TIMER、0);
ADCSequenceStepConfigure (ADC0_BASE、1、0、ADC_CTL_CH16/*PK0*/);
ADCSequenceStepConfigure (ADC0_BASE、1、1、ADC_CTL_CH17/* PK1*/);
ADCSequenceStepConfigure (ADC0_BASE、1、2、ADC_CTL_CH18/* PK2*/);
ADCSequenceStepConfigure (ADC0_BASE、1、3、ADC_CTL_CH19/* PK3*/| ADC_CTL_END | ADC_CTL_IE);
ADCSequenceDMAEnable (ADC0_BASE、1);

uDMAChannelAttributeDisable (UDMA_CHANGE_ADC1、
UDMA_ATTR_ALTSELECT | UDMA_ATTR_USEBURST |
UDMA_ATTR_HIGH_PRIOR|
UDMA_ATTR_REQMASK);

uDMAChannelControlSet (UDMA_CHANGE_ADC1 | UDMA_PRI_SELECT、
UDMA_SIZE_16 | UDMA_SRC_INC_NONE | UDMA_DST_INC_16 |
UDMA_ARB_1);

uDMAChannelControlSet (UDMA_CHANGE_ADC1 | UDMA_ALT_SELECT、
UDMA_SIZE_16 | UDMA_SRC_INC_NONE | UDMA_DST_INC_16 |
UDMA_ARB_1);
/**/
uDMAChannelTransferSet (UDMA_CHANGE_ADC1 | UDMA_PRI_SELECT、
UDMA_MODE_PINGONG、
(void *)(ADC0_BASE + ADC_O_SSFIFO1)、
&g_pui8USBTxBuffer[index0]、MEM_buffer_size);

uDMAChannelTransferSet (UDMA_CHANGE_ADC1 | UDMA_ALT_SELECT、
UDMA_MODE_PINGONG、
(void *)(ADC0_BASE + ADC_O_SSFIFO1)、
&g_pui8USBTxBuffer[index0]、MEM_buffer_size);

uDMAChannelEnable (UDMA_CHANGE_ADC1);
ADCIntEnableEx (ADC0_BASE、ADC_INT_DMA_SS1);
IntEnable (INT_ADC0SS1);

SysCtlPeripheralEnable (SYSCTL_Periph_ADC1);
SysCtlPeripheralSlepEnable (SYSCTL_Periph_ADC1);
ADCClockConfigSet (ADC1_base、ADC_CClock_SRC_PIOSC | ADC_CClock_RATE_FULL、1);

ADCSequenceConfigure (ADC1_base、1、ADC_TRIGGER_TIMER、0);
ADCSequenceStepConfigure (ADC1_base、1、0、ADC_CTL_CH0/*PE3*/);
ADCSequenceStepConfigure (ADC1_base、1、1、ADC_CTL_CH1/*PE2*/);
ADCSequenceStepConfigure (ADC1_base、1、2、ADC_CTL_CH2/*PE1*/);
ADCSequenceStepConfigure (ADC1_base、1、3、ADC_CTL_CH3/* PE0*/| ADC_CTL_END | ADC_CTL_IE);
ADCPhaseDelaySet (ADC1_base、ADC_PHASE_0);
ADCSequenceDMAEnable (ADC1_BASE、1);

uDMAChannelAttributeDisable (UDMA_CH25_ADC1_1、
UDMA_ATTR_ALTSELECT | UDMA_ATTR_USEBURST |
UDMA_ATTR_HIGH_PRIOR|
UDMA_ATTR_REQMASK);

uDMAChannelControlSet (UDMA_CH25_ADC1_1 | UDMA_PRI_SELECT、
UDMA_SIZE_16 | UDMA_SRC_INC_NONE | UDMA_DST_INC_16 |
UDMA_ARB_8);

uDMAChannelControlSet (UDMA_CH25_ADC1_1 | UDMA_ALT_SELECT、
UDMA_SIZE_16 | UDMA_SRC_INC_NONE | UDMA_DST_INC_16 |
UDMA_ARB_8);
/**/
uDMAChannelTransferSet (UDMA_CH25_ADC1_1 | UDMA_PRI_SELECT、
UDMA_MODE_PINGONG、
(void *)(ADC1_base + ADC_O_SSFIFO1)、
&g_pui8USBTxBuffer[index1]、MEM_buffer_size);

uDMAChannelTransferSet (UDMA_CH25_ADC1_1 | UDMA_ALT_SELECT、
UDMA_MODE_PINGONG、
(void *)(ADC1_base + ADC_O_SSFIFO1)、
&g_pui8USBTxBuffer[index1]、MEM_buffer_size);

uDMAChannelAssign (UDMA_CH25_ADC1_1);
uDMAChannelEnable (UDMA_CH25_ADC1_1);
ADCIntEnableEx (ADC1_base、ADC_INT_DMA_SS1);
IntEnable (INT_ADC1SS1);

//-------------------------------- //

SysCtlPeripheralEnable (SYSCTL_Periph_TIMER0);
TimerConfigure (TIMER0_BASE、TIMER_CFG_A_PERIODICASE);
TimerLoadSet (TIMER0_BASE、TIMER_A、sysclock/(FS));
TimerControlTrigger (TIMER0_BASE、TIMER_A、TRUE);
}

//--------------- 

提前感谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    序列中的每个采样采用16个 ADC 时钟。 从一个采样周期到序列中下一个采样周期的延迟是 ADC 时钟周期的16倍。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Bob、非常感谢您的回答、此信息在某处? 您如何知道这一点?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [引述 USER="Sergio Mamani]re:ADC 的"序列发生器"-如何知道这个延迟的值? [/报价]

    假设所有内容均已完全/正确配置(并且功能符合规格)、则应保留较早的(供应商)响应。     也就是说,在您的操作条件下,"通过实验确认"您的"现实世界"系统所实现的延迟是否有用?

    Fire/I (过去)的任务类似-我们实施了一个"可触发、可变斜率、线性电压斜坡"、使" ADC 结果差异"能够准确反映"顺序转换之间的时间"。    后来有人建议、向 ADC 提供"正确定时的 PWM 脉冲序列"(数字)也可以用来确认顺序转换之间的"实际延迟"。    (此类测量(可能)的好处是测量"序列步骤0和步骤7 "之间的延迟、然后将该时间范围除以8 ...

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我从以下文档的第1184页中提取了它:
    www.ti.com/.../tm4c129encpdt.pdf