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.

[参考译文] TM4C1294KCPDT:如何通过 ADC 差分输入实现最大采样率

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/566030/tm4c1294kcpdt-how-to-achieve-maximum-sample-rate-by-adc-differential-input

器件型号:TM4C1294KCPDT
Thread 中讨论的其他器件: EK-TM4C1294XL

尊敬的香榭丽舍

作为客户反馈、他们通过 TM4C1294KCPDT 上的差分输入使用 ADC 功能、但无法实现2Mbps 采样率。  

尽管在 EK-TM4C1294XL 上使用示例代码(Tivaware 上的 different.c)、但我们仍然有很大的 ADC 代码差异。

请告诉我们如何 通过 ADC 差分输入实现最大采样率(2Mbps)?

如果您有任何建议、请随时告知我们。

非常感谢。

此致、

Janet

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

    ADC 是如何配置的。 是否可以发布相同的代码?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Amit:

    按如下方式配置 ADC。谢谢

    /*
    * main.c
    *
    #include
    #include
    #include "inc/hw_memmap.h"
    #include "inc/hw_types.h"
    #include "inc/tm4c1294kcpdt.h"
    #include "driverlib/pin_map.h"
    #include "driverlib/sysctl.h"
    #include "driverlib/debug.h"
    #include "driverlib/gpio.h"
    #include "driverlib/adc.h"
    #include "driverlib/rom.h"
    #include "driverlib/timer.h"
    #include "driverlib/interrupt.h"


    //**** 常数*****
    const int sampleFreq = 8000;//采样频率

    //**** 变量****
    uint32_t ADC0Value[1024];
    uint16_t SamplePeriod;
    uint32_t ui32SysClock;
    uint32_t uState;
    uint32_t diff;


    //中断
    空 Timer0IntHandler (空){
    ROM_TimerIntClear (TIMER0_BASE、TIMER_TINA_TIMEOUT);
    uint32_t ugpio;
    ugpio = GPIOPinRead (GPIO_Porta_base、GPIO_PIN_4);
    if (ugpio =GPIO_PIN_4)

    GPIOPinWrite (GPIO_Porta_base、GPIO_PIN_4、0);

    其他

    GPIOPinWrite (GPIO_Porta_base、GPIO_PIN_4、GPIO_PIN_4);

    void ADC0SS3IntHandler (void){

    ROM_ADCSequenceDataGet (ADC0_BASE、3、ADC0Value);//从 ADC 获取数据并将其存储在 ADC0Value 中
    ADCIntClear (ADC0_BASE、3);
    DIFF = ADC0Value[0];

    if (diff >= 200)

    GPIOPinWrite (GPIO_Porta_base、GPIO_PIN_5、GPIO_PIN_5);

    如果(差动<= 100)则为其他值

    GPIOPinWrite (GPIO_Porta_base、GPIO_PIN_5、0);


    //定义
    void systemsetup (void){
    //***时钟

    #if defined (target_IS_TM4C129_RA0)||\
    已定义(TARGET_IS_TM4C129_RA1)||\
    已定义(TARGET_IS_TM4C129_RA2)

    ui32SysClock = SysCtlClockFreqSet ((SYSCTL_XTAL_25MHz |
    SYSCTL_OSC_MAIN |
    SYSCTL_USE_PLL |
    SYSCTL_CFG_VCO_480)、120000000);
    其他
    SysCtlClockSet (SYSCTL_SYSDIV_10 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN |
    SYSCTL_XTAL_25MHz);
    #endif


    //***外设启用
    ROM_SysCtlPeripheralEnable (SYSCTL_Periph_ADC0);
    ROM_SysCtlPeripheralEnable (SYSCTL_Periph_TIMER0);
    ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOA);
    ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOD);
    // ROM_SysCtlPeripheralEnable (SYSCTL_Periph_GPIOE);

    ROM_SysCtlDelay (100);
    HWREG (SYSCTL_BASE + 0x538)= 0x03;
    ROM_SysCtlDelay (50);
    HWREG (SYSCTL_BASE + 0x538)= 0x00;
    ROM_SysCtlDelay (100);

    //*** ADC0
    ROM_ADCReferenceSet (ADC0_BASE、ADC_REF_INT);
    ROM_ADCSequenceConfigure (ADC0_BASE、3、ADC_TRIGGER_TIMER、0);
    // ROM_ADCSequenceStepConfigure (ADC0_BASE、2、0、`15);
    // ROM_ADCSequenceStepConfigure (ADC0_BASE、2、1、ADC_CTL_CH14 | ADC_CTL_IE | ADC_CTL_END);
    // ROM_ADCSequenceStepConfigure (ADC0_BASE、2、0、ADC_CTL_CH7 | ADC_CTL_D | ADC_CTL_IE | ADC_CTL_END);
    ROM_ADCSequenceStepConfigure (ADC0_BASE、3、0、ADC_CTL_CH7|ADC_CTL_D|ADC_CTL_IE|ADC_CTL_END);//ADC_CTL_CH7
    ROM_ADCSequenceEnable (ADC0_BASE、3);

    //*** GPIO
    // PD0、PD1作为 ADC
    ROM_GPIOPinTypeADC (GPIO_PORTD_base、GPIO_PIN_0 | GPIO_PIN_1);

    // PD2、PD3作为输入
    ROM_GPIOPinTypeGPIOInput (GPIO_PORTD_base、GPIO_PIN_2 | GPIO_PIN_3);
    GPIOPadConfigSet (GPIO_PORTD_base、GPIO_PIN_2 | GPIO_PIN_3、
    GPIO_Strength _2mA、GPIO_PIN_TYPE_STD);
    // PA4、PA5作为输出
    ROM_GPIOPinTypeGPIOOutput (GPIO_Porta_base、GPIO_PIN_4 | GPIO_PIN_5);
    GPIOPadConfigSet (GPIO_Porta_base、GPIO_PIN_4 | GPIO_PIN_5、
    GPIO_Strength _12mA、GPIO_PIN_TYPE_STD);

    //***计时器
    ROM_TimerConfigure (TIMER0_BASE、TIMER_CFG_PERIODICASE);
    ROM_TimerLoadSet (TIMER0_BASE、TIMER_A、ui32SysClock / 200000);
    TimerControlTrigger (TIMER0_BASE、TIMER_A、TRUE);


    //***中断
    ROM_IntEnable (INT_TIMER0A);
    ROM_TimerIntEnable (TIMER0_BASE、TIMER_TINA_TIMEOUT);
    ROM_IntEnable (INT_ADC0SS3);
    ROM_ADCIntEnable (ADC0_BASE、3);

    ROM_IntMasterEnable();
    ROM_TimerEnable (TIMER0_BASE、TIMER_A);


    int main (void){
    systemsetup();

    while (1){


    返回0;

    测试结果:

    1. PD0 PD1与 GND 均相连。

     

         2.PD0 PD1与3V3连接。

     

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

    那么、问题是当两个引脚都连接到 GND 或 LaunchPad 上的3.3V 时、差分值有很大变化? 这与2MSPS 无关。 是这样吗?

    我在代码中看到的是、通道7配置为差分模式、但 PD0和 PD1是对应于通道15和14的 ADC 引脚。 如果必须使用 PD0和 PD1、则必须在配置中使用 ADC_CTL_CH14而不是 ADC_CTL_CH7。