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.

[参考译文] TMS320F2812:C2000微控制器论坛

Guru**** 2391415 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1489602/tms320f2812-c2000-microcontrollers-forum

器件型号:TMS320F2812

工具与软件:

您好!

我使用的是 内置 ADC (修订版 G)。 在我的应用中、我将对一个非常慢的传感器信号进行采样、该信号会随着温度的升高而降低(温度范围:22至300 °C)。 在室温下对信号进行采样时、它会产生非常嘈杂的输出、大约有250个噪声计数。

我不确定在寄存器级别的 ADC 配置是否有问题。 我还仔细检查了硬件 PCB 设计、没发现任何问题。

提前感谢您的帮助。

下图显示了噪声频带:

ADC 计数范围从最小值2450到最大值2600

y 轴:ADC 计数

X 轴:t in s (总计100ms、因为显示1000个样本)

void InitAdc(void)
{

AdcRegs.ADCTRL3.bit.ADCBGRFDN = 0x3; // Power up bandgap/reference circuitry
DELAY_US(ADC_usDELAY); // Delay before powering up rest of ADC
AdcRegs.ADCTRL3.bit.ADCPWDN = 1; // Power up rest of ADC
DELAY_US(ADC_usDELAY2); // Delay after powering up ADC

AdcRegs.ADCTRL1.bit.SEQ_CASC = 1;
AdcRegs.ADCTRL1.bit.CONT_RUN = 0;
AdcRegs.ADCTRL1.bit.CPS = 0;

AdcRegs.ADCMAXCONV.bit.MAX_CONV1 = 0;

//ADCINA1
AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x1;

AdcRegs.ADCTRL2.bit.EVB_SOC_SEQ = 1;
// AdcRegs.ADCTRL2.bit.EVA_SOC_SEQ1 = 1;
AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 1;

// ADC clock prescaler ADCCLKPS = 0010 -> FCLK = 18.75
AdcRegs.ADCTRL3.bit.ADCCLKPS = 2;

EvbRegs.GPTCONB.bit.T4STAT = 1; //Counting upward
EvbRegs.GPTCONB.bit.TCMPOE = 0; //high-impedance state
EvbRegs.GPTCONB.bit.T4PIN = 0; //Forced low

EvbRegs.GPTCONB.bit.T4TOADC = 2; //Setting of period interrupt flag starts ADC

//T4CON Timer 4 Control Register
EvbRegs.T4CON.bit.FREE = 0; //Stop on emulation suspend
EvbRegs.T4CON.bit.SOFT = 0; //Stop on emulation suspend
EvbRegs.T4CON.bit.TMODE = 2; //Continous-Up Count Mode
EvbRegs.T4CON.bit.TPS = 7; //Input clock prescaler
EvbRegs.T4CON.bit.T4SWT3 = 0; //0: use own tenable bit; 1: use tenable to T4CON
EvbRegs.T4CON.bit.TENABLE = 1; //0: disable timer op; 1: enable timer op
EvbRegs.T4CON.bit.TCLKS10 = 0; //clock source: internal
EvbRegs.T4CON.bit.TCLD10 = 3; //reserved
EvbRegs.T4CON.bit.TECMPR = 0; //0: disable timer compare; 1: enable timer compare
EvbRegs.T4CON.bit.SET3PR = 0; //0: use own period; 1: use T4PR


EvbRegs.T4PR = 58594; // Sampling rate = 10 Hz

}

//Interrupt Routine

interrupt void ADCINT_ISR(void)
{
EALLOW;
SysCtrlRegs.WDKEY = 0x55;
EDIS;

rawValue = (AdcRegs.ADCRESULT0) >> 4;

AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1;
AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;



...

}

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

    您好!

    在查看您的 ADC 软件之前、您是否已使用示波器检查引脚电压?  

    您是否看到引脚上测量的电压出现了这种变化?  

    此致、

    Ben Collier

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

    您好!  

    我已经使用示波器检查引脚电压、未测量任何此类电压变化。

    所以,我认为这可能是一个软件问题...

    除了第一个职位:  

    #define ADC_usDELAY  8000L

    #define ADC_usDELAY2  20L

    此致

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

    您好!

    请允许我花一两天时间来与您联系。

    此致、

    Ben Collier

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

    您好!

    您能在第一篇文章中帮助我完成配置吗? 我想我做错了什么事。

    谢谢你。

    此致。

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

    您好!

    我通过您的代码查看了一下、没有看到任何明显的错误。  

    您能尝试使用我们的 ADC 示例来测量直流电压吗、您有同样的问题吗?  

    谢谢!

    Ben Collier

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

    您好!

    感谢您浏览代码。

    是的、我已经尝试过了。  

    对于直流电压、我还测量了相同的噪声。

    此致。

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

    您好!  

    您的 ADC 输入电路是什么样子的? 您能否提供原理图?  

    此外、您是否可以尝试将采集时间更改为最大值(ADCTRL1寄存器中的 ACQ_PS3位)? 这有什么影响吗?  

    谢谢!

    Ben Collier