StellarisTM系列微控制器的部分产品中集成了ADC模块.adc的硬件分辨率为10位,但由于噪音和其它使精度变小的因素的影响,实际的精度小于10位。文提供了一个基于软件的过采样技术,从而使转换结果的有效位数(ENOB)得到改善,并描述了对输入信号执行过采样的方法,以及在精度和整个系统性能上的影响有效位数;模块ADC;过采样过采样原理过采样是从输入信号中采集额外的转换数据模拟信号采样的标准约定指出,采样频率FS至少是输入信号的最高频率成分f.sub.H的两倍只要所选的采样频率高于FS。
被看作是过采样。过采样与平均技术相结合时,可改善ENOB。是可以实现的,因为在将过采样的结果进行平均的同时也将量化噪音进行了平均,这样就提高了信噪比(SNR),信噪比的提高会在ENOB上产生一个直接的影响,从而改善ENOB。度上每提高一位,必须对信号进行4倍的过采样,即过采样频率fos基因与采样频率FS的关系:FOS = 4×* FSX为ENOB上需改进的位数(例如,需要改进位2,则X = 2)过采样对转换结果的精度的改善如图1所示。中,对输入信号进行4倍过采样(样品组用绿色和紫色表示)并进行平均。中显示的采样点阐明了原始的,带噪音信号与平均值之间的差值。例中的噪音在单个采样值上对精度的影响达到±3位。
们注意到平均值(橙色圆点)比大多数单个的采样值更接近于理想值,并且精确得多。均操作可看作是输入信号上的一个低通滤波器,当采样数据宽度(单一尺寸)增加时滤波器的通带变窄有两种方法可对转换结果进行平均。规平均和滑动平均(移动平均)。下我们只讨论滑动平均。动平均在平均计算中使用存放ñ个最近采样值的采样缓冲区,ADC允许在其最大采样率时采样(ADC采样率并不象常规平均那样减小为原来的1 / n)的,这样它可理想地用于要求过采样和更高采样率的应用中。未知状态中,采样缓冲区能够用有效的采样数据预先填充(通过捕获第一个 “实际” 数据点之前的Ñ -1个采样点)也可保持为空,由应用来决定。
预先填充缓冲区的危害是前面的n-1个个采样点包含无效的数据,并在滑动平均计算中产生不利的影响。果这些影响可被应用所接受,并且如果软件能够解决前面的n-1个个偏移的采样点的可能性,则可去除缓冲区填充操作在使用滑动平均时,采样延迟如下式。delay到= (TSN-TS0)/ 2 tprocesstS0为进行平均时第一个采样点出现的时间,TSN为最后一个采样点出现的时间。
断处理程序处理采样数据所需的时间,并被计算为供应用使用的平均T加工也被分解到等式中。为必须在每次中断过程中执行采样缓冲区处理,因此使用滑动平均增加了额外的处理开销。

现Luminary Micro的ADC在中使用样定序器(采样序列)结构,它使用一次触发就可采集到高达17个不同的采样值(来自任意的模拟通道)这样过采样的实现就变得非常简单。通过向应用提供在任意给定的时刻对多个通道进行过采样的方法,使得软件的实现也具有极大的灵活性.Stellaris驱动库具有内置的允许进行高达8倍过采样的函数。级别的过采样能够使ENOB改进大约1.4位,因此在大多数应用中已足够了但是需要更大过采样因子的应用必须使用其它的实现以下是使用滑动进行平均每100us的过采样代码段1 ADC配置-…滑动平均//初始化ADC以便在检测到触发时在通道1定时器3上获得一个采样值.ADCSequenceConfigure(ADC_BASE,3,ADC_TRIGGER_TIMER,0); ADCSequenceStepConfigure(ADC_BASE,3,0,(ADC_CTL_CH1 | ADC_CTL_IE | ADC_CTL_END)); //初始化定时器0TimerConfigure(TIMER0_BASE,TIMER_CFG_32_BIT_PER); TimerLoadSet(TIMER0_BASE,TIMER_A,恒温阀芯SysCtlClockGet()/ 10000); TimerControlTrigger(TIMER0_BASE,TIMER_A,真正的);中断处理程序必须更新采样缓冲区并进行平均计算(见代码段2)。
每次ADC中断时,去掉采样缓冲区中的最后一个元素,缓冲区中剩下的数据移动一个位置。后,在计算平均值之前将新的转换结果放在采样缓冲区的开始处。断处理程序中执行的额外计算又一次增加了开销,这一点必须要考虑到。码段2 ADC中断处理程序ADCIntHandler空隙(空隙){//清除中断ADCIntClear(ADC_BASE,3); //检查g_ucOversampleIdx,确保它的值在范围内,如果(g_ucOversampleIdx == 16){g_ucOversampleIdx = 0; } //从全局总和中减去最早的值g_ulSum – = g_ulSampleBuffer [g_ucOversampleIdx]; //用新的采样值代替最早的值g_ulSampleBuffer [g_ucOversampleIdx] = HWREG(ADC_BASE ADC_O_SSFIFO3 ); //将新的采样值加到总和中g_ulSum = g_ulSampleBuffer [g_ucOversampleIdx]; // g_ucOversampleIdx加1 g_ucOversampleIdx ; //从采样缓冲区的数据中获得平均值g_ulAverage g_ulSum >> = 4; //占位符,供ADC处理代码}在启动定时器之前,使能定时器及其中断(见代码段3)。码段3使能ADC和中断//使能定序器和中断ADCSequenceEnable( ADC_BASE,3); ADCIntEnable(ADC_BASE,3);站不住脚(INT_ADC3); //使能定时器并启动转换处理TimerEnable(TIMER0_BASE,TIMER_A);本文描述的过采样技术需要额外的代码来执行平均计算,附加中断,和/或大部分采样定序器资源,因此它在整个系统性能上有一个显着的影响。

论Luminary Micro公司的采样定序器结构为过采样技术的实现提供了大量的选项。与软件平均技术相结合时,该结构能够使系统设计人员有效地在采样频率,系统性能和采样解决方案之间进行权衡。
本文转载自
恒温阀芯 https://www.wisdom-thermostats.com
