TI中文支持网
TI专业的中文技术问题搜集分享网站

TMS320F280049: 请问ADC多通道循环同步采样该如何配置?

Part Number:TMS320F280049

请问ADC多通道循环采样该如何配置?当三个ADC module选择定时器触发所有通道(触发周期5us),并且开启ADCA的中断时,所有SOC通道的转换结果都相同。以下是我的ADC SOC通道配置,麻烦看一下配置上是否有不对的,或者是不是方式不对。谢谢。 目标是实现 ADC A \ B \ C的各个通道循环同步采样(每个循环开始时同步)。

#define USER_ACQPS_     40

void InitADCSOC(void)
{
    //config SOCs, set the triggler source for SOCs. ACQPS = 40(0.5US)    ConvTime: 10*0.025=0.25us 
    ADC_setupSOC(ADCA_BASE, ADC_SOC_NUMBER0, ADC_TRIGGER_CPU1_TINT1, ADC_CH_ADCIN4, USER_ACQPS_);   
    ADC_setupSOC(ADCA_BASE, ADC_SOC_NUMBER1, ADC_TRIGGER_CPU1_TINT1, ADC_CH_ADCIN9, USER_ACQPS_);  
    ADC_setupSOC(ADCA_BASE, ADC_SOC_NUMBER2, ADC_TRIGGER_CPU1_TINT1, ADC_CH_ADCIN6, USER_ACQPS_); 
    ADC_setupSOC(ADCA_BASE, ADC_SOC_NUMBER3, ADC_TRIGGER_CPU1_TINT1, ADC_CH_ADCIN2, USER_ACQPS_);  
    ADC_setupSOC(ADCA_BASE, ADC_SOC_NUMBER4, ADC_TRIGGER_CPU1_TINT1, ADC_CH_ADCIN3, USER_ACQPS_);
    ADC_setupSOC(ADCB_BASE, ADC_SOC_NUMBER0, ADC_TRIGGER_CPU1_TINT1, ADC_CH_ADCIN0, USER_ACQPS_);   
    ADC_setupSOC(ADCB_BASE, ADC_SOC_NUMBER1, ADC_TRIGGER_CPU1_TINT1, ADC_CH_ADCIN4, USER_ACQPS_);  
    ADC_setupSOC(ADCB_BASE, ADC_SOC_NUMBER2, ADC_TRIGGER_CPU1_TINT1, ADC_CH_ADCIN2, USER_ACQPS_);  
    ADC_setupSOC(ADCB_BASE, ADC_SOC_NUMBER3, ADC_TRIGGER_CPU1_TINT1, ADC_CH_ADCIN3, USER_ACQPS_);
    ADC_setupSOC(ADCC_BASE, ADC_SOC_NUMBER0, ADC_TRIGGER_CPU1_TINT1, ADC_CH_ADCIN1, USER_ACQPS_);    ADC_setupSOC(ADCC_BASE, ADC_SOC_NUMBER1, ADC_TRIGGER_CPU1_TINT1, ADC_CH_ADCIN14, USER_ACQPS_); 
    ADC_setupSOC(ADCC_BASE, ADC_SOC_NUMBER2, ADC_TRIGGER_CPU1_TINT1, ADC_CH_ADCIN4, USER_ACQPS_); 

    Interrupt_register(INT_ADCA1, &ADCAInt1ISR);

    Interrupt_enable(INT_ADCA1);

    ADC_setInterruptSource(ADCA_BASE, ADC_INT_NUMBER1, ADC_SOC_NUMBER4);
    ADC_enableInterrupt(ADCA_BASE, ADC_INT_NUMBER1);
    ADC_disableInterrupt(ADCA_BASE, ADC_INT_NUMBER2);
    ADC_disableInterrupt(ADCA_BASE, ADC_INT_NUMBER3);
    ADC_disableInterrupt(ADCA_BASE, ADC_INT_NUMBER4);
    ADC_clearInterruptStatus(ADCA_BASE, ADC_INT_NUMBER1);

}

