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.

[参考译文] TMS320F28P550SJ:ADC 样本读取问题

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1499122/tms320f28p550sj-adc-samples-read-problem

器件型号:TMS320F28P550SJ

工具/软件:

尊敬的团队:

我正在为 ADC 执行此配置我面临的问题是没有在 ADC 结果寄存器上获得正确的计数如果我向 ADC 线提供1.65V 我需要获得2048个计数螺母它在我将代码加载到控制器的时候给了我不同的值。

void ADC_Config (void)


shortcktignor[0]= 0;
shortcktignor[1]= 0;


EALLOW;


//将 VREF 设置为内部
//
SetVREF (ADC_ADCA、ADC_EXTERNAL、ADC_VREF3P3);
SetVREF (ADC_ADCC、ADC_EXTERNAL、ADC_VREF3P3);
//
//将 ADCCLK 分频器设置为/4
//
AdccRegs.ADCCTL2.bit.prescale = 6;

//
//将脉冲位置设置为延迟 EOC
//
AdccRegs.ADCCTL1.bit.INTPULSEPOS = 1;

//
//给 ADC 上电、然后延迟1ms
//
AdccRegs.ADCCTL1.bit.ADCPWDNZ = 1;


AdcaRegs.ADCCTL2.bit.prescale = 6;

//
//将脉冲位置设置为延迟 EOC
//
AdcaRegs.ADCCTL1.bit.INTPULSEPOS = 1;

//
//给 ADC 上电、然后延迟1ms
//
AdcaRegs.ADCCTL1.bit.ADCPWDNZ = 1;
EDIS;

// delay_US (1000);


EALLOW;

AdcaRegs.ADCSOC0CTL.BIT.CHSEL = 0;
AdcaRegs.ADCSOC0CTL.BIT.ACQPS = 45;//cur0
AdcaRegs.ADCSOC0CTL.BIT.TRIGSEL = 5;

AdcaRegs.ADCSOC1CTL.BIT.CHSEL = 1;
AdcaRegs.ADCSOC1CTL.BIT.ACQPS = 45;//cur0
AdcaRegs.ADCSOC1CTL.BIT.TRIGSEL = 5;

AdcaRegs.ADCSOC2CTL.BIT.CHSEL = 2;
AdcaRegs.ADCSOC2CTL.bit.ACQPS = 45;//cur1
AdcaRegs.ADCSOC2CTL.BIT.TRIGSEL = 5;

AdcaRegs.ADCSOC3CTL.BIT.CHSEL = 3;
AdcaRegs.ADCSOC3CTL.BIT.ACQPS = 45;//cur8
AdcaRegs.ADCSOC3CTL.BIT.TRIGSEL = 5;

AdcaRegs.ADCSOC4CTL.BIT.CHSEL = 4;//cur9
AdcaRegs.ADCSOC4CTL.BIT.ACQPS = 45;
AdcaRegs.ADCSOC4CTL.BIT.TRIGSEL = 5;

AdcaRegs.ADCSOC5CTL.BIT.CHSEL = 5;//dc_fb
AdcaRegs.ADCSOC5CTL.BIT.ACQPS = 45;//MTum.1
AdcaRegs.ADCSOC5CTL.BIT.TRIGSEL = 5;

AdcaRegs.ADCSOC6CTL.bit.CHSEL = 6;//Mtemp1
AdcaRegs.ADCSOC6CTL.bit.ACQPS = 45;
AdcaRegs.ADCSOC6CTL.BIT.TRIGSEL = 5;

AdcaRegs.ADCSOC7CTL.BIT.CHSEL = 7;//Mtemp2
AdcaRegs.ADCSOC7CTL.BIT.ACQPS = 45;
AdcaRegs.ADCSOC7CTL.BIT.TRIGSEL = 5;

AdcaRegs.ADCSOC8CTL.BIT.CHSEL = 8;//OVT_FB
AdcaRegs.ADCSOC8CTL.BIT.ACQPS = 45;
AdcaRegs.ADCSOC8CTL.BIT.TRIGSEL = 5;

AdcaRegs.ADCSOC9CTL.BIT.CHSEL = 9;//ANA_1
AdcaRegs.ADCSOC9CTL.BIT.ACQPS = 45;
AdcaRegs.ADCSOC9CTL.BIT.TRIGSEL = 5;


// AdccRegs.ADCSOC6CTL.BIT.CHSEL = 6;//ANA_2
// AdccRegs.ADCSOC6CTL.bit.ACQPS = 45;//IP_0
// AdccRegs.ADCSOC6CTL.BIT.TRIGSEL = 5;

AdcaRegs.ADCSOC10CTL.BIT.CHSEL = 10;//ANA_2
AdcaRegs.ADCSOC10CTL.BIT.ACQPS = 45;
AdcaRegs.ADCSOC10CTL.BIT.TRIGSEL = 5;

