C2000有3代产品2812,28335,28035。他们的ADC说是12位,但是很多人做不到,一般认为他们的ENOB是10.1,10.9,10.4.
但其实针对C2000的ADC说ENOB并没有很大意义。因为在测试交流电时ENOB和实际精度并不是1:1的。而测量直流电的时候ENOB却包含了,INL,offset error,gain error....
而TI的datasheet给的相关参数又给人以误导,以28335为例,datasheet中给的offset error ±15LSB,Gain error ±30LSB,是经过adc_cal()矫正后的值;
这里的Gain error 是极端值,即C2000工业品在-40C - 125C,量程在0~3V之间的极限值;实际上Gain error是会因为输入值大小而改变,比如3V的时候是30LSB的Gain error,1.5V的时候就是15LSB。还会因为内部参考的温飘而变化。通常情况下,Gain error 应该是±10LSB。
offset error是可以矫正的,理论上,可以矫正到0.
实际应用中28335的精度一般是有4LSB的error。
正因为如此我个人认为,再在28335中引用2808的校正程序好像有点多余。毕竟28335出厂时已经有一个矫正数据在adc_cal()中,而真正会影响采样精度的C2000芯片各通道之间的串扰又很难解决(请大家帮忙补充)。
TI有几份专门谈论ADC布线和矫正的资料,在附件中,大家可以参考一下。
[ 本帖最后由 hlx3012 于 2012-1-17 20:25 编辑 ]
失调误差 =±3LSB,
增益误差 =±5LSB,
乍一看,觉得他似乎是对的。从上面列出的参数可知最差的技术参数是增益误差(±5 LSB)。进行简单的数学运算,12位减去5位分辨率等于7位,对吗?果真如此的话,ADC生产商为何还要推出这样的器件呢?增益误差参数似乎表明只要购买成本更低的8位转换器就可以了,但看起来这又有点不对劲了。正如您所判断的,上面的说法是错误的。
让我们重新来看一下LSB的定义。考虑一个12位串行转换器,它会输出由1或0组成的12位数串。通常,转换器首先送出的是最高有效位(MSB)(即LSB + 11)。有些转换器也会先送出LSB。在下面的讨论中,我们假设先送出的是MSB(如图1所示),然后依次送出MSB-1 (即 LSB + 10)和MSB -2(即LSB + 9)并依次类推。转换器最终送出MSB -11(即LSB)作为位串的末位。
LSB这一术语有着特定的含义,它表示的是数字流中的最后一位,也表示组成满量程输入范围的最小单位。对于12位转换器来说,LSB的值相当于模拟信号满量程输入范围除以212 或 4,096的商。如果用真实的数字来表示的话,对于满量程输入范围为4.096V的情况,一个12位转换器对应的LSB大小为1mV。但是,将LSB定义为4096个可能编码中的一个编码对于我们的理解是有好处的。
让我们回到开头的技术指标,并将其转换到满量程输入范围为4.096V的12位转换器中:
失调误差 = ±3LSB =±3mV,
增益误差 =±5LSB = ±5mV,
这些技术参数表明转换器转换过程引入的误差最大仅为8mV(或 8个编码)。这绝不是说误差发生在转换器输出位流的LSB、LSB-1、LSB-2、LSB-3、LSB-4、LSB-5、LSB-6和 LSB-7 八个位上,而是表示误差最大是一个LSB的八倍(或8mV)。准确地说,转换器的传递函数可能造成在4,096个编码中丢失最多8个编码。丢失的只可能是最低端或最高端的编码。例如,误差为+8LSB ((+3LSB失调误差) + (+5LSB增益误差)) 的一个12位转换器可能输出的编码范围为0 至 4,088。丢失的编码为4088至4095。相对于满量程这一误差很小仅为其0.2%。与此相对,一个误差为-3LSB((-3LSB失调误差)—(-5LSB增益误差))的12位转换器输出的编码范围为3至4,095。此时增益误差会造成精度下降,但不会使编码丢失。丢失的编码为0、1和2。这两个例子给出的都是最坏情况。在实际的转换器中,失调误差和增益误差很少会如此接近最大值。
在实际应用中,由于ADC失调或增益参数的改进而使性能提升的程度微不足道,甚至可以忽略。但是,对于那些将精度作为一项设计目标的设计人员来说,这种假设太过绝对。利用固件设计可以很容易地实现数字校准算法。但更重要的是,电路的前端放大/信号调理部分通常会产生比转换器本身更大的误差。
通过上面的讨论可以对本文开头提到的错误结论有一个更为全面而清晰的认识。事实上,上述的12位转换器的精度约为11.997位。采用微处理器或单片机可以利用简单的校准算法消除这种失调和增益误差,这对设计人员来说无疑是个好消息
楼上,说的没错,可是在这里指的通道串扰(就我所知)C2000的内部,ADC的各通道之间会有串扰,那解决办法就是只用单一ADC通道........(当然这不太可能真这样做-_-b)
其实在datasheet中也有类似的说明,TI的PDF中有说ADC通道的电压最好要保证不要超过3.3v,超过3.3V会对其他通道造成影响。
Voltages above VDDA + 0.3 V or below VSS - 0.3 V applied to an analog input pin may temporarily affect the conversion of another pin.To avoid this, the analog inputs should be kept within these limits.
我一直以为,即使是不超过3.0V,即使是小电压,即使保证各通道没有有高频信号/噪音,也多少会串扰,只不过可能影响小而被忽略。但具体的影响力,我并不知道。
[ 本帖最后由 hlx3012 于 2012-1-21 11:50 编辑 ]