历史上的今天
返回首页

历史上的今天

今天是:2025年04月01日(星期二)

正在发生

2020年04月01日 | 单片机ADC采样算法----递推平均值采样法

2020-04-01 来源:eefocus

在上一篇文章单片机ADC采样算法---平均值采样法中分析了平均值采样法的使用,上篇文章中的平均值采样法是连续采样100个数据,然后求平均值,这种方法存在一个问题,就是采集100个值之后,下一次又重新采集100个新的值,这两次采集的值是不连续的,相当于每次都是独立的采集来100个值,然后求平均值。这样计算出来的值有可能看不出来数据的变化趋势。希望在求平均值的时候每次读取到一个新的值,就将最早读取的旧值丢弃一个,相当于水管中的流水一样,有新的水流进来,就让最早进来的水流出去。这样采集到的数据就是连续变化的。这样通过采样值就能看出来采样数据是否发生了波动。


算法如下:

#define N 100

unsigned int filter4( void )                   

{

    static unsigned int value_buf[N];

    static unsigned int i = 0;

    unsigned int count;

    int  sum = 0;

    value_buf[i++] = ReadVol_CH3();

    if( i == N )

    {

        i = 0;

    }

    for( count = 0; count < N; count++ )

    {

        sum += value_buf[count];

    }

    return ( unsigned int )( sum / N );

}


通过数组将采样的数据存储起来,若数组存满之后,数组下标直接跳转到数组头,覆盖最早采样的数据。然后再计算平均值 。但是用数组存储的话会浪费单片机大量的存储空间,如果采样的数据比较多,单片机的空间有可能不够用。所以为了节省单片机的空间,这里不用数组存储,而是用另一种方法来实现  。


改进后的算法如下:


#define CNT  100

u16 get_ave( void )

{

    static  u8 count = 0;

    static  u32 S = 0;      //累加和

    static  u16 C = 0;      //本次采样值

    static  u16 A = 0;      //平均值

    C = ReadVol_CH3();

    if( count == 0 )

    {

        A = C;

        S = A * CNT;

        count = 1;

    }

    S = S - A + C;              //加上本次采样值,减去上次平均值

    A = S / N;                  //计算本次平均值

    return A;

}


不用数组存储的话就不知道最早采样的值是多少,这里用上次采样的平均值代替最早的采样值。A代表上次采样的平均值,C代表本次采样的值,S代表100次数据的累加和,每次采样到新数据时,就用累加和减去上一次的平均值,然后再加上本次采样的值,计算出本次采样新的平均值。


这样S就相当于连续100个数据的累加和,每次有新的数据进来之后,先减去旧的数据,再加上新的数据。这样计算出来的平均值就是连续的。下来测试一下优化算法。

这是函数发生器产的一个100HZ的正弦波,最小值是0V,最大值是4V,平均值是2.02V。单片机通过串口将采样回来的平均值发送出来,用串口波形显示软件,将采样值的波形显示出来。

通过串口波形软件可以看出,采样回来的值是波动的,说明优化后的采样算法更能实时的反应出来采样波形的波动情况。


在波形显示软件右下角可以看到,采样回来的值最小是419,最大是427,单片机ADC是10位分辨率 2^10=1024,所以采样的平均电压为 419/1024*5=2.0458984375V         427/1024*5=2.0849609375V  采样的平均值在2.04和2.08V之间波动。和示波器测出来的平均值2.02V有一点误差,误差最大值为0.06V左右,上一篇平均值采样法的最大误差为0.02V。


改进后的平均值采样算法和上一篇单片机ADC采样算法---平均值采样法采样的值相比,误差增大了,但是相对于平均值采样法来看,采样的值能更快速的反应出采样数据的变化情况。

推荐阅读

史海拾趣

CTS公司的发展小趣事

CTS公司,全称CTS Corporation,于1896年在美国印第安那州创立。在创立初期,公司主要生产和销售电器元件,凭借对技术的深入理解和市场需求的敏锐洞察,逐渐在行业中崭露头角。随着业务的扩展,CTS的产品线逐渐丰富,涵盖了汽车及电脑配件、通讯产品、精密仪器及装置等多个领域。

Elite Enterprises (H K) Co Ltd公司的发展小趣事

随着市场的竞争加剧,Elite Enterprises意识到只有不断提升产品品质和技术水平,才能在竞争中立于不败之地。因此,公司加大了对研发的投资,不断引进先进的生产设备和检测仪器,并严格把控原材料采购和生产流程。这些努力使公司的LED产品在光效、寿命和稳定性等方面均达到了行业领先水平。

GSR Technology Ltd公司的发展小趣事

为了应对市场需求的多样化,GSR Technology Ltd开始实施多元化产品策略。公司在保持GSR技术领先的同时,逐步向汽车电子、智能家居、安全监控等领域拓展。通过技术创新和定制化解决方案,公司成功推出了多款具有市场竞争力的电子产品,进一步拓宽了市场份额。同时,公司加强市场营销和品牌建设,提升了品牌知名度和美誉度。

BusBoard Prototype Systems公司的发展小趣事

在发展过程中,BusBoard Prototype Systems深知单打独斗难以取得长远的发展。因此,公司积极寻求与上下游企业的合作,共同推动电子行业的发展。通过与芯片制造商、软件开发商等建立紧密的合作伙伴关系,BusBoard不仅能够获得更优质的资源支持,还能够为客户提供更加全面的解决方案。

汇科公司的发展小趣事

与山东汇科电气技术有限公司不同,苏州汇科技术股份有限公司成立于2000年,是一家专业从事开发、设计、制造各式工业窑炉的技术型企业。公司位于江苏省常熟市辛庄工业开发区,凭借对技术的执着追求和对品质的严格把控,逐渐在行业中崭露头角。多年来,苏州汇科技术股份有限公司通过不断的技术创新和产品升级,赢得了客户的广泛认可和市场的信赖。

DREMEL公司的发展小趣事

随着电子行业的不断发展,数据治理和云数据湖领域也面临着越来越多的挑战。Dremio公司始终保持敏锐的市场洞察力,积极应对各种挑战。他们不断投入研发资源,推出了一系列创新产品和技术解决方案。例如,他们开发了一种基于人工智能的数据分析引擎,能够自动识别和预测数据中的异常和趋势。这一技术不仅提高了数据分析的准确性和效率,也为企业提供了更全面的数据支持。

问答坊 | AI 解惑

pwm dcdc转换器系统建模分析

pwm dcdc转换器系统建模分析…

查看全部问答>

山寨机查税 联发科受伤不轻

本帖最后由 jameswangsynnex 于 2015-3-3 19:58 编辑 由于中国政府自6月起无预警地再度针对山寨机业者展开查税动作,让整个山寨机产业链顿时失去动能,订单全面熄火,连带造成联发科6月接单量大幅衰退,相较于4月时手机芯片客户抢不到货、抱怨声连 ...…

查看全部问答>

wince5.0能用tapi吗

我找了几个ce5.0下的coredll.dll发现里面都没有导出lineXXX函数   ppc或者wm下有吧 指令集是armv4i 如果各位谁有麻烦给我一份 谁有这个平台下的串口源码…

查看全部问答>

有人用过R8C系列的单片机么?

各位好,大家用过R8C系列的单片机么? 小弟有几个问题想请教下: 在下使用R8C系列单片机,做串口通信,现一个问题困饶我好久了: 在程序中定义的全局变量,我只有一个地方修改他的值,但是他的值总是莫名其妙的改变,我在程序中确认只有一处修改啊! 大 ...…

查看全部问答>

(回复有分)实现3d效果的qq连连看

要求: 1、类似于qq连连看,是单击版的,有个朋友想找我做,问下大家,要是做的话预算多少rmb,还有需要多久 一个开发+一个美工。(上次发帖的写的) 2、加入3d元素,就是玩的过程中,背景图会呈现出宝石发出的动态的光线,动态的云彩,消掉后会 ...…

查看全部问答>

求助:vxworks内核任务调度问题?

在组件里添加组件“Include_VX_TRADITIONAL_SCHEDULER\"后,内核采用的内核调度策略为传统的调度策略。 在kernel program guide里有如下描述: The vxworks traditional scheduler provide priority_based preemptive scheduling as well as the ...…

查看全部问答>

请教提示信息乱码问题

操作系统为Wince, 编程语言EVC. 为Edit 控件关联了int型的变量,并设定了其有效范围是 1 到 5000,在输入的数值在此范围之外时,系统自动弹出了错误提示对话框。但为什么提示信息都是乱码呀? 我自己用messagebox显示的对话框可以正常显示中文呀!…

查看全部问答>

8051单片机实践与应用全书

[ 本帖最后由 一朵时光 于 2011-8-9 17:03 编辑 ]…

查看全部问答>

请问arm ds-5这样的专业开发软件都是哪类职业的人在使用啊?

rt请问arm ds-5这样的专业开发软件都是哪类职业的人在使用啊?…

查看全部问答>