像2808/28335这样的器件datahseet中都给出了ADC的ENOB=10.9位,SINAD=67.5dB,这两个是一回事,给一个即可,公式:SINAD=6.02*ENOB+1.76
但是28035和28069的datasheet中没有标这两个数据,请问一下实际数据大概是多少?能不能到10位?
我实际测试发现28069的ADC跳动很大,测试方法如下:
ADC配置为:CLKDIV2EN=1选择45M时钟,ADCNONOVERLAP=1关闭OVERLAP模式,Sample和Convert独立。
ADCREFSEL=0选择内部Bandgap,3.3V供电使用LDO
使用某个SOC通道采样1.5V干电池电压,ACQPS=6,电池电压短时间内可以认为是恒定的,内阻足够低,并且排除纹波等干扰情况。
使用ePWM1触发AD转换,6.4k采样率,即1s采样6400个数据,统计这6400个数据的最大值和最小值,计算最大值和最小值偏差,偏差1s更新一次。
实际测试发现:
- 直接接GND,最大值最小值偏差在5~9之间跳动。
- 直接接3.3V,最大值最小值偏差在19到25之间跳动。
- 接1.5V干电池,最大值最小值偏差在20到25之间跳动。
实际1.5V干电池的电压1秒的短时间内是非常稳定的,也没有纹波,但是28069的ADC采样跳动仍然超过20个LSB,大部分时间在24个LSB。
尝试将对应SOC的ACQPS设置为44,跳动仍然超过20个LSB,没有影响。
同样的方法在28335上测试,采样值的跳动只有10~12之间,比28069要小一半。
同一块板卡上的AD7606采样,同样的一节干电池电压,0x14B0,从数据看也就是最后一位偶尔跳动,1秒内的最大和最小值偏差在1到3个LSB之间,大部分时间是2个LSB,偶尔会有3个LSB。
软件初始化时调用过ADC_cal函数,也调用过AdcOffsetSelfCal来校正offset error。为何采样值跳动还是这么大?超过20个LSB。
造成这个采样值跳动的大概原因是什么呢?INL还是gain error?还是offset error?主要受哪个指标影响的?
我理解的INL应该关系不大,因为干电池电压确定,采样点是确定的,和线性度关系不是很大。
gain error似乎关系也不大,同样是因为干电池电压确定,采样点是确定的。至于基准温度漂移之类也没什么关系,1秒的时间内温度几乎不可能有变化。
那么就剩offset error了,我只在上电以后调用AdcOffsetSelfCal校正了一次offset error,文档中提到周期性校正,但是没找到具体实例,这个offset error变化的速率大概多少?如果1秒内没有变化,那么应该不会对我的测试结果有影响。