AdcaRegs.ADCSOC11CTL.BIT.CHSEL = 11;
AdcaRegs.ADCSOC11CTL.BIT.ACQPS = 45;//ANA_3
AdcaRegs.ADCSOC11CTL.BIT.TRIGSEL = 5;

AdcaRegs.ADCSOC12CTL.BIT.CHSEL = 12;
AdcaRegs.ADCSOC12CTL.BIT.ACQPS = 45;//ANA_4
AdcaRegs.ADCSOC12CTL.BIT.TRIGSEL = 5;

// AdcaRegs.ADCSOC14CTL.BIT.CHSEL = 14;
// AdcaRegs.ADCSOC14CTL.BIT.ACQPS = 45;//IP_4
// AdcaRegs.ADCSOC14CTL.BIT.TRIGSEL = 5;
//
// AdcaRegs.ADCSOC15CTL.BIT.CHSEL = 15;
// AdcaRegs.ADCSOC15CTL.BIT.ACQPS = 45;//IP_5
// AdcaRegs.ADCSOC15CTL.BIT.TRIGSEL = 5;


//----- IP CONFIG------------------
// AdccRegs.ADCSOC6CTL.BIT.CHSEL = 0;
// AdccRegs.ADCSOC6CTL.bit.ACQPS = 45;//IP_0
// AdccRegs.ADCSOC6CTL.BIT.TRIGSEL = 5;
//
// AdccRegs.ADCSOC10CTL.BIT.CHSEL = 1;
// AdccRegs.ADCSOC10CTL.BIT.ACQPS = 45;//IP_1
// AdccRegs.ADCSOC10CTL.BIT.TRIGSEL = 5;
//
// AdccRegs.ADCSOC0CTL.BIT.CHSEL = 2;
// AdccRegs.ADCSOC0CTL.BIT.ACQPS = 45;//IP_2
// AdccRegs.ADCSOC0CTL.BIT.TRIGSEL = 5;
//
// AdccRegs.ADCSOC1CTL.BIT.CHSEL = 3;
// AdccRegs.ADCSOC1CTL.BIT.ACQPS = 45;//IP_3
// AdccRegs.ADCSOC1CTL.BIT.TRIGSEL = 5;
//
// AdccRegs.ADCSOC4CTL.BIT.CHSEL = 4;
// AdccRegs.ADCSOC4CTL.BIT.ACQPS = 45;//IP_4
// AdccRegs.ADCSOC4CTL.BIT.TRIGSEL = 5;
//
// AdccRegs.ADCSOC7CTL.BIT.CHSEL = 5;
// AdccRegs.ADCSOC7CTL.BIT.ACQPS = 45;//IP_5
// AdccRegs.ADCSOC7CTL.BIT.TRIGSEL = 5;

AdcaRegs.ADCINTSEL1N2.bit.INT1SEL = 0;// SOC0的末尾将设置 INT1标志
AdcaRegs.ADCINTSEL1N2.bit.INT1E = 1;//启用 INT1标志
AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;//确保清除 INT1标志

// AdccRegs.ADCINTSEL1N2.bit.INT1SEL = 0;// SOC0的末尾将设置 INT1标志
// AdccRegs.ADCINTSEL1N2.bit.INT1E = 1;//启用 INT1标志
// AdccRegs.ADCINTFLGCLR.bit.ADCINT1 = 1;//确保清除 INT1标志

EDIS;

}

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

    尊敬的 Rakesh:

    您能否提供以下信息以帮助进一步了解问题:  

    • 如何触发 ADC?
    • 您观察到的 ADC 代码有何差异?
    • 还是可以共享 ADC 数据读数部分  

    BR、

    Nilesh

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

    你好、Nilesh、

    如上述详细信息所述:

    在 EPWM 中断时触发 ADC。(AdcaRegs.ADCSOC2CTL.BIT.TRIGSEL = 5;)

    2.这些引脚具有多种功能、例如(模拟和数字引脚、例如:A2/B6/C9/CMP1_HP0/CAMP1_lp0/GPIO224/PGA1_INP)。此引脚具有数字和模拟功能、但我将此引脚设置为模拟引脚、它不会根据提供给引脚的电压提供适当的模拟计数。

    3.我通过 ADC 结果寄存器读取 EPWM 中断中的数据 EX: AdcaResultRegs.ADCRESULT2;

    此致、

    Rakesh

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

    尊敬的 Rakesh:

    是否根据您正在使用的 ADC 输入引脚为以下引脚配置以下寄存器位?

    模拟和数字、例如:A2/B6/C9/CMP1_HP0/CAMP1_lp0/GPIO224/PGA1_INP)

    还需要配置低于位。  

    请尝试上述操作、如果有用、请告诉我。  

    BR、

    Nilesh