C语言ADC平均值函数,单片机ADC采样算法----平均值采样法

单片机在模拟电路中使用的时候,经常需要用到AD功能,而通过单片机ADC采集回来的数据往往不能直接使用,在不同场合下需要对采集到的数据要通过不同的算法对数据进行处理,先来看看最简单的平均值采样法。

平均值采样法就是在一定时间内对采样的数据直接进行累加,然后用累加和除以采样的次数。将计算出来的平均值做为有效数据使用。

直接看C代码的实现

//累加100次求平均值

u16 get_ave1( void )

{

static  u8  cnt = 0;

static u32 sum = 0;

static u16 ave = 0;

if( cnt < 100 )

{

sum += ReadVol_CH4();           //读取ADC数据

cnt++;

}

if( cnt >= 100 )

{

ave = sum / 100;

cnt = 0;

sum = 0;

}

return ave;

}

代码很简单,每采样一次数据就累加一次,采样到100次数据后计算平均值就行。

下来测试一下采样效果,首先通过函数发生器产生一个100HZ的正弦波,最小值0V,最大值4V。

731ce5e2e891f289db6f641769505b4a.png

在主函数中读取采样到的平均值,并通过串口打印出来,然后用串口波形显示软件将采样到的数据显示出来。

while( 1 )

{

val1 = get_ave1();

printf( "A%drn", val1 );

}

串口波形软件显示的波形如下:

b508717ae3d2d0be5515127be8aa2e58.png

可以看到采样回来的数据还算比较稳定,平均值为418,由于单片机自带的是10位AD,所以ADC采样值最大为2^10 =1024,单片机是5V供电,可以计算出采样的平均电压为 418/1024*5=2.04V,通过上面示波器测的波形可以看到,示波器测的正弦波平均值为2.02V,说明平均值采样的方法还是比较准确的。串口波形软件上显示的波形有点波动,那是因为采样回来的平均值在 418 和 422 之间波动,可以计算出波动电压范围是(422-418)/1024*5=0.01953125V,如果要求不高的话,这个波动还是可以接受的。

在采样数据比较规律时,采样数据如果能采样到整个周期的数据时,平均值采样法还是比较简单的。如果采样的结果波动较大,可以通过增加采样次数来调整采样结果的稳定性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值