历史上的今天
今天是:2025年04月01日(星期二)
2020年04月01日 | 单片机ADC采样算法----平均值采样法
2020-04-01 来源:eefocus
单片机在模拟电路中使用的时候,经常需要用到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。

在主函数中读取采样到的平均值,并通过串口打印出来,然后用串口波形显示软件将采样到的数据显示出来。
while( 1 )
{
val1 = get_ave1();
printf( "A%drn", val1 );
}
串口波形软件显示的波形如下:

可以看到采样回来的数据还算比较稳定,平均值为418,由于单片机自带的是10位AD,所以ADC采样值最大为2^10 =1024,单片机是5V供电,可以计算出采样的平均电压为 418/1024*5=2.04V,通过上面示波器测的波形可以看到,示波器测的正弦波平均值为2.02V,说明平均值采样的方法还是比较准确的。串口波形软件上显示的波形有点波动,那是因为采样回来的平均值在 418 和 422 之间波动,可以计算出波动电压范围是(422-418)/1024*5=0.01953125V,如果要求不高的话,这个波动还是可以接受的。
在采样数据比较规律时,采样数据如果能采样到整个周期的数据时,平均值采样法还是比较简单的。如果采样的结果波动较大,可以通过增加采样次数来调整采样结果的稳定性。
下一篇:如何设置STM8单片机选项字
史海拾趣
|
我买的开发板是英贝德的9261,由于新学,对很多东西都不是很懂,而这个开发板有没有现成的bsp模板,哪位能提供一份at91sam9261的bsp模板吗?最好是某家开发板商自带的或者自己做的bsp,可以编译通过的。我绝对不是觊觎您的技术,纯粹是为了学习,相 ...… 查看全部问答> |
|
2011年第78届电子展现又开始接收报名了,由于中国电子展每年秋季举行连报活动;所以很多客户现场就报名了,四个展馆近50000平方米,展位近1700余个,现在展位已销售过半,特别是2号馆综合元器件展馆,现在已没有位置可选(详见各展馆平面图)。建 ...… 查看全部问答> |
|
请问谁用过LM Flash Programmer通过uart给LM3S811下载程序啊,想问一下硬件上怎么处理,资料中说要把一个引脚拉低,但也有人说不用,不知道到底用不用,希望有经验的同志指点。如果需要把某个引脚拉低,那么出厂时应该是哪个引脚?… 查看全部问答> |
|
我初学51系列单片机,希望有朋友帮忙解析程序 如:主程序中,MAIN: MOV TMOD,#10H 这“#10H” 是做什么的,这条指令是做什么? 谢谢帮忙的朋友,谢谢! 控制步进电机 正反转 ...… 查看全部问答> |
|
最近想入手一个EKK-LM3S8962开发板,直接买原装进口的购买周期太常,但我急着用;在网上看到国内有该开发板TI的PCB源文件生产的板子,请问论坛上的大牛这两个板子有什么区别?我用8962开发板主要做以太网方面的开发测试,听朋友说有些国内仿国外原 ...… 查看全部问答> |
|
AT91SAM9XE512 ARM程序无法在SDRAM中运行 我使用了AT91SAM9XE512进行程序设计,如果将程序加载到内部的SRAM中运行,没有问题。但是如果是加载到外部的SDRAM中运行就莫名其妙的跑飞。因为程序战胜的RAM内存比较大,在调试期间只能使用外扩的SDRAM内存,其结果就是无法调试。我手头上共焊接了 ...… 查看全部问答> |