__interrupt void ADCAInt1ISR(void)
{
//    Interrupt_disable(INT_ADCA1);// Disable this interrupt from happening again
    Interrupt_clearACKGroup(INTERRUPT_ACK_GROUP1);// Acknowledge interrupt

    ADValue[0] = ADC_readResult(ADCARESULT_BASE, ADC_SOC_NUMBER0);
    ADValue[1] = ADC_readResult(ADCARESULT_BASE, ADC_SOC_NUMBER1);
    ADValue[2] = ADC_readResult(ADCARESULT_BASE, ADC_SOC_NUMBER2);
    ADValue[3] = ADC_readResult(ADCARESULT_BASE, ADC_SOC_NUMBER3);
    ADValue[4] = ADC_readResult(ADCARESULT_BASE, ADC_SOC_NUMBER4);

    ADValue[5] = ADC_readResult(ADCBRESULT_BASE, ADC_SOC_NUMBER0);
    ADValue[6] = ADC_readResult(ADCBRESULT_BASE, ADC_SOC_NUMBER1);
    ADValue[7] = ADC_readResult(ADCBRESULT_BASE, ADC_SOC_NUMBER2);
    ADValue[8] = ADC_readResult(ADCBRESULT_BASE, ADC_SOC_NUMBER3);

    ADValue[9] = ADC_readResult(ADCCRESULT_BASE, ADC_SOC_NUMBER0);
    ADValue[10] = ADC_readResult(ADCCRESULT_BASE, ADC_SOC_NUMBER1);
    ADValue[11] = ADC_readResult(ADCCRESULT_BASE, ADC_SOC_NUMBER2);

    // Check if overflow has occurred
    if(true == ADC_getInterruptOverflowStatus(ADCA_BASE, ADC_INT_NUMBER1))
    {
        ADC_clearInterruptOverflowStatus(ADCA_BASE, ADC_INT_NUMBER1);
        ADC_clearInterruptStatus(ADCA_BASE, ADC_INT_NUMBER1);
    }
}

以下是ADC转换结果截图:

Green Deng:

这个是每个模块的数值不一样,但是模块里面每个通道的数值一样。

通道里面测试的数值都正确吗?方便测试一下按顺序排一下SOC和对应的通道吗,程序里面的排序太乱了。虽然好像跟问题的关系不大。

,

zujian11 zhang:

简单列一下就是:

SOC0 -> ADC A4

SOC1 -> ADC A9

SOC2 -> ADC A6

SOC3 -> ADC A2

SOC4 -> ADC A3

SOC0 -> ADC B0

SOC1 -> ADC B4

SOC2 -> ADC B2

SOC3 -> ADC B3

SOC0 -> ADC C1

SOC1 -> ADC C14

SOC2 -> ADC C4

实际端口量得电压得情况:

A4、A9:0V
A3:         1.4967V
B0、B4:0V
C1:         1.9337V
C4:         1.4895V
C14:       0V
其余的前级是浮空的。

,

zujian11 zhang:

具体通道的配置我觉得应该不重要,问题在结果出来的值都是一样的,不知道哪里配置有问题。

,

Green Deng:

是的,我也在奇怪,因为看你的配置并没有重叠的地方。我会再看一下这个问题,有结果了回复你。

,

Green Deng:

可能需要检查基本 ADC 和设备配置的内容:

1、ADC 是否配置为内部或外部参考模式? VREFHI 引脚上的电压是多少?2、ADCCLK 的值是多少(基于 SYSCLK 到 ADCCLK 预分频器)?   (可能还需要验证 CPU SYSCLK 的值)3、VDDA 电源电压的值是多少?4、ADC 是否已通电?   (在采样之前是否遵循了通电延迟时间?)另外,复制的 SOC 配置代码似乎没问题

,

zujian11 zhang:

问题找到了。VDDA不稳定,过低了。

谢谢您的指导。thanks!

,

zujian11 zhang:

问一下,在参考电压配置成1.65V时,ADC的满量程是单纯地通过量得的 VREFHI电压 x2 计算出来吗?我这边量出来的VREFHI不是刚好1.65V.

,

Hao Liu:

你好,我也遇到了你类似的问题,请问您你这个问题怎么解决的呐

,

Hao Liu:

是要更换电源吗

,

zujian11 zhang:

VDDA的电压稳定了就OK了。你看看电源的输出功率够不够。根据手册,VDDA的电流最大有30mA。

赞(0)
未经允许不得转载:TI中文支持网 » TMS320F280049: 请问ADC多通道循环同步采样该如何配置?
分享到: 更多 (0)