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:ADC转换问题

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/577346/tms320f2812-adc-conversion-problem

部件号:TMS320F2812

我的ADC转换有问题。

ADC设置为具有5个转换的单序列发生器。

每个62.5 US ADC都开始新的转换。

使用内部参考,ADCREFP,ADCREFM连接到陶瓷罩10uF。

输入现在已连接到AGND。

采样值约为55。

(这似乎是偏移的,但如果我减少AdcRegs.ADCTRL3.bit.ADCCLKPS,该值将增加!!!)

 当我检查现在最小值最大值时,我发现许多采样值为0,许多采样值为110,这似乎是偏移的两倍。

 此日志文件仅显示采样为0或大于100的值。

 启动系统日志:27.02 ................................................................2017 16:09:19

时间戳采样值

1001s:0x0000 Dez:00000
1001s:0x0000 Dez:0万
1117s:0x0000 Dez:0万
1422s:0x0070 Dez:0.0112万
1422s:0x0070 Dez:00112
1450s:0x0000 Dez:00000
1450s:0x0000 Dez:0万
2144s:0x0.3万Dez:0x003,000350000:0:0.3万:
035万0


0x0072 Dez:0.0114万
3550s : 0x0072 Dez:0.0114万
3600s : 0x0000 Dez:0万
4258s : 0x0000 Dez:0万
4258s : 0x0000 Dez:00000
4632s : 0x0000 Dez:0万
4710s : 0x0000 Dez:0万
490000: 0x0000: 0x0000:




0x006B Dez:00107
4927s : 0x0000 Dez:0万
4927s : 0x0000 Dez:0万
5245s : 0x0000 Dez:0万
5246s : 0x0000 Dez:0万
5697s : 0x0000 Dez:00000
5697s : 0x0000 Dez:0万
50800000: 0x0000: 0x0000 Dez: 0x0万




0x0000 Dez:0万
6198s : 0x0069 Dez:0.0105万
6198s : 0x0069 Dez:0.0105万
6297s : 0x0000 Dez:0万
63668s : 0x0000 Dez:00000
6369s : 0x0000 Dez:0万
6656s : 0x0000 Dez:0万
:0x0000



代码:

void InitAdc (void)
{

// Init ADC
	AdcRegs.ADCTRL3.bit.ADCBGRFDN = 0x3;	//通电bandgap/参考电路
	Delay_US (ADC_USDELAY); //打开ADC
	AdcRegs.ADCTRL3.bit.ADCPWDN的其余部分之前的延迟= 1;		//打开ADC的其余
	部分DELAY _US (ADC_USDELAY2); //打开ADC电源后的延迟
//结束初始ADC

//特定ADC设置:
AdcRegs.ADCTRL1.bit.ACQ_PS = 0xF;// ADC模块期间的S/H宽度 = 16 ADC时钟
AdcRegs.ADCTRL1.bit.cps=0;
AdcRegs.ADCTRL3.bit.ADCCLKPS = 15;// ADC模块时钟= HSPCLK/2*ADC_CKPS = 60MHz/(2*2)= 15MHz
AdcRegs.ADCTRL1.bit.SEQ_CASC = 0;
AdcRegs.ADCTRL1.bit.con_run = 0; //设置连续运行

AdcRegs.ADCMAXCONV.Bit.MAX_CONV1=4;

AdcRegs.ADCCHSELSEQ1.bit.CONV00 =0;
AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 1;
AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 4;
AdcRegs.ADCCHSELSEQ1.bit.CONV03 = 6;
AdcRegs.ADCCHSELSEQ2.bit.CONV04 = 7;

//通过EVA
AdcRegs.ADCTRL2.bit.EVA_SOC_SEQ1启动SEQ1 =1;
}

作废GetADC(void)
{

同时(AdcRegs.ADCST.bit.INT_SEQ1=0)
{
	DELA_US(1);
}//等待中断

I1=AdcRegs.ADCRULT2=0>ADES4>ADCULES4;ADULT2=ADC=0>ADES0; ADULT2=0>ADESA0; ADCULT2=0>ADCULES4; ADU1=ADC=0;
ADC0>ADES4; ADUID=ADU1=0>ADESA0; ADC0>ADC0; ADULT2=0>ADESA0; ADULT2=

			
			

AdcRegs.ADCST.Bit.INT_SEQ1_CLR = 1;

}

 

我是遇到软件问题还是硬件问题?

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

    Steve,

    如何将ADC输入连接到AGND?  是直接短路还是通过电阻器拉动?

    所有五个ADC输入是否都偏向AGND?

    汤米

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Tommy,
    ADC输入直接连接到无任何电阻器的AGND。
    只有两个输入基于AGND,另一个基于GND。
    AGND通过铁氧体连接到GND,但目前我推出了铁氧体并为其进行了捷径。
    所有其它ADC采样输入均已打开!

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

    我假设这是在一个定制板上。

    您是否可以将序列发生器配置为一次仅采样一个通道,并查看特定通道的波动轨迹?

    此外,当ADC采样时,是否有任何并发活动正在运行? 我想知道是否有噪音耦合。

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

    Tommy,

    当我将序列发生器更改为仅采样一个通道时,结果会更好。

    我发现我的问题,这是通过扁平电缆连接的附加主板的硬件问题。

    当我断开扁平电缆时,一切都正常。

    目前,我对输入进行了4次抽样。 这比50 % 减少了更多的错误。

    现在我有时间去寻找真正的问题。

    Steve

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

    感谢您报告您的发现。 我希望您能够快速找到根本原因。 如果您需要任何帮助,请告知我们。

    汤